新闻中心

EEPW首页>设计应用> 基于STM 32和LTC 1859的数据采集系统

基于STM 32和LTC 1859的数据采集系统

作者:崔海朋 时间:2020-03-03 来源:电子产品世界 收藏

崔海朋 (青岛杰瑞工控技术有限公司,山东 青岛 266071)

本文引用地址://m.amcfsurvey.com/article/202003/410486.htm

摘  要:现在很多采集系统要求较高的精度,而且信号形式、范围也有所不同,处理电路比较复杂,硬件成本 高。为了解决该问题,设计了基于STM32和的16位高精度数据采集系统,详细介绍了软硬件设计。此 系统不仅可以实现8路电流信号的单端输入,也可以实现8路电压信号的单端输入,成本低,精度高。

关键词:数据采集;

0 引言

现在很多数据采集系统要求较高的精度,同时要求 可以适应不同的信号形式,例如可以连接电流信号、电 压信号,信号的范围也不同,常规的方法是采用复杂的 电路处理再进行数据采集,这样不仅增加了硬件成本, 还降低了系统精度。本系统设计的基于处理 器和的 16位高精度数据采集系统,不仅可以 实现8路的电流信号的输入,还可以实现8路电压信号的 输入,对输入信号的范围可以通过软件来设置,同时 AD采集电路与处理器采用了电源隔离和信 号隔离,提高了系统的可靠性。

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-5/℃的 2.5 V内部基准,如果需要较高的准确 度,还可以从外部驱动。对于那些对功耗敏感的应用, LTC1859提供了两种断电模式:打盹模式和休眠模式。

本系统的 Cortex-M3处理器为意法半导体公司推 出的32位RISC处理器STM32F103VCT6,主频最高可 达72 MHz。该处理器具有256 kB的程序存储器,48 kB 的RAM,同时它有8个定时器、5路串口、3路SPI、2 路I2C,具有独立看门狗和窗口看门狗,非常适合于与 LTC1859构成高精度的数据采集和控制系统。

1 硬件系统设计

本系统设计了由 2片LM324运放和1片 LTC1859构 成 8通道的单端信号输入。每片LM324含有4个运放,2 片LM324构成了8路信号调理电路,其中电阻实现电流 信号到电压信号的转换,当连接电压信号时,该电阻 不连接。LM324为电压跟随器电路,这里不再详述。LTC1859的电路如图1所示。本电路具有通用性,在实 际应用中性能稳定,效果很好。下面对电路进行详细 分析。

1583481848753474.jpg

1583481873971949.jpg

LTC1859引脚中CH0~CH7是8路模拟输入通道, 在本系统中构成了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 为高阻抗。在本系统中,该引脚连接至地,一直使能

LTC1859的输出功能。CONVST为启动转换引脚。其它 引脚分别接电源、数字地、模拟地,在布线时注意数字 地和模拟地的分开,几个电容推荐采用钽电容,这样可 以提高系统的精度。

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总线的 隔离是非常关 键的一部分

本系统采 用了专用的 SPI隔离芯片 ADUM1411。 它是ADI公司推 出的四通道数 字隔离芯片, 单芯片可以替 代 4 个光耦,采用芯片级脉冲变压器磁耦合技术,施密特触发器输 入/输出,隔离电压2 500 V。与传统的光耦隔离相比, 具有寿命长,节省PCB(印制板)面积等诸多优点。 每个ADUM1411芯片含有3路数字输出和1路数字输入 通道。由于LTC1859有5条控制线与Cortex-M3处理器 进行通讯,因此本系统选用了2片ADUM1411实现与 Cortex-M3处理器的完全隔离。电路如图3所示。

1583481892562032.jpg

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.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.3 模数转换采集

下面详细介绍软件编写,SPI总线的时钟很快,既 可以采用中断方式,也可以采用查询方式。本系统采用查询方式,其软件流程如图 4所示。

微信截图_20200306160129.jpg

程序源代码及其详细注释如下,该函数的入口参数 为通道号,即为0~7,函数根据通道号读取该通道的数 据,同时将该数据值返回,其中部分函数为STM32的库 函数,这里不再详细讲述。

u16 ReadADC1859(u16 channel)

{

u16 control_code;

control_code=Get_Control_Code(channel);//根 据通道计算控制字

while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_ FLAG_TXE) == RESET); //等待发送缓冲器为空

SPI_I2S_SendData(SPI1,control_code); //发送 控制字

while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_ FLAG_RXNE) == RESET);//等待接收缓冲器变非空

temp_value = SPI_I2S_ReceiveData(SPI1); / / 读取数据

GPIO_ResetBits(GPIOA, GPIO_Pin_4);//convst 置低

GPIO_SetBits(GPIOA, GPIO_Pin_4); //convst 置高启动一个转换

delay40ns(); //延迟

delay40ns();

GPIO_ResetBits(GPIOA, GPIO_Pin_4);//将 convst拉低

while(GPIO_ReadInputDataBit(GPIOC, GPIO_ Pin_4)==0x00); //等待busy变高

delay40ns(); //延迟

delay40ns();

while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_ FLAG_TXE) == RESET); //等待发送缓冲器为空

SPI_I2S_SendData(SPI1,control_code); //发送 控制字

while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_ FLAG_RXNE) == RESET);//等待接收缓冲器变非空

temp_value = SPI_I2S_ReceiveData(SPI1); / / 读取数据

return temp_value; //数据返回

}

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.

本文来源于科技期刊《电子产品世界》2020年第03期第43页,欢迎您写论文时引用,并注明出处。



评论


相关推荐

技术专区

关闭