最近调试了几个单片机的AD转化模块,碰到了一些问题,总结了一下
AD转化便是选通道、比较电压、要收集电压的端口设置为模仿端口
1、挑选参阅电压源
2、挑选AD转化时钟
3、要收集电压的端口设置为模仿端口
4、挑选要采样的模仿通道
5、使能AD模块
PIC24FJ
开端看此部分是调试电池电量的时分,是因为电池电量显现不精确,debug形式下,看ad收集到的电压被转化成的数据,发现寄存器ADC1BUF中的数据只有关开机是正确的,今后的值都是不对的如同大多数的值是零,后来发现是因为在主循环中的某个模块又把本来装备为模仿输入端口引脚复原成了一般的I/O口了(便是AD1PCFGbits.PCFG0先被装备为0后又被置1,我用的是通道0)。
A/D代码初始化实例
AD1PCFG = 0; // 装备ad端口,装备一切端口为模仿端口,要是作为一般io运用有必要置1
AD1CON1 = 0x2208; // 装备采样时钟源
AD1CON2 = 0; // 装备A/D 比较电压,转化在每个采样完毕后开端
AD1CON3 = 0; // 装备 A/D 转化时钟 是
AD1CHS = 0; // 装备输入通道,CH0+
AD1CSSL = 0; // 输入扫描被制止
IFS0bits.AD1IF = 0; // 清中止
IPC3bits.AD1IP2 =
IPC3bits.AD1IP1 =
IPC3bits.AD1IP0 =
IEC0bits.AD1IE = 1; //
AD1CON1bits.ADON = 1; //
AD1CON1bits.SAMP = 1; // 开端采样输入
Delay(); //延时,保证开端转化时,采样的时刻已完毕
AD1CON1bits.SAMP = 0; // A/D采样完毕,开端转化
中止
void __attribute__ ((__interrupt__)) _ADC1Interrupt(void)
{
IFS0bits.AD1IF = 0;
}
在pic的数据手册中有比较具体的例程,值得参阅
MSP430
这个单片机的比较电压能够挑选内部或外部的
问题:AD转化,单通道单次转化和单通道屡次转化有什么区别
单次转化是指进行一次转化前需求你给一次指令。
接连转化的话敞开后主动接连进行转化,转化的数据接连进行更新。
假如你选用单次转化,就需求不断发送转化的指令,读取成果,再发转化指令,再读。便是循环啦。
假如接连转化敞开的话,就在程序中循环读就能够了。
STM32
在收集电池电压时遇到了问题,3.9v到4.2v的电压得到的ad转化的电压值的寄存器存储的电压值正常,3.9v以下的值不正确,发现是Vref+输入的比较电压不稳定形成的。