C<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />8051F学习笔记:ADC<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
C8051F单片机的显著特点除了峰值运算速度能达到100MIPS(并不是全系列),还有一个就是片内集成了高精度的ADC和DAC。如C8051F320集成了一个17通道的10位ADC,转换速率能达到100ksps。C8051F120集成了两个ADC,一个8通道的12位ADC1,100ksps;一个8通道的8位ADC2,500ksps。还集成了一个2通道的12位DAC。功能不可谓不强大。Silicon Labs公司也是做模拟产品的,因此即使是集成在芯片的DAC和ADC精确度也是很高的,完全可以代替专门的DAC/ADC。这也是C8051F比AVR有优势的地方。(话说AVR片内的AD很烂)。
下面以C8051F320为例讲解一下ADC的设置
1) ADC工作方式选择
ADC分两种工作方式:单端方式和差分方式。
正输入:P1.0~P3.0、片内温度传感器输出、正电源(VDD)
负输出:P1.0~P3.0、VREF和GND
当GND被选择为负输入时,ADC0工作在单端方式;
负输入选择其他管脚时,ADC0工作在差分方式;
被选择为ADC0)输入的引脚应被配置为模拟输入,并且被数字交叉开关跳过。
2) 数据对齐方式
每次转换结束后,寄存器ADC0H和ADC0L保存ADC转换结果,村春方式有左对齐或右对齐。由AD0LJST(ADC0CF.2)的设置决定。
单端方式(转换码为10位无符号整数)
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
差分方式(转换码为10位有符号整数—2的补码,第10位为符号位,1为负,0为正)
对于右对齐数据,ADC0H寄存器中未用的高位填充数据字扩展位。对于左对齐数据,ADC0L寄存器中未用的低位被清0。
3) 设置ADC0转换启动方式
一共有6种A/D转换启动方式,由ADC0CM2-0(ADC0CN)决定
1.写‘1’到 ADC0CN的 AD0BUSY 位; (AD0BUSY被置1启动转换,转换结束后复位0,AD0BUSY位的下降沿触发中断(中断被允许)并置位ADC0CN的中断标志AD0INT,通过查询中断标志可以判断ADC转换是否完成)
2.定时器 0 溢出(即定时的连续转换) ;
3.定时器 2 溢出;
4.定时器 1 溢出;
5.CNVSTR 输入信号(P0.6)的上升沿;(P0.6应被数字交叉开关跳过)
6.定时器 3 溢出。
4) 设置ADC0的跟踪方式
有两种跟踪保持方式,有AD0TM(ADC0CN.6)
1. 连续跟踪方式。ADC0输入被连续跟踪(转换期间除外)。(AD0TM=1)
2. 低功耗跟踪保持方式。每次转换前有3个SAR时钟的跟踪时间(跟踪发生在转换启动信号有效之后)。
要注意的是这两种方式的跟踪事件要满足ADC0的最小跟踪时间要求(C8051F320要求最小跟踪/保持捕获时间>300ns)。
也就是说在使用外部触发源时CNVSTR的低电平保持时间>300ns。而在低功耗跟踪方式,每次转换需要用三个SAR时钟跟踪,对于大多数应用,三个SAR时钟可以满足最小跟踪事件要求。
这个最小跟踪时间由AMUX0的电阻、ADC0采样电容、外部信号源阻抗及所要求的转换精度决定,具体计算可以参考手册和应用文档。
计算开关电容ADC的建立时间(an019) https://static.assets-stash.eet-china.com/album/old-resources/2010/4/16/30b11842-26f6-4717-863c-32e9e7147967.rar
5) 设置SAR转换频率
AD0SC4-0(ADC0CF.7-3)作为ADC0 SAR转换时钟周期控制位,保存设置值,这个值由下面公式得到:
SAR转换时钟并不能取到系统时钟值,它有一个最大值,这个最大值由ADC0的电气特性表给出。对于C8051F320来说,CLKSAR<3MHz,在实际设置中也不能取得过小。
6) 设置电压基准
能设置成三种电压基准
1. VDD(3.3v)
2. 内电压基准输出(2.44V)
3. 外电压记住输入
具体配置如下:
程序下载:https://static.assets-stash.eet-china.com/album/old-resources/2010/4/16/bdc334c8-ce41-4bd5-8ec4-a7e297c5dcd5.rar
程序说明:系统时钟(SYSCLK)为24MHz,波特率为19200bps,上电复位后PC机串口调试助手显示: blog.ednchina.com/tengjingshu
电压基准设置为VDD;
在串口调试助手输入'v',测量P1.0的模拟输入电压(P1.0接电位器,电位器另两脚一脚接VCC,一脚接GND),在串口调试助手输出电压mv值;
在串口调试助手输入'q',P2.3脚的LED灯亮;
P0.4—— MCU TXD; P0.5——MCU RXD;P0.0——SYSCLK;P2.3——LED0;P1.0——Analog电压输入(<3.3v)
因为我做实验时数字地和模拟地是没有分开的,噪声很大
造成输出的电压值一直有起伏
用万用表测量为1.081v
用户450691 2014-12-13 11:00
coyoo 2013-12-14 17:18
用户1701889 2013-12-14 08:58
coyoo 2013-11-20 15:31
用户427466 2013-11-20 14:04
用户377235 2013-3-20 16:15
用户167705 2011-7-20 21:34
用户301951 2010-6-9 10:15
shenzhenghao1984_379129130 2010-4-17 18:08