STM32使用硬件spi驱动ad7689时,发现返回的ad值与实际值不一致,而且这个ad值是会随着我调整电压而改变,电压给的越大这个返回的ad值就越与实际值符合,电压给得越小返回的ad值与实际值相差越大,很奇怪。
一开始以为是我设置的spi波特率导致采样过快导致读下一个通道的采集电压值的时候可能是上一个通道还没有滤波完的数据,但切换波特兰从256到2都是过一遍,没能解决问题,还是存在一样的错误。
这是我写的AD7689的驱动的配置
#define AD7689_RB 1 //不回读CFG寄存器配置内容
#define AD7689_SEQ 0 //禁止序列器
#define AD7689_REF 0 //内部基准电压源REF = 2.5V
#define AD7689_BW 1 //全带宽低通滤波器
#define AD7689_INCC 7 //单级性,以GND为参考
#define AD7689_CFG 1 //覆盖寄存器内容
例如:通道0 0xf104(左移两位,末尾补零)
时序如下
for(i=0;i<3;i++)
{
AD7689_CNV_SET_H(); //CNV = 1;
delay_us(6);
AD7689_CNV_SET_L(); //CNV = 0;
delay_us(6);
AD7689_CNV_SET_H(); //CNV = 1;
delay_us(6);
AD7689_CNV_SET_L(); //CNV = 0;
delay_us(1);
HAL_SPI_TransmitReceive(&hspi3,buf.TStr,pRxdata,2,10);
delay_us(2);
AD7689_CLK_SET_L();
delay_us(2);
AD7689_CNV_SET_H();
}
看了网上相关例程,没有什么错误的地方阿,就是返回的ad值不对
麻烦帮忙解答疑问,怎么解决