基于STM32和LTC1859的数据采集系统Data collection system based on STM32 and LTC1859
崔海朋
(青岛杰瑞工控技术有限公司,山东 青岛 266071)
摘 要:现在很多采集系统要求较高的精度,而且信号形式、范围也有所不同,处理电路比较复杂,硬件成本高。为了解决该问题,设计了基于STM32和LTC1859的16位高精度数据采集系统,详细介绍了软硬件设计。此系统不仅可以实现8路电流信号的单端输入,也可以实现8路电压信号的单端输入,成本低,精度高。关键词:数据采集;Cortex-M3;LTC1859
0 引言
现在很多数据采集系统要求较高的精度,同时要求可以适应不同的信号形式,例如可以连接电流信号、电压信号,信号的范围也不同,常规的方法是采用复杂的电路处理再进行数据采集,这样不仅增加了硬件成本,还降低了系统精度。本系统设计的基于Cortex-M3处理器和 LTC1859的 16位高精度数据采集系统,不仅可以实现8路的电流信号的输入,还可以实现8路电压信号的输入,对输入信号的范围可以通过软件来设置,同时AD采集电路与Cortex-M3处理器采用了电源隔离和信号隔离,提高了系统的可靠性。
LTC1859是ADI公司推出的一款高性能的具停机功能的8通道、 16位、100 ksps的 AD转换器,每个通道可通过软件实现 0~5 V,0~10 V,0~±5 V,0~± 10V的不同范围的输入电压,同时还可以实现单输入和差分信号输入的选择,每个通道可承受至±25 V的故障保护。LTC1859的多路复用器可以配置为接受 4个差分输入、8个单端输入、或差分与单端输入的组合。该器件提供了卓越的DC性能,具有在整个温度范围内的15位
无漏失码和±3 LSB MAX INL。LTC1859与控制器之间采用SPI总线进行通信。LTC1859用单5 V电源工作,同时仅消耗40 mW功率。LTC1859还具有温度系数为±1.0×10-/℃的 2.5 V内部基准,如果需要较高的准确度,还可以从外部驱动。对于那些对功耗敏感的应用,LTC1859提供了两种断电模式:打盹模式和休眠模式。
本系统的 Cortex-M3处理器为意法半导体公司推出的32位RISC处理器STM32F103VCT6,主频最高可达72 MHz。该处理器具有256 kB的程序存储器,48 kB的RAM,同时它有8个定时器、5路串口、3路SPI、2
2
路IC,具有独立看门狗和窗口看门狗,非常适合于与
5
LTC1859构成高精度的数据采集和控制系统。
1 硬件系统设计
本系统设计了由 2片LM324运放和1片 LTC1859构成 8通道的单端信号输入。每片LM324含有4个运放,2片LM324构成了8路信号调理电路,其中电阻实现电流信号到电压信号的转换,当连接电压信号时,该电阻不连接。LM324为电压跟随器电路,这里不再详述。
作者简介:
崔海朋(1982-),男(汉),山东人,硕士,主要从事嵌入式系统研究、工业自动化系统设计。
www.eepw.com.cn 2020.343Copyright©博看网 www.bookan.com.cn. All Rights Reserved.D分析。
esign & Application设计应用
LTC1859的电路如图1所示。本电路具有通用性,在实际应用中性能稳定,效果很好。下面对电路进行详细
LTC1859引脚中CH0~CH7是8路模拟输入通道,
LTC1859的输出功能。CONVST为启动转换引脚。其它引脚分别接电源、数字地、模拟地,在布线时注意数字地和模拟地的分开,几个电容推荐采用钽电容,这样可以提高系统的精度。
在本系统中构成了8路单端输入信号。 MUXOUT+、MUXOUT-为模拟复用器的正负输出,把它们连在ADC+、ADC-上进行正常操作。BUSY为输出转换器的状态,当正在转换中为低,转换结束变高,连在ARM处理器的I/O口上,SDO为SPI总线的串行数据输出,接在Cortex-M3处理器的SPI接口的MISO引脚上,SDI为SPI总线的串行数据输入,接在Cortex-M3处理器的SPI接口的MOSI引脚上,SCK为SPI总线的时钟,接在Cortex-M3处理器的SPICLK上。RD为引脚SDO数字输出的能使信号,当RD为低能使输出,当RD为高SDO为高阻抗。在本系统中,该引脚连接至地,一直使能
2 隔离电路设计
为了提高系统的可靠性,本系统设计了电源隔离和SPI总线隔离电路,使LTC1859采集电路与Cortex-M3处理器电气完全隔离,外部输入信号不会影响到处理器电路的运行,大大提高了系统的可靠性。下面从2个方面来重点介绍。
2.1 电源隔离
LTC1859的供电采用DC/DC变换器实现电源与CPU电源的隔离。电源模块采用广州金升阳公司的B1212M-2M。B1212M-2M采用小型DIP封装,温度特
性好,隔离电压1 000 V DC。图2中12 V输出电压为前端信号调理电路中LM324芯片供电,后端电源采用了L7805CV稳压,为LTC1859供电。
2.2 SPI总线的
图 1 LTC1859采集电路图
隔离是非常关键的一部分
本系统采用了专用的SPI隔离芯片ADUM1411。它是ADI公司推出的四通道数字隔离芯片,单芯片可以替代4个光耦,
图2 电源隔离电路
44
ELECTRONIC ENGINEERING & PRODUCT WORLD 2020.3
Copyright©博看网 www.bookan.com.cn. All Rights Reserved.责任编辑:毛烁
采用芯片级脉冲变压器磁耦合技术,施密特触发器输入/输出,隔离电压2 500 V。与传统的光耦隔离相比,具有寿命长,节省PCB(印制板)面积等诸多优点。每个ADUM1411芯片含有3路数字输出和1路数字输入通道。由于LTC1859有5条控制线与Cortex-M3处理器进行通讯,因此本系统选用了2片ADUM1411实现与Cortex-M3处理器的完全隔离。电路如图3所示。
上电模式,不进入打盹和休眠模式。
3.2 Cortex-M3处理器SPI接口配置
Cortex-M3处理器的SPI接收设置为全双工主模式。为了一次可以读取到LTC1859转换后的16位的结果,SPI接收设置为16位模式。禁止软件NSS功能,SPI的速率默认设置为256分频后的速率,实际应用可以根据需要进行更改。初始化代码如下:
void SPI1_Configuration(void){
SPI_InitTypeDef SPI_InitStructure;
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //全双工
SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //主模式
SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;//16bit模式
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; //空闲时为低电平
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; //上升沿无延迟模式
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //禁止软件NSS功能
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; //SPI速率设置
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //高位先发
SPI_Init(SPI1, &SPI_InitStructure);SPI_Cmd(SPI1, ENABLE);}
图3 SPI总线隔离电路
3 软件设计
系统采用SPI总线通信,软件的关键是Cortex-M3处理器和LTC1859之间的时序匹配,下面详细介绍。
3.1 LTC1859软件配置
LTC1859是在SCK的下降沿传输,上升沿被捕获,这就要求Cortex-M3处理器在进行SPI初始化时采用上升沿无延时模式。8位的控制字通过SDI输入,用于配置LTC1859以进行下一个转换,同时前一个转换输出在SDO上输出,在数据交换的末端,在CONVST上施加1个上升沿启动被请求的转换。转换完成后,转换结果将在下1个数据传送周期提供。LTC1859的8位命令控制字在首8个SCK的上升沿按时间顺序记录到SDI输入中,SDI随后的输入的位被忽略。8位的控制字含有对通道地址、信号输入范围和断电模式的控制,具体内容参见手册,这里不再赘述。本系统中配置为8通道单端输入方式,信号输入范围默认配置为0~5 V,断电模式设置为
3.3 模数转换采集
下面详细介绍软件编写,SPI总线的时钟很快,既可以采用中断方式,也可以采用查询方式。本系统采用查询方式,其软件流程如图 4所示。
www.eepw.com.cn 2020.345Copyright©博看网 www.bookan.com.cn. All Rights Reserved.Design & Application设计应用
置低
控制字
图4 采集流程图
GPIO_SetBits(GPIOA, GPIO_Pin_4); //convst delay40ns(); delay40ns();
GPIO_ResetBits(GPIOA, GPIO_Pin_4);//将while(GPIO_ReadInputDataBit(GPIOC, GPIO_delay40ns(); delay40ns();
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_SPI_I2S_SendData(SPI1,control_code); //发送while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_temp_value = SPI_I2S_ReceiveData(SPI1); //return temp_value;
//数据返回
//延迟
//延迟
置高启动一个转换
convst拉低
Pin_4)==0x00); //等待busy变高
FLAG_TXE) == RESET); //等待发送缓冲器为空
FLAG_RXNE) == RESET);//等待接收缓冲器变非空读取数据
}
程序源代码及其详细注释如下,该函数的入口参数为通道号,即为0~7,函数根据通道号读取该通道的数据,同时将该数据值返回,其中部分函数为STM32的库函数,这里不再详细讲述。
u16 ReadADC1859(u16 channel) { 控制字
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_temp_value = SPI_I2S_ReceiveData(SPI1); //GPIO_ResetBits(GPIOA, GPIO_Pin_4);//convst
FLAG_RXNE) == RESET);//等待接收缓冲器变非空读取数据
u16 control_code;
control_code=Get_Control_Code(channel);//根while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_
4 结论
本系统成功实现了基于STM32处理器和LTC1859的16位高精度数据采集系统,给出了全新实用的硬件和软件设计,适用于不同信号类型和电压范围变化较大的数据采集系统。该系统精度高,成本低,可靠性高,具有一定的应用推广价值。
参考文献:
[1] LTC1857/LTC1858/LTC1859 DataSheet[EB]. Linear Corp, 2004.
[2] 李军民,祝红军,王瑞.基于DSP和LTC1859数据采集系统设计[J].微计算机信息,2010,26(02):115-117.
[3] 陈东升,高俊侠,胡科堂.基于STM32的远程温控系统设计[J].电子产品世界,2011(5):30-32.
[4] 王永虹,徐炜,郝立平.STM32系列ARM Cortex-M3微控制器原理及实践[M].北京:北京航空航天大学出版社,2008.
据通道计算控制字
FLAG_TXE) == RESET); //等待发送缓冲器为空
SPI_I2S_SendData(SPI1,control_code); //发送
46
ELECTRONIC ENGINEERING & PRODUCT WORLD 2020.3
Copyright©博看网 www.bookan.com.cn. All Rights Reserved.
因篇幅问题不能全部显示,请点此查看更多更全内容