51单片机设计多功能低频函数信号发生器

2024-08-28

51单片机设计多功能低频函数信号发生器(共3篇)

51单片机设计多功能低频函数信号发生器 篇1

【转】 51单片机设计多功能低频函数信号发生器 2010-06-05 17:37 转载自 yeyongan1987 最终编辑 yeyongan1987

51单片机设计多功能低频函数信号发生器

应用89S52单片机和DAC0832进行低频函数信号发生器的设计。本设计能产生正弦波、锯齿波、三角波和方波。这里着重介绍正弦波和锯齿波的生成原理。

ADC0832的介绍:DAC0832是8分辨率的D/A转换集成芯片。与微处理器完全兼容。这个DA芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应用。D/A转换器由8位输入锁存器、8位DAC寄存器、8位D/A转换电路及转换控制电路构成。

D0~D7:八位数据输入端 ILE: 数据允许锁存信号 /CS: 输入寄存器选择信号 /WR1: 输入寄存器选择信号 /XFER:数据传送信号

/WR2: DAC寄存器的写通选择信号 Vref: 基准电源输入端 Rfb: 反馈信号输入端 Iout1: 电流输出1 Iout2: 电流输出2 Vcc: 电源输入端 AGND: 模拟地 DGND: 数字地 DAC0832结构:

D0~D7:8位数据输入线,TTL电平,有效时间应大于90ns(否则锁存器的数据会出错);

ILE:数据锁存允许控制信号输入线,高电平有效;

CS:片选信号输入线(选通数据锁存器),低电平有效;

WR1:数据锁存器写选通输入线,负脉冲(脉宽应大于500ns)有效。由ILE、CS、WR1的逻辑组合产生LE1,当LE1为高电平时,数据锁存器状态随输入数据线变换,LE1的负跳变时将输入数据锁存;

XFER:数据传输控制信号输入线,低电平有效,负脉冲(脉宽应大于500ns)有效;

WR2:DAC寄存器选通输入线,负脉冲(脉宽应大于500ns)有效。由WR1、XFER的逻辑组合产生LE2,当LE2为高电平时,DAC寄存器的输出随寄存器的输入而变化,LE2的负跳变时将数据锁存器的内容打入DAC寄存器并开始D/A转换。

IOUT1:电流输出端1,其值随DAC寄存器的内容线性变化;

IOUT2:电流输出端2,其值与IOUT1值之和为一常数;

Rfb:反馈信号输入线,改变Rfb端外接电阻值可调整转换满量程精度;

Vcc:电源输入端,Vcc的范围为+5V~+15V;

VREF:基准电压输入线,VREF的范围为-10V~+10V; AGND:模拟信号地 DGND:数字信号地 DAC0832的工作方式:

根据对DAC0832的数据锁存器和DAC寄存器的不同的控制方式,DAC0832有三种工作方式:直通方式、单缓冲方式和双缓冲方式。本设计选用直通方式。

DAC0832工作时序:

DAC0832内部结构图:

当ILE为1时,只有当/CS、/WR1都为0时输入寄存器才允许输入;当/WR2、/XFER也都为0时,输入寄存器里的信息才能写入DAC寄存器。根据实际电路图我们就可以得到DAC0832工作的时序的程序。如下:

P37=0;//P37=CS _nop_();//P36=WR P36=0;

P0=value;(数据端口信号数值0~255)P36=1;_nop_();P37=1;硬件电路:

P0口是数据端口,接上拉电阻(其他端口则不用)。电源质量要好,质量越好的电源,芯片工作就越稳定。

从LM358运放输出的电压最大峰峰值就是12V所以在二级运放的放大倍数要注意跟基准电压想匹配,否则输出信号会很容易失真。

正弦波的生成:

DAC0832产生信号的原理可以说是ADC0809AD转换的逆过程,但DAC0832生成的信号是离散的。假设要生成一个Y=Asin(2*pi*f*t)的正弦波。adc0832数据端口给的数据的范围是0~255一共256个。前0~127表示是X轴上方的电压值(也可能是下方)。那么128~255是X轴下方的电压值。那么我们可以得到数据端口的数值的具体量,即value=127sin(2*pi*f*t)+127;假设我在X轴上抽样100个点(0~99),那么value=127sin(pi/50*t)+127;t:0~99.(这个100位的数组可以用MATALB生成)。也可以抽样更多的点,抽样的点越多,得到的信号越保真,但信号的频率会有所下降。抽样的点越少,失真越大,但频率能成大幅度递增。怎么选择,具体情况具体分析。其他的波形也跟正弦波一样。

程序如下:

#include sbit dac_WR=P3^6;//dac0832的wr端 sbit dac_cs=P3^7;sbit KEY1=P2^0;sbit KEY2=P2^1;bit keyflag;unsigned char i;unsigned char code tab[100]={127,135,143,151,159,166,174,181,188,195,202, 208,214,220,225,230,234,238,242,245,248,250, 251,252,253,254,253,252,251,250,248,245,242, 238,234,230,225,220,214,208,202,195,188,181, 174,166,159,151,143,135,127,119,111,103,95, 88,80,73,66,59,52,46,40,34,29,24, 20,16,12,9,6,4,3,2,1,0,1, 2,3,4,6,9,12,16,20,24,29,34, 40,46,52,59,66,73,80,88,95,103,111,119};

void getkey(void){ if(KEY1==0){ //按键按下后为电电平 RCAP2L+=10;//调节频率 if(CY==1){ RCAP2H+=1;} } if(KEY2==0){ RCAP2L-=10;if(CY==1){ RCAP2H-=1;} } } void Timer2_Init(){ T2CON=0x00;TH2=(65536-300)/256;TL2=(65536-300)%256;RCAP2H=0XFE;RCAP2L=0XDA;//稳定在50Hz左右 EA=1;ET2=1;TR2=1;} void T0_service()interrupt 1 { TH0=0XEC;TL0=0X77;keyflag=1;}

void Timer2_service()interrupt 5 { TF2=0;//清除中断标志位 dac_cs=0;dac_WR=0;P1=tab[i];dac_WR=1;i++;dac_cs=1;if(i==100)i=0;} void main(){ Timer2_Init();TMOD=0x01;TH0=0XEC;TL0=0X77;EA=1;ET0=1;TR0=1;while(1){ if(keyflag){ keyflag=0;getkey();} } } 本程序需注意:按键是低电平有效。定时器2中断发送数据给DAC0832,0832在得到一个数据后生成相应的电压值。所以他的中断时间决定信号的频率,调节它的中断时间就能调节信号的频率。

其他波形的生成,其他的波形也跟正弦波一样,但锯齿波和三角波可以不用查表法,应用加减计算得到就可以得到。下面介绍的是锯齿波: #include #include sbit DACWR=P3^6;sbit DACCS=P3^7;unsigned int i;void DAC_0832(void){ DACCS=0;DACWR=0;P0=i;i+=1;//加以操作得到上升的锯齿波 DACWR=1;_nop_();DACCS=0;if(i==0xff)i=0x7f;//为什么初值是0x7f,其他的行不行。大家自己动手试试。} void main(void){ i=0x7f;

while(1){ DAC_0832();} } DAC0832有着致命的一个缺点就是输出的波形里的含有的频率比较杂乱,常常出现过激的现象。如果你需要精确的信号的话,那么你必须在信号输出端就如滤波器。得到干净的低频函数信号。如果要作为信号源的话最好是能就上一级攻放。效果会好很多。虽然DAC0832不是非常专业的函数信号发生芯片,但是它的输出波形的范围比较广,常常能输出一些,你意想不到得很有意思的信号曲线。

下面发几张示波器观察到得曲线:实验室里手机照的,不是太清晰但还能看。

51单片机设计多功能低频函数信号发生器 篇2

(1) 可以手动设置频率的大小, 其设置范围在1—999HZ之间, 以达到频率在一定范围内可调这一特点。

(2) 可以手动设置占空比的大小, 控制脉宽, 即实现占空比可调这一特点。

(3) 通过放大电路使输出脉冲电压在3.6V—27V之间可调, 从而达到输出脉冲幅值电压可调这一特点。

根据以上情况, 我们尝试用SPACE061A小系统板及低频脉冲信号发生器的硬件控制电路构成整个系统, 通过编程来控制脉冲的产生。下面主要从硬件方面来描述本系统。

一、系统设计方案

本系统采用凌阳单片机作为控制核心, 将SPACE061A小系统板与低频脉冲信号发生器的硬件控制电路板用排线相连, 即用SPACE061A的输入/输出口来控制低频脉冲信号发生器的硬件电路板上的数码管显示和1*5小键盘, 产生矩形波信号, 再经过硬件电路板上的74LS74D触发器和由555定时器构成的单稳态触发器, 最后通过放大电路输出频率、幅值、占空比均在一定范围内可调的低频脉冲信号发生器。充分利用凌阳单片机的实时定时、多功能输入/输出口等优势, 使得整个系统更加具有实用性。

二、系统相关硬件说明

凌阳单片机SPACE061A已为大家所熟知, 这里不再详述, 下面主要对低频脉冲信号发生器硬件控制电路板作一具体介绍。

硬件电路整体框图如下图2-1所示。

下面就分别介绍一下显示模块、键盘输入模块、74LS74D触发器、单稳态触发器模块和放大电路模块。

(1) 显示模块和键盘输入模块

显示模块:

采用三个八段共阴数码管, 动态显示脉冲的频率值, 如图2-2所示, 通过IOB0—IOB7端口控制字型输出。通过IOA8—IOA10作为数码管的片选引脚, 来控制点亮数码管。

自行焊接了一个1*5小键盘, 作为频率、占空比的输入控制。其中Key1为占空比控制键, Key2、Key3、Key4为频率控制位, 分别控制频率值的百位、十位、个位。

利用SPCE061A的定时器/计数器Timer A的特殊功能, 通过设置P_Timer A_Ctrl单元的B6-B9位, 将占空比设置为在十四种情况下可选, 其占空比分别为1/16、2/16、3/16、4/16、5/16、6/16、7/16、8/16、9/16、10/16、11/16、12/16、13/16、14/16、14/16。

通过以上介绍, 我们可知单片机输出了频率、占空比在一定范围内可控的、幅值电压为3.6V左右的矩形波信号, 再经过74LS74D触发器和单稳态触发器、放大电路整形输出最终我们所需的脉冲信号。下面详细介绍74LS74D触发器和单稳态触发器模块。

(2) 74LS74D触发器和单稳态触发器模块

D触发器:

将单片机输出的矩形波信号通过上升沿触发的74LS74D触发器变为频率为原来1/2、占空比固定为50%的方波信号。

单稳态触发器:

将通过74LS74D触发器的输出的方波再通过555定时器构成的单稳态触发器就形成输出频率不变占空比可调的脉冲信号。

此触发器主要由555定时器组成, 555定时器是一种应用极为广泛的中规模集成电路。它由三个阻值为5K的电阻组成的分压器、两个比较器、基本Rs触发器、放电BJT T以及缓冲器G组成。

三、系统联调结果

本系统以凌阳单片机 (“61板”) 为控制器, 通过排线与脉冲信号发生器的硬件控制电路板相连, 利用程序加以控制, 最终实现占空比、幅值、频率可调的低频脉冲信号发生器, 联调结果良好。

参考文献

[1]康光华.电子技术基础 (模拟部分) [M].北京:高等教育出版社, 2001.第四版.[1]康光华.电子技术基础 (模拟部分) [M].北京:高等教育出版社, 2001.第四版.

51单片机设计多功能低频函数信号发生器 篇3

关键词:MCS-51单片机;汽车转弯信号灯;系统硬件设计;系统软件设计;集成电路 文献标识码:A

中图分类号:TP212 文章编号:1009-2374(2016)13-0020-02 DOI:10.13535/j.cnki.11-4406/n.2016.13.010

1 汽车转弯信号灯控制系统的功能要求

设汽车有一个转弯控制杆,此控制杆有三个位置:中间位置时,汽车不转弯;向上时,汽车左转;向下时,汽车右转。汽车转弯时,汽车的两个尾灯、两个头灯和两个仪表板灯相应地发出闪烁信号,当应急开关合上时,6个灯都闪烁。汽车刹车时,尾灯信号不闪烁。汽车转弯或应急状态下,信号灯和仪表板灯闪烁频率为1Hz,当停靠开关合上时,信号灯闪烁频率为30Hz。

2 系统硬件的设计

汽车中单片机用+5伏供电,其他电路用+12伏电源供电。在单片机系统中,具有故障监测功能,发现故障能自动报警。图中增加了晶体管Q7和7个电阻,Q7的集电极与T0相连,组成自动报警电路。假设一个信号灯受控断开,相应单片机输出口线为高电平,其余信号灯受控导通,导通的晶体管集电极输出低电平,截止的晶体管集电极输出高电平,Q7有6个输入端,5个输入端为低电平,1个输入端为高电平,这时Q7导通,T0为低电平,如果测得T0为高电平,说明单片机电路发生故障,这就是故障监测的原理。

3 系统软件的设计

系统软件用汇编语言编写,分为三部分:

3.1 口线说明和变量定义

程序中不采用口线名称,采用符号地址,变量采用助记名,要改变具体引脚,只要在说明和定义部分作修改,给程序设计带来了方便。

3.2 主程序

采用定时器/计数器0和1个软件计数器SUB-DIV产生一秒的定时信号,实现低频1Hz的闪烁功能。

3.3 中断服务程序

3.3.1 1Hz信号的产生:SUB-DIV初值为244,由244变到0,经0.999424秒,其中SUB-DIV.7为1时间117/244秒,为0时间127/244秒,得到占空比50%的1秒信号。

3.3.2 30Hz信号的产生:计数器SUB-DIV值由244变为0时,低3位构成8种状态,在0.999424秒中重复次数为30,把低3位状态组合起来,形成一定占空比的30Hz信号。

3.3.3 各种信号的形成:根据系统输入状态(各开关位置),计算送各指示灯的信号。

1 BRAKE BIT P1.0 30 SETB TR0 59 ANL C,PARK

2 EMERG BIT P1.1 31 SJMP $ 60 MOV DIM,C

3 PARK BIT P1.2 32 UPDATE:DJNZ SUB-DIV,T0SERV 61 MOV C,L-TURN

4 L-TURN BIT P1.3 33 MOV SUB-DIV,#244 62 ORL C,EMERG

5 R-TURN BIT P1.4 34 ORL P1,#11100000B 63 ANL C,LO-FREQ

6 L-FRNT BIT P1.5 35 ORL P2,#00000111B 64 MOV L-DASH,C

7 R-FRNT BIT P1.6 36 CLR L-FRNT 65 MOV F0,C

8 L-DASH BIT P1.7 37 JB T0,FAULT 66 ORL C,DIM

9 R-DASH BIT P2.0 38 SETB L-FRNT 67 MOV L-FRNT,C

10 L-REAR BIT P2.1 39 CLR L-DASH 68 MOV C,BRAKE

11 R-REAR BIT P2.2 40 JB T0,FAULT 69 ANL C,/L-TURN

12 S-FAIL BIT P2.3 41 SETB L-DASH 70 ORL C,F0

13 SUB-DIV DATA 20H 42 CLR L-REAR 71 ORL C,DIM

14 HI-FREQ BIT SUB-DIV.0 43 JB T0,FAULT 72 MOV L-REAR,C

15 LO-FREQ BIT SUB-DIV.7 44 SETB L-REAR 73 MOV C, R-TURN

16 DIM BIT PSW.1 45 CLR R-ERNT 74 ORL C,EMERG

17 ORG 0000H 46 JB T0,FAULT 75 ANL C,LO-FREQ

18 LJMP INIT 47 SETB R-FRNT 76 MOV R-DASH,C

19 ORG 000BH 48 CLR R-DASH 77 MOV F0,C

20 MOV TH0,#-16 49 JB T0,FAULT 78 ORL C,DIM

21 PUSH PSW 50 SETB R-DASH 79 MOV R-FRNT,C

22 AJMP UPDATE 51 CLR R-REAR 80 MOV C,BRAKE

23 ORG 0040H 52 JB T0,FAULT 81 ANL C,/R-TURN

24 INIT: MOV TL0,#0 53 SETB R-REAR 82 ORL C,F0

25 MOV TH0,#-16 54 JB T0,T0SERV 83 ORL C,DIM

26 MOV TMOD #01100001B 55 FAULT:CPL S-FAIL 84 MOV R-REAR,C

27 MOV SUB-DIV,#244 56 T0SERV:MOV C,SUB-DIV.1 85 POP PSW

28 SETB ET0 57 ANL C,SUB-DIV.0 86 RETI

29 SETB EA 58 ORL C,SUB-DIV.2 87 END

4 结语

汽车转弯信号灯的设计也可用数字逻辑电路来实现,缺点是灵活性差,系统功能有所变动,电路也要随之变动,缺少必要的智能。采用本文MCS-51单片机控制系统,可以实现数字逻辑电路的全部功能,并有故障监控功能,体现了单片机控制的优越性。

参考文献

[1] 孙涵芳,徐爱卿.MCS-51/96系列单片机原理及应用

[M].北京:北京航空航天大学出版社,1987.

[2] 马彪.單片机应用技术[M].北京:中国轻工业出版

社,2005.

[3] 秦实宏,徐春辉.MCS-51单片机原理及应用[M].武

汉:华中科技大学出版社,2010.

上一篇:2016(第七届)中国汽车金融年会成功举办下一篇:学习加强意识形态教育心得