A/D转换实验中,知道电位器电压和数码管显示值,如何求理论计算的AD转换结果数字量 请教,如何消除在A/D转换中,电压测量值在数码管上的抖动?
常见的AD转换有8位 10位 12 位 14位等
对于很多单片机内部的AD模块,基准电压即为单片机供电电压
单独的AD模块有的要外部基准,有的也有内部基准源
如10位AD,基准电压5V,电位器调节输出电压1.25V,则
AD转换结果数字量理论上应该是1024* 1.25/5=256
用ADC0809做A/D转换器,编制程序,将模拟量变成数字量,并用数码管显示其结果。~
0809利用实验台上的ADC0809做A/D转换器,实验箱上的电位器提供模拟电压信号输入,编制程序,将模拟量转换成数字量,用数码管显示模拟量转换的结果。
PORT
EQU 0CFA0H
CSEG AT 0000H
LJMP START
CSEG AT 4100H
START: MOV DPTR,#PORT
;启动通道0
MOVX @DPTR,A
MOV R0,#0FFH
LOOP1: DJNZ R0,LOOP1
;等待中断
MOVX A,@DPTR
MOV R1,A
DISP:
MOV A,R1
;从R1中取转换结果
SWAP A
;分离高四位和低四位
ANL A,#0FH
;并依次存放在50H到51H中
MOV 50H,A
MOV A,R1
ANL A,#0FH
MOV 51H,A
LOOP:
MOV DPTR,#0CFE9H
;写显示RAM命令字
MOV A,#90H
MOVX @DPTR,A
MOV R0,#50H
;存放转换结果地址初值送R0
MOV R1,#02H
MOV DPTR,#0CFE8H
;8279数据口地址
DL0:
MOV A,@R0
ACALL TABLE
;转换为显码
MOVX @DPTR,A
;送显码输出
INC R0
DJNZ R1,DL0
SJMP DEL1
TABLE: INC A
MOVC A,@A+PC
RET
DB
3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB
7FH,6FH,77H,7CH,39H,5EH,79H,71H
DEL1:
MOV R6,#255
;延时一段时间使显示更稳定
DEL2:
MOV R5,#255
DEL3:
DJNZ R5,DEL3
DJNZ R6,DEL2
LJMP START
;循环
END
数码管只是对AD值采集到数值进行转换后的数值显示,抖动的原因不在数码管而在减少采集值的波动.克服AD采集波动关键在滤波,包括硬件滤波及数字滤波.消除数码管抖动最直接的方法是降低刷新显示频率,如0.1秒一刷新则显示抖动很大,如果1秒钟一刷新则显示效果要好的多.当然这是治标不治本的方法.硬件滤滤最好但比较难,需通过增加电源滤波及AD信号滤波电路改善AD电源及AD信号的质量.软件滤波是一种对硬件滤波的补充滤滤,效果也非常明显,可通过多次采集取平均值滤波.而对于一些不太要求响应速度的缓慢变化模拟量比如温度等采用设置滤波系数对上次采集值取主要值的方法,即
最新值=上次采集值*((滤波系数-1)滤波系数))+本次采集值/滤波系数
其中滤波系数随响应时间要求增加而增大,这样做滤波效果很明显.