STM32
直播中

李健

7年用户 162经验值
私信 关注
[问答]

AD7792转换结果波动大

使用AD7792进行模数转换,AD7792以SPI模式与STM32连接,使用通道一进行转换,但输出结果上下波动超过10mV。已进行的错误排除:
    1、使用万用表测量AD7792通道一电压稳定,排除输入电压波动错误。
    2、已用串口打印正常字符串,排除串口传输错误。
    3、失调寄存器与满量程寄存器输出结果正确,排除SPI传输错误。
部分代码如下所示:
[C] 纯文本查看 复制代码
void ad7792_configuration(void){spi_configuration();//设置SPImux_gpio_configuration();//设置4052芯片通道,由于已排除输入电压波动的可能,故忽略此处CS_L;//使能AD7792ms_delay(10);spi_send_byte(0xff);spi_send_byte(0xff);spi_send_byte(0xff);spi_send_byte(0xff);ms_delay(500);//复位AD7792gain_select(AGC_GAIN_1);//修改配置寄存器,0x1000mode_select(MODE_CONTINUE,SPEED_16_7); //修改模式寄存器,0x0001CS_H;//失能AD7792ms_delay(500);calibration();//读取失调寄存器,满量程寄存器}void calibration(void)//读取失调寄存器,满量程寄存器{uint8_t t1,t2;CS_L;/*zero internal calibration*/mode_select(MODE_ZERO_IN,SPEED_16_7); ms_delay(1000);/*full internal calibration*/while(RDY);mode_select(MODE_FULL_IN,SPEED_16_7);ms_delay(1000);/*internal GND*/GPIO_ResetBits(GPIOE,GPIO_Pin_2);bypass_select(AGC_CHAN_1,PAIRB);ms_delay(10);while(RDY);mode_select(MODE_CONTINUE,SPEED_16_7);ms_delay(1000);while(RDY);spi_send_byte(0x70);t1=spi_send_byte(0xff);t2=spi_send_byte(0xff);zero=t1;zero<<=8;zero+=t2;uart1_printf("Zero:%Xrn",zero);spi_send_byte(0x78);t1=spi_send_byte(0xff);t2=spi_send_byte(0xff);full=t1;full<<=8;full+=t2;uart1_printf("Full:%Xrn",full);CS_H;}float convert(void)//AD转换部分{uint16_t res = 0;float res1 = 0;CS_L;while(RDY);//等待可以开始转换us_delay(1000);GPIO_choice();//配置4052mode_select(MODE_CONTINUE,SPEED_16_7);//模式选择0x0001ms_delay(100);while(RDY);//等待转换结束spi_send_byte(0x58);res=(((uint16_t)spi_send_byte(0xff)) & 0x00ff)<<8;res+=(((uint16_t)spi_send_byte(0xff)) & 0x00ff);CS_H;res1 = 3.0 * ((float)(res)) / 65536.0 * 1000;ms_delay(1000);return res1;//输出电压}
输出结果如下所示(50mV为例):
Zero:8000
Full:54A7
adc_value:41.38
adc_value:48.29
adc_value:55.94
adc_value:60.10
adc_value:58.00
adc_value:51.36
adc_value:44.45
adc_value:39.28
adc_value:40.01
adc_value:46.78
adc_value:55.25
adc_value:59.74
adc_value:58.82
卡在这里好久了,求大神解答~~~

回帖(15)

李汉荣

2019-1-17 13:47:46
直接用仿真器观察!
举报

林芳

2019-1-17 14:06:27
万用表不够精确的,而且它自身输出的就是一段时间的均值。建议用示波器测。
举报

阮薇

2019-1-17 14:14:28
我觉得是电源的问题的可能性大,用示波器看电源的波形。还有就是不知道你采集的是什么信号。
举报

李悠冉

2019-1-17 14:31:45
先把串口助手丢一边去,
搅和在一起没法确定。
用数组把转换后的原始数据存下来,然后观察。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分