如何使用STM32微控制器进行高性能物联网节点设计

易水寒 发表于 2019-06-22 10:21:28 收藏 已收藏
赞(0) •  评论(0

如何使用STM32微控制器进行高性能物联网节点设计

易水寒 发表于 2019-06-22 10:21:28

随着物联网 (IoT) 网络日趋复杂,物联网端点边缘处理的复杂度亦水涨船高。因而可能需要使用新系统来升级现有的端点,这个系统的微控制器需要更快的时钟速度、更大的存储器,处理器内核要更强大。

此外,也许还需要高精度的传感器和模数转换器 (ADC),并且这些器件可能还需要定期校准。对于线性误差,使用公式即可轻松补偿。然而,非线性误差与传感器读数之间不存在任何固定偏差模式,因此不能简单地用数学方法进行补偿。通常,补偿固件非线性误差的最简单方法就是,使用数据查找表将所需的校正数据存储在存储器中。

本文将简要介绍传感器误差和 ADC 误差,并讨论使用数据查找表来校正此类误差的优势。此外,本文还将阐释在基于 STMicroelectronics 的 STM32L496VG 微控制器的系统中,如何使用 ON Semiconductor 的外部 LE25S161PCTXG 串行外设接口 (SPI) 闪存芯片,来实现实用的、高性价比数据闪存查找表。

传感器误差

对于能检测温度、压力和电压等模拟量的传感器,都可能存在非线性误差。在项目开发阶段,对照精确基准来测试传感器,并将传感器数字输出与基准值进行比较,这一点尤为重要。由此开发人员可以尽早确定是否存在任何传感器基准值偏离,以及就应用要求而言这些偏差可否接受。然后开发人员就能决定是否有必要补偿任何偏差,如有必要,则是否应该在硬件或固件中补偿偏差。

某些传感器误差或许是可预测的线性误差。这类误差补偿很简单,只需对传感器输出加上或减去某个常数即可。有时这类误差可能会随传感器量程而变化。例如,从零到三分之一量程,可能需要加上某个常数;从三分之一到二分之一量程,可能就需要不同的常数。

这些误差均可进行预测,显然也很容易校正,但是,精确读数的偏差可能会随时间推移而发生变化。此外,由于传感器暴露于极端温度、环境湿度大或传感器老化等原因,日后可能还会出现新的误差。是否需要校正这些误差则始终取决于应用。或许有必要在极端温度、压力和湿度条件下测试系统,以确定传感器性能。汽车、军事和某些工业系统等应用需要对这些环境进行检测。然而,如今许多新的物联网端点已然延伸至传感器应用范围之外,因此传感器测试可能成为一项新要求。

与模拟传感器一样,诸如 ADC 之类常用微控制器模拟外设可能也需要定期进行在系统校准。ADC 误差并不总是可预测,即便可以使用算法校正初始误差,误差也可能随着时间推移而发生变化,并可能变得无法通过算法来轻松校正。这可能会导致系统无法再以所需精度继续运行,从而导致高昂的更换成本。

使用数据查找表进行模拟传感器误差校正的优势

数据查找表是一种实用、有效的方法,可以快速执行一些常见计算,诸如三角函数等复杂计算,或者字节的位反转或格雷码转换等简单计算。与在固件中执行位反转相比,使用 256 字节的查找表进行字节位反转速度明显更快。将此查找表存储在程序或数据闪存中很安全,因为它占用空间很小而且永远不需要更改。

此外,将数据查找表用于存储传感器数据校准,也是一种行之有效的方法。像内置 ADC 这样的微控制器模拟外设可能需要定期校准,方法与模拟传感器校准完全相同。大多数微控制器中的 ADC 精度均可达到 ±2 或 ±3 个最低有效位 (LSB)。尽管对于大多数应用而言这已足够,但是对于要求高精度的系统,定期校准 ADC 意义重大。

用于校正 24 位数据的校准查找表片段可能如表 1 所示。

此例中,原始输入值是需要进行误差校正的源读数。然后,原始值将作为 24 位地址用于查找相应的 32 位校正值,其中最高有效字节始终为 00h。如果查找表不是从地址零开始的,则可以为原始输入值添加偏移。

在决定查找表的存储位置之前,务必确定查找表的大小及是否需要重写。这两点都重要。若永远不需要重写,则可以将查找表存储于微控制器的可用片上闪存中。但是如果传感器需要定期重新校准,那么就要重写内部闪存,即要求擦除数据表所在的整个闪存扇区并重新编程。

如果该闪存扇区与程序存储器共用空间,则可能需要重新编译代码。即使查找表位于独立专用扇区,日后存储器要求可能会更改或需要扩展,从而导致部分查找表扇区空间重新调整用于其他代码。这使现场传感器校准变得复杂,而且要求通过网络下载重新编译的代码,也会使物联网端点无法独立进行自校准。如果涉及多个传感器,那么问题将进一步复杂化。

对于片上闪存程序存储器而言,使用大型查找表(如含 16,777,216 个条目)进行 24 位数字数据校准是不现实的,甚至无法实现。如果隔一个条目存储一次,并将缺失条目插入现有的表数据,则可将查找表大小减半。这种方法带来的性能损失较小,精度损失可能为 ±1 LSB。但是,即便是含 8,388,608 个条目的查找表也不可能存储在内部闪存中。

在基于微控制器的系统中,使用这种大型数据查找表的最佳解决方案是使用外部闪存。这为添加数兆字节的查找表提供了简便方法,而不会牺牲内部闪存程序存储器。同时,系统也能轻松重写查找表,而不会影响微控制器的内部闪存。

对于高性能系统,添加外部并行闪存来扩展程序和数据存储器是常用方法。但是,这要求微控制器具有外部数据总线。额外的地址和数据总线以及所需的控制信号需要占用微控制器 36 个或更多引脚。这项要求限制了应用可用的微控制器。此外,外部总线会占用更多印刷电路板空间,可能还会增加系统的电磁干扰 (EMI)。

对于大多数系统,最佳解决方案是使用外部串行数据闪存。这类闪存使用串行外设接口 (SPI) 进行数据传输,只需占用四个微控制器引脚。

ON Semiconductor 的 LE25S161PCTXG 就是这种闪存器件的典型实例。这款 16 Mbit 串行闪存器件支持 70 MHz 的 SPI 时钟。同时,还支持双通道 SPI 模式,数据传输速度最快可达 140 Mb/s。内部状态寄存器可用于配置器件的读、写和低功耗模式。

LE25S161PCTXG 的 SPI 信号通常用于时钟、数据和片选(图1)。它还具有两个额外引脚。WP\ 是低电平有效写保护信号,用于防止写入器件的状态寄存器。这可用于防止低优先级固件任务未经授权重写设备。HOLD\ 可暂停正在进行的数据传输。如果微控制器在数据传输过程中必须执行中断,这一功能将十分有用。数据传输将暂停直至中断处理完毕,然后从中断处继续传输。

若要读取存储于此器件中的简单两列查找表,最简单的方法是获取传感器读数,添加存储器偏移,然后读取该地址位置对应的存储器内容。该地址对应的存储器内容表示传感器校正读数。

声明:本文由入驻电子说专栏的作者撰写或者网上转载,观点仅代表作者本人,不代表电子发烧友网立场。如有侵权或者其他问题,请联系举报。侵权投诉

收藏

相关话题

评论(0)

加载更多评论

分享到

QQ空间 QQ好友 微博
取消