部署处理特定任务的单片机来简化复杂设计

发布时间:2022-05-11  

如今,运行实时操作系统(RTOS)的大型32位单片机(MCU)和微处理器(MPU)日益普及。不过,如果使用一个大型单片机处理复杂的应用,可能会在执行小型后台处理任务时遇到CPU资源方面的问题,这些任务虽然并不复杂,但十分耗时。8位和16位MCU等小型器件可用于减轻32位器件的工作负荷。 

试想一下这样一个示例:将一个32位MCU用于控制汽车的非安全功能,如娱乐系统、环境照明和空调。此32位器件必须对其资源进行分配,以便处理与这些功能相关的所有任务。这样的任务还包括测量驾驶室内多个点的温度、打开/关闭空调系统、更新图形显示、处理用户输入、调整照明条件和播放音乐。即使对于大型32位器件,这些工作量也过于繁重。 

但是,如果32位器件将部分任务负荷转移给几乎不需要监控的子处理器,每个子处理器仅负责处理其中的1或2个任务,那么这些任务会更易于管理。这可以释放主处理器上的CPU资源,从而降低软件的复杂性,同时提高性能并缩短执行时间。 

如今,运行实时操作系统(RTOS)的大型32位单片机(MCU)和微处理器(MPU)日益普及。不过,如果使用一个大型单片机处理复杂的应用,可能会在执行小型后台处理任务时遇到CPU资源方面的问题,这些任务虽然并不复杂,但十分耗时。8位和16位MCU等小型器件可用于减轻32位器件的工作负荷。 

试想一下这样一个示例:将一个32位MCU用于控制汽车的非安全功能,如娱乐系统、环境照明和空调。此32位器件必须对其资源进行分配,以便处理与这些功能相关的所有任务。这样的任务还包括测量驾驶室内多个点的温度、打开/关闭空调系统、更新图形显示、处理用户输入、调整照明条件和播放音乐。即使对于大型32位器件,这些工作量也过于繁重。 

但是,如果32位器件将部分任务负荷转移给几乎不需要监控的子处理器,每个子处理器仅负责处理其中的1或2个任务,那么这些任务会更易于管理。这可以释放主处理器上的CPU资源,从而降低软件的复杂性,同时提高性能并缩短执行时间。 

广告

这种解决方案与单片机中的外设有异曲同工之妙。外设是专用硬件的小型模块,可以添加新功能(例如运算放大器或模数转换器),也可以减少执行给定功能时CPU必须承担的工作量。在某些情况下,初始化后,外设可独立于CPU运行。 

为了说明外设的优势,我们以产生脉宽调制(PWM)信号为例。要在没有专用外设的情况下产生PWM,只需将I/O线设为高电平,等待一定数量的周期后,将其设为低电平,再等待一段时间,然后重复操作。这会占用大量CPU周期,并且对于某些功能(如RTOS)来说,难以可靠地执行。相比之下,PWM外设允许CPU在执行其他任务的同时设置所需的波形参数。

本文中介绍的第一个示例说明了减轻CPU密集型任务负荷的优势。在该案例中,使用了一个8位MCU来创建I/O扩展器。I/O扩展器并不复杂;然而,由于需要频繁处理中断,因此它们会占用大量的CPU时间。通过使用专用MCU来完成这项任务,大型32位器件可以减少I/O使用和需要处理的中断次数。此外,I/O扩展器的功能集可在软件中设置,因此支持针对应用进行定制和调整。  

本文中的第二个示例以创建独立于CPU运行的电压频率(V/F)转换器为例,展示了独立于内核的外设的性能。在这个示例中,CPU的唯一功能是初始化外设并将调试打印消息发送到UART。在大型系统中,当V/F在后台运行时,CPU可以执行另一个简单的任务。

I/O扩展器

使用8位MCU创建I/O扩展器的最大好处是提高灵活性。I/O扩展器ASIC的功能集已嵌入到器件中,而MCU可基于其执行的软件定义其行为。这种灵活性使基于MCU的版本能够满足最终应用的需求。

实现高级I/O扩展器

在器件内部,高级I/O扩展器在基于查找表的结构上运行。在读取或写入之前,会发送一个虚拟地址。该地址与单片机上的寄存器无关——仅特定于查找表。这意味着,可以透明地添加不在单片机硬件寄存器中的功能。此外,还可以针对特定用途,轻松地重新排列表格中的条目。这种结构的另一个优势是,能够向查找表添加权限。例如,要创建一个只读寄存器,只需省略查找表的写条目即可。 

高级I/O扩展器的查找表

这种较为复杂的结构也适用于非标准功能。“MEM OP”功能允许MCU将其当前的通用输入和输出(GPIO)配置保存或加载到存储器中。

器件中的存储器存储

MEM OP也可以将GPIO配置重置为编译时设置的参数。 

注:并非所有字段均可用于所有操作

MEM OP的功能

此外,也可以选择将单片机设置为在上电时加载保存的设置。如果已使能,单片机会尝试加载配置0中的设置。如果配置执行校验和验证失败,则MCU将恢复为编译时常数。如果不需要,可以在软件中禁用此功能。 

该解决方案的要点

基于MCU的解决方案的优势在于出色的灵活性。与市场上的ASIC不同,我们可以为MCU配置特定于应用场景的非标准功能。此应用程序针对开发。

如需深入了解该实现或想要试用该示例,请参见源资源库中的README文件。此外,还提供带有Arduino的高级I/O扩展器的演示。

源代码、文档和演示: 

电压频率(V/F)转换器

通过降低物料清单(BOM)成本,进而减小设计面积,电压频率转换器可改进传统的模拟解决方案。市场上的许多V/F转换器需要配备外部电阻和电容才能运行,而单片机只需使用通用去耦和上拉组件(所有MCU的必备组件)即可运行。 

TC9400/TC9401/TC9402 10 Hz100 kHz V/F转换器的应用原理图

MCU不使用模拟技术进行数字化,而是使用独立于内核的外设和功能的组合。MCU使用内部带计算功能的模数转换器(ADCC)测量输入信号,然后对时钟信号进行分频,以创建可变频率输出。在该示例中,外设已设置为在初始化后独立于CPU运行。这意味着,CPU可以用于最终应用中的其他任务。 

对于基于MCU的方案,其挑战在于性能不如模拟解决方案。输出的分辨率本身受到ADCC的限制。表面上看,ADCC为12位,但它会以配置为过采样的14位分辨率运行,具体取决于程序的配置方式。同样,用于合成输出频率的片内数控振荡器(NCO)具有有限的分辨率,并且其输出中可能存在抖动,具体取决于ADC测得的值。 

基于MCU的解决方案可以分为三个不同的外设模块——模拟采样模块、输出振荡器模块和占空比发生器。 

解决方案框图

模拟采样模块

模拟采样模块实现

模拟采样模块负责执行模数转换。为了在器件的频率限制下实现100 kHz的输出,已将ADCC配置为过采样,然后通过平均值处理获得14位结果。

这种过采样配置有一个缺点,即向结果中增加额外的统计噪声,可采取计算过采样的平均值并增加滞后的方法来补偿噪声。要实现滞后,可使用ADCC的阈值中断功能。(为简单起见,将仅介绍有关此示例如何使用阈值中断功能的细节。) 

在ADCC完成过采样的平均值计算后,将得出的值与外设中的设定值寄存器进行比较。如果两者之差大于或小于设定阈值,则触发中断。CPU可屏蔽此中断且不受影响,然而,此中断会触发直接存储器访问(DMA),将经过平均值处理的过采样结果复制到ADCC的设定值寄存器,从而产生滞后。如果未超过阈值,则不会发生DMA复制,从而不会触发输出振荡器模块的DMA更新。 

输出振荡器模块

输出振荡器模块的结构

该解决方案的输出振荡器模块负责以所需输出频率产生时钟信号。该输出信号在内部连接到占空比发生器,该元件将输出频率减半,但会产生50%的占空比输出。因此,输出振荡器模块以输出频率的两倍运行。 

输出振荡器模块的核心是数控振荡器(NCO)。NCO外设的工作原理是在输入时钟的上升沿向累加器添加增量值,然后根据累加器溢出导出外设的输出。(有关NCO的完整说明,请参见数据手册。)

在该示例中,已将NCO2设置为在内部创建所需的输入时钟频率,以通过14位输入获得100 kHz输出。之所以使用14位结果,是因为ADCC本身的12位结果不足以在没有外部时钟源的情况下产生100 kHz输出。 

ADC结果 NCO1输出(翻倍) 输出频率
0x0000 0 Hz 0 Hz
0x0001 12.2 Hz 6.1 Hz
0x0100 3.1 kHz 1.6 kHz
0x1000 50 kHz 25 kHz
0x3FFF 200 kHz 100 kHz

100 kHz V/F转换器的理想输出(看门狗已关闭)

如果改变NCO2的输出频率或使用备用源,则输出频率将调整为不同的输出范围。例如,如果NCO2的频率降低到1.28 MHz,则输出最大为10 kHz。  

ADC结果 NCO1输出频率(翻倍) 输出频率
0x0000 0 Hz 0 Hz
0x0001 1.2 Hz 0.6 Hz
0x0100 312.5 Hz 156.3 Hz
0x1000 5 kHz 2.5 kHz
0x3FFF 20 kHz 10 kHz

10 kHz V/F转换器的理想输出(看门狗已关闭)

占空比发生器

占空比发生器框图

该解决方案的占空比发生器模块负责创建50%的占空比输出。这是一个可选功能——可以直接使用NCO的输出,但这样做会增加占空比的变化幅度。 

该生成器使用一个可配置逻辑单元(CLC)实现。CLC是可配置逻辑的小型模块,类似于现场可编程门阵列(FPGA)的一个单元。CLC可用作离散逻辑门(例如AND-OR或OR-XOR),也可以配置为锁存器或触发器。在该解决方案中,CLC实现为带复位功能的J-K触发器。J和K保持在逻辑高电平。输出振荡器模块用作触发器的时钟。每个输入时钟脉冲均会导致输出翻转,从而产生50%的占空比。注意:输出振荡器模块的频率抖动将对占空比产生影响。 

Timer 6用作不稳定的“看门狗”定时器。如果输出没有产生边沿(上升沿或下降沿),则定时器将溢出,并将产生的时钟脉冲发送到CLC,这可以控制输出频率范围的下限。输出翻转到定时器频率的一半(输出为6 Hz),而不是达到直流。

该解决方案的要点

该示例表明,要使用硬件外设创建独立于内核的功能,通常必须使用外部集成电路。这种配置的一个最大优势在于,外设操作可在软件中设置,这样便可轻松地根据最终应用调整示例。由于使用了大量外设,因此选择来实现该示例。  

有关该示例的更多信息,请参见示例资源库中的README文档。此外,示例资源库还包含频率电压转换器的实现,可与电压频率转换器在同一个器件上实现。 

单击以下链接获取源代码和文档: 

总结

尽管高性能单片机和微处理器都有一席之地,但在执行小型专门任务时,8位和16位MCU的作用不容小觑。这类任务并不一定十分复杂,但可能十分耗时,或者是时间关键型任务。任务负荷减轻后,32位器件可拥有更简单的实现,从而提高可靠性、减少存储器占用率并降低功耗。

这种解决方案与单片机中的外设有异曲同工之妙。外设是专用硬件的小型模块,可以添加新功能(例如运算放大器或模数转换器),也可以减少执行给定功能时CPU必须承担的工作量。在某些情况下,初始化后,外设可独立于CPU运行。 

为了说明外设的优势,我们以产生脉宽调制(PWM)信号为例。要在没有专用外设的情况下产生PWM,只需将I/O线设为高电平,等待一定数量的周期后,将其设为低电平,再等待一段时间,然后重复操作。这会占用大量CPU周期,并且对于某些功能(如RTOS)来说,难以可靠地执行。相比之下,PWM外设允许CPU在执行其他任务的同时设置所需的波形参数。

本文中介绍的第一个示例说明了减轻CPU密集型任务负荷的优势。在该案例中,使用了一个8位MCU来创建I/O扩展器。I/O扩展器并不复杂;然而,由于需要频繁处理中断,因此它们会占用大量的CPU时间。通过使用专用MCU来完成这项任务,大型32位器件可以减少I/O使用和需要处理的中断次数。此外,I/O扩展器的功能集可在软件中设置,因此支持针对应用进行定制和调整。  

本文中的第二个示例以创建独立于CPU运行的电压频率(V/F)转换器为例,展示了独立于内核的外设的性能。在这个示例中,CPU的唯一功能是初始化外设并将调试打印消息发送到UART。在大型系统中,当V/F在后台运行时,CPU可以执行另一个简单的任务。

I/O扩展器

使用8位MCU创建I/O扩展器的最大好处是提高灵活性。I/O扩展器ASIC的功能集已嵌入到器件中,而MCU可基于其执行的软件定义其行为。这种灵活性使基于MCU的版本能够满足最终应用的需求。

实现高级I/O扩展器

在器件内部,高级I/O扩展器在基于查找表的结构上运行。在读取或写入之前,会发送一个虚拟地址。该地址与单片机上的寄存器无关——仅特定于查找表。这意味着,可以透明地添加不在单片机硬件寄存器中的功能。此外,还可以针对特定用途,轻松地重新排列表格中的条目。这种结构的另一个优势是,能够向查找表添加权限。例如,要创建一个只读寄存器,只需省略查找表的写条目即可。 

高级I/O扩展器的查找表

这种较为复杂的结构也适用于非标准功能。“MEM OP”功能允许MCU将其当前的通用输入和输出(GPIO)配置保存或加载到存储器中。

器件中的存储器存储

MEM OP也可以将GPIO配置重置为编译时设置的参数。 

注:并非所有字段均可用于所有操作

MEM OP的功能

此外,也可以选择将单片机设置为在上电时加载保存的设置。如果已使能,单片机会尝试加载配置0中的设置。如果配置执行校验和验证失败,则MCU将恢复为编译时常数。如果不需要,可以在软件中禁用此功能。 

该解决方案的要点

基于MCU的解决方案的优势在于出色的灵活性。与市场上的ASIC不同,我们可以为MCU配置特定于应用场景的非标准功能。此应用程序针对开发。

如需深入了解该实现或想要试用该示例,请参见源资源库中的README文件。此外,还提供带有Arduino的高级I/O扩展器的演示。

源代码、文档和演示: 

电压频率(V/F)转换器

通过降低物料清单(BOM)成本,进而减小设计面积,电压频率转换器可改进传统的模拟解决方案。市场上的许多V/F转换器需要配备外部电阻和电容才能运行,而单片机只需使用通用去耦和上拉组件(所有MCU的必备组件)即可运行。 

TC9400/TC9401/TC9402 10 Hz100 kHz V/F转换器的应用原理图

MCU不使用模拟技术进行数字化,而是使用独立于内核的外设和功能的组合。MCU使用内部带计算功能的模数转换器(ADCC)测量输入信号,然后对时钟信号进行分频,以创建可变频率输出。在该示例中,外设已设置为在初始化后独立于CPU运行。这意味着,CPU可以用于最终应用中的其他任务。 

对于基于MCU的方案,其挑战在于性能不如模拟解决方案。输出的分辨率本身受到ADCC的限制。表面上看,ADCC为12位,但它会以配置为过采样的14位分辨率运行,具体取决于程序的配置方式。同样,用于合成输出频率的片内数控振荡器(NCO)具有有限的分辨率,并且其输出中可能存在抖动,具体取决于ADC测得的值。 

基于MCU的解决方案可以分为三个不同的外设模块——模拟采样模块、输出振荡器模块和占空比发生器。 

解决方案框图

模拟采样模块

模拟采样模块实现

模拟采样模块负责执行模数转换。为了在器件的频率限制下实现100 kHz的输出,已将ADCC配置为过采样,然后通过平均值处理获得14位结果。

这种过采样配置有一个缺点,即向结果中增加额外的统计噪声,可采取计算过采样的平均值并增加滞后的方法来补偿噪声。要实现滞后,可使用ADCC的阈值中断功能。(为简单起见,将仅介绍有关此示例如何使用阈值中断功能的细节。) 

在ADCC完成过采样的平均值计算后,将得出的值与外设中的设定值寄存器进行比较。如果两者之差大于或小于设定阈值,则触发中断。CPU可屏蔽此中断且不受影响,然而,此中断会触发直接存储器访问(DMA),将经过平均值处理的过采样结果复制到ADCC的设定值寄存器,从而产生滞后。如果未超过阈值,则不会发生DMA复制,从而不会触发输出振荡器模块的DMA更新。 

输出振荡器模块

输出振荡器模块的结构

该解决方案的输出振荡器模块负责以所需输出频率产生时钟信号。该输出信号在内部连接到占空比发生器,该元件将输出频率减半,但会产生50%的占空比输出。因此,输出振荡器模块以输出频率的两倍运行。 

输出振荡器模块的核心是数控振荡器(NCO)。NCO外设的工作原理是在输入时钟的上升沿向累加器添加增量值,然后根据累加器溢出导出外设的输出。(有关NCO的完整说明,请参见数据手册。)

在该示例中,已将NCO2设置为在内部创建所需的输入时钟频率,以通过14位输入获得100 kHz输出。之所以使用14位结果,是因为ADCC本身的12位结果不足以在没有外部时钟源的情况下产生100 kHz输出。 

ADC结果 NCO1输出(翻倍) 输出频率
0x0000 0 Hz 0 Hz
0x0001 12.2 Hz 6.1 Hz
0x0100 3.1 kHz 1.6 kHz
0x1000 50 kHz 25 kHz
0x3FFF 200 kHz 100 kHz

100 kHz V/F转换器的理想输出(看门狗已关闭)

如果改变NCO2的输出频率或使用备用源,则输出频率将调整为不同的输出范围。例如,如果NCO2的频率降低到1.28 MHz,则输出最大为10 kHz。  

ADC结果 NCO1输出频率(翻倍) 输出频率
0x0000 0 Hz 0 Hz
0x0001 1.2 Hz 0.6 Hz
0x0100 312.5 Hz 156.3 Hz
0x1000 5 kHz 2.5 kHz
0x3FFF 20 kHz 10 kHz

10 kHz V/F转换器的理想输出(看门狗已关闭)

占空比发生器

占空比发生器框图

该解决方案的占空比发生器模块负责创建50%的占空比输出。这是一个可选功能——可以直接使用NCO的输出,但这样做会增加占空比的变化幅度。 

该生成器使用一个可配置逻辑单元(CLC)实现。CLC是可配置逻辑的小型模块,类似于现场可编程门阵列(FPGA)的一个单元。CLC可用作离散逻辑门(例如AND-OR或OR-XOR),也可以配置为锁存器或触发器。在该解决方案中,CLC实现为带复位功能的J-K触发器。J和K保持在逻辑高电平。输出振荡器模块用作触发器的时钟。每个输入时钟脉冲均会导致输出翻转,从而产生50%的占空比。注意:输出振荡器模块的频率抖动将对占空比产生影响。 

Timer 6用作不稳定的“看门狗”定时器。如果输出没有产生边沿(上升沿或下降沿),则定时器将溢出,并将产生的时钟脉冲发送到CLC,这可以控制输出频率范围的下限。输出翻转到定时器频率的一半(输出为6 Hz),而不是达到直流。

该解决方案的要点

该示例表明,要使用硬件外设创建独立于内核的功能,通常必须使用外部集成电路。这种配置的一个最大优势在于,外设操作可在软件中设置,这样便可轻松地根据最终应用调整示例。由于使用了大量外设,因此选择来实现该示例。  

有关该示例的更多信息,请参见示例资源库中的README文档。此外,示例资源库还包含频率电压转换器的实现,可与电压频率转换器在同一个器件上实现。 

单击以下链接获取源代码和文档: 

总结

尽管高性能单片机和微处理器都有一席之地,但在执行小型专门任务时,8位和16位MCU的作用不容小觑。这类任务并不一定十分复杂,但可能十分耗时,或者是时间关键型任务。任务负荷减轻后,32位器件可拥有更简单的实现,从而提高可靠性、减少存储器占用率并降低功耗。

文章来源于:电子工程专辑    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    描述计算机指令系统及实际应用中主要采用汇编语言形式。采用机器语言编写的程序称之为目标程序。采用汇编语言编写的程序称之为源程序。计算机能够直接识别并执行的只有机器语言。汇编语言程序不能被计算机直接识别并执行,必须经过一个中间环节把它翻译成机器语言程序......
    51单片机for循环结束之后还在运行;当我们设计并编写嵌入式系统时,使用51单片机编写程序时,常常会用到循环结构来重复执行一段代码。然而,有时我们可能会遇到51单片机在循环结束之后还在运行的......
    按下时的下降沿。要使单片机在程序正常运行过程中,对快速动作做出反应,就必须使用单片机的中断功能,该功能就是在快速动作发生后,单片机中断正常运行的程序,处理快速发生的动作,处理完成后,在返回执行正常的程序。 中断......
    ~P2.7连接。 数据线:片外ROM的8位数据线直接与单片机的P0口相连。 控制线:CPU执行ROM中存放的程序指令时,取指阶段就是对ROM进行读操作。读操作控制线有以下几条: 地址锁存信号ALE......
    ~A11直接与P2口的P2.0~P2.7连接。 数据线:片外ROM的8位数据线直接与单片机的P0口相连。 控制线:CPU执行ROM中存放的程序指令时,取指阶段就是对ROM进行读操作。读操......
    Linux内核等都会加载到RAM来运行,以获得更快的执行速度,那么前面介绍的那种单片机方式只重定位数据段的方式不太适用了。 在嵌入式Linux平台上,首先执行的就是bootloader,而它只是一个顺序执行的程序......
    度处理完成,如此循环往复。 3.2 读取温度子程序设计 采用DS18B20进行单路测量时,可直接与单片机相连,不需读取读出器件的64 位产品序列号。当采用DS18B20进行多路测温时,在初始化操作后,通常......
    手机充电器4.3-5V ●新稳压电源 二、固定字符显示的程序编制 普通数字电子电路都有特定功能,如与、或、非逻辑功能。计算机包括单片机本身没有特定功能,只有执行特定指令的能力,指令让它干什么,它就......
    调用一些相关的函数,将在硬盘上的p文件的内容拷贝到内存(DDR RAM)中,并建立一个它的运行环境(当然这里边还有内存映射,虚拟内存,连接与加载,等一些其他东西),准备执行。 由以上可知,单片机上的程序和平时在系统上运行的程序......
    调用一些相关的函数,将在硬盘上的p文件的内容拷贝到内存(DDR RAM)中,并建立一个它的运行环境(当然这里边还有内存映射,虚拟内存,连接与加载,等一些其他东西),准备执行。 由以上可知,单片机上的程序和平时在系统上运行的程序......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>