《数控脉宽脉冲发生器剖析.doc》由会员分享,可在线阅读,更多相关《数控脉宽脉冲发生器剖析.doc(18页珍藏版)》请在三一办公上搜索。
1、目 录 一 摘要1 二 设计内容与指标 2 三 设计条件 2 四 设计分析 4 五 总体电路图10 六 心得体会11 七 参考文献13 八 附件14一 摘要:单片机集成度高、功能强、可靠性高、体积小、功耗低、使用方便、价格低廉等一系列优点,目前已经渗入到人们工作和生活的方方面面,几乎无处不在、无所不为。单片机的应用领域已经从面向工业控制、通讯、交通、智能仪表等迅速开展到家用消费产品、办公自动化、汽车电子、PC机外围一记网络通讯等广阔领域。 单片机有两种根本结构形式:一种是在通用微型计算机中广泛采用的,将程序存储器和数据存储器合用一个存储器空间的结构,成为普林斯机构。另一种是将程序存储器个数据存
2、储器截然分开、分别寻址的结构,一般需要较大的程序存储器,目前单片机以采用程序存储器截然分开的结构多。本课题讨论的占空比可调的信号发生器的核心是目前应用极为广泛的51系列单片机。 基于单片机的信号发生器的设计,该课题的设计目的是充分运用大学期间所学的专业知识,考察现在正在使用的信号发生器的根本功能,完成一个根本的实际系统的设计全过程。关键是这个实际系统设计的过程,在整个过程中我可以充分发挥自动化的专业知识。特别是这个信号发生器的设计中涉与到一个典型的控制过程。通过单片机控制一个有特殊功能的信号发生芯片,可以产生一系列有规律的幅度和频率可调的波形。这样一个信号发生器装置在控制领域有相当广泛的应用X
3、围。因为产生一系列的可调波形可以作为其他一些设备的数值输入,还可以应用与设备检测,仪器调试等场合。高频稳定的波形信号也可以用于无线电波的调频,解调。这些都是现代生活中必不可少的一些应用二 设计内容与指标:1. 设计一个可通过加/减控制键调整脉宽占空比的矩形脉冲信号发生器。2. 脉宽占空比调整X围为1%98%。3. 控制键分别设为“+、“-键,可分别加/减脉宽占空比,可控步长为1%。4. 具有2位占空比的数字显示。5. 输出信号的频率X围为1Hz20kHz。三 设计条件:课题任务系统整体功能要求: 数控脉宽脉冲信号发生器能够在脉宽控制键的控制下,按确定的步长改变,输出脉冲信号占空比,即使脉冲宽度
4、可调,同时以占空比的形式显示脉宽情况。系统结构要求: 数控脉宽脉冲信号发生器的系统结构框图如图1 所示,其中输入脉冲由外部信号源提供,脉冲宽度控制键用以选择输出信号的脉冲宽度,脉宽变换电路根据脉宽控制键产生要求的脉宽信号,占空比显示电路可显示输出信号f0 的占空比。3.3 使用的元器件元件名称规格与用途数量AT89c51单片机芯片1片CRTSTAL晶振1个CAPACITOR电容假如干OPTOELECTRONIC七段数码管2个BUTTON按键4个RESISTOR电阻假如干3.4 设计提示四:设计分析 1、时钟电路作用:晶振的作用是为系统提供根本的时钟信号。通常一个系统共用一个晶振,便于各局部保持
5、同步。有些通讯系统的基频和射频使用不同的晶振,而通过电子调整频率的方法保持同步。2、复位电路作用:计算机在启动运行时都需要复位,复位是使中央处理器CPU和内部其他部件处于一个确定的初始状态。3、按键控制作用:加/减控制键调整脉宽占空比。4、数码管显示作用:显示占空比。5、单片机最小系统单片机的最小系统是由组成单片机系统必需的一些元件构成的,除了单片机之外,还需要包括电源供电电路、时钟电路、复位电路。单片机最小系统电路单片机电源和地没有标出。单片机最小系统1、时钟电路单片机工作时,从取指令到译码再进展微操作,必须在时钟信号控制下才能有序地进展,时钟电路就是为单片机工作提供根本时钟的。单片机的时钟
6、信号通常有两种产生方式:内部时钟方式和外部时钟方式。内部时钟方式的原理电路如下列图。在单片机XTAL1和XTAL2引脚上跨接上一个晶振和两个稳频电容,可以与单片机片内的电路构成一个稳定的自激振荡器。晶振的取值X围一般为024MHz,常用的晶振频率有6MHz、12 MHz、11.0592 MHz、24 MHz等。一些新型的单片机还可以选择更高的频率。外接电容的作用是对振荡器进展频率微调,使振荡信号频率与晶振频率一致,同时起到稳定频率的作用,一般选用2030pF的瓷片电容。外部时钟方式如此是在单片机XTAL1引脚上外接一个稳定的时钟信号源,它一般适用于多片单片机同时工作的情况,使用同一时钟信号可以
7、保证单片机的工作同步。时序是单片机在执行指令时CPU发出的控制信号在时间上的先后顺序。AT89C51单片机的时序概念有4个,可用定时单位来说明,包括振荡周期、时钟周期、机器周期和指令周期。振荡周期:是片内振荡电路或片外为单片机提供的脉冲信号的周期。时序中1个振荡周期定义为1个节拍,用P表示。时钟周期:振荡脉冲送入内部时钟电路,由时钟电路对其二分频后输出的时钟脉冲周期称为时钟周期。时钟周期为振荡周期的2倍。时序中1个时钟周期定义为1个状态,用S表示。每个状态包括2个节拍,用P1、P2表示。机器周期:机器周期是单片机完成一个根本操作所需要的时间。一条指令的执行需要一个或几个机器周期。一个机器周期固
8、定的由6个状态S1S6组成。指令周期:执行一条指令所需要的时间称为指令周期。一般用指令执行所需机器周期数表示。AT89C51单片机多数指令的执行需要1个或2个机器周期,只有乘除两条指令的执行需要4个机器周期。了解了以上几个时序的概念后,我们就可以很快的计算出执行一条指令所需要的时间。例如:假如单片机使用12MHz的晶振频率,如此振荡周期=1/12MHz=1/12us,时钟周期=1/6us,机器周期=1us,执行一条单周期指令只需要1us,执行一条双周期指令如此需要2us。2、复位电路无论是在单片机刚开始接上电源时,还是运行过程中发生故障都需要复位。复位电路用于将单片机内部各电路的状态恢复到一个
9、确定的初始值,并从这个状态开始工作。单片机的复位条件:必须使其RST引脚上持续出现两个或以上机器周期的高电平。单片机的复位形式:上电复位、按键复位。五总体电路六心得体会1.总结:本设计完成题目所给的设计任务,设计了一台数控脉宽脉冲信号发生器,满足题目的根本要求和一局部扩展功能。信号发生器有性能可靠、精度高、电路简单的特点。缺点还是存在的,总体来说,本设计是成功的。在硬件实现之前,我先用仿真软件对电路进展仿真,仿真过程中,由于软件的某些原因有时会出现仿真不到正确结果,在仿真上面花费了很久的时间。而在硬件中并不存在该类错误。通过此次经历警告自己,电路设计时,不能一味的依赖仿真,仿真只是辅助,电路的
10、设计还是要硬件实现来发现问题,查找问题,解决问题。回顾起此次课程设计,至今我感慨颇多。确实,从查阅资料到电路设计,从理论学习到实践总结,在整整两个星期的日子里,可以说是苦多于甜,但是能学到好多东西,不仅可以巩固所学过的数电模电专业知识,而且学到了仿真软件的根本操作。通过这次课程设计,我懂得了理论与实践相结合的重要的,仅有理论的知识是远远不够的,只有把所学到的专业知识与实践结合起来,从实践中得出结论,才能真正的理解掌握理论知识,提高自己的实际动手能力和独立思考能力。在设计的过程中难免会遇到各种各样的问题,但是我们迎难而上,通过查资料和请教教师努力研究、解决问题;同时在分析测容原理与设计的过程中发
11、现自己的不足之处,如对以前学过的专业知识理解的不够深刻,掌握的不够结实,我们通过认真学习和掌握专业知识可以更好的完成课程设计。我们组四人依据分工,高效率的查询了大量资料,电路图是我们依据原理自行设计,然而结果却与理论上有不少出处,随着今后的学习我们也会继续将之改良。此次课程设计不仅进一步巩固了我们是对电子技术知识的学习也锻炼了我们的团队合作能力。七参考文献4.X瑞雪电子技术动手实践航空航天大学2007八附件#include #define uchar unsigned char#define uint unsigned intfloat fosc=12000000; /系统时钟频率sbit k
12、ey1=P10; /控制频率的增加sbit key2=P11; /控制频率的减少sbit key3=P12; /控制占空比的增加sbit key4=P13; /控制占空比的减少sbit clk=P14;uint zkb=50; /占空比初值,取值X围为1到99uint fre=50; /频率初值,取值X围为1到20000uint time0_H,time0_L,time1_H,time1_L;uint zkb_shi,zkb_ge; uchar table=0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F;void delayms(uint z
13、) uint i,j; for(i=z;i-;i0) for(j=110;j-;j0);void init() TMOD=0x11; /定时器0和1都工作在方式1 time0_H=0xB1; time0_L=0xE0; time1_H=0xD8; time1_L=0xF0; TH0=0xB1; /定时器0装入初值,计数器计数20000次,20ms TL0=0xE0; TH1=0xD8; /定时器1装入初值,计数器计数10000次,10ms TL1=0xF0; IT0=1; /外部中断0为边沿触发 EX0=1; /开外部中断0 ET0=1; /定时器T0中断允许 ET1=1; /定时器T1中断允
14、许 EA=1; /开启总中断 TR0=1; /开启定时器0 TR1=1; /开启定时器1 P0=0x3F; /数码管初始化显示占空比为50% P2=0x6D;void main() init(); while(1);void T0_time() interrupt 1 TR1=1; /开定时器1 TH0=time0_H; TL0=time0_L; clk=1;void T1_time() interrupt 3 TR1=0; /关定时器1 TH1=time1_H; TL1=time1_L; clk=0;void keyscan() interrupt 0 /外部中断0 float TX,TZ;
15、 EX0=0; /关中断 delayms(10); /延时消抖 if(P1!=0x0F) if(key1=0) fre=fre+10; if(fre20000) fre=1; if(key2=0) fre=fre-10; if(fre99) zkb=1; if(key4=0) zkb=zkb-1; if(zkb1) zkb=99; zkb_shi=zkb/10; /占空比数码显示 zkb_ge=zkb%10; P2=tablezkb_shi; P0=tablezkb_ge; TX=(65536-fosc/(12.0*fre); TZ=(65536-(fosc*zkb)/(12.0*100*fre); time0_H=(uint)TX/256; time0_L=(uint)TX%6; time1_H=(uint)TZ/256; time1_L=(uint)TZ%6; P1=0x0f; EX0=1; TR0=1; TR1=1;