传感器 ad转换程序
作者&投稿:锁穆 (若有异议请与网页底部的电邮联系)
首先,要将传感器输出的电压信号进行放大,使其落在AD转换器的采样范围之内;
其次,要对输出电压信号进行滤波,使其采样电路的采样周期内保证相对稳定;
第三,要在AD转换器的输入端加上采样保持电路,这个电路可以保证在AD转换动作期间,输入电压相对稳定,避免转换出现错误。最简单的采样电路可以是一个输入端对地的保持电容,复杂一些的需要加上采样开关;
第四,通过控制信号指令,控制AD转换器进行采样及转换操作,在此过程中,需要查询转换完成状态,待转换完成后,从数字输出端口读出转换结果。
直接买个信号放大器就行了,可以把毫伏信号放大成电流或者电压信号
此程序是我做单片机课程设计的程序,PROTEL原理图在附件里程序经过了实验的测试,没有任何问题。
一 设计要求:
1. 以8031为主控器组成A/D,D/A转换系统。
2. 对任意波形的脉冲信号进行A/D转换后进入数据存储器,要求能够存储5~10个周波,然后定时将数据经D/A转换输出示波器显示。
3. 采样的频率可由键盘有级调节。
二 课程设计条件:
硬件:个人PC一台,8051单片机仿真头一个,89S51单片机一个,ADC0809芯片一块,DAC0832芯片一块,7402一个,LM358一片,按键开关5个,电阻电容若干,6M晶振一个,稳压电源,函数信号发生器,及示波器个一个
软件:PC机WINDOWS操作系统,KEIL单片机仿真调试软件
三 设计思想:
通过ADC0809将正弦波模拟信号按照一定的频率进行采样,频率由键盘进行串级控制,转换成数字量,然后存储到8155的RAM里面,再将数据输出到DAC0832,将数字量转化成模拟量,经过LM358将信号放大,送到示波器终端循环显示出来
BUFFRE EQU 31H ;采样频率设置单元
BUFRAM EQU 7E00H ;8155RAM首地址
BUFADC EQU 0FD1FH ;0809启动地址
BUFDAC EQU 0BFFH ;0832启动地址
K1 EQU P1.4 ; 四个频率选择按键
K2 EQU P1.5
K3 EQU P1.6
K4 EQU P1.7
ORG 0000H
LJMP START
ORG 0030H
START: MOV R4,#02 ;由于8155的复位时间比8051慢,所以在对8155初始化之前必须有延时
DEL11:MOV R6,#200 ; 延时为021s的倍
DEL21:MOV R7,#126
DEL31:DJNZ R7,DEL31
DJNZ R6,DEL21
DJNZ R5,DEL11
MOV DPTR,#7FF8H ; 8155初始化
MOV A,#00H ; 写入命令字
MOVX @DPTR,A
MOV R0,#0FAH
MOV DPTR,#BUFRAM
LOOP:MOVX @DPTR,A ;对8155RAM清零
INC DPTR
DJNZ R0,LOOP
FRESET:MOV P1,#0FFH ;准备读取P1 口状态
JB K1,NEXT1 ; 依次判断按下了哪一个按键
MOV BUFFRE,#02H ;送相应的频率设置到31内存单元
LJMP INPUT
NEXT1:JB K2,NEXT2
MOV BUFFRE,#04H
LJMP INPUT
NEXT2:JB K3,NEXT3
MOV BUFFRE,#08H
LJMP INPUT
NEXT3:JB K4,NEXT4
MOV BUFFRE,#06H
LJMP REALIO ;如果是K4按下,则进行实时输入输出
NEXT4:LJMP FRESET ; 循环等待按键按下
INPUT: ; A/D采样程序
MOV R0,#0FAH ;共采集250个数据
MOV DPTR,#BUFRAM ; 8155RAM首地址
LOOP1:PUSH DPL ; 先保存次地址
PUSH DPH
MOV DPTR,#BUFADC ; 0809启动地址
MOV A,#00H
MOVX @DPTR,A ; 启动0809 A/D转换开始
NOP ; 一定时间延时
NOP
WAIT:JB P1.0,WAIT ; 等待转换结束
MOVX A,@DPTR ;读取转换结果
POP DPH
POP DPL ;恢复RAM地址
MOVX @DPTR,A ; 保存数据至8155RAM
INC DPTR ;RAM地址加一,指向下一个存储单元
ACALL DELAY ; 延时,即以一定频率采样
DJNZ R0,LOOP1 ; 250个数据是否采集完成,否则继续
OUTPUT: ; D/A转换模块
MOV R1,#0FAH ;250个数据
MOV DPTR,#BUFRAM ; 8155RAM首地址
LOOP2: PUSH DPL ; 保存此地址
PUSH DPH
MOVX A,@DPTR ;将数据输出到A中
MOV DPTR,#BUFDAC ; 0832地址
MOVX @DPTR,A ;将数据输出进行D/A转换
NOP ;为了与采样频率一直,设定一定延时
NOP
POP DPH ;恢复RAM地址
POP DPL
INC DPTR ;指向下一个要转换的数据单元
ACALL DELAY ; 与采样相同延时
DJNZ R1,LOOP2 ; 直道转换完成
WAIT2:JNB K4,NEXT
LJMP OUTPUT ;循环显示输出结果
NEXT:LJMP REALIO
DELAY:MOV R5,BUFFRE ;延时程序,通过R5的不同,改变延时时间,从而改变
DEL1:MOV R6,#2 ; 延时为0.001s的倍
DEL2:MOV R7,#126
DEL3:DJNZ R7,DEL3
DJNZ R6,DEL2
DJNZ R5,DEL1
RET
REALIO: ;实时显示程序
MOV DPTR,#BUFADC
MOV A,#00H
MOVX @DPTR,A
NOP
NOP
WAIT1:JB P1.0,WAIT1
MOVX A,@DPTR
MOV DPTR,#BUFDAC
MOVX @DPTR,A
NOP
NOP
FRESET1:MOV P1,#0FFH ;准备读取P1 口状态
JB K1,NEXT11 ; 依次判断按下了哪一个按键
MOV BUFFRE,#02H ;送相应的频率设置到31内存单元
LJMP INPUT
NEXT11:JB K2,NEXT12
MOV BUFFRE,#04H
LJMP INPUT
NEXT12:JB K3,NEXT13
MOV BUFFRE,#08H
LJMP INPUT
NEXT13:LJMP REALIO
END
八 使用说明
1.上电复位或者按键复位后,程序开始运行后,等待K1-K4的按键被按下,根据按下的键值作不同的处理。
2.如果被按下的是K1-K3键,则根据按下的键分别设置不同的采样频率,然后开始进行A/D转换进行信号的采样,再存储至8155的RAM中,如果存储完了250个数据,则自动开始进行数据的D/A输出,在示波器上可以看到相应的波形,数据是循环输出的,所以可以一直看到数据输出!
3.如果是按键K4被按下,则进行的是实时的采样输入输出,即将信号通过ADC0809采样进来,不保存至8155的RAM中,就立即送到DAC0832输出到示波器显示,这样的信号基本上就是原来的信号波形。
4.在K1-K3按下后正常的采样,存储,输出过程中,也可以按下K4键而转到实时的输入输出程序,便于将采样数据和原数据进行对照。
5.在实时的输入输出时,也可以同过按下K1-K3键,立即切换到原来的一定频率采样,存储,输出过程。
6.硬件设计上还有一个复位键,可以对程序进行按键复位(汇编,已经实验通过)
简单的A/D,D/A转换程序
此程序是我做单片机课程设计的程序,PROTEL原理图在附件里
程序经过了实验的测试,没有任何问题,
一 设计要求:
1. 以8031为主控器组成A/D,D/A转换系统。
2. 对任意波形的脉冲信号进行A/D转换后进入数据存储器,要求能够存储5~10个周波,然后定时将数据经D/A转换输出示波器显示。
3. 采样的频率可由键盘有级调节。
二 课程设计条件:
硬件:个人PC一台,8051单片机仿真头一个,89S51单片机一个,ADC0809芯片一块,DAC0832芯片一块,7402一个,LM358一片,按键开关5个,电阻电容若干,6M晶振一个,稳压电源,函数信号发生器,及示波器个一个
软件:PC机WINDOWS操作系统,KEIL单片机仿真调试软件
三 设计思想:
通过ADC0809将正弦波模拟信号按照一定的频率进行采样,频率由键盘进行串级控制,转换成数字量,然后存储到8155的RAM里面,再将数据输出到DAC0832,将数字量转化成模拟量,经过LM358将信号放大,送到示波器终端循环显示出来
BUFFRE EQU 31H ;采样频率设置单元
BUFRAM EQU 7E00H ;8155RAM首地址
BUFADC EQU 0FD1FH ;0809启动地址
BUFDAC EQU 0BFFH ;0832启动地址
K1 EQU P1.4 ; 四个频率选择按键
K2 EQU P1.5
K3 EQU P1.6
K4 EQU P1.7
ORG 0000H
LJMP START
ORG 0030H
START: MOV R4,#02 ;由于8155的复位时间比8051慢,所以在对8155初始化之前必须有延时
DEL11:MOV R6,#200 ; 延时为021s的倍
DEL21:MOV R7,#126
DEL31:DJNZ R7,DEL31
DJNZ R6,DEL21
DJNZ R5,DEL11
MOV DPTR,#7FF8H ; 8155初始化
MOV A,#00H ; 写入命令字
MOVX @DPTR,A
MOV R0,#0FAH
MOV DPTR,#BUFRAM
LOOP:MOVX @DPTR,A ;对8155RAM清零
INC DPTR
DJNZ R0,LOOP
FRESET:MOV P1,#0FFH ;准备读取P1 口状态
JB K1,NEXT1 ; 依次判断按下了哪一个按键
MOV BUFFRE,#02H ;送相应的频率设置到31内存单元
LJMP INPUT
NEXT1:JB K2,NEXT2
MOV BUFFRE,#04H
LJMP INPUT
NEXT2:JB K3,NEXT3
MOV BUFFRE,#08H
LJMP INPUT
NEXT3:JB K4,NEXT4
MOV BUFFRE,#06H
LJMP REALIO ;如果是K4按下,则进行实时输入输出
NEXT4:LJMP FRESET ; 循环等待按键按下
INPUT: ; A/D采样程序
MOV R0,#0FAH ;共采集250个数据
MOV DPTR,#BUFRAM ; 8155RAM首地址
LOOP1:PUSH DPL ; 先保存次地址
PUSH DPH
MOV DPTR,#BUFADC ; 0809启动地址
MOV A,#00H
MOVX @DPTR,A ; 启动0809 A/D转换开始
NOP ; 一定时间延时
NOP
WAIT:JB P1.0,WAIT ; 等待转换结束
MOVX A,@DPTR ;读取转换结果
POP DPH
POP DPL ;恢复RAM地址
MOVX @DPTR,A ; 保存数据至8155RAM
INC DPTR ;RAM地址加一,指向下一个存储单元
ACALL DELAY ; 延时,即以一定频率采样
DJNZ R0,LOOP1 ; 250个数据是否采集完成,否则继续
OUTPUT: ; D/A转换模块
MOV R1,#0FAH ;250个数据
MOV DPTR,#BUFRAM ; 8155RAM首地址
LOOP2: PUSH DPL ; 保存此地址
PUSH DPH
MOVX A,@DPTR ;将数据输出到A中
MOV DPTR,#BUFDAC ; 0832地址
MOVX @DPTR,A ;将数据输出进行D/A转换
NOP ;为了与采样频率一直,设定一定延时
NOP
POP DPH ;恢复RAM地址
POP DPL
INC DPTR ;指向下一个要转换的数据单元
ACALL DELAY ; 与采样相同延时
DJNZ R1,LOOP2 ; 直道转换完成
WAIT2:JNB K4,NEXT
LJMP OUTPUT ;循环显示输出结果
NEXT:LJMP REALIO
DELAY:MOV R5,BUFFRE ;延时程序,通过R5的不同,改变延时时间,从而改变
DEL1:MOV R6,#2 ; 延时为0.001s的倍
DEL2:MOV R7,#126
DEL3:DJNZ R7,DEL3
DJNZ R6,DEL2
DJNZ R5,DEL1
RET
REALIO: ;实时显示程序
MOV DPTR,#BUFADC
MOV A,#00H
MOVX @DPTR,A
NOP
NOP
WAIT1:JB P1.0,WAIT1
MOVX A,@DPTR
MOV DPTR,#BUFDAC
MOVX @DPTR,A
NOP
NOP
FRESET1:MOV P1,#0FFH ;准备读取P1 口状态
JB K1,NEXT11 ; 依次判断按下了哪一个按键
MOV BUFFRE,#02H ;送相应的频率设置到31内存单元
LJMP INPUT
NEXT11:JB K2,NEXT12
MOV BUFFRE,#04H
LJMP INPUT
NEXT12:JB K3,NEXT13
MOV BUFFRE,#08H
LJMP INPUT
NEXT13:LJMP REALIO
END
八 使用说明
1.上电复位或者按键复位后,程序开始运行后,等待K1-K4的按键被按下,根据按下的键值作不同的处理。
2.如果被按下的是K1-K3键,则根据按下的键分别设置不同的采样频率,然后开始进行A/D转换进行信号的采样,再存储至8155的RAM中,如果存储完了250个数据,则自动开始进行数据的D/A输出,在示波器上可以看到相应的波形,数据是循环输出的,所以可以一直看到数据输出!
3.如果是按键K4被按下,则进行的是实时的采样输入输出,即将信号通过ADC0809采样进来,不保存至8155的RAM中,就立即送到DAC0832输出到示波器显示,这样的信号基本上就是原来的信号波形。
4.在K1-K3按下后正常的采样,存储,输出过程中,也可以按下K4键而转到实时的输入输出程序,便于将采样数据和原数据进行对照。
5.在实时的输入输出时,也可以同过按下K1-K3键,立即切换到原来的一定频率采样,存储,输出过程。
6.硬件设计上还有一个复位键,可以对程序进行按键复位
谷凝埃齐: 可以采用传感器--比较器---单片机的形式
蠡县19812819721: 关于A/D转换程序 - ?
谷凝埃齐: 传感器传出的电压值是模拟量 单片机不能直接读取 这里就出现了 ad转换芯片把模拟量转换成数字量给单片机 ad0804(并口) ad0831 (串口)芯片都是AD转换用的~ 我还有相应的程序
蠡县19812819721: ,将压力传感器输出电压信号用ADC0809进行AD转换,中间需要哪些步骤,本人初学者最好能提供详细步骤或电路?
谷凝埃齐: 首先,要将传感器输出的电压信号进行放大,使其落在AD转换器的采样范围之内; 其次,要对输出电压信号进行滤波,使其采样电路的采样周期内保证相对稳定; 第三,要在AD转换器的输入端加上采样保持电路,这个电路可以保证在AD转换动作期间,输入电压相对稳定,避免转换出现错误.最简单的采样电路可以是一个输入端对地的保持电容,复杂一些的需要加上采样开关; 第四,通过控制信号指令,控制AD转换器进行采样及转换操作,在此过程中,需要查询转换完成状态,待转换完成后,从数字输出端口读出转换结果.
蠡县19812819721: 三菱plc,将液位传感器的信号发送给AD转化模块,然后再控制水泵动作,请问哪位大神能帮我编这么一小 - ?
谷凝埃齐: 液位计4~20mA输出输入给入plc,PLC内的D8030会有一个随输入电流变化的数字,压力越高数字越大,可用比较指令[> k..... D8030] [
蠡县19812819721: 我有个压力传感器 还有个AD转换器 怎么样PLC编程序? - ?
谷凝埃齐: 把传感器接到 2AD 2AD的程序可以充说明书上写下来 然后再加上 乘压力传感器的最大指(如10KG)就乘10 然后除去传感器的最大值 看说明书 (一班是 4095) 就可以了 然后你充气后2AD有个数值的 然后你用 这个数值好你的 4.5比较就可以了>= 4.5 SET M200 合格
蠡县19812819721: c8051f020单片机怎样把多个传感器上的模拟量进行AD转换...有没有哪个大侠有程序提供的啊. - ?
谷凝埃齐: F020的ADC0和ADC1都是8个模拟输入端的,你一个输入端连接一个传感器不行么?转换了一次后设置一下寄存器让下一个输入端连接到ADC再进行转换,有什么问题?
蠡县19812819721: A/D,D/A转换实验程序?
谷凝埃齐: //AD转换,对指定的通道k进行AD转换,结果以16位整数返回 unsigned int //以AD结果作为函数的返回值 } 参考资料:北航:PIC16系列单片机C程序,bByvix
蠡县19812819721: 一段C8051的ADC转换程序求帮忙分析一下 - ?
谷凝埃齐: AMX0SL是一个寄存器,用来选择ADC转换的通道,而channel是函数传过来的通道号,ADC0INT是ADC0中断标志位,因为下边要用软件查询的方式进行判断转换完成,所以这里要清0.ADC0的软件启动方式有定时器启动和向ADC0BUSY位写1等方式启动,下边的就是等待ADC0转换结束,因为转换结束后ADC0INT会由硬件置1,当为0时,说明未完成转换,程序会一直执行while,直到转换结束后跳出,然后就是读取转换的结果了,c8051的ADC0是12位ad,所以转换的结果会存到两个寄存器里边ADC0H存放高4位,ADC0L存放低8位.高4位乘256加上低8位就是最终的转换结果,最后再把结果返回.
蠡县19812819721: 【急】AD转换及数码管显示程序?
谷凝埃齐: return (ADC_DATA<<8|ADC_LOW2);//返回转换后的结果 是不是应该:ADC_DATA<<2 | ADC_LOW2 display(uint y)函数中: x=(y*100)>>10;有问题 y是uint乘以100后 (y*100)还是uint 此时可能溢出 …… 把display(uint y)函数改为display(ulong y)试试……
蠡县19812819721: 急问:用ad1674和8051的一个ad转换的程序,具体程序如下: - ?
谷凝埃齐: 这个是使用外部RAM总线形式来通讯的(最好把电路图贴上来) CTRL _at_ 0x2FFF;//这个代表对外部0x2FFF地址进行操作 ADSEL _at_ 0x4FFF;//这个代表对外部0x4FFF地址进行操作 通过硬件的总线协议 提高通讯速度