基于STM32F103RCT6的数据采集设计
2022-09-15刘孝赵王海圳董宜孝
刘孝赵,王海圳,董宜孝
(苏州经贸职业技术学院 机电技术学院,江苏 苏州 215000)
0 引言
1 硬件电路设计
随着全球信息化的不断发展,数据采集系统逐渐成为现代检测系统中必不可少的部分。现实环境中,涉及温度、光强、压力等模拟量都需要进行数据采集,实现实时监测。在采集过程中,传感器模块作为数据采集的必要前端,大多以电压的形式输出信号,对于数字量输出的传感器可以由MCU读取并处理;对于模拟量输出的传感器则经由MCU片上ADC采集转换为数字信号,再交由主控器进行数据处理以决定下一步操作。
本设计采用来自意法半导体公司的STM32F103 RCT6嵌入式微处理器作为处理核心,拥有高性能、低成本、低功耗、方便二次开发等特点。同时,采用ATKESP8266 WiFi模块进行数据传输。该模块集成度高、外围电路简单,拥有较高的性价比和稳定性。
整个系统由电源模块、STM32F103RCT6主控器模块和WiFi模块组成。ADC模块集成于MCU片上,各个模块之间相互独立,模块集成度高、使用简单、拓展性强。
1.1 STM32F103RCT6主控模块
本文选用STM32F103RCT6单片机作为主控MCU,该芯片基于Cortex-M3内核,可以进行复杂数据处理。时钟主频较高,同时片上集成12位精度的ADC,USART串口等复杂电路。
单片机由AMS1117提供3.3 V电压供电,芯片内嵌出厂前调校的8 MHz RC振荡电路,5,6脚接晶振进行8 MHz时钟信号输入[1];芯片3,4脚带用于校准RTC的32 kHz的晶振;本设计选择芯片42,43脚连接ATK-ESP8266模块的RXD,TXD引脚。主控MCU芯片及外围电路如图1所示。
图1 STM32F103RCT6芯片及外围电路
1.2 A/D信号采集及转换模块
A/D信号采集及转换模块采用STM32F103RCT6片上外设的ADC功能。该ADC是一个12位逐次逼近型A/D转换器,最小采样时间1 us,可测量外部16个信号源。各个通道的A/D转换可以以单次、连续、扫描或间断模式执行。ADC的结果可以被设置成左对齐或右对齐方式存储在16位数据寄存器中。
STM32的ADC的转换通道被分成2个通道组:规则通道组和注入通道组。注入通道的转换可以打断规则通道的转换进程,只有在注入通道转换完成之后,规则通道才能够继续进行转换。ADC_CR1的SCAN位用于设置扫描模式,可以由软件设置或清除。ADC_CR2的ADON位用于设置打开和关闭A/D转换器[2],CONT位用于设置是否进行连续转换。同样,ADC的触发也可以通过设置ADC_CR2的EXTSEL[2∶0]和JEXTSEL[2∶0]位来进行控制。EXTSEL[2∶0]用于选择规则通道的触发源;JEXTSEL[2∶0]用于选择注入通道的触发源。选定后,由ADC控制寄存器ADC_CR2的EXTTRIG和JEXTTRIG来激活。其中,需要特别注意的是ADC3的规则转换和注入转换的触发源与ADC1和ADC2不同。ALIGN位用于设置数据左右对齐;ADC_SQRx用于定义在规则通道转换序列中的通道数目和转换顺序;ADC_CR2的RSTCAL位和CAL位用于执行复位校准和A/D校准,由软件置1,在硬件完成后由硬件自动清零。需要注意的是每次初始化时都应进行校准操作,不校准将有可能导致结果错误。
ADC_SMPRx用来设置采样时间,最小位1.5周期。ADC的转换时间可以由以下公式计算:
T总=采样时间+12.5个周期
实际采样时间则是由每个通道的SMP位的设置来决定的。当ADCCLK被设置成14 Mhz时,最小采样时间T总=1.5+12.5=14个周期=1 us。在实际运用中,一般情况下PCLK2=72 Mhz,经过ADC预分频器能分频到最大的时钟只能是12 M。若采样周期为1.5个周期,T总=1.17 us,实际运用中常以此为最快转换时间。之后,向ADC_CR2的SWSTART位写1即可开始转换。通道转换结束后,可以产生中断和DMA请求,需要注意的是只有ADC1和ADC3可以产生DMA请求。
STM32的ADC同时拥有模拟看门狗特性,允许应用程序自动检测输入电压是否超出用户定义的高/低阀值。可以通过ADC_HTR和ADC_LRT设置。
1.3 无线传输设计
在此次设计中,使用ATK-ESP8266模块来进行WiFi传输。TXD TTL,RXD TTL引脚用于连接单片机串口。ATK-ESP8266模块片上集了模块运行必要的外围组件,共同组成一个完整且自成体系的WiFi传输模块,配网成功后单片机通过串口发生数据就可以通过WiFi传输至接收端。模块内置TCP/IP协议栈,可以通过AT指令进行操作。
在此次设计中,STM32设置为TCP服务器模式,电脑端为AP模式,接受由单片机发送过来的数据。数据由单片机采集,并通过USART串口传输到ATKESP8266模块进行数据向电脑端传输[3]。经过测试最大传输距离可达到15 m,在传输距离小于10 m是传输结果最为稳定。ATK-ESP8266模块原理如图2所示。
图2 ATK-ESP8266模块原理
2 系统供电模块设计
对一个有稳定性要求的系统来说,电源模块供电的稳定性至关重要。考虑到本系统仅需3.3 V电压给单片机及ESP8266供电即可,因此选用AMS1117线性稳压芯片[4],其电路连接如图3所示。
图3 AMS1117及其外围电路
若对功耗较敏感的系统,优先考虑转换效率,则可以选择DC/DC电源[5];若考虑成本因素,并且要求较小的纹波和噪声,则可以选择LDO电源。
3 软件设计
整个软件代码由C语言编写,利用STM32F103标准库资源。软件首先需要进行ADC初始化和串口初始化。ADC不断采集电压数值,采集结果经由DMA传输到串口,使得STM32内核可由于其他任务,为该系统提供了良好的拓展性。最后,数据经由WiFi模块传输给上位机,主程序进行流程图编写。
4 数据采集测试结果
将模拟量信号接入A/D采集通道1,使用信号发生器给出直流信号于电脑端接受的数据对比,多次测量平均误差小于0.8%。ADC分辨率0.81 mV,测试时为了提高精度选用了更长的ADC采样时间,实测速度约为300 kHz。若对精度要求不高可以进一步降低采样时间以提升采样速度。经过多次反复测量,采集数据符合设计要求,可供后续数据多样化应用。
5 结语
需要注意的是实际使用中应外加保护电路以确保接入MCU的电压数值为0~3.3 V,避免过压导致芯片损毁。同时,STM32片上ADC采集精度为12位,如对精度有更高要求可以外接更高精度的ADC采集芯片,也可以通过外接比例电阻等方式扩大量程,但会造成测量精度降低,使用时应按需选择。
本文使用STM32F103RCT及片上ADC搭配ATKESP8266设计制作了数据采集系统,分析了该系统的硬件组成及软件设计。具有设计功耗低,性价比高可拓展性强等特点。测试结果表明,该设计可以满足低频数据的采集及传输的需求。