5.6 应用实例:基于STM32的数据采集器
随着数据采集需求的不断变化,传统的纯硬件采集器系统在数据处理方面能力的不足越来越明显,现在数据采集系统多采用软硬件结合的方式,USB总线凭借其即插即用、热插拔以及较高的传输速率等优点,成为PC机与外设连接的普遍标准。STM32微控制器片上集成了全速USB 2.0接口,而且提供诸如SPI等多种通信接口,这些特性使得STM32 MCU成为数据采集器的核心的首选。这里我们将介绍了一个基于STM32微控制器的数据采集器的设计与实现。
5.6.1 硬件设计
数据采集器以一片STM32F103C8为主体,通过一片MAX1270完成A/D转换。STM32微控制器通过SPI接口与MAX1270相连,通过USB接口与PC主机相连。
1. STM32F103C8
STM32F103C8是属于STM32F103xx系列中的一块微控制器芯片。片上带64K Flash和10K SRAM。据有USB2.0全速接口、2个SPI接口和多个定时器。关于该系列芯片特点、结构、编程使用的更多信息请参考本书第二章 STM32 系列微控制器和第三章 STM32系统微控制器存储器和外设。
2. 数据采集芯片MAX1270
MAX1270是8通道、多量程双极性输入、串行输出、逐次逼近型12 位AD转换器。其封装形式有24脚Narrow PDIP和28脚SSOP两种。我们这里采用的是PDIP封装,其引脚排列如图1所示。各有用引脚功能如下:
1-VDD,+5V电源输入端;2、4-DGND,数字地;5-SCLK,串行时钟输入端;6-/CS,片选输入端,低电平有效;7-DIN,串行数据输入,即AD转换控制字输入端;8-SSTRB,串行数据输出选通输出端;10-DOUT,串行数据输出端;11-/SHDN,掉电模式控制输入端,低电平有效;12-AGND,模拟地;13~20-CH0~CH7,模拟信号输入端;21-REFADJ,参考电压输出/外部调节输入;23-REF,参考电压缓冲输出/ADC的参考输入。
MAX1270的控制字
MAX1270的8位控制字及其功能如表1所示。最高位START为起始位(高电平),标志控制字的开始。/CS为低电平期间,控制字在时钟脉冲SCLK作用下先高位后低位通过DIN端输入。
BIT7(MSB) BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
START SEL2 SEL1 SEL0 RNG BIP PD1 PD0
时钟模式与转换速率
PD1PD0为掉电/时钟模式选择位。PD1PD0=10、11时为省电模式。正常工作时MAX1270有外部时钟与内部时钟两种工作模式。PD1PD0=01时为外部时钟模式,串行数据的移入、移出以及数据采集、转换都由SLCK端的输入脉冲控制。外部时钟模式分为25SCLK/s和18 SCLK/s两种方式,后者转换速率稍快的原因是在全部数据转换期间/CS始终维持有效电平。我们这里采用18 SCLK/s的外部时钟模式,其采样时序图如图5.90所示。
通道选择与输入范围
SEL2~SEL0为通道选择位,000~111分别选择输入通道CH0~CH7。RNG~BIP为输入范围选择位,MAX1270有4种输入范围。RNG~BIP置00时 0~5V单极性输入, 置01时0~+10V单极性输入; 置10时 -5~+5V双极性输入;置11时-10~+10V双极性输入。
传输函数与输出数据格式
对单极性输入,1LSB=FS/4096,输出数据为12位二进制码。对双极性输入,1LSB=FS/2048,输出数据为12位二进制补码。
参考电压
MAX1270可使用芯片内的4.096V参考电压,也可使用外部参考。这里我们将使用内部参考电压。
3. 系统结构框图
5.6.2 软件设计
在本系统中,软件设计分为三个部分:固件设计,USB驱动设计和PC程序设计。
1. 固件(firmware)设计
固件需要完成的任务包括两方面,一是与PC的数据交互,二是采样控制。
1) 与PC的数据交互:通过USB接口实现。STM32F103C8嵌入的USB2.0接口支持全速12Mbit/s。有8个可配置端点。端点支持控制传输、同步传输和批量传输多种模式。在这里我们将实现2个批量传输,端点1用于批量传输IN,端点2用于批量传输OUT(注意:端点0总是用于单缓冲模式下的控制传输)。传输的数据内容主要包括下传的控制命令和上传的采样数据。其中控制命令主要是开始采样和停止采样,开始采样命令中带有三个参数,通道、采样范围和采样率。
2) 采样控制:微控制器通过SPI1与MAX1270连接,MAX1270自身不带有控制功能,是通过在其DIN引脚上传入命令字(其格式说明参见MAX1270介绍章节)进行采样的。命令字中需要的配置参数(通道和采样范围)是由PC下传的控制命令决定的。而采样率控制是通过微控制器的一个定时器TIM2来实现的。根据采样率设置定时器TIM2,在每个TIM2的中断中向MAX1270发送一个命令字完成一次采样。采样得到的数据通过SPI1读取,然后通过USB上传到PC。为了减轻微控制器的CPU负荷,可以充分利用STM32微控制器DMA性能,通过DMA来实现采样数据从SPI1的接收缓冲区到USB发送缓冲区的转移。
固件的程序流程图如图5.93所示。
固件可以在Keil或者IAR环境下开发。关于这两个开发平台的使用请参考本章前两部分。
STM32固件库提供了很强大的封装,大大简化了用户程序的开发。在本例中我们主要用到TIM、SPI和USB,关于这三种外设的使用请参阅本书第三章 STM32系列微控制器存储器和外设 和 第四章 STM32固件库。另外在STM_DK的示例程序中都有相关的例子,只要稍加修改,进行一些整合,就可以很顺利地完成固件程序的开发。