[应用相关] ADC采样问题

[复制链接]
 楼主| 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,低位不变
yszong 发表于 2019-8-4 17:45 | 显示全部楼层
ADC2->DRH保存了高2位
ADC2->DRL保存了低8位

ADC2->DRH*256相当于把高2位左移8位也可以写成ADC2->DRH<<8
zhenykun 发表于 2019-8-4 17:49 | 显示全部楼层
高位乘以256确实有点烧脑,高低位拼接用位移也许更直观。
zhuhuis 发表于 2019-8-4 17:52 | 显示全部楼层
这个转换工具哪里找的?
songqian17 发表于 2019-8-4 17:55 | 显示全部楼层
这种写法的确有点别扭,个人觉得使用移位更直接,并且还不用乘法运算
 楼主| huanghuac 发表于 2019-8-4 18:44 | 显示全部楼层

哦,那我就知道怎么回事了,多谢大家,结贴了哈
yf1234 发表于 2020-1-10 21:19 | 显示全部楼层
ADC采样为什么要左移或者右移,不是很懂
您需要登录后才可以回帖 登录 | 注册

本版积分规则

772

主题

8473

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部

772

主题

8473

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部