转换速率:每秒钟采样的次数。常用单位: SPS(每秒次) KSPS(每秒千次) MSPS(每秒百万次)。越快越好。
转换精度:转换结果的有效位数(二进制)。单位:位
AVR的片上ADC:
最高转换速率:15kSPS
最高转换精度:10位
AVR片上ADC的特点:
10 位 精度
0.5 LSB 的非线性度
± 2 LSB 的绝对精度
65 - 260 μs 的转换时间
最高分辨率时采样率高达15 kSPS
8 路复用的单端输入通道
7 路差分输入通道
2 路可选增益为10x 与200x 的差分输入通道
可选的左对齐ADC 读数
0 - VCC 的 ADC 输入电压范围
可选的2.56V ADC 参考电压
连续转换或单次转换模式
通过自动触发中断源启动ADC 转换
ADC 转换结束中断
基于睡眠模式的噪声抑制器
使用流程:
1.初始化相关寄存器
2.读取转换结果
3.平滑滤波
4.进行单位制变换
转换结果默认是右对齐的。所以高6位是补0的。
相关寄存器
第一个寄存器:ADMUX
这个是多工选择寄存器,ADMUX
一般AVCC不稳定 所以一般不用 一般用 1
第5位:是转换结果 左对齐
一般左对齐应用场合是只需要8位的精度,就左对齐 取出高半个字节 就支取了8位精度。
第4位:模拟通道与增益选择位有个列表 不同的组合 和增益,而我们现在只需要单端输入所以 都设置为0.
第2个寄存器:ADC 控制与状态寄存器
第7位:ADC 使能
第6位:ADC 开始转换,启动ADC开始进行转换
第5位:自动触发使能,很多时候需要循环采样模拟信号,自动触发采样很有用的,比如,用定时器100MS
采样一次。触发源下面会有讲。
第4位:ADC中断标志。 转换结束之后 这个位会置位,
第3位:ADC 中断使能
第2:0位:预分频选择位
有个表可以晶振时钟 2分频到128分频。
50----200KHZ的时钟 获得精度。低于10位 可以高于200KHZ
注意:正常转换需要13个ADC(跟上图有点重复) 200KHZ /13 = 15.384 最高也得 正常就按200KHZ /13就可以
下面我们计算下 16MHZ的时候它能给ADC 提供一个怎样范围的时钟。
最大 16000 000
单次转换速率
超过200KHZ 精度就会降低
第3个寄存器:ADCH
这个寄存器分两种情况
第4个寄存器:特殊功能IO寄存器
这个寄存器不是专属于ADC转换寄存器的。只有7、6、5 这3位跟ADC有关。决定ADC触发源
如果连续模式
模拟比较器 就设计到自带的模拟比较器的功能
外部中断0
下面都是定时器、计数器的中断。
最常用的就是连续转换模式。
adc.h
先将
均值滤波
voltile
STATIC这个变量尽在本文件有效
static
MAX_ADC_BUFFER 是宏
void int_adc(void)
{
}
unsigned int read_adc(void){
}
//ADC 转换完成中断
SIGNAL(SIG_ADC){
//
adc_buffer() = temp;
sum + = adc_buffer(maxacdbuffer -1);//本次的结果 8次的求和
下面这个是除以8 相当于 右移动3位
adc_buffer[[0] = adcbuffer >> 3
//这样就完成对ADC 转换的结果进行了 平滑滤波
}