方波发生器.docx
- 文档编号:29362115
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:21
- 大小:19.21KB
方波发生器.docx
《方波发生器.docx》由会员分享,可在线阅读,更多相关《方波发生器.docx(21页珍藏版)》请在冰豆网上搜索。
方波发生器
成都理工大学《电子系统设计》课程设计
2
一、总体设计
1.1方案的设计与选择
实现方波发生器的方法很多,但主要有三个方案:
采用单片函数发生器8038,采用锁
相式频率合成器,采用单片机编程。
其对比如下表:
方案优点缺点
单片函数发生器8038
简单易行,可实现数控
调整频率
信号频率稳定度不高
锁相式频率合成器性能良好
难以达到输出频率覆盖系数
的要求,电路复杂。
单片机编程信号精度较高需求软硬件结合
表1–方案对比
通过对比,决定采用单片机编程的方法来实现。
该方法可以通过编程的方法来控制信
号波形的频率和幅度,而且在硬件电路不变的情况下,通过改编程序来实现频率的变换。
此外,由于通过编程方法产生的是数字信号,所以信号的精度可以做得很高。
本设计用到一个AT89C51微处理器,4个按键,一个四与门。
AT89C51用到两个定时
器,定时器0和定时器1。
其中定时器0工作在定时方式1下,决定方波频率;定时器1
工作在定时方式1下,用来设定占空比。
按键1与2控制方波信号频率。
按下按键1或2
时,进行频率的调节,占空比不变。
1键按下时,频率增加100Hz,若2键按下时,频率
增加10Hz。
频率最大值为500Hz,当频率大于最大值时,重新赋值为50Hz。
另外两个按键
控制方波信号占空比。
当按键3和4按下时,进行占空比调节,频率不变。
3键按下时,
占空比进行增加10%,4键按下时,占空比增加1%。
占空比最大值为100%,当占空比大于
100%时,重新赋值为0%。
1.2设计原理
AT89C51单片机具有组成微型计算机的各部分部件:
CPU、RAM、I/O定时器/计数器以
及串行通讯接口等。
只要将AT89C51的ROM,接口电路,再配置键盘及其接口,显示器及
成都理工大学《电子系统设计》课程设计
3
其接口,数模转换及波形输出,指示灯及其接口等四部分,即可构成所需波形发生器。
其
信号发生器构成原理框图如图1所示。
图1–方波信号发生器设计原理框图
在信号发生器中,只用到片内中断请求,即是在AT89C51输出一个波形采样点信号后,
接着启动定时器,在定时器未产生中断之前,AT89C51等待,直到定时器计时结束,产生
中断请求,AT89C51响应中断,接着输出下一个信号波形,如此循环。
当有按键按下时,
产生外部中断请求信号,CPU暂停当前工作,处理中断请求,重新装入定时初值,开始定
时。
根据计算定时器初值的公式:
TC=2
L
−
fOSC×t
12
计算出定时器0与定时器1所要装入的初值。
定时器0初值:
C1=(65536-fosc/(12.0*freq))
定时器0初值:
C1=(65536-(fosc*zkb)/(12.0*100*freq))
其中freq表示输出方波频率,zkb表示方波占空比。
成都理工大学《电子系统设计》课程设计
4
二、系统的硬件设计
2.1系统硬件原理
系统硬件原理图如图2。
本次设计中,采用内部时钟方式。
AT89C51单片机的P1.0、P1.1、P1.2、P1.3口分别连接四个按键,对输出方波的频率、
占空比进行控制。
P2.0口作为方波输出口,可以通过示波器来观察波形。
四个键盘口连接
一个四与门,与INT0口连接,将键盘中断请求信号送入CPU。
图2–系统硬件原理图
2.2芯片端口资源分配表
表274LS21芯片端口资源分配表
芯片端口作用说明
1连接按键1,判断按键1是否按下
2连接按键2,判断按键2是否按下
4连接按键3,判断按键3是否按下
5连接按键4,判断按键4是否按下
6发送键盘中断请求信号
成都理工大学《电子系统设计》课程设计
5
表3AT89C51芯片端口资源分配表
芯片端口作用说明
P1.0连接按键1,控制输出方波频率
P1.1连接按键2,控制输出方波频率
P1.2连接按键3,控制输出方波占空比
P1.3连接按键4,控制输出方波占空比
P2.0输出方波波形
P3.2接收键盘中断请求信号
三、软件设计
方波发生器的软件设计包括主程序、延时子程序、系统初始化程序、键盘中断子程序、
定时器中断子程序。
3.1主程序
主程序包括系统初始化,和一个死循环系统。
当有中断请求信号产生时,跳出循环,
执行中断程序。
流程图如图3所示。
开始
系统初始化
空循环
图3–主程序流程图
成都理工大学《电子系统设计》课程设计
6
3.2系统初始化子程序
在此程序中,给所有变量赋初值:
键盘扫描口、初始频率与占空比及定时、开中断、
定时器0与定时器1的工作方式等。
初始化时启动了定时器0和定时器1.其中初始频率为
50Hz,占空比为50%。
键盘中断处理子程序流程图如图4所示
3.3键盘中断子程序
键盘用外中断0实现。
当有键按下时,产生低电平送入INT0口,形成中断请求信号,
CUP转去执行键盘中断子程序,进行频率调节或占空比调节。
(1)频率调节
按下按键1或2时,进行频率的调节,占空比不变。
1键按下时,频率增加100Hz,
若2键按下时,频率增加10Hz。
频率最大值为500Hz,当频率大于最大值时,重新赋值为
50Hz。
(2)占空比调节
当按键3和4按下时,进行占空比调节,频率不变。
3键按下时,占空比进行增加10%,
4键按下时,占空比增加1%。
占空比最大值为99%,当占空比大于99%时,重新赋值为1%。
成都理工大学《电子系统设计》课程设计
7
开始
关中断
延时消抖
是否有键按下
判断按键号
键处理
频率和占空比
范围是否超界
赋初值
计算定时初值
键盘口初始化
关中断
结束
N
Y
Y
N
图4–键盘中断处理子程序流程图
3.4定时器中断子程序
定时器中断子程序中有定时器0与定时器1中断,频率定时器0中断流程图与占空比
定时器1流程图分别如图5、图6所示。
①定时器0中断执行的操作有:
复位,启动自身进行频率定时,同时启动定时器1,
进行占空比定时,输出高电平。
②定时器1中断,停止自身的计时,输出低电平。
成都理工大学《电子系统设计》课程设计
8
定时器0中断入口
TR1=1
重装定时初值
输出高电平
结束
定时器1中断入口
TR1=0
重装定时初值
输出低电平
结束
图5–频率定时器0中断流程图6–频率定时器1中断流程
四、
系统调试
在本次课程设计中,使用Proteus软件进行仿真调试。
调试内容主要为软硬件的协同,
观察波形输出结果是否能够与设计方案所设计的那样达到要求。
调试结果如下:
1)在Proteus软件中运行仿真,示波器窗口中出现方波波形,显然波形频率与占空
比分别为50Hz和50%,符合程序初始化的结果。
图7–Proteus仿真–初始状态
成都理工大学《电子系统设计》课程设计
9
2)分别按下按键1、2调节方波频率。
可以看到方波波形频率不断增加,一快一慢,
而占空比依然为50%未变。
图8–Proteus仿真–调节方波频率
3)重新在初始状态下进行仿真。
分别按下按键3、4调节方波占空比,可以看到方波
波形的占空比发生变化,而频率未变。
图9–Proteus仿真–调节方波占空比
1)系统运行的初始状态如下图,与仿真结果一致。
将HEX文件加载后,用示波器观察单片机的P2.0口,得到输出结果,如下图。
五、实验记录
成都理工大学《电子系统设计》课程设计
10
图10–系统运行–初始状态
2)按下1、2键调节方波频率,可见方波频率增加,占空比依然保持50%。
图11–系统运行–调节方波频率
3)使方波重新达到初始状态,分别按下3、4键,可见方波占空比发生相应变化,而
频率依然为50Hz未变。
图12–系统运行–初始状态
成都理工大学《电子系统设计》课程设计
11
4)同时调节频率及占空比,示波器图像变化结果符合预期。
图13–系统运行–初始状态
在本次设计中,方波信号发生器的频率和占空比都独立可调。
输出方波信号的占空比
范围为0%—100%,调节精度为1%;频率范围为50Hz—500Hz,调节精度为10Hz。
频率和
占空比之间的调节彼此独立。
进行频率调节时,每次可以增加100Hz或10Hz,超过500Hz
时输出为50Hz的方波;进行占空比调节时,每次可增加1%或10%,超出100%时输出占空
比为0%方波。
总体看来,设计成果达到了设计要求。
输出方波的波形稳定,调节也较为简单。
六、结果分析
成都理工大学《电子系统设计》课程设计
12
七、源程序
#include
#defineucharunsignedchar
#defineuintunsignedint
floatfosc=12000000;//系统时钟频率
sbitKEY1=P1^0;//控制频率百位;
sbitKEY2=P1^1;//控制频率十位;
sbitKEY3=P1^2;//控制占空比十位;
sbitKEY4=P1^3;//控制占空比个位;
sbitOUTPUT=P2^0;//方波输出端口;
ucharzkb;
uintfreq;
ucharTIMER0_L,TIMER0_H,TIMER1_L,TIMER1_H;//定时器0和1的定时初值;
/****************************
延时子程序
****************************/
voiddelay(ucharn)//延时
{
uchari;
while(n--)
{for(i=255;i>0;i--)
{}
}}
成都理工大学《电子系统设计》课程设计
13
/*******************
系统初始化
*******************/
voidchushihua(void)
{
P1=0x0f;
freq=50;
zkb=50;
TIMER0_L=0xe0;
TIMER0_H=0xb1;
TIMER1_L=0xf0;
TIMER1_H=0xd8;
TL0=0xe0;//初始频率50Hz定时20ms
TH0=0xb1;
TL1=0xf0;//初始占空比50%定时10ms
TH1=0xd8;
TMOD=0x11;//定时器1和定时器0工作在方式1
IT0=1;//选择INT0为下降沿触发方式
EX0=1;//外部中断0允许
ET0=1;//定时器1和定时器0中断允许
ET1=1;
EA=1;//系统中断允许
TR0=1;//定时器1和定时器0开始定时
TR1=1;
}
/*********************
主函数
成都理工大学《电子系统设计》课程设计
14
*********************/
voidmain(void)
{
chushihua();//系统初始化
while
(1)
{}
}
/************************
定时器中断子程序
************************/
voidTimer0_freq()interrupt1//频率定时器0中断
{
TR1=1;//启动定时器1,占空比定时
TL0=TIMER0_L;
TH0=TIMER0_H;
OUTPUT=1;//输出高电平
}
voidTimer1_zkb()interrupt3//占空比定时器1中断
{
TR1=0;//定时器1停止
TL1=TIMER1_L;
TH1=TIMER1_H;
OUTPUT=0;//输出低电平
}
/***********************
键盘扫描子程序
成都理工大学《电子系统设计》课程设计
15
***********************/
voidkeyscan()interrupt0using1//外部中断0
{floatTF0,TZ1;
EX0=0;//关中断
delay(10);//延时消抖
if(P1!
=0x0f)//判断是否有键按下
{
if(KEY1==0)freq+=100;//按键为1号,频率加100
if(KEY2==0)freq+=10;//按键为2号,频率加10
if(freq>500)freq=50;//频率大于500Hz,重新赋值为50
if(KEY3==0)zkb+=10;//按键为3号,占空比加10
if(KEY4==0)zkb++;//按键为4号,占空比加1
if(zkb>100)zkb=1;//占空比大于100,重新赋值为0
TF0=(65536-fosc/(12.0*freq));//频率定时初值
TZ1=(65536-(fosc*zkb)/(12.0*100*freq));//占空比定时初值
TIMER0_H=(uint)TF0/256;
TIMER0_L=(uint)TF0%256;
TIMER1_H=(uint)TZ1/256;
TIMER1_L=(uint)TZ1%256;
}
P1=0x0f;//给键盘扫描口赋初值
EX0=1;//开中断
TR0=1;//定时器1和定时器0开始定时
TR1=1;}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 方波 发生器