单片机原理及接口技术课程设计报告设计题目:波形发生器学号:*********姓名:**指导教师:孙**信息与电气工程学院二零一五年六月波形发生器设计波形发生器作为一种常用的信号源,是现代测试领域内应用最为广泛的通用仪器之一。
在研制、生产、测试和维修各种电子元件、部件以及整机设备时,都学要有信号源,由它产生不同频率不同波形的电压、电流信号并加到被测器件或设备上,用其他仪器观察、测量被测仪器的输出响应,以分析确定它们的性能参数。
信号发生器是电子测量领域中最基本、应用最广泛的一类电子仪器。
它可以产生多种波形信号,如正弦波,三角波,方波等,因而广泛用于通信、雷达、导航、宇航等领域。
本系统利用单片机AT89C51采用程序设计方法产生锯齿波、正弦波、三角波三种波形,再通过D/A转换器DAC0832将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,通过键盘来控制三种波形的类型选择、频率变化,并通过LED显示其各自的周期。
本次关于产生不同低频信号的信号源的设计方案,不仅在理论和实践上都能满足实验的要求,而且具有很强的可行性。
该信号源的特点是:体积小、价格低廉、性能稳定、实现方便、功能齐全。
1. 设计任务结合实际情况,基于AT89C51单片机设计一个波形发生器。
该系统应满足的功能要求为:(1) 产生三种波形(三角波、锯齿波、正弦波);(2) 按键选择波形,加减键选择频率;(3) 在示波器中显示三种波形;(4) 在六位数码管上显示周期;主要硬件设备:单片机实验开发系统、AT89C51单片机、DAC数模转换芯电路、六位数码管(LED)、矩阵键盘、8155芯片、示波器。
2. 整体方案设计波形发生器系统以AT89C51单片机作为整个系统的控制核心,应用其强大的接口功能,构成整个波形发生器系统。
利用 AT89S52 单片机构造多功能信号发生器,可产生正弦波,方波,三角波,锯齿波四种波形,通过 C 语言对单片机的编程即可产生相应的波形信号,并可以通过键盘进行各种功能的转换和信号频率的控制,当输出的数字信号通过数模转换成模拟信号也就得到所需要的信号波形,通过运算放大器的放大输出波形,同时让显示器显示输出的波形信息。
(1)三角波产生思路首先,根据按键设定的波形频率,选择一个周期内合适的点数,根据点数和峰值计算相邻2个点的幅度的步进值,根据点数和频率设定相邻2点的时间值,计算出定时器的初值,然后,设置一个变量每进一次定时中断DA数据就加幅值步进,当等于总点数的一半时,每进一次定时中断就把DA数据减幅值步进直到DA数据为0,计数变量清零。
每进一次定时中断输出刷新DA的数据就可以产生一定频率和幅值的三角波。
(2)锯齿波产生思路首先,根据按键设定的波形频率,选择一个周期内合适的点数,根据点数和峰值计算相邻2个点的幅度的步进值,根据点数和频率设定相邻2点的时间值,计算出定时器的初值,然后,定时输出刷新DA的数据就可以产生一定频率和幅值的波形。
(3)正弦波产生思路首先,写一个表格,然后根据按键设定的波形频率,选择一个周期内合适的点数,根据点数和峰值计算相邻2个点的幅度的步进值,根据点数和频率设定相邻2点的时间值,计算出定时器的初值,然后,设置一个变量每进一次定时中断DA数据就加幅值步进,当等于总点数的一半时,每进一次定时中断就查表把DA数据减幅值步进直到DA数据为0,计数变量清零。
每进一次定时中断查表输出刷新DA的数据就可以产生一定频率和幅值的正弦波。
图2-1 系统的整体方案设计图本系统硬件主要由D/A转换器、显示系统、矩阵键盘等几部分组成。
各模块的主要功能如下:(1) D/A转换器的功能是把单片机输出的数字信号转换成0-5V的模拟信号。
(2) 显示系统中六位数码管显示波形频率,示波器显示波形。
(3) 矩阵键盘选择波形,增加减少频率。
3. 系统硬件电路设计3.1 时钟电路单片机的时钟信号通常用两种电路形式得到:内部振荡和外部振荡方式。
在引脚XTAL1 和 XTAL2 外接晶体振荡器,构成了内部振荡方式。
由于单片机内部有一个高增益的反相放大器,当外接晶振后,就构成了自激振荡,并产生振动时钟脉冲。
晶振通常选用 6MHZ、12MHZ、24MHZ。
本设计中时钟电路图如图3-1,我们选择了12MHZ和晶振分别接引脚XTAL1和XTAL2,电容 C1,C2 均选择为30pF,对振荡器的频率有稳定作用,当频率较大时,正弦波、三角波、锯齿波中每一点的延时时间为几微妙,故延时时间还要加上指令时间才能获得较大的频率波形。
单片机的时序单位振荡周期:晶振的振荡周期,又称时钟周期,为最小的时序单位。
机器周期:1个机器周期由12个振荡周期组成,是计算机执行一种基本操作的时间单位。
指令周期:执行一条指令所需的时间。
一个指令周期由1-4个机器周期组成,依据指令不同而不同.图3-1 时钟电路3.2 复位电路复位引脚 RST 通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,在每个机器周期的 S5P2,斯密特触发器的输出电平由复位电路采样一次,然后才能得到内部复位操作所需要的信号。
复位电路通常采用上电自动复位和按钮复位两种方式。
本设计选择了按键复位如图3-2,在系统运行时,按一下按键,就在 RST 断出现一段高电平,使器件复位。
此时 ALE、PSEN、P0、图3-2时钟电路图P1、P2、P4 输出高电平,RST 上输入返回低电平以后,变退出复位状态开始工作。
图3-2 复位电路单片机的复位操作使单片机进入初始化状态,其中包括使程序计数器PC=0000H,这表明程序从0000H地址单元开始执行。
单片机冷启动后,片内RAM 为随机值,运行中的复位操作不改变片内RAM区中的内容,21个特殊功能寄存器复位后的状态为确定值统复位是任何微机系统执行的第一步,使整个控制芯片回到默认的硬件状态下。
51单片机的复位是由RESET引脚来控制的,此引脚与高电平相接超过24个振荡周期后,51单片机即进入芯片内部复位状态,而且一直在此状态下等待,直到RESET引脚转为低电平后,才检查EA引脚是高电平或低电平,若为高电平则执行芯片内部的程序代码,若为低电平便会执行外部程序。
51单片机在系统复位时,将其内部的一些重要寄存器设置为特定的值,至于内部RAM内部的数据则不变。
3.3 数模转换电路DAC0832是8分辨率的D/A转换集成芯片。
与微处理器完全兼容。
这个DA 芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应用。
D/A转换器由8位输入锁存器、8位DAC寄存器、8位D/A转换电路及转换控制电路构成。
DAC0832的主要特性参数如下:1)分辨率为8位;2)电流稳定时间1us;3)可单缓冲、双缓冲或直接数字输入;4)只需在满量程下调整其线性度;5)单一电源供电(+5V~+15V);6)低功耗,200mW。
DAC0832的工作原理:利用8位D/A转换器DAC0808,可以将8位数字量转换成模拟量输出。
数字量输入的范围为0~255,对应的模拟量输出的范围在VREF-到VREF+之间。
根据这一特性,可以利用单片机的并行口输出的数字量,产生常用的波形。
DAC0832电路与单片机的接口电路如图3-3所示。
图3-3 DAC0832与单片机的接口电路3.4 运算放大电路图3-4 运算放大电路LM324的5管脚与DAC0832的(IOUT2)12管脚相连,LM324的6管脚与DAC0832的(IOUT1)11管脚相连,LM324的7管脚与DAC0832的REF(9)管脚相连.第一级运算放大器的作用是将DAC0832输出的电流信号转化为电压信号V1,第二级运算放大器的作用是将V1通过反向放大电路-(R2/R1)倍。
题目要求输出的电压在0-5V可调,而V1的电压大约是5V,所以R1选择5K的电阻,R2选择10K的电位器,这样最大的输出电压为5*(10/2)=10,最小电压为0,可以实现题目要求的0-5V。
3.5 矩阵键盘电路图3-5 矩阵键盘电路图中键盘独立键盘行引出的四根线接8155芯片的PC口,六根列线接8155芯片的PA口,采用线反转法扫描键盘,确定键位。
如图按键K1为频率加、K2为频率减,按键K4切换三角波,按键K5切换锯齿波,按键K6切换正弦波。
3.6 六位数码管(LED)显示电路图3-6 LED显示电路本设计选择了6位共阴极数码管如图3-6,它的6个发光二极管的阴极(二极管正端)连接在一起,通常公共阴极接低电平电平,其它管脚接段驱动电路输出端。
当某段驱动电路的输出端为低电平时,则该端所连接的字段导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。
此时,要求段驱动电路能吸收额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。
显示电路用于显示信号的频率,并且使系统能根据按键实时显示先关信息。
该系统中添加一个74LS241 锁存器,用于驱动数码显示管,使其更易于控制,增加显示的准确性。
数码管第三位用来显示波形信号的频率,频率是以100HZ 步进显示。
要使显示管显示不同的数字或者字符,需要使端口输出相应的字型码,显共阴极0 1 2 3 4 5 6 73FH 06H 5BH 4FH 66H 6DH 7DH 07H 8 9 A B C D E F7FH 6FH 77H 7CH 39H 5EH 79H 71H4. 系统程序设计4.1 主程序流程图图4-1 主流程图主程序首先将需要初始化的部分进行初始化,然后负责循环执行按键扫描,数码管显示、DA数据输出和示波器显示。
这些过程都是以模块化的程序实现的,程序中有,按键扫描程序、数码管扫描显示程序、定时器定时计算程序、查表程序和DA数据输出程序,通过调用这些程序完成波形的产生,幅值和频率的改变。
4.2 按键处理子程序流程图程序位于函数Scan-Key()和Shao-Key()中,函数位于主循环中,每循环一次调用一次,检测键盘是否按下,如果按下去延时抖动,然后检测到底是哪个按键按下,针对不同的按键按下采取不同的动作。
因为按键采用的是扫描法,故需要注意消抖的处理,在此用软件法去抖动即可。
软件法去抖动的实质是软件延时,即检测到某一键状态变化后延时一段时间,再检测该按键的状态是否保持着,如是则作为按键处理,否则,视为抖动,不予理睬。
去抖动的延时时间一般参考资料多描述为20ms左右,在实际应用中应大于20ms。
否则,会导致按一次多处理,影响程序正常执行。
图4-2 键盘控制程序流程图4.3 数码管输出子程序流程图图4-3 数码管子程序流程图数码管输出程序是送段选码和位选码的程序,位于主程序中。
轮流点亮6个数码管,每大约5ms变换一次,由于轮换的次数太快,由于视觉暂留效应,看上去是6个数码管看上去好像一直点亮。