打印
[应用相关]

ADC采样问题

[复制链接]
793|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
CaLipton|  楼主 | 2018-1-30 15:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//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,来达到稳定?
沙发
Rospiers| | 2018-1-30 16:37 | 只看该作者
30不是ADC设置,是系统延时,等待adc使能完成

使用特权

评论回复
板凳
Lewisnx| | 2018-1-30 16:52 | 只看该作者
12位ADC为8位+4位=4096 ,8位=256,4位=16,256*16=4096

使用特权

评论回复
地板
CCompton| | 2018-1-30 17:03 | 只看该作者
DIin=ADC2->DRH*256+ADC2->DRL;
这个ADC是10位的,不是12位。为什么高位乘以256,低位不变

使用特权

评论回复
5
Richardd| | 2018-1-30 17:17 | 只看该作者
ADC2->DRH保存了高2位
ADC2->DRL保存了低8位

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

使用特权

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

使用特权

评论回复
7
Erichk| | 2018-1-30 17:41 | 只看该作者
这个转换工具哪里找的?

使用特权

评论回复
8
ltwsq| | 2018-2-1 15:22 | 只看该作者
这种写法的确有点别扭,个人觉得使用移位更直接,并且还不用乘法运算

使用特权

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

本版积分规则

126

主题

369

帖子

0

粉丝