打印
[应用相关]

ADC采样问题

[复制链接]
1208|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huanghuac|  楼主 | 2019-8-4 17:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

//AD初始化
void AD_int(void)
{
        u8 value,i;
        u16 ADC_TDR_tmp;
        
        ADC2->CSR = 10; //AIN10通道选择        
        //select 4MHz clock based on 16MHz fMaster (div4), single mode
        ADC2->CR1 = 0x20;

        ADC2->CR2 = 0x08;//数据右对齐
        ADC2->TDRH=0x24;//AIN13 AIN10禁止施密特触发        
        ADC2->CR1 |= 0X01;//使能ADC
        
        value=30;
        while(value--); //等待ADC稳定                  

        ADC2->CSR &= 0x7f;//清EOC标志
        ADC2->CR1 |= 0x01;//启动AD
        
        i=0;
        do{
                if(ADC2->CSR&0x80)//转换结束
                        {               
                                DIin=ADC2->DRH*256+ADC2->DRL;//电流偏置代码获取
                                ADC2->CR1 |= 0x01;//启动AD
                                i++;
                        }               
         }while(i<20);//第20次采集作为电流真实偏置代码处理
               
        ADC2->CSR |= 13; //AIN13通道选择        
        ADChan=0;
        ADC2->CSR &= 0x7f;//清EOC标志
        ADC2->CR1 |= 0x01;//启动AD
}

电流偏置代码ADC的高八位为什么要乘以256?为什么ADC的数值设置成30,来达到稳定?

使用特权

评论回复
沙发
chenho| | 2019-8-4 17:22 | 只看该作者
30不是ADC设置,是系统延时,等待adc使能完成

使用特权

评论回复
板凳
zwll| | 2019-8-4 17:25 | 只看该作者
12位ADC为8位+4位=4096 ,8位=256,4位=16,256*16=4096

使用特权

评论回复
地板
huwr| | 2019-8-4 17:43 | 只看该作者

DIin=ADC2->DRH*256+ADC2->DRL;
这个ADC是10位的,不是12位。为什么高位乘以256,低位不变

使用特权

评论回复
5
yszong| | 2019-8-4 17:45 | 只看该作者
ADC2->DRH保存了高2位
ADC2->DRL保存了低8位

ADC2->DRH*256相当于把高2位左移8位也可以写成ADC2->DRH<<8

使用特权

评论回复
6
zhenykun| | 2019-8-4 17:49 | 只看该作者
高位乘以256确实有点烧脑,高低位拼接用位移也许更直观。

使用特权

评论回复
7
zhuhuis| | 2019-8-4 17:52 | 只看该作者
这个转换工具哪里找的?

使用特权

评论回复
8
songqian17| | 2019-8-4 17:55 | 只看该作者
这种写法的确有点别扭,个人觉得使用移位更直接,并且还不用乘法运算

使用特权

评论回复
9
huanghuac|  楼主 | 2019-8-4 18:44 | 只看该作者

哦,那我就知道怎么回事了,多谢大家,结贴了哈

使用特权

评论回复
10
yf1234| | 2020-1-10 21:19 | 只看该作者
ADC采样为什么要左移或者右移,不是很懂

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

772

主题

8473

帖子

6

粉丝