单片机(MCU)和传感器测控系统中,经常遇到需要模拟量传感器输入的情况。 这种输入的模拟量,需要由模拟数字转换器外设,简称ADC,来转换为N位数字量后再由CPU进行处理。近年来,随着智能传感器技术和物联网技术等的发展, MCU和传感器连接的系统应用也越来越广泛。比如在目前全球研究最多的新兴市场之一——物联网(IoT)中,传感器作为物联网系统数据的重要入口, 正在成为电子基础设施向物联网转变的无处不在的元素。据中国信息通信研究院2020年12月发布的《物联网白皮书》,预计到2025年,全球物联网总连接数规模将从2019年的120亿增长到246亿,年复合增长率高达13%。 我国物联网连接数全球占比高达30%,2019年我国的物联网连接数36.3亿,到2025年预计我们物联网连接数将达到80.1亿,年复合增长率14.1(来源:中国信息通信研究院)。
对于MCU中集成的用于连接模拟传感器的ADC,设计者在以往的努力多在于提高其采样速度和量化的性能指标,比如提高ADC的分辨率(精度),减少误差(量化误差、偏移误差和满刻度误差等),提高转换率来采集更高频率的输入等等,而现在的集成ADC的新特性,除了提高以上性能参数,则更是考虑了ADC在系统中的应用场景和信号处理过程。
对于模拟信号的输入,单片机系统典型的处理过程如下所示:
针对这种典型的模拟信号处理过程,MCU设计者对ADC外设创新地赋予了新的特性,以使其连接传感器更为高效。
1. 独立于内核的事件机制——联动其他外设,自动触发ADC启动
在模拟信号采样阶段, 简便的方式就是冲激串采样——通过一个周期冲激串去乘待采样的连续时间信号。 在MCU中,需要通过定时器来设定采样周期T。在传统的处理方式中,CPU要么响应定时器产生的周期性中断,要么轮询定时器计数器的溢出标志,来启动ADC。
新的ADC触发方式则是采用了事件机制,它提供了一个完全由硬件自动完成的触发到ADC产生响应的通道。 在没有任何CPU干预的情况下精确控制ADC的采样周期。这种机制节省了中断资源, 无需软件的参与,提高了ADC的响应速度。下图为AVR®单片机事件系统的示意图。
图1: AVR®单片机中的事件系统图示
这种硬件上的联动响应,更为迅速直接。因为不需要CPU干预,也减少了不必要的中断或唤醒,即使在CPU处于某种休眠状态下,该触发机制仍可以在低功耗的情况下运行。当然除了用于触发ADC之外,这种事件机制还可以用于其他外设的联动。
2. 带有计算功能的ADC——对转换结果自动进行计算处理
ADC的转换结果,被用来做某种类型的计算或分析。比如验证结果是否在一定的范围内或者用来滤除信号中的噪声。尽管用来滤波的软件算法都比较成熟,比如中值滤波、算数平均滤波和滑动平均滤波等,但是无论是什么样的软件算法,它们都是需要较大的RAM空间和CPU运算资源。首先在系统的RAM区保留一段时间内的转换值,然后对这些转换值进行分析、滤波,并进行处理。而在MCU系统中,RAM空间都是很有限的,而且软件滤波算法的运行,需要消耗CPU的能力和时间,导致整个转换数值的滤波系统运行效率不高。
创新的ADC设计,使得ADC自身具有转换后的计算功能,可以对ADC转换的数据进行复杂的运算,而无需CPU干预。使用这种具有运算能力的智能ADC, 在转换完成后, 结果可以通过预定的计算功能来传递,将不需要编写代码来查看ADC结果是否落在某个窗口之内或之外,也可以直接获取ADC平均样本值或者滤波器样本数据值等。这种计算由ADC外设本身执行,加速了通常由软件完成的算术任务,不再需要占用CPU资源和额外的RAM缓冲空间。例如,如下图PIC® Q10系列MCU上ADC的计算功能简化框图所示, 可以通过配置ADC的ADMD位来控制ADC计算模块以选择五种不同的操作模式之一:基本模式、累加模式、平均模式、突发平均模式和低通滤波器模式等。
图 2: PIC® Q10单片机中的ADC计算模块框图
3. 自动上下文保存——使ADC通道切换应用自如
在传感器系统应用中,经常会遇到多个模拟输入通道共用一个内部ADC硬件的情况。 比如在一个环境检测系统中, 温度、湿度、气压和光线强度等传感器的模拟输入将会使用同一个ADC(同一个采样保持电路)的不同通道。ADC通过切换各个通道,分时进行A/D转换。对于复用ADC的模拟输入,每个通道的控制方式,都可能是不同的,比如状态和数据寄存器配置和转换后的计算方式等等。例如,通道一将ADC配置为突发平均模式,通道二将ADC配置为累加模式……不同通道的独特控制方式,使得ADC在切换通道时需要附加软件开销,比如首先停止ADC,按照ADC采集通道的预定顺序找到相应的状态和寄存器,重新配置对应的控制方式,再启动ADC…,运行过程中的频繁切换无疑降低了ADC的运行效率。
解决这一问题的最新ADC特性,是把每个通道的特定转换控制方式,按照预定采集顺序,保存为上下文。该上下文只能通过A/D上下文选择寄存器,或者直接存储器访问(DMA)。这样ADC运行时,ADC硬件模块会自动从内存中传输当前活动通道的上下文,进入相关的ADC寄存器并执行所需的转换。这样就显著提高了ADC切换通道采集数据的效率,也不占用CPU资源。有趣的是,Microchip将带有运算特性的ADC称为ADCC (ADC with Computation),而将又带有上下文保存特性的ADCC称为ADCCC (ADC with Computation and Context)。
单片机和传感器连接的应用越来越多,幸运的是,MCU设计者一直在扩展其MCU外设的功能。 类似ADC上这些新功能的创新,已不仅仅在其自身转换方面,而是实现了与其他外设联动启动采样,转换后的计算,以及多个复用通道的自动切换等,集成了针对模拟信号处理链路上的多个环节。这些环节可以自动运行,不占用系统总线,这对降低CPU负载,降低系统功耗,增强系统响应效率,增强系统健壮性等都有非常大的意义。单片机设计者们以其创新性的智慧,以及对嵌入式系统应用细致入微的洞察,将会使得MCU和传感器的连接应用设计,越来越灵活,越来越高效!