两路相位可调方波信号发生器(最终版)
- 格式:doc
- 大小:1005.50 KB
- 文档页数:16
信号发生器课程设计报告HEN system office room 【HEN16H-HENS2AHENS8Q8-HENH1688】目录一、课题名称 (2)二、内容摘要 (2)三、设计目的 (2)四、设计内容及要求 (2)五、系统方案设计 (3)六、电路设计及原理分析 (4)七、电路仿真结果 (7)八、硬件设计及焊接测试 (8)九、故障的原因分析及解决方案 (11)十、课程设计总结及心得体会 (12)一、课题名称:函数信号发生器的设计二、内容摘要:函数信号发生器作为一种常用的信号源,是现代测试领域内应用最为广泛的通用仪器之一。
在研制、生产、测试和维修各种电子元件、部件以及整机设备时,都要有信号源,由它产生不同频率不同波形的电压、电流信号并加到被测器件或设备上,用其他仪器观察、测量被测仪器的输出响应,以分析确定它们的性能参数。
信号发生器是电子测量领域中最基本、应用最广泛的一类电子仪器。
它可以产生多种波形信号,如正弦波,三角波,方波等,因而此次课程设计旨在运用模拟电子技术知识来制作一个能同时输出正弦波、方波、三角波的信号发生器。
三、设计目的:1、进一步掌握模拟电子技术知识的理论知识,培养工程设计能力和综合分析能力、解决问题的能力。
2、基本掌握常用电子电路的一般设计方法,提高电子电路的设计和实验能力。
3、学会运用Multisim仿真软件对所做出来的理论设计进行仿真测试,并能进一步解决出现的基本问题,不断完善设计。
4、掌握常用元器件的识别和测试,熟悉万用表等常用仪表,了解电路调试的基本方法,提高实际电路的分析操作能力。
5、在仿真结果的基础上,实现实际电路。
四、设计内容及要求:1、要求完成原理设计并通过Multisim软件仿真部分(1)RC桥式正弦波产生电路,频率分别为300Hz、1KHz、10KHz、500KHz,输出幅值300mV~5V可调、负载1KΩ。
(2)占空比可调的矩形波电路,频率3KHz,占空比可调范围10%~90%,输出幅值3V、负载1KΩ。
• 204•信号发生器是电子技术中一种非常典型的应用电路。
本文以双通道运算放大器READ2302G 和双D 触发器HD74LS74为主要器件,设计了一种复合信号发生器,能够产生频率和幅值可调的方波、三角波和正弦波。
系统电路在Multisim 14环境下进行了仿真分析,并采用Altium Designer16完成了电路PCB 设计,电路板经过调试能够实现既定功能。
信号发生器又称为信号源或振荡器,即能产生测试信号的仪器或者电路。
随着电子技术的发展,信号发生器在生产生活和技术研究领域有着越来越广泛的应用。
如电子专业实践教学、工业自动控制、医学研究、家用电子产品等领域,往往都要用到信号发生器。
信号发生器的设计通常基于微控制器和集成运算放大器两种。
本设计基于集成运算放大器,选用了双通道集成运算放大器READ2302G 和双D 触发器芯片HD74LS74为主要器件,综合运用了振荡电路、运算电路、分频电路、滤波电路基本原理,合理设置了信号频率和幅度调节点,具有一定的典型性。
本设计通过电路仿真分析、PCB 设计、制板调试等环节,最终制作出可输出频率和幅度可调的方波、三角波和正弦波的电路板。
1 电路设计方案1.1 整体方案本设计主要采用双通道集成运放READ2302G 和双D 触发器HD74LS74实现。
总体设计框图如图1所示,第一模块利用READ2302G 构成电压比较电路产生方波信号V o1,第二模块利用双D 触发器HD74LS74对前面方波进行四分频产生信号V o2,第三模块利用积分电路将四分频方波转换成三角波信号V o3,第四模块利用同相加法电路将四分频方波和三角波进行叠加输出信号V o4,第五模块利用有源低通滤波电路将前面输出的叠加波形转换成正弦波V o5。
图1 复合信号发生器总体框图1.2 芯片介绍READ2302G 是Renesas 公司推出的一款输入和输出全范围的CMOS 双路运算放大器,采用8-TSSOP 封装,该芯片可以实现高驱动能力,具有低功耗、低输入失调电压、低输入复合信号发生器的设计东莞职业技术学院 熊丽萍偏置电流、宽输出电压范围和高压摆率等优异性能。
0703030223信号发⽣器(⽅波)正⽂信号发⽣器(⽅波)1 绪论1.1 设计背景数字信号处理器,也称DSP芯⽚,是针对数字信号处理需要⽽设计的⼀种具有特殊结构的微处理器,它是现代电⼦技术、相结合的产物。
⼀门主流技术,随着信息处理技术的飞速发展,计算机技术和数字信号处理技术数字信号处理技术逐渐发展成为它在电⼦信息、通信、软件⽆线电、⾃动控制、仪表技术、信息家电等⾼科技领域得到了越来越⼴泛的应⽤。
数字信号处理由于运算速度快,具有可编程特性和接⼝灵活的特点,使得它在许多电⼦产品的研制、开发和应⽤中,发挥着重要的作⽤。
采⽤DSP芯⽚来实现数字信号处理系统是当前发展的趋势。
1.2设计⽬的1.通过课程设计加深对DSP软件有关知识的学习与应⽤。
2.学习汇编语⾔并能熟练掌握与应⽤。
3.了解定时中断原理。
1.3设计任务1. 设计⼀个信号发⽣器(⽅波)。
2. 在XF引脚上输出任意频率的⽅波。
2 设计原理及分析2.1设计原理作为本设计的核⼼器件,DSP芯⽚的运算能⼒要求⽐较⾼,同时⼜存在运算过程中⼤量数据交换的特点。
⽅波信号发⽣器是信号中最常见的⼀种,它能输出⼀个幅度可调、频率可调的⽅波信号,在科学研究及⽣产实践中均有着⼴泛应⽤。
⽬前,常⽤的信号发⽣器绝⼤部分是由模拟电路构成的,当这种模拟信号发⽣器⽤于低频信号输出往往需要的RC值很⼤,这样不但参数准确度难以保证,⽽且体积⼤和功耗都很⼤,⽽由数字电路构成的低频信号发⽣器,虽然其低频性能好但体积较⼤,价格较贵,⽽本⽂借助DSP运算速度⾼,系统集成度强的优势设计的这种信号发⽣器,⽐以前的数字式信号发⽣器具有速度更快,且实现更加简便。
这⾥说明⼀下使⽤TI公司的DSP芯⽚TMS320C5502(以下简称5502)来产⽣⽅波信号的原理:由于产⽣⼀个⽅波信号需要有⼀个适合的定时器来重复产⽣⼀个与⽅波周期相同的计数周期,并⽤⼀个⽐较寄存器来保持调制值,因此,⽐较寄存器的值应不断与定时寄存器的值相⽐较,这样,当两个值相匹配时,就会在响应的输出上产⽣⼀个转换(从低到⾼或从⾼到低),从⽽产⽣输出脉冲,输出的开启(或关闭)时间与被调制的数值成正⽐,因此,改变调制数值,相关引脚上输出的脉冲信号的宽度也将随之改变。
西北民族大学电气工程学院课程设计说明书(2011/2012学年第二学期)课程名称:模电课程设计题目:正弦波发生器设计专业班级:10级自动化一班学生姓名:杨香林学号:P101813404指导教师:刘明华设计成绩:二〇一二年六月二十三日目录1.课程设计的目的2.课程设计内容2.1总体概述2.11 设计任务2.12 设计要求2.2系统方案分析2.3系统设计及仿真2.4硬件设计3.课程设计总结4.参考文献1、课程设计目的1.掌握电子系统的一般设计方法。
2.理解迟滞比较器的设计原理,掌握方波函数发生器的设计原理。
3.理解555定时器的工作原理,掌握多谐振荡器的设计原理。
4.熟练运用multisim仿真软件设计和仿真电路。
5.提高综合应用所学知识来指导实践的能力。
2、课程设计总文2.1总体概述2.11 设计任务使用集成运算放大器、稳压二极管、二极管、电阻等器件设计方波函数发生器。
2.12 设计要求1、根据技术要求和现有开发环境,分析课设题目;2、设计系统实现方案;3、要求占空比可调;输出电压:8V<|Vo|<15V;周期:2ms<T<10ms;4、通过multisim仿真软件进行仿真;5、记录仿真结果、修改并完善设计;6、编写课程设计报告和总结。
2.2系统方案分析迟滞比较器,是将集成运放比较器的输出电压通过反馈网络加到同相端,形成正反馈,如图2.21(a )所示,待比较电压I 加在反相输入端。
在理想情况下,它的比较特性如图2.11(b )所示。
由图可见,它有两个门限电压,分别称为上门限电压OHU 和下门限电压OLU ,两者的差值称为门限宽度。
图2.2(a )图2.2(b )设比较器输出高电平OHU ,则OH U 和refU 共同加到同相输入端的合成电压为ref2112121U R R R U R R R U OH +++=+当I ν由小增大地通过1+U 时,输出电压由OH U 下跃到OL U 。
目录1、设计原理与方法 (2)1.1、单片机系统概述 (2)1.2、80C51内部结构与引脚说明 (2)1.3、设计原理 (4)2、系统硬件线路设计图 (6)3、程序框图 (7)4、资源分配表 (8)5、源程序 (8)6、仿真结果 (12)7、性能分析 (14)8、总结与心得 (15)9、参考文献 (16)1、设计原理与方法1。
1、单片机系统概述单片机也被称为微控制器(Microcontroller Unit),常用英文字母的缩写MCU表示单片机,它最早是被用在工业控制领域。
单片机由芯片内仅有CPU的专用处理器发展而来。
最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。
INTEL的Z80是最早按照这种思想设计出的处理器,从此以后,单片机和专用处理器的发展便分道扬镳。
单片机比专用处理器更适合应用于嵌入式系统,因此它得到了最多的应用。
事实上单片机是世界上数量最多的计算机.现代人类生活中所用的几乎每件电子和机械产品中都会集成有单片机。
手机、电话、计算器、家用电器、电子玩具、掌上电脑以及鼠标等电脑配件中都配有1—2部单片机。
而个人电脑中也会有为数不少的单片机在工作.汽车上一般配备40多部单片机,复杂的工业控制系统上甚至可能有数百台单片机在同时工作!单片机的数量不仅远超过PC机和其他计算的总和,甚至比人类的数量还要多. 单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上.相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。
概括的讲:一块芯片就成了一台计算机。
它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。
同时,学习使用单片机是了解计算机原理与结构的最佳选择。
1。
2、80C51内部结构与引脚说明8051的CPU包含以下功能部件:(1)8位CPU。
(2)布尔代数处理器,具有位寻址能力。
方波信号发生器——07电子马路 0736065一:实验要求。
应用上面的DDS原理,设计一个产生方波的信号发生器,占空比可调。
二:实验电路及代码说明。
顶层文件为:方波的设计过程同正弦波的基本相同,只不过不在需要rom文件,即不在需要data_rom文件了,转而用一个8位的比较器代替之。
当DDS输出的相位值大于或是等于比较器的另一输入的8位信号值,则输出为一个8位的定值“10000000”,相反当小于该值时,输出为一定值“00000000”,把这8位的信号输入到DA的8个输入端,在示波器上即可观察出方波,其占空比随输入的8个按键的高低产生变化。
比较器元件符号如下:代码如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY CMP8B ISPORT(SET:IN STD_LOGIC_VECTOR(7 DOWNTO 0);DIN2:IN STD_LOGIC_VECTOR(7 DOWNTO 0);DOUT2:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END CMP8B;ARCHITECTURE ONE OF CMP8B IS为了便于观察方波的变化,这里把DDS 设置为固定频率,即相位输出为定值。
32位的高位:31~18位全零,低位:17~0位为全1。
占空比通过SET[7..0]信号调节。
时钟信号clk 用的是FPGA 芯片上的固有频率20M 。
三:仿真。
仿真时,为了提高仿真的效率,可以不加锁相环。
如下:仿真波形设置:仿真后的波形:BEGIN PROCESS(SET,DIN2) BEGIN IF DIN2>SET THEN DOUT2<="10000000"; ELSIF DIN2=SET THEN DOUT2<="10000000"; ELSE DOUT2<="00000000"; END IF; END PROCESS; END ONE;由仿真结果可知,产生了方波。
模拟电路课程设计报告设计课题:信号发生器设计班级:10通信工程三班学生姓名:陶冬波学号:2010550921指导教师:设计时间:目录一、信号发生器摘要--------------------3二、设计目的---------------------3三、设计内容和要求四、设计方案------------------------------------------34.1 RC桥式正弦波产生电路--------------------------------------3 4.2方波产生电路----------------------------------------------------6 4.3三角波产生电路-------------------------------------------------84.4多用信号发生器-------------------------------------------------9五、组装调试及元件清单---------------------------105.1 测试仪器---------------------------------------------------------10 5.2信号发生器元件清单-----------------------------------------------115.3调试中出现的故障、原因及排除方法----------------------11六、总结设计电路,改进措施----------------------116.1 正弦波产生电路改进措施--------------------------------------116.2多用信号发生器改进措施---------------------------------------11七、收获和体会-----------------------------------------12八、参考文献--------------------------------------------12信号发生器设计一、信号发生器设计摘要:本设计介绍了波形发生器的制作和设计过程,并根据输出波形特性研究该电路的可行性。
方波信号发生器原理
方波信号发生器是一种电子设备,用于产生方波形状的信号。
该设备的原理是基于周期性地改变输入信号的幅值来生成方波。
方波信号有两个离散的幅值级别,通常为高电平和低电平。
方波信号发生器的基本原理是通过一个可调电路来控制一个开关,使其周期性地切换输入信号的幅值。
当开关处于打开状态时,输入信号的幅值为高电平;当开关处于关闭状态时,输入信号的幅值为低电平。
具体实现方波信号发生器的方法有许多,其中一种常见的方法是使用集成电路,如555定时器。
555定时器是一种非常常用
的集成电路,可以用作方波信号发生器。
通过调整电路中的电阻和电容值,可以控制方波信号的频率和占空比。
另一种方法是使用数字信号处理器(DSP)或微控制器来生成
方波信号。
这些设备具有高度可编程性和灵活性,可以通过软件或代码来生成方波信号。
无论使用哪种方法,方波信号发生器的原理都是基于周期性地改变输入信号的幅值。
这种周期性切换产生了有规律的方波信号,可以在各种应用中使用,如实验室测量、音频设备和通信系统。
信号发生器<方波)1 绪论1.1 设计背景数字信号处理器,也称DSP芯片,是针对数字信号处理需要而设计的一种具有特殊结构的微处理器,它是现代电子技术、相结合的产物。
一门主流技术,随着信息处理技术的飞速发展,计算机技术和数字信号处理技术数字信号处理技术逐渐发展成为它在电子信息、通信、软件无线电、自动控制、仪表技术、信息家电等高科技领域得到了越来越广泛的应用。
数字信号处理因为运算速度快,具有可编程特性和接口灵活的特点,使得它在许多电子产品的研制、开发和应用中,发挥着重要的作用。
采用DSP芯片来实现数字信号处理系统是当前发展的趋势。
1.2设计目的1.通过课程设计加深对DSP软件有关知识的学习与应用。
2.学习汇编语言并能熟练掌握与应用。
3.了解定时中断原理。
1.3设计任务1. 设计一个信号发生器<方波)。
2. 在XF引脚上输出任意频率的方波。
2 设计原理及分析2.1设计原理作为本设计的核心器件,DSP芯片的运算能力要求比较高,同时又存在运算过程中大量数据交换的特点。
方波信号发生器是信号中最常见的一种,它能输出一个幅度可调、频率可调的方波信号,在科学研究及生产实践中均有着广泛应用。
目前,常用的信号发生器绝大部分是由模拟电路构成的,当这种模拟信号发生器用于低频信号输出往往需要的RC值很大,这样不但参数准确度难以保证,而且体积大和功耗都很大,而由数字电路构成的低频信号发生器,虽然其低频性能好但体积较大,价格较贵,而本文借助DSP运算速度高,系统集成度强的优势设计的这种信号发生器,比以前的数字式信号发生器具有速度更快,且实现更加简便。
这里说明一下使用TI公司的DSP芯片TMS320C5502<以下简称5502)来产生方波信号的原理:因为产生一个方波信号需要有一个适合的定时器来重复产生一个与方波周期相同的计数周期,并用一个比较寄存器来保持调制值,因此,比较寄存器的值应不断与定时寄存器的值相比较,这样,当两个值相匹配时,就会在响应的输出上产生一个转换<从低到高或从高到低),从而产生输出脉冲,输出的开启<或关闭)时间与被调制的数值成正比,因此,改变调制数值,相关引脚上输出的脉冲信号的宽度也将随之改变。
目录一、概述 (2)二、技术性能指标 (2)2.1设计内容及技术要求 (2)2.2设计目的 (3)2.3设计要求 (3)三、方案的选择 (3)3.1方案一 (4)3.2方案二 (5)3.3最终方案 (6)四、单元电路设计 (6)4.1矩形波产生电路 (6)4.2三角波产生电路 (9)4.3正弦波产生电路 (11)五、总电路图 (13)六、波形仿真结果 (13)6.1矩形波仿真结果 (13)6.2三角波仿真结果 (14)6.3正弦波仿真结果 (15)6.4三种波形同时仿真结果 (15)七、PCB版制作与调试 (16)结论 (17)总结与体会 (18)致谢 (18)附录1 元件清单 (19)附录2 参考文献 (20)函数信号发生器设计报告一、概述信号发生器又称信号源或振荡器,在生产实践和科技领域中有着广泛的应用。
各种波形曲线均可以用三角函数方程式来表示。
能够产生多种波形,如三角波、锯齿波、矩形波(含方波)、正弦波的电路被称为函数信号发生器。
函数信号发生器在电路实验和设备检测中具有十分广泛的用途。
例如在通信、广播、电视系统中,都需要射频(高频)发射,这里的射频波就是载波,把音频(低频)、视频信号或脉冲信号运载出去,就需要能够产生高频的振荡器。
在工业、农业、生物医学等领域内,如高频感应加热、熔炼、淬火、超声诊断、核磁共振成像等,都需要功率或大或小、频率或高或低的振荡器。
二、技术性能指标2.1设计内容及技术要求设计并制作一个信号发生器,具体要求如下:1、能够输出正弦波、方波、三角波;2、输出信号频率范围为1——10Hz,10——100Hz;3、输出信号幅值:方波Up-p=24V,三角波Up-p=0——20V,正弦波U>1V;4、波形特征:方波Tr<10s(100Hz,最大输出时),三角波失真系数THD<2%,正弦波失真系数THD<5%;5、电源:±13V直流电源供电;按照以上技术完成要求设计出电路,绘制电路图,对设计的电路用Multisim进行必要的仿真,用PROTEL软件进行制板、焊接,然后对制作的电路完成调试,撰写设计报告测,通过答辩。
/******************************************************************************主程序部分******************************************************************************/ #include<reg52.h>#include<intrins.h>#include<12864.h>#include<AD9850.h>#include<IR.h>#define uchar unsigned char#define uint unsigned intuchar h1[]={"CH1: Hz "};uchar h2[]={"CH2: Hz "};uchar h3[]={"Δφ: . ° "};uchar h4[]={"V1:2.3V V2:2.3V"};long int fa=1000,fb=1000,ph=0,f=0;//定义A、B通道初始频率,初始相位,频率中间变量long int ph_disp=0;//相位显示变量,实际相位增量为11.25时,控制字增量为8long int n=0;//Vol+或V ol-按下的次数,在相位显示时用uchar h=2;//定义行参数,初始显示为第二行bit H_ok=1;//行选择完成标志位bit Num_ok=1;//数字输入完成标志位bit Step_ok=1;//步进输入完成标志位bit Sel_ok=1;//选择成功标志位bit LCD_ok=1;//写LCD完成标志位bit AD9850_ok=1;//写AD9850完成标志位void change()//将实际数值在12864上显示进行要的处理{h1[7]='0'+fa/100000;h1[8]='0'+fa/10000%10;h1[9]='0'+fa/1000%10;h1[10]='0'+fa/100%10;h1[11]='0'+fa/10%10;h1[12]='0'+fa%10;if(h==1)if(Sel_ok==1) h1[15]='*';//显示当前所在行else h1[15]='-';//数字输入等待状态显示-else h1[15]=' ';//调整项不在此行显示为空h2[7]='0'+fb/100000;h2[8]='0'+fb/10000%10;h2[9]='0'+fb/1000%10;h2[10]='0'+fb/100%10;h2[11]='0'+fb/10%10;h2[12]='0'+fb%10;if(h==2)if(Sel_ok==1) h2[15]='*';else h2[15]='-';else h2[15]=' ';ph_disp=n*100*11.25;h3[6]='0'+ph_disp/10000;h3[7]='0'+ph_disp/1000%10;h3[8]='0'+ph_disp/100%10;h3[10]='0'+ph_disp/10%10;h3[11]='0'+ph_disp%10;if(h==3)if(Sel_ok==1) h3[15]='*';else h3[15]='-';else h3[15]=' ';}void LCD_Display()//12864整屏显示{change();DisplayListChar(0,0,h1);DisplayListChar(0,1,h2);DisplayListChar(0,2,h3);DisplayListChar(0,3,h4);}void H_sel()//行参数选择{switch(IRcord[2]){case 0x1b:h--;if(h<1) h=3;H_ok=1;break;//ch+ case 0x1f:h++;if(h>3) h=1;H_ok=1;break;//ch- default:break;}irpro_ok=0;}void Step_sel(void)//步进输入{switch(IRcord[2])//判断红外遥控用户码值{case 0x1a://*********************************vol+if(h==3) {ph+=8;if(ph>0xf8)ph=0;n++;if(n>31)n=0;Step_ok=1;}elseif(h==1){ph=0;n=0;fa++;if(fa>999999) fa=999999;Step_ok=1;}if(h==2){ph=0;n=0;fb++;if(fb>999999) fb=999999;Step_ok=1;}break;case 0x1e://**********************************vol-if(h==3) {ph-=8;if(ph<0)ph=0xf8;n--;if(n<0)n=31;Step_ok=1;}elseif(h==1){ph=0;n=0;fa--;if(fa<0) fa=0;Step_ok=1;}if(h==2){ph=0;n=0;fb--;if(fb<0) fb=0;Step_ok=1;}break;default:break;}irpro_ok=0;}void Num_sel()//数字输入,频率可直接数字输入,相位步进输入{switch(IRcord[2])//判断用户码值{case 0x01://****************************************1f=f*10+1;if(f>999999) f=0;Num_ok=0;Sel_ok=0;if(h==1){fa=f;ph=0;n=0;LCD_Display();}if(h==2){fb=f;ph=0;n=0;LCD_Display();}//if(h==3){if(f>255) f=0;ph=0;LCD_Display();}break;case 0x02://************************************2f=f*10+2;if(f>999999) f=0;Num_ok=0;Sel_ok=0;if(h==1){fa=f;ph=0;n=0;LCD_Display();}if(h==2){fb=f;ph=0;n=0;LCD_Display();}//if(h==3){if(f>255) f=0;ph=f;LCD_Display();}break;case 0x03://************************************3f=f*10+3;if(f>999999) f=0;Num_ok=0;Sel_ok=1;if(h==1){fa=f;ph=0;n=0;LCD_Display();}if(h==2){fb=f;ph=0;n=0;LCD_Display();}//if(h==3){if(f>255) f=0;ph=f;LCD_Display();} break;case 0x04://************************************4 f=f*10+4;if(f>999999) f=0;Num_ok=0;Sel_ok=0;if(h==1){fa=f;ph=0;n=0;LCD_Display();}if(h==2){fb=f;ph=0;n=0;LCD_Display();}//if(h==3){if(f>255) f=0;ph=f;LCD_Display();} break;case 0x05://************************************5 f=f*10+5;if(f>999999) f=0;Num_ok=0;Sel_ok=0;if(h==1){fa=f;ph=0;n=0;LCD_Display();}if(h==2){fb=f;ph=0;n=0;LCD_Display();}//if(h==3){if(f>255) f=0;ph=f;LCD_Display();} break;case 0x06://************************************6 f=f*10+6;if(f>999999) f=0;Num_ok=0;Sel_ok=0;if(h==1){fa=f;ph=0;n=0;LCD_Display();}if(h==2){fb=f;ph=0;n=0;LCD_Display();}//if(h==3){if(f>255) f=0;ph=f;LCD_Display();} break;case 0x07://************************************7 f=f*10+7;if(f>999999) f=0;Num_ok=0;Sel_ok=0;if(h==1){fa=f;ph=0;n=0;LCD_Display();}if(h==2){fb=f;ph=0;n=0;LCD_Display();}//if(h==3){if(f>255) f=0;ph=f;LCD_Display();} break;case 0x08://************************************8 f=f*10+8;if(f>999999) f=0;Num_ok=0;Sel_ok=0;if(h==1){fa=f;ph=0;n=0;LCD_Display();}if(h==2){fb=f;ph=0;n=0;LCD_Display();}//if(h==3){if(f>255) f=0;ph=f;LCD_Display();} break;case 0x09://************************************9 f=f*10+9;if(f>999999) f=0;Num_ok=0;Sel_ok=0;if(h==1){fa=f;ph=0;n=0;LCD_Display();}if(h==2){fb=f;ph=0;n=0;LCD_Display();}//if(h==3){if(f>255) f=0;ph=f;LCD_Display();} break;case 0x00://************************************0f=f*10;if(f>999999) f=0;Num_ok=0;Sel_ok=0;if(h==1){fa=f;ph=0;n=0;LCD_Display();}if(h==2){fb=f;ph=0;n=0;LCD_Display();}//if(h==3){if(f>255) f=0;ph=f;LCD_Display();} break;case 0x5c:Num_ok=1;break;//********************确定case 0x57:f=f/10;if(f>999999) f=0;//***************取消Num_ok=0;Sel_ok=0;if(h==1){fa=f;ph=0;n=0;LCD_Display();}if(h==2){fb=f;ph=0;n=0;LCD_Display();}break;default:break;}irpro_ok=0;}void Num_process()//数字输入处理{if(Num_ok==1){AD9850_ok=0;Reset_AD9850();Write_AD9850(ph,0x00,fa,fb);Sel_ok=1;f=0;AD9850_ok=1;}}void Step_process()//步进输入处理{if(Step_ok==1){AD9850_ok=0;Reset_AD9850();Write_AD9850(ph,0x00,fa,fb);AD9850_ok=1;}}void IR_process(void)//红外综合处理{if(irok)//如果红外信号接收好了进行红外数据处理{Ircordpro();irok=0;}if(irpro_ok)//如果红外数据处理好后进行其他工作处理{H_sel();Step_sel();Num_sel();}}void main(){Port_init();//端口初始化TIM0init();//定时器0初始化EX0init();//外部中断0初始化LCDInit();//12864初始化LCDClear();//12864清屏LCDClear();LCD_Display();//12864显示初始内容Reset_AD9850();//AD9850复位Reset_AD9850();//AD9850复位Write_AD9850(ph,0x00,fa,fb);//AD9850写初始数据delay_1ms(10);while(1){if( (Num_ok||Step_ok)||H_ok){LCD_Display();H_ok=0;Num_ok=0;Step_ok=0;}/*只有在各项输入选择完成后才更新显示内容避免12864因写数据时受其他影响而白屏*/IR_process();Num_process();Step_process();}}/*****************************************************12864显示部分(12864.h)*****************************************************/#include <reg52.h>sfr P4=0xe8;//STC89C52RC(TQFP封装)有P4口,入口地址为0xe8sbit LCD_RS = P4^0;sbit LCD_RW = P4^1;sbit LCD_E = P4^2;sbit LCD_PSB = P3^7;#define LCD_Data P2//12864数据口,并行传送#define BUSY 0x80 //12864忙信号ReadStatusLCD()//读12864状态{LCD_RS = 0;LCD_RW = 1;LCD_E = 0;LCD_Data = 0xFF;LCD_E = 1;while (LCD_Data & BUSY);LCD_E = 0;return(LCD_Data);}void WriteCommandLCD(unsigned char WCLCD,BusyC)//写指令{if (BusyC) ReadStatusLCD();LCD_Data = WCLCD;LCD_RS = 0;LCD_RW = 0;LCD_E = 1;LCD_E = 1;LCD_E = 1;LCD_E = 0;}void WriteDataLCD(unsigned char WDLCD)//写数据{ReadStatusLCD(); //busy testLCD_RS = 1;LCD_RW = 0;LCD_Data = WDLCD;LCD_E = 1;LCD_E = 0;LCD_E = 0;LCD_E = 1;}void LCDClear(void)//清屏{WriteCommandLCD(0x01,1); //显示清屏WriteCommandLCD(0x34,1); //显示光标移动设置WriteCommandLCD(0x30,1); //显示开及光标设置}//显示一行字符,起始坐标为(X,Y)void DisplayListChar(unsigned char X, unsigned char Y, unsigned char *DData) {switch(Y){case 0:Y =0X80;break; //根据行数来选择相应地址case 1:Y=0X90;break;case 2:Y=0X88;break;case 3:Y=0X98;break;}WriteCommandLCD( Y+X , 1); //这里不检测忙信号,发送地址码X = X*2;Y = 0;while ( DData[Y] != 0 ) //若到达字符串尾则退出{if (X <= 0x0F) //X坐标应小于0xF{WriteDataLCD(DData[Y]);X++;Y++;//Delay5Ms();}else break;}}/****************************************************38KHz红外接收头部分(IR.h)东芝TC9012编码****************************************************/#include<reg52.h>#include<stdio.h>#include<intrins.h>#define TURE 1#define FALSE 0#define uchar unsigned char#define uint unsigned intsbit IR=P3^2; //红外接口,使用外部中断0unsigned char irtime;//红外用全局变量bit irok,irpro_ok;//红外接收成功标志,红外处理完毕标志unsigned char IRcord[4];32位数据码,共4个字节unsigned char irdata[33];//每个电平的持续时间void Ir_work(void);void Ircordpro(void);void tim0_isr (void) interrupt 1 using 1//定时器0中断服务函数{irtime++; //用于计数2个下降沿之间的时间}void ex0_isr (void) interrupt 0 using 0//外部中断0服务函数{static unsigned char i; //接收红外信号处理static bit startflag; //是否开始处理标志位if(startflag){if(irtime<63&&irtime>=33)//引导码TC9012的头码,9ms+4.5msi=0;irdata[i]=irtime;//存储每个电平的持续时间,用于以后判断是0还是1irtime=0;i++;if(i==33){irok=1;i=0;}}else{irtime=0;startflag=1;}}void TIM0init(void)//定时器0初始化{TMOD=0x02;//定时器0工作方式2,TH0是重装值,TL0是初值TH0=0x00; //重载值TL0=0x00; //初始化值ET0=1; //开中断TR0=1;}void EX0init(void){IT0 = 1; //外部中断0下降沿触发EX0 = 1; //使能外部中断EA = 1; //开总中断}void Ircordpro(void)//红外码值处理函数{unsigned char i, j, k;unsigned char cord,value;k=1;for(i=0;i<4;i++) //处理4个字节{for(j=1;j<=8;j++) //处理1个字节8位{cord=irdata[k];if(cord>7)//大于7值为1,和晶振有关系,12M{value=value|0x80;}else{value=value;}if(j<8){value=value>>1;}k++;}IRcord[i]=value;value=0;} irpro_ok=1;//处理完毕标志位置1}void Port_init()//端口初始化{P0=0xff;P1=0xff;P2=0xff;P3=0xff;}/***********************************************AD9850部分(AD9850.h)时钟源为12M有源晶振***********************************************/#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int#define Data__A P0//数据口,并行模式#define Data__B P1sbit WCLK_A= P3^0;//控制字装载时钟sbit FQUD_A= P3^1;//频率更新sbit REST_A= P3^3;//复位sbit WCLK_B= P3^4;sbit FQUD_B= P3^5;sbit REST_B= P3^6;/********************************AD9850的40位控制字(5字节)第一字节:高5位为相位控制字,低三位为电源和其他控制字,低3位一般取000********************************/uchar word_a[5]={0x00,0x00,0x00,0x00,0x00};uchar word_b[5]={0x00,0x00,0x00,0x00,0x00};void CHF_A(unsigned long int a)//将想要的频率和相位转为40位控制字{unsigned long int j;j=357.9139413*a; //a是A通道要输出的频率值,单位Hz,12M除以2的32次方等于357.9139413word_a[1]=j>>24;word_a[2]=j>>16;word_a[3]=j>>8;word_a[4]=j;}void CHF_B(unsigned long int b){unsigned long int k;k=357.9139413*b; //b是B通道要输出的频率值,单位Hzword_b[1]=k>>24;word_b[2]=k>>16;word_b[3]=k>>8;word_b[4]=k;}void delay_1ms(uint t){uint i,j;for(i=0;i<t;i++)for(j=0;j<120;j++);}void Reset_AD9850()//复位,并行模式{WCLK_A=0;WCLK_B=0;FQUD_A=0;FQUD_B=0;REST_A=0;REST_B=0;REST_A=1;REST_B=1;REST_A=0;REST_B=0;}//以并行方式同时向两个AD9850写控制字void Write_AD9850(uchar PH_A,uchar PH_B,unsigned long int FQ_A,unsigned long int FQ_B) {uint i;REST_A=1;REST_B=1;delay_1ms(100);WCLK_A=0;WCLK_B=0;FQUD_A=0;FQUD_B=0;REST_A=1;REST_B=1;CHF_A(FQ_A);CHF_B(FQ_B);word_a[0]=PH_A;word_b[0]=PH_B;for(i=0;i<5;i++){Data__A=word_a[i];Data__B=word_b[i];WCLK_A=1;_nop_();WCLK_B=1;_nop_();WCLK_A=0;_nop_();WCLK_B=0;_nop_();}FQUD_A=0;_nop_();FQUD_B=0;_nop_();FQUD_A=1;_nop_();FQUD_B=1;_nop_();Data__A=0x00;Data__B=0x00;}。
频率可调的方波信号发生器设计及电路用单片机产生频率可调的方波信号。
输出方波的频率范围为1Hz-200Hz,频率误差比小于0.5%。
要求用“增加”、“减小”2个按钮改变方波给定频率,按钮每按下一次,给定频率改变的步进步长为1Hz,当按钮持续按下的时间超过2秒后,给定频率以10次/秒的速度连续增加(减少),输出方波的频率要求在数码管上显示。
用输出方波控制一个发光二极管的显示,用示波器观察方波波形。
开机默认输出频率为5 Hz。
3.5.1模块1:系统设计(1)分析任务要求,写出系统整体设计思路任务分析:方波信号的产生实质上就是在定时器溢出中断次数达到规定次数时,将输出I/O管脚的状态取反。
由于频率范围最高为200Hz,即每个周期为5ms(占空比1:1,即高电平2.5ms,低电平2.5 m s),因此,定时器可以工作在8位自动装载的工作模式。
涉及以下几个方面的问题:按键的扫描、功能键的处理、计时功能以及数码管动态扫描显示等。
问题的难点在按键连续按下超过2S的计时问题,如何实现计时功能。
系统的整体思路:主程序在初始化变量和寄存器之后,扫描按键,根据按键的情况执行相应的功能,然后在数码显示频率的值,显示完成后再回到按键扫描,如此反复执行。
中断程序负责方波的产生、按键连续按下超过2S后频率值以10Hz/s递增(递减)。
(2)选择单片机型号和所需外围器件型号,设计单片机硬件电路原理图采用MCS51系列单片机At89S51作为主控制器,外围电路器件包括数码管驱动、独立式键盘、方波脉冲输出以及发光二极管的显示等。
数码管驱动采用2个四联共阴极数码管显示,由于单片机驱动能力有限,采用74HC244作为数码管的驱动。
在74HC244的7段码输出线上串联100欧姆电阻起限流作用。
独立式按键使用上提拉电路与电源连接,在没有键按下时,输出高电平。
发光二极管串联500欧姆电阻再接到电源上,当输入为低电平时,发光二极管导通发光。
图3-14 方波信号发生器的硬件电路原理图(3)分析软件任务要求,写出程序设计思路,分配单片机内部资源,画出程序流程图软件任务要求包括按键扫描、定时器的控制、按键连续按下的判断和计时、数码管的动态显示。
目录1、设计原理与方法 (2)1.1、单片机系统概述 (2)1.2、80C51内部结构与引脚说明 (2)1.3、设计原理 (4)2、系统硬件线路设计图 (6)3、程序框图 (7)4、资源分配表 (8)5、源程序 (8)6、仿真结果 (12)7、性能分析 (14)8、总结与心得 (15)9、参考文献 (16)1、设计原理与方法1.1、单片机系统概述单片机也被称为微控制器(Microcontroller Unit),常用英文字母的缩写MCU表示单片机,它最早是被用在工业控制领域。
单片机由芯片内仅有CPU的专用处理器发展而来。
最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。
INTEL的Z80是最早按照这种思想设计出的处理器,从此以后,单片机和专用处理器的发展便分道扬镳。
单片机比专用处理器更适合应用于嵌入式系统,因此它得到了最多的应用。
事实上单片机是世界上数量最多的计算机。
现代人类生活中所用的几乎每件电子和机械产品中都会集成有单片机。
手机、电话、计算器、家用电器、电子玩具、掌上电脑以及鼠标等电脑配件中都配有1-2部单片机。
而个人电脑中也会有为数不少的单片机在工作。
汽车上一般配备40多部单片机,复杂的工业控制系统上甚至可能有数百台单片机在同时工作!单片机的数量不仅远超过PC机和其他计算的总和,甚至比人类的数量还要多。
单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。
概括的讲:一块芯片就成了一台计算机。
它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。
同时,学习使用单片机是了解计算机原理与结构的最佳选择。
1.2、80C51内部结构与引脚说明8051的CPU包含以下功能部件:(1)8位CPU。
(2)布尔代数处理器,具有位寻址能力。
(3)128B内部RAM数据存储器,21个专用寄存器。
(4)4KB内部掩膜ROM程序存储器。
(5)2个16位可编程定时器/计数器。
(6)32位(4×8位)双向可独立寻址的I/O口。
(7)1个全双工UART(异步串行通信口)。
(8)5个中断源、两级中断优先级的中断控制器。
(9)时钟电路,外接晶振和电容可产生1.2MHz~12 MHz的时钟频率。
(10)外部程序/数据存储器寻址空间均为64KB。
(11)111条指令,大部分为单字节指令。
(12)单一+5V电源供电,双列直插40引脚DIP封装。
MCS-51单片机中有两个16位的定时器/计数器T0和T1,它们由4个8位寄存器(TL0, TH0, TL1和TH1)组成,2个16位定时器/计数器是完全独立的。
可以单独对这4个寄存器进行寻址,但不能把T0和T1当做16位寄存器来使用。
具体结构框图如下:MCS-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。
其引脚图如图所示。
下面,我们将对一些本次试验用到的引脚,加以说明Pin9:RESET/V pd复位信号复用脚,当80C51通电,时钟电路开始工作,在RESET引脚上出现24个时钟周期以上的高电平,系统即初始复位。
初始化后,程序计数器PC指向0000H,P0-P3输出口全部为高电平,堆栈指针写入07H,其它专用寄存器被清“0”。
RESET由高电平下降为低电平后,系统即从0000H地址开始执行程序。
然而,初始复位不改变RAM(包括工作寄存器R0-R7)的状态,80C51的初始态。
程序存储器的内外部选通线,8051和8751单片机,内置有4kB的程序存储器,Pin31:EA/Vpp当EA为高电平并且程序地址小于4kB时,读取内部程序存储器指令数据,而超过4kB地址则读取外部指令数据。
如EA为低电平,则不管地址大小,一律读取外部程序存储器指令。
显然,对内部无程序存储器的8031,EA端必须接地。
1.3、设计原理说明本次设计的目的是实现两路相位可调的方波信号发生器。
通过对51单片机工作原理的学习,设计如下:选用51单片机中的T0和T1两个定时器,对于两路输出信号P0.0和P0.1分别进行控制,通过定时器的定时计数功能,调整电平变化,产生方波采取改变两个定时计数器计数初值的手段,改变方波电平产生的延时时间,从而改变方波频率(本次设计中方波占空比为1)将P1.0设为调频端口,将P1.1设为调相端口。
通过更改P0.1端口定时中断中加入输出方波前的独立延时时间,使两个波形之间产生相位差,相位差的步进值为45°2、系统硬件线路设计图3.程序框图调频按键TF1开始 设定计数器初值和相应的定时脉冲个数设定定时器T0和T1的工作方式为方式一,并打开定时中断依设定的计数初值开始计数溢出 N 输出电平取反并重新给计数器赋初值 YN 将计数器初值减小,改变频率,输出方波 调频按键TF2Y 以18°步进值改变相位N 返回将计数器初值增大,改变频调相键tp 按下 N Y4、资源分配表以下是本设计单片机80C51的系统资源分配:P1.0调整频率步进值+1按键P1.1调整频率步进值-1按键P1.1调整相位按键P0.0第一路方波输出端(定时中断入口0BH)P0.1第二路方波输出端(定时中断入口1BH)T0控制P0.0的方波输出T1控制P0.1的方波输出XTAL1与XTAL2接外部晶振,频率为12MHZ5.源程序ORG 0000HAJMP STARTORG 000BHAJMP BRK0ORG 001BHAJMP BRK1ORG 0030HSTART:MOV R0,#3CH ;设定定时器的初值MOV R1,#0B0HMOV R2,#0C3H ;相应的脉冲个数MOV R3,#50HMAIN:SETB P0.0SETB P0.1MOV TMOD,#11H ;设定T0、T1均工作于方式1 MOV TH0,R0 ;设定T0初值MOV TH1,R0 ;设定T1初值MOV TL1,R1SETB TR1 ;启动T1工作SETB EASETB TR0 ;启动T0工作SETB ET0 ;允许T0中断WAIT:JNB P1.0,TF1 ;等待调频按键的操作JNB P1.1,TF2 ;等待调频按键的操作JNB P1.2,TP ;等待调相按键的操作LJMP WAITTP:MOV R4,#16HDL1: MOV R6,#16HDJNZ R6,$DJNZ R4,DL1MOV R7,#01HLJMP WAITTF1: ;步进值为+1Hz的调频程序 JNB P1.0,$MOV A,R3CLR CSUBB A,#88HMOV R3,ACPL AMOV R1,A ;调频后的计数器初值低八位MOV A,R2SUBB A,#13HCLR CCPL AMOV R0,A ;调频后的计数器初值高八位MOV TH1,R0 ;重新给计数器赋初值MOV TL1,R1MOV TH0,R0MOV TL0,R1LJMP WAITTF2: ;步进值为-1Hz的调频程序 JNB P1.0,$MOV A,R3CLR CADDC A,#88HMOV R3,ACPL AMOV R1,A ;调频后的计数器初值低八位MOV A,R2ADDC A,#13HMOV R2,ACLR CCPL AMOV R0,A ;调频后的计数器初值高八位MOV TH1,R0 ;重新给计数器赋初值MOV TL1,R1MOV TH0,R0MOV TL0,R1LJMP WAITBRK0: ;T0中断程序入口SETB ET1CPL P0.0MOV TH0,R0MOV TL0,R1RETIBRK1: ;T1中断程序入口CJNE R7,#01H ,XXCALL CF ;若R7为1,则调用调相程序XX:CPL P0.1MOV TH1,R0MOV TL1,R1RETICF:MOV R4,#16HDL2: MOV R6,#16HDJNZ R6,$DJNZ R4,DL2CPL P0.1DEC R7 ;将R7位清零RET ;返回定时中断程序6.protuse软件仿真初始波形调频步进值+1调频步进值-1调相波形7、性能分析本次设计所实现的功能如下:通过定时计数器,产生双输出同步,占空比为1的方波通过更改计数器的初值,产生倍频效果,调节频率变化,实现频率可控通过对T1定时计数器的设置,对其进行相位延时,从而产生步进值为18°的相位差,实现相位差可控综上可知,本次设计基本实现了两路相位可调方波信号发生器的功能,尚待完善的功能如下:频率的步进变化,而非倍频效果对于相位差的步进,采用的是更改计数初值的办法来是第二个波形产生单独延时,所以对于改变后的频率不再是以18°为步进值改变。
8、总结与心得这次单片机课程设计,我要求的题目是两路相位可调方波信号发生器,从找资源,到查阅书籍,到咨询同学,再到完成设计,大概用时一个星期左右。
通过单片机课程设计,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。
创新,是要我们学会将理论很好地联系实际,并不断地去开动自己的大脑,从为人类造福的意愿出发,做自己力所能及的,别人却没想到的事。
使之不断地战胜别人,超越前人。
同时,更重要的是,我在这一设计过程中,学会了坚持不懈,不轻易言弃。
设计过程,也好比是我们人类成长的历程,常有一些不如意,也许这就是在对我们提出了挑战,勇敢过,也战胜了,胜利的钟声也就一定会为我们而敲响。
这个设计过程中,我遇到过许多次失败的考验,就比如,在实现频率步进值的时候,由于是采用计数初值的办法,所以不能完全按照标准的步进频率进行步进,调相也遇到了同样的问题,由于是按照步进初值的办法,所以调相也出现了缺点,他只能在初始频率上标准的按步进值变化,但是一旦改变了频率,他的步进值就会不再是18°了,对于答辩老师的意见,我觉得对计数进行跟踪确实是个好的办法,这样就能完全符合客户的要求了。
总之,这次课程设计我付出不少,但是我同样收获很多。
9、参考文献张义和王敏男许宏昌,《例说51单片机》,人民邮电出版社,2008李群芳张士军黄建,《单片微型计算机与接口技术》,电子工业出版社,2008 王守中聂元铭,《51单片机开发入门与典型实例》,人民邮电出版社,2009周兴华,《手把手教你学单片机》,北京航空航天大学出版社,2007。