完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
使用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个回答
|
|
直接用仿真器观察!
|
|
|
|
万用表不够精确的,而且它自身输出的就是一段时间的均值。建议用示波器测。
|
|
|
|
我觉得是电源的问题的可能性大,用示波器看电源的波形。还有就是不知道你采集的是什么信号。
|
|
|
|
|
|
|
|
没有示波器,只有万用表。。。最新测试结果,在配置模式寄存器时,把更新速率由原来的470改为现在的16.7时,用新速率每十组测得的平均值为稳定状态,但单个数值差距特别大,从0一直到90+都有。原速率十组平均值依然不稳定,查表以后怀疑为器件噪声的原因。
|
|
|
|
电源的波形应该是没问题的。我用的是安捷伦函数信号发生器Agilent 33120A产生一个50mV的电压信号当作采集到的模拟值,经过两个4052通道选择的芯片把电压值传给7792.测7792采信号的管脚电压稳定。与最新速率采出的10次平均电压值也相同。但单次波动很大。
|
|
|
|
没懂。。。是把数据存到sd卡中么,然后再读出来?那样不也是要经过串口显示么 ?
|
|
|
|
已解决,调整模式寄存器后4位的更新速率,由原来的470改为16.7,并将原来配置模式寄存器完成后的ms_delay时间由100ms改为10ms,即可得到正确并且稳定的数值,求大神解答原理~~~
|
|
|
|
就是建个变量数组,AD[1000]这样的。
|
|
|
|
|
|
|
|
放到数组里面然后用串口输出么?想不到其他方式能让我读到数组中的数据。。
|
|
|
|
哦哦。有空我去研究一下吧 。谢谢啦~~
|
|
|
|
懂了,谢谢~
|
|
|
|
0V是不是稳定呢?
|
|
|
|
您说的是参考地么?是稳定的。
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1781 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1621 浏览 1 评论
1085 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
728 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1680 浏览 2 评论
1938浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
732浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
570浏览 3评论
596浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
559浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 15:28 , Processed in 1.228444 second(s), Total 74, Slave 68 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号