本文转自ADI中文技术论坛,地址:https://ezchina.analog.com/thread/15156
最近在查找ADI测量温度方案,发现AD7124-8很适合温度测量,于是申请了AD7124-8的样品,设计一款5通道K型热电偶测温电路。
电路设计参考了UG-856 EVAL-AD7124-8SDZ User Guide上的原理图,将AD7124-8的模拟通道连接到接线端子上,热电偶测量方案也参考UG-856应用,冷端使用一个3线PT100补偿,MCU采用ADI ARM CORTEX-M3处理器ADUCM360,调试时使用串口打印输出数据,为了设计通用性以及后续软件移植,设计时将ADC部分和MCU部分分成两个PCB。原理图设计图纸大致如下:
图1 模拟通道滤波电路
图2 AD7124-8电路
图3 电源以及外部REF电路
原理图设计完了,就准备PCB layout,layout参考UG-856上的设计,按照4层板设计。
图4 顶层丝印图
图5 顶层走线图
图6 GND层
图7 电源层
图8 底层
图9 底层丝印图
PCB layout完成后就联系板厂加工,期间准备物料,感谢ADI支持,很多样品都申请到样品了。
硬件部分设计完成就开始考虑软件设计了,ADI网站上提供参考代码,在网站上下载了源代码,看了一遍,感觉还不错,值得借鉴,不过不是在ADUCM360上开发的程序,需要将其移植到ADUMC360上
移植部分很简单,只需要完成3个填空题
int8_t SPI_Init(ADI_SPI_TypeDef *pSPI,uint32_t u32Baud);
int8_t SPI_Read(ADI_SPI_TypeDef *pSPI,uint8_t *pBuffer,int32_t i32Len);
int8_t SPI_Write(ADI_SPI_TypeDef *pSPI,uint8_t *pBuffer,int32_t s32Len);
其中SPI_Init完成SPI的初始化,包括SPI号,以及波特率
SPI_Read实现SPI读数据i32Len数据到pBuffer中
SPI_Write则实现SPI则将pBuffer中长度为s32Len数据再MOSI上发送出去
移植完驱动后续就是验证是否移植是否正确了,下载的源代码AD7124.C中也提供了方法。在int32_t AD7124_Setup(ad7124_device *device, int slave_select,ad7124_st_reg *regs)中实现了AD7124-8配置寄存器以及查询寄存器操作,验证是否移植正确,就是将配置好的寄存器重新读出来进行比对了。寄存器的配置在ad7124_st_reg ad7124_regs[]初始化时已经实现,可以根据项目需求自行配置。配置值和读出结果一致也就表示一致正确了。
(代码请在原帖查看吧)
配置完成后,就开始实现PT100以及热电偶电压采集了,AD7124-8可以通过使能多个通道寄存器,实现ADC多通道自动切换,注意通道寄存器中的SETUP配置,这是通道寄存器与配置寄存器相关联的地方,通过3bit Setup位以及16个通道寄存器可以组合出16*8= 108种组合配置,数据手册的描述比较难理解
配置完成后,就只需要查询AD7124-8状态寄存器数据是否准备好以及对应的通道数,数据如果准备好,就可以读取对应通道的数据
(代码请在原帖查看吧)
数据寄存器数据读出来之后就剩下数据处理了,热电偶的常用处理方式是冷端温度转换为对应的热电偶电压,热电偶热端电压+冷端电压值得到的电压值在转换成热电偶电压,按照这种算法实现热电偶测温。