完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
ADC使用之前官方例程中有对ADC做粗校准,这需要一个AIN输入脚悬空。论坛之前有过类似帖子:
结论是使用外部基准源自行校准,就不需要粗校准了。但自己的使用场景是没有基准源的,所以这里提出另外几个问题:
|
|
相关推荐
1个回答
|
|
粗调实际上就是对GND校准,ADC对GND读个值,计算出固定的偏移, 然后手动去offset其他通道的值;
这个偏移通常在几个LSB到几十个LSB 之间,可能是偏大, 或者偏小, 把校准值带入实际的采样值,来修正这个固定偏差; 对于CH579,其借用PA5对应的ADC channel 1来做粗调通道,当使用粗调时,内部模拟开关会控制该channel的电平,如果该IO 正好被对应到了外部的IO上,要避免外部电路造成的影响,所以不建议使用PA5作为其他功能,否则建议其他方式实现粗调; 对于CH573 用于粗调的通道是可被修改的的, 例程中给的是channel 6 ,这是个内部通道; 下面代码来来源 CH573_EVT_1.6 的 CH57x_adc.c : signed short ADC_DataCalib_Rough( void ) // 采样数据粗调,获取偏差值 { UINT16 i; UINT32 sum=0; UINT8 ch=0; // 备份通道 UINT8 ctrl=0; // 备份控制寄存器 ch = R8_ADC_CHANNEL; ctrl = R8_ADC_CFG; R8_ADC_CFG = 0; ADC_ChannelCfg( 6 ); // 6/7/10/11 可选 R8_ADC_CFG |= RB_ADC_OFS_TEST|RB_ADC_POWER_ON|(2<<4); // 进入测试模式 R8_ADC_CONVERT = RB_ADC_START; while( R8_ADC_CONVERT & RB_ADC_START ); for(i=0; i<16; i++) { R8_ADC_CONVERT = RB_ADC_START; while( R8_ADC_CONVERT & RB_ADC_START ); sum += (~R16_ADC_DATA)&RB_ADC_DATA; } sum = (sum+8)>>4; R8_ADC_CFG &= ~RB_ADC_OFS_TEST; // 关闭测试模式 R8_ADC_CHANNEL = ch; R8_ADC_CFG = ctrl; return (2048 - sum); } |
|
|
|
只有小组成员才能发言,加入小组>>
522 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2903 浏览 2 评论
2399 浏览 1 评论
868浏览 2评论
688浏览 1评论
riscv-none-embed-objcopy: \'PWM_Output.elf\': No such file这个咋解决,
418浏览 1评论
523浏览 1评论
请教一下,Mounriver 编译不成功:找不到库文件,怎么整
814浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 10:33 , Processed in 1.113551 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号