编自CSX_锅!
ADC12:
- 采样→保持→量化→编码
- 12 bits;200ksps(kilo samples per second)
- 逐次逼近法实现 analog to digital;
ADC12具有多路通道模拟输入,却只有一个__转换内核__,故需要__模拟多路通道__每次将待转换的通道接入转换内核。转换内核由__采样保持器__和__转换器__构成;
基准电压
所有的ADC/DAC都需要一个基准电压,即Vref+ & Vref-;
reference voltage分为external和internal(on-chip)两种;可通过软件选择;
on-chip reference voltage 又有1.5V和2.5V两种选择;
REFON = 1; //enable the internal reference
REF2_5 = 1; //reference voltage is 2.5V
当模拟输入>=最大reference voltage 数字输出为 full scale;(反向同理)
Conversion Formula:(12位)
The reference can be turned off to save power when not in use!!
相关寄存器
转换控制寄存器
ADC12CTL0
ADC12CTL1
中断控制寄存器
ADC12IFG & ADC12IE & ADC12IV
储存控制寄存器
ADC12MCTLx --> 通道控制寄存器
ADC12MEMx --> 通道储存寄存器
!寄存器不同控制位作用详见用户手册(或下一篇笔记);TI用户手册网址
时钟源
ADC工作时同样需要时钟驱动;ADC12CLK;Possible clock source:
SMCLK、MCLK、ACLK、internal oscillator ADC12OSC;
- Using ADC12SSELx bits to select source clock.
- Clock can be divided from 1-8 using the ADC12DIVx bits.
转换模式
- 单通道单次转换
- 序列通道单次转换
- 单通道多次转换
- 序列通道多次转换
可采用软件查询式和中断查询式两种方式读取转换数值。
中断
共18个中断源,共用一个中断向量!
ENC must be set to 1 before any conversion can take place!
void InitADC()
{
ADC12CTL1 |= ADC12SSEL_2; //ADC时钟MCLK
ADC12CTL1 |= ADC12DIV_0; //ADC二分频
ADC12CTL0 |= SREF_1; //ADC基准源选择内部基准源
ADC12CTL0 |= REF2_5V; //ADC基准源选择2.5V
ADC12CTL0 |= ADC12SHT_3; //ADC采样保持时间
ADC12CTL0 &= ~ADC12SR; //ADC采样率
ADC12CTL0 |= REFON; //开启基准;
ADC12CTL1 |= INCH_0; //选择ADC输入通道
ADC12CTL1 |= 0x0001; //允许A0模拟输入
ADC12CTL0 |= ADC12ON; //开启ADC
}
uint16_t GetADCValue(void)
{
ADC12CTL0 |= ENC + ADC12SC;
while(ADC10CTL1&ADC10BUSY);
return ADC12MEM;
}
The ADC12 can be turned off when not in use to save power!