stm32驱动AD7490学习笔记

AD7490,通讯方式SPI,16通道,12位精度,逼近式ADC。


图1

图1是报文结构,由高位开始,12位,但是报文是发16位的数据,所以报文结构应该是:
XXXX XXXX XXXX 0000

末尾4位为0。


以下是对于各位对应的数值的具体含义。

write:写不写这个芯片,1写,0不写

SEQ和SHADOW:一起用,排序器的使用模式,我只用到了最普通的00模式,发一个报文回一个通道数值。

ADD0-ADD3:通道数。

PM1/PM0:一起用,11正常,10关闭,01自动关机,00自动待机。我用00正常

WEAK/TRI:一次报文交互结束后,Dout脚的最终状态。1下一次ADD3状态,0结束时Dout最后一位状态。

RANGE:模拟输入范围,0是2xREFIN的量程,1是1xREFIN的量程。

CODING:Dout脚输出数据的类型,0补码,1二进制。


图2

图3

图4



所以要用正常模式采0通道,报文为

1000 0011 0101 0000        0x8350

采1通道,报文为

1000 0111 0101 0000         0x8750


这里建议【WEAK/TRI】位使用   ,让Dout最后状态为下一次报文交互时的ADD3状态。stm32的SPI只会在CLK脚变化的时候去读取MISO脚的电平,所以会读取不到AD7490回复报文中的ADD3位,会导致报文错位。同理,STM32的SPI采集到的数据最后一位没有意义,不需要,需要移除。

举例:

STM32发送:    1000   0111   0101   0000        0x8750 通道1电压。

假设采集到电压数据为    0101   0101   0101

STM32应该收到:     0001   0101   0101   0101      0x1555

STM32实际收到:     0010   1010   1010   101?     0x2AAB / 0x2AAA


解决方法
在向AD7490发送报文前先读取它Dout脚的状态,左移15位。再将SPI读到的数据右移1位,将两个值  或  一下。


图5

图6

图7

图8


根据上面两个图,配置SPI。

还没写完,有空再写、、

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐