完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
因为code跳动的比较大,所以我用校准功能,看能否解决问题,在使用校准问题中遇到一些问题,请大家帮忙解答!
1 校准有内部校准和系统校准两种,那么应该在什么情况下使用内部校准什么情况下使用系统校准? 2 PDF文档的描述中中只有失调寄存器和满量程寄存器两个,上面说的两种校准模式是共用这两个寄存器吗?如果是这样的话,当我进行内部校准之后再进行系统校准,那么内部校准的的数据不是别覆盖了吗? 3 Data = [(0.75 × VIN × Gain/VREF) × (223) – (Offset_Reg – 0x800000)] ×Full_Scale_Reg/0x400000 × 2这个公式里面的Offset_Reg和Full_Scale_Reg是内部校准系数还说系统校准系数? 4 我进行内部校准时,为什么校准过后,失调寄存器一直是0xffffff,满量程寄存器一直都是0x553a50(好像是出厂值) 贴出AD7190的代码 void Init_ad7190() { ClrCs; buf[0] = 0xff; WriteToAD7190(1,buf); WriteToAD7190(1,buf); WriteToAD7190(1,buf); WriteToAD7190(1,buf); WriteToAD7190(1,buf); delay(1000); //¸´Î»AD7190 buf[0] = 0x10; WriteToAD7190(1,buf); buf[2] = 0x00; buf[1] = 0x02; buf[0] = 0x58; WriteToAD7190(3,buf); buf[0] = 0x08; //д0x08µ½Í¨ÐżĴæÆ÷ ÅäÖá®Ä£Ê½¼Ä´æÆ÷¡¯ WriteToAD7190(1,buf); buf[2] = 0x80; buf[1] = 0x00; buf[0] = 0x60; WriteToAD7190(3,buf); delay(100); while((GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_2))==1);//µÈ´ýÄÚ²¿ÁãµçƽУ׼Íê³É buf[0] = 0x08; //д0x08µ½Í¨ÐżĴæÆ÷ ÅäÖá®Ä£Ê½¼Ä´æÆ÷¡¯ WriteToAD7190(1,buf); buf[2] = 0xA0; //ÄÚ²¿ÂúÁ¿³ÌУ׼£¬×´Ì¬¼Ä´æÆ÷²»·¢ËÍ£¬Íⲿ4.9152M¾§Õñ buf[1] = 0x00; //sinc4Â˲¨Æ÷£¬½ûÖ¹ÆæżУ׼£¬REJ60=1£¬¸üºÃµÄ50HzÒÖÖÆ£¬Êä³öËÙÂÊ=50Hz buf[0] = 0x60; //ÄÚ²¿ÂúÁ¿³ÌУ׼Ôڽϵ͵ÄËÙÂÊÏ¿ÉÒÔ»ñµÃ½Ï¸ßµÄ¾«¶È WriteToAD7190(3,buf); delay(100); while((GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_2))==1); //µÈ´ýÄÚ²¿ÂúÁ¿³ÌУ׼Íê³É buf[0] = 0x74; //д0x74µ½Í¨ÐżĴæÆ÷ ¶ÁÈ¡¡®Ê§µ÷¼Ä´æÆ÷¡¯0111 0100 WriteToAD7190(1,buf); while((GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_2))==0); //µÈ´ýÄÚ²¿ÁãµçƽУ׼Íê³É { ReadFromAD7190(4,buf); //¶ÁÊý¾Ý¼Ä´æÆ÷ InterZeroAdjustData=(u32)buf[3]<<16; InterZeroAdjustData|=(u16)buf[2]<<8; InterZeroAdjustData|=buf[1]; } buf[0] = 0x7C; //д0x7cµ½Í¨ÐżĴæÆ÷ ¶ÁÈ¡¡®ÂúÁ¿³Ì¼Ä´æÆ÷¡¯0111 1100 WriteToAD7190(1,buf); while((GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_2))==0); //µÈ´ýÄÚ²¿ÁãµçƽУ׼Íê³É { ReadFromAD7190(4,buf); //¶ÁÊý¾Ý¼Ä´æÆ÷ InterFullAdjustData=(u32)buf[3]<<16; InterFullAdjustData|=(u16)buf[2]<<8; InterFullAdjustData|=buf[1]; } buf[0] = 0x08; //д0x08µ½Í¨ÐżĴæÆ÷ ÅäÖá®Ä£Ê½¼Ä´æÆ÷¡¯ WriteToAD7190(1,buf); buf[2] = 0x00; //Á¬Ðøת»»Ä£Ê½£¬×´Ì¬¼Ä´æÆ÷²»·¢ËÍ£¬Íⲿ4.9152M¾§Õñ buf[1] = 0x04; //sinc4Â˲¨Æ÷£¬½ûÖ¹ÆæżУ׼£¬REJ60=1£¬¸üºÃµÄ50HzÒÖÖÆ£¬Êä³öËÙÂÊ=90Hz buf[0] = 0x3f; WriteToAD7190(3,buf); buf[0] = 0x4c; //д0x4cµ½Í¨ÐżĴæÆ÷ ¶Á¡®Ä£Ê½¼Ä´æÆ÷¡¯0100 1100 WriteToAD7190(1,buf); while((GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_2))==0); { ReadFromAD7190(4,buf); //¶ÁÊý¾Ý¼Ä´æÆ÷ SampleSpeed=(u32)buf[3]<<16; SampleSpeed|=(u16)buf[2]<<8; SampleSpeed|=buf[1]; } SampleSpeed&=0x003f; //¶Á³ö²ÉÑùËÙ¶È } PS:通信没有问题 |
|
相关推荐
3个回答
|
|
问题依然没有解决,希望大神帮忙
|
|
|
|
可以参考一下如下的常见问题解答,其中有相关校准问题的解答
http://www.analog.com/cn/education/education-library/faqs/adc-faq-1.html |
|
|
|
误差多少?末了几位在跳?
输入接的电压源用的信号源?型号是? 用的SINC4/3滤波器?ODR设了多大?示波器测过输入波形?里头市电50Hz/60Hz噪声大的? PGA增益设了多大? 什么应用?ADC参考源用的什么型号? 校准用了哪种? 我的经验是做“内部满量程”校准效果最好,一般应用执行这一个即可。 最烦客户一言不和就上没有任何注释的代码。。。 能弱弱地坦诚告知:我们大公司出来的做硬件的,因分工太细,这些年来的嵌入式软件(IAR/Keil/Cortex Mx...),都是业余在鼓捣学习的。。。 |
|
|
|
只有小组成员才能发言,加入小组>>
990 浏览 2 评论
给ADUM4223 增加信号驱动15V电压就不正常, 波动很大会被烧是什么情况?
1384 浏览 2 评论
ADP5092 SYS端口为2.09V,但是REG_OUT为0是什么原因?
1938 浏览 1 评论
ad7193差分输入ain1与ain2差是正值时,读到电压与实际值误差小,但为负值值,误差就变的很大
4269 浏览 2 评论
9060 浏览 1 评论
ADC3442采集,分析数据出现有规则毛刺,请问是哪方面的问题啊?
1520浏览 3评论
AD7190状态寄存器一直是0x80,连续转换模式下RDY不拉低
1692浏览 2评论
990浏览 2评论
1666浏览 2评论
给ADUM4223 增加信号驱动15V电压就不正常, 波动很大会被烧是什么情况?
1384浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 20:50 , Processed in 0.687031 second(s), Total 53, Slave 46 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号