我们在前面的导航键中涉及到了AD转换,但我们不知道是如何转换以及其原理作用,我们这篇就来详细的解释一下
需要知道的一些知识点
-
将模拟信号转换成数字信号的电路,我们称其为模数转换器,简称A/D转换器或ADC。
同理,将数字信号转换成模拟信号的电路称为数模转换器,简称D/A转换器或DAC。 -
在将模拟量转化为数字量的过程中,一般需要经过采样、量化和编码三个步骤。
-
由于模拟信号在时间上是连续的,而A/D转换的过程是需要时间的,所以不可能把模拟信号的每一个瞬时值都转换为数字量,只能在连续变化的模拟量上按一定的时间规律取出与之对应的瞬时值,并对该瞬时值做一个量化标定,将标定的结果以数字的形式输出,从而实现从模拟量到数字量的转换。
那我们就直接开始步入正题
AD数据采集电路及采集步骤说明
其中:
- ADC_POWER:
ADC 电源控制位,0:关闭ADC 电源;1:打开A/D转换器电源
- 建议进入空闲模式和掉电模式前,将ADC电源关闭,可降低功耗。
- 启动A/D转换前一定要确认A/D电源已打开,A/D转换结束后关闭A/D电源可降低功耗,也可不关闭。
- 初次打开内部A/D转换模拟电源,需适当延时,等内部模拟电源稳定后,再启动A/D转换。
- SPEED1,SPEED0:
模数转换器转换速度控制位
- CHS2/CHS1/CHS0:
模拟输入通道选择
- 结果存储格式和存储寄存器
ADRJ=0时,10位A/D转换结果的高8位存放在ADC_RES中,低2位存放在ADC_RESL的低2位中。
比较流程
- ADC启动后,比较寄存器清0,然后通过逐次比较逻辑,从比较寄存器最高位开始对数据位置1,并将比较寄存器数据经DAC转换为模拟量与输入模拟量进行比较,若DAC转换后模拟量小于输入模拟量,保留数据位为1,否则清0数据位;
- 依次对下一位数据置1,重复上述操作,直至最低位为止,则A/D转换结束,存转换结果,发出转换结束标志。
AD应用编程要点
-
打开ADC电源(设置ADC_CONTR中的ADC_POWER位);
-
适当延时,等ADC内部模拟电源稳定。一般延时1ms即可;
-
设置P1口中的相应口线作为AD转换模拟量输入通道(设置P1ASF寄存器);
-
选择ADC通道(设置ADC_CONTR中的CHS2-CHS0位);
-
根据需要设置转换结果存储格式(设置CLK_DIV中ADRJ位);
-
查询AD转换结束标志ADC_FLAG,判断AD转换是否完成,若完成,则读出AD转换结果(保存在ADC_RES和ADC_RESL寄存器中),并进行数据处理。如果是多通道模拟量进行转换,则更换AD转换通道后要适当延时,使输入电压稳定,延时量取20-200us即可(与输入电压源的内阻有关),如果输入电压源的内阻在10KΩ以下,可不加延时;
-
采用中断方式,还需进行中断设置(中断允许和中断优先级);
-
在中断服务程序中读取AD转换结果,并将ADC中断请求标志ADC_FLAG清零。
ADC数据采集的步骤:
-
将ADC0~7的模拟量送到比较器中,用DAC(数/模转换器)转换的模拟量与输入的模拟量通过比较器进行比较。
-
转换结束后,将比较结果放入转换结果寄存器(ADC_RES和ADC_RESL)。
-
同时,需要将ADC_FLAG软件清零。
-
注意硬件会自动将ADC_START清零,如果需要进行下一次转换,则需要将ADC_START置位。
特别说明:
(1)数码管所显示的ADC转换结果并不是电压值,而是电压进行转换后所得的一个值。如果需要实际的电压值可以参照STC15F2K60S2数据手册的760页上面的公式进行计算得出。
(2)ADC转换结果是一个10位数据,若ADRJ=0,则ADC_RES存放高八位,ADC_RESL存放低两位。若ADRJ=1,则ADC_RESL存放高八位,ADC_RES存放低两位。本案例采用的是ADRJ=0,而且只取了高八位结果。
学完以上知识,就对AD转换有了一定的基础了解了