第一篇:简易信号发生器设计
《单片机原理及应用》课程设计任务书 课程设计题目:简易信号发生器设计
一、设计目的和要求
(一)、设计目的通过设计简易信号发生器,完成系统设计、编码、调试及维护工作的实践,了解单片机应用系统的一般设计思路,熟悉和掌握硬件系统和软件设计的一般方法。
(二)、设计要求
1.设定功能:能通过按键设定信号类型、频率
2.显示功能:通过数码管或液晶显示当前波形类型和频率。
3.计数功能:能设定自动输出多少个周期该波形后停止输出,直到再次按下触发按钮
二、设计内容及步骤
1.系统分析,完成系统分析报告
2.根据的系统结构图、课程实验,查阅资料,确定系统各个模块的译码电路和地址范围以及其它硬件型号,详细画出系统硬件原理图。
3.程序流程图,编制程序。
4.调试修改显示子模块、键盘扫描子模块、定时器中断子模块和主程序
5.编写课程设计报告
内容包括:题目、摘要、目录、正文、结论、致谢、参考文献等。学生在完成上述全部工作之后,应将全部内容以先后顺序写成设计报告一份,阐述整个设计内容,要求重点突出、特色鲜明、语言简练、文字通畅,字迹工整。报告要求在专用报告书上书写。
6.完成课程设计报告,设计报告字数不得少于3000 字撰写要求如下: ·设计任务
·问题定义、理论分析
·理论设计(程序功能结构、算法说明和程序框图)
·上机调试(实验环境、实验说明和程序清单)
·结果分析
·心得体会
三、进度安排
按教学计划规定,单片机原理及应用课程设计总学时为一周,其进度及时间大致分配如下:
序号 设计内容天数(约占比例)查阅资料(约占8%)确定设计思路(约占15%)画出硬件图、确定各个模块的电路实现方法(约占27%)编写程序(约占25%)调试修改各子模块和主程序(约占15%)总结设计过程,编写课程设计报告1(约占10%)
第二篇:简易正弦信号发生器的设计
实验六 简易正弦信号发生器的设计
一、实验目的1.进一步熟悉Quatus软件的使用方法;
2.掌握逻辑分析仪的使用方法;
3.掌握LPM-ROM的使用方法;
二、实验内容
定制LPM-ROM模块,并利用其设计一个简易的正弦信号发生器,该信号发生器由以下三部分组成:
(1)计数器或地址信号发生器;
(2)正弦信号数据存储器ROM(6位地址线,8位数据线),含有128个8位波形数据(一个正弦波形周期)。
(3)VHDL顶层程序设计
注意:本实验中未给正弦信号波形接D/A转换器,因而采用逻辑分析仪进行观察,具体观察方法见教材208页。
本实验中待测信号为ar和q。时钟选择clk;时能信号为en,高电平触发。
三、实验记录
1.VHDL语言程序
2.仿真波形
3.逻辑分析仪观察结果。
四、问题讨论
1.总结宏功能模块的应用环境,可实现哪些设计?
2.设计一个方波生成器。
第三篇:简易函数信号发生器设计.doc
摘 要
本方案主要用集成运放LM324和74HC04等元器件设计组成一个简易函数信号发生器。该函数信号发生器主要由振荡电路、模拟比较器电路、二阶RC有源低通滤波器电路和反相放大器电路等四部份组成。
振荡电路形成方波,再经模拟比较器电路升高幅度完成输出;二阶RC有源低通滤波器电路形成正弦波,再经过电位器实现1~12V可调。由此构成了一个简易的函数信号发生器。
本实验主要通过使用Orcad、DXP软件等完成电路的软件设计。
目 录 方案比较与选择(须详细阐述创新点或新见解)························· 3 2 电路分析与仿真················································································ 5 3电路板制作、焊接、调试 ······························································· 11 3.1 软件制作 ················································································ 11 3.2 硬件制作 ················································································ 13 3.3 电路板调试 ··········································································· 14 4讨论及进一步研究建议 ··································································· 18 5课程设计心得 ·················································································· 18 6 Abstract ····························································································· 19 7参考文献 ·························································································· 20
一、方案分析:
方案一:
方案
二、R3U1A1274HCT04R2R165k6.5kC150nvoR5210kLM324-1U2A274HCT043voVCC310k10kVCC1U3A+V+4R40OUTV-1R620kvo1VCC211R7C2100nR8vo11k1kC3R93VCC1U4A41k0V++OUT-V-1vo2C4vo3R1210kR13vo310kR14210kLM3243VCC1U7A+4V+0100n2LM324100nOUT-V-1Vo4VCC211R100VCC2R172kR112kVCC1VCC2V2-9Vdc5VdcVCC3V340k0R16112k009VdcV10
以上就是我们所查阅到的两个方案,对于方案一,此方案对比方案二,增加了由方波转 变为三角波部分,而且使用电位器来分压,方波--三角波部分主要是同一个积分器和一 个比较器组成的.积分器部分中的RC可以调整三角波的频率,而比较器部分可以调整三角
波的幅值,理论上存在很大的优越性,但经过仿真,却发现输出波形失真较大,跟理论有较大差别,而反复调试后没能改正,于是转向执行方案二,方案二虽然少了三角波部分,但经仿真,输出波形比较接近理想正弦波,而且此方案简单明了,各部分功能清晰,更易于操作。故最终选择方案二。
二、电路分析与仿真
1、多谐振荡器
由CMOS门电路组成的多谐振荡器主要是利用RC电路的充放电特性来实现,以获得所需要的振荡频率.方波电路图
0—5v仿真图如下
参数确定:
因为VDD=5V,74HCT04的输入高电平为3.5V,所以对于第一暂稳态(电压为0时)T1=R2*C1*㏑[VDD/(VDD-Vth)],第二暂稳态T2=R2*C1*㏑(VDD/Vth),T=T1+T2≈R2*C1*㏑4≈1.4*RC.又由f=1KHZ,f=1/T得,f=1/(1.4R2*C1).设C1=100nF,则可求得R2≈7.2K.2、比较器
比较器主要由LM324构成,VCC3=5V,R3=R4=10K,起到分压作用,因此3脚的电压为2.5V,当0—5V方波由2脚进入时,高于2.5V时1脚输出+5V,低于2.5V时1脚输出-5V,因此得到±5V方波.参数选择适合的即可.比较器
±9v仿真图
3、二阶低通滤波器
二阶低通滤波器由LM324和R,C组成,设置它的频率为1.5KHZ,则它的功能是从0到1.5KHZ的低频信号,而对大于1.5KHZ的所有频率则完全衰减.C4作用是过滤正弦波里的直流电压.参数确定:
f=1/(2*3.14*RC)=1.5KHZ,设C=100nF,则可求得R≈1K.因为增益A=1+R10/R11=2,所以取R10=R11=2K.二阶低通滤波器电路图
仿真图
4、反相比例放大器
对上述滤波器得到的正弦波进行放大或缩小,因为vo4=-(R16/R14)*vo3,所以R16/R14比例变化,vo4峰峰值就能由1伏调至12伏。
反相比例放大器电路图
仿真图
幅频响应
相频响应
三、板制作、焊接、调试 3.1、软件制作
1、绘制原理图
1).打开DXP软件,选择FILE,NEW,PCB PROJECT,新建一个项目文件,保存新建的项目文件,在项目文件中新建原理图文件和PCB文件,保存新建的原理图文件和PCB文件。
2).画出下面的原理图(图3.1)。
图3.1
3).双击各元件,更改数值,并通过【Tools】菜单【Annotate】命令来自动编号,校正原理图。
2、生成PCB图
1).在KEEP-OUT LAYER 层画出电气边界,在Mechanicall层画出机械边界。
2).原理图的元器件连接表的载入,打开原理图,打开【Design】菜单中的【Update pcb document„】命令,将PCB导入到PCB文件中。3).元器件布局,按照走线最短的原则放置元件的位置。
4).设定布线规则,步骤是在电气边界内部右击,选择【Design】/[Rules„]打开设置对话框设置相应的选项。
5).布线:先设定为制作单层板,然后使用【Auto Route】菜单中的【All】进行自动布线,打开对话框后,点击右下角的Route All按钮即可。但自动布线一般是不能达到最佳效果的,所以自动布线只是有一个大概的模型,之后还要经过手工调整才能达到想要的效果。
6)、最后做成PCB图如下所示:
3、在DXP中遇到的问题:
1)、布线没有调整线的宽度,用默认的0.25mm的线,但有些同学改为了0.5mm的线打印出来还是很细,这样腐蚀的时候就有可能断掉,所以我们最后又重新把每一根线改为了1mm。
2)、画图的时候没有注意焊盘的大小,虽然打印之前有逐一加大,但由于一开始没有考虑到线与焊盘之间的关系,以至于有些线与焊盘靠得太近,所以不能改太大,所以最后打印出来有些焊盘还是偏小。
3)、没有注意元器件的封装问题。我们一开始电容用的封装是RAD0.3,这个封装两个针脚之间可以穿越一条线,这与实物不相符。再用回RAD0.1封装时,两个针脚之间不穿越
线,所以也得重新布局。封装可以在原理图上改,也可以在PCB图里改。
4)、画线之前忘记设定为单层板,以至于画出来的线有一部分是红色的,后来改为只选取bottom layer,画出来的线就全部是蓝色的了。
5)、用自动布线的时候,系统有些线是重连的,就如地线是经常重连的,我们只需要一条线都共地就可以了;有些线是布置得密,我们就把那些线分开一点。以免敷铜时线会接在一起短路。
3.2、硬件制作
电路板的制作共分为四个部份:
第一、用热敏纸打印DXP电路图。
第二、将用热敏纸打印出来的DXP电路图印在电路板上。首先把用沙纸磨擦过的电路板(能更好地吸碳粉)对准热敏纸电路图封装好,尽量贴紧,然后放进封塑机进行封塑,封塑机的温度要保持在恒温150摄氏度,封塑过程要进行十几个来回,以保证热敏纸上的电路图形态的碳粉能尽量多地印在电路板上。这个过程要持有一定的耐心。有些同学在加热的时候把封塑机上加热/冷悼的健打到冷悼上,以至于虽然进行了二十多个来回,但最后也只是把一部分电路印在了电路板上,既浪费了时间,也浪费了电路板。
第三、电路板去铜。这个过程首先必须要注意安全。首先是调配溶液,溶液总量以刚没盘底为宜,以节省材料。所用的水、过氧化氢、盐酸的比例是2:1:1,但如果要争取时间也可以适当加多盐酸和过氧化氢的量,调配好溶液后,轻轻地把印有电路图的电路板放进去,然后观察板上铜的反应直至除碳粉覆盖的铜外全部铜都反应溶解完全。看到铜被溶解完之后就拿去用清水洗干净。在这一过程中还要注意手套是否穿了。
第四、打孔。这一步也具有一定的危险性,指导老师反复强调要注意安全。打孔时,固定好电路板,先将钻头对准电路板上的需要打孔的点,然后用手操作控制杆快速往下压,这样就可以。在打孔之前最后先调好钻头的转速,打快或太慢都不好。这一步要极具耐心与细心,否则容易出事故导致前功尽弃。
电路板的制作也就完成了,接下来就到了电路板的焊接。首先,测试好元器件的值,然后对照电路图对号入座,由于我们的布线比较细,所以在焊接的过程中一定要小心,否则很容易就会发生短路现象。
3.3电路板调试
电路板的制作与焊接都完成后,就到了电路的调试过程。连接电源,这一过程可先用万用表测量给出是否为±9V,连到器件上的时候千万不要接错工作电压,不然会烧掉运放LM324。
1、观察给+5V的方波输出:示波器一端接多谐振荡器输出测试点,一端接地;观察输出波形如图
3.1,该图为为输出幅度+5V
方波。
图3.1
2、观测±9V的方波输出:将示波器另一端接比较器输出点,这个主要是观测幅度是否达到±9V。如图3.2:
图3.2
4、最后观测输出波:经滤波放大后 如图3.3
图3.3
最后,因为我们用是电位器分压,而实际给出的正弦波与仿真时的Vpp相差较多,仿真时可以达到Vpp=14V,而实际出来的只是9V,最后因为实际与仿真相差过大,从而用电位器不能分到12V,这是本电路的一个缺点。
四、讨论及进一步研究建议
本设计虽然最终实现了正弦波形的输出,但仍存在较大的不足,尤其是多谐振荡器输出的方波不能实现占空比的调整,这就使最后输出的正弦波形的可调性产生了很大的局限性,这对一个函数信号发生器而言显然是个很大的缺陷,但由于在设计过程中的疏忽而最终没能实现这一功能,实在是一大败笔。另外,对于方案一中的电路,虽然我们不知什么原因没能通过仿真而最终舍弃了,但理论上确实存在着很大的可行性,尤其是三角波部分的电路,相当于一个过渡,使得方波到正弦波的转换更加自然,最终输出的波形当然就更加接近正弦波了,所以如果在我们的电路上再加上调节占空比与三角波电路的部分将使电路更加理想。
五、课程设计心得
通过对函数信号发生器的设计,我深刻认识到了“理论联系实际”的这句话的重要性与真实性。而且通过对此课程的设计,我不但知道了以前不知道的理论知识,而且也巩固了以前知道的知识。最重要的是在实践中理解了书本上的知识,明白了学以致用的
真谛。也明白老师为什么要求我们做好这个课程设计的原因。他是为了教会我们如何运用所学的知识去解决实际的问题,提高我们的动手能力。在整个设计到电路的焊接以及调试过程中,我个人感觉调试部分是最难的,因为你理论计算的值在实际当中并不一定是最佳参数,我们必须通过观察效果来改变参数的数值以期达到最好。而参数的调试是一个经验的积累过程,没有经验是不可能在短时间内将其完成的,而这个可能也是老师要求我们加以提高的一个重要方面吧!另外也学到了团队协作的重要性,在整个设计过程中,正是因为我们各位队员分工合作,携手合力,最终才能在规定的时间内顺利的完成了任务。虽然完成的结果仍然存在着种种的不如人意,但我们确实在实践过程中受益匪浅。
―
参考文献
[1].康华光,陈大钦等。电子技术基础数字部份(第四版)。高等教育出版社。2006.4:355~356。
[2].康华光,邹寿彬等。电子技术基础模拟部份(第四版)。高等教育出版社。2006.4:370~371。
[3].谢自美,电子线路设计.实验.测试(第二版)。华中科技出版社。2000.7 ISBN7-5609-2166-3
第四篇:简易函数信号发生器
波形发生器是一种常用的信号源,广泛地应用于电子电路、自动控制系统和教学实验等领域。本次课程设计使用的AT89S51 单片机构成的发生器可产生锯齿波、三角波、正弦波等多种波形,波形的周期可以用程序改变,并可根据需要选择单极性输出或双极性输出,具有线路简单、结构紧凑等优点。在本设计的基础上,加上按钮控制和LED显示器,则可通过按钮设定所需要的波形频率,并在LED上显示频率、幅值电压,波形可用示波器显示。
二、系统设计
波形发生器原理方框图如下所示。波形的产生是通过AT89S51 执行某一波形发生程序,向D/A转换器的输入端按一定的规律发生数据,从而在D/A转换电路的输出端得到相应的电压波形。在AT89S51的P2口接5个按扭,通过软件编程来选择各种波形、幅值电压和频率,另有3个P2口管脚接TEC6122芯片,以驱动数码管显示电压幅值和频率,每种波形对应一个按钮。此方案的有点是电路原理比较简单,实现起来比较容易。缺点是,采样频率由单片机内部产生故使整个系统的频率降低。
1、波形发生器技术指标
1)波形:方波、正弦波、锯齿波;
2)幅值电压:1V、2V、3V、4V、5V;
3)频率:10HZ、20HZ、50HZ、100HZ、200HZ、500HZ、1KHZ;
2、操作设计
1)上电后,系统初始化,数码显示6个‘-’,等待输入设置命令。
2)按钮分别控制“幅值”、“频率”、“方波”、“正弦波”、“锯齿波”。
3)“幅值“键初始值是1V,随后再次按下依次增长1V,到达5V后在按就回到1V。
4)“频率“键初始值是10HZ,随后在按下依次为20HZ、50HZ、100HZ、200HZ、500HZ、1000HZ循环。
三、硬件设计
本系统由单片机、显示接口电路,波形转换(D/A)电路和电源等四部分构成。电路图2附在后
1、单片机电路 功能:形成扫描码,键值识别、键处理、参数设置;形成显示段码;产生定时中断;形成波形的数字编码,并输出到D/A接口电路和显示驱动电路。
AT89S51外接12M晶振作为时钟频率。并采用电源复位设计。复位电路采用上电复位,它的工作原理是,通电时,电容两端相当于短路,于是RST引脚上为高电平,然后电源通过对电容充电。RST端电压慢慢下降,降到一定程序,即为低电平,单片机开始工作。
AT89S51的P2口作为功能按钮和TEC6122的接口。P1口做为D/A转换芯片0832的接口。用定时/计数器作为中断源。不同的频率值对应不同的定时初值,允许定时器溢出中断。定时器中断的特殊功能寄存器设置如下:
定时控制寄存器TCON=20H;
工作方式选择寄存器TMOD=01H;
中断允许控制寄存器IE=82H。
2、显示电路
功能:驱动6位数码管显示,扫描按钮。
由集成驱动芯片TEC6122、6位共阴极数码管和5个按钮组成。当某一按钮按下时,扫描程序扫描到之后,通过P2口将数字信号发送到 TEC6122芯片。TEC6122是一款数字集成芯片。它的外接电压也是+5V,并且由于数码管的载压较小,为了保护数码管,必须在两者间接电阻,大约是560欧。
扫描利用软件程序实现,当某一按键按下时,扫描程序立即检测到,随后调用子程序,执行相应的功能。
3、D/A电路
功能:将波形样值的编码转换成模拟值,完成双极性的波形输出。
由一片0832和两块LM358运放组成。DAC0832是一个具有两个输入数据寄存器的8位DAC。目前生产的DAC芯片分为两类,一类芯片内部设置有数据寄存器,不需要外加电路就可以直接与微型计算机接口。另一类芯片内部没有数据寄存器,输出信号随数据输入线的状态变化而变化,因此不能直接与微型计算机接口,必须通过并行接口与微型计算机接口。DAC0832是具有20条引线的双列直插式CMOS器件,它内部具有两级数据寄存器,完成8位电流D/A转换,故不需要外加电路。0832是电流输出型,示波器上显示波形,通常需要电压信号,电流信号到电压信号的转换可以由运算放大器LM358实现,用两片LM358可以实现双极性输出。
单片机向0832发送数字编码,产生不同的输出。先利用采样定理对各波形进行抽样,然后把各采样值进行编码,的到的数字量存入各个波形表,执行程序时通过查表方法依次取出,经过D/A转换后输出就可以得到波形。假如N个点构成波形的一个周期,则0832输出N个样值点后,样值点形成运动轨迹,即一个周期。重复输出N个点,成为第二个周期。利用单片机的晶振控制输出周期的速度,也就是控制了输出的波形的频率。这样就控制了输出的波形及其幅值和频率。
四、软件设计
主程序和子程序都存放在AT89S51单片机中。
主程序的功能是:开机以后负责查键,即做键盘扫描及显示工作,然后根据用户所按的键转到相应的子程序进行处理,主程序框图如图1所示。
子程序的功能有:幅值输入处理、频率输入处理、正弦波输出、锯齿波输出、方波输出、显示等。
下面是程序
include
#define uchar unsigned char
#define uint unsigned int
sbit LCP=P2^2;
sbit SCP=P2^1;
sbit SI=P2^0;
sbit S1=P2^3;
sbit S2=P2^4;
sbit S3=P2^5;
sbit S4=P2^6;
sbit S5=P2^7;
sbit DA0832=P3^3;
sbit DA0832_ON=P3^2;uchar fun=0,b=0,c=0,d=0,tl,th;
uchar code tab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar code tosin[256]={0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5 ,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4,0xf5 ,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd ,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda ,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99 ,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51 ,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16 ,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02 ,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15 ,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e ,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66 ,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80 };
void display(unsigned char command){
unsigned char i;LCP=0;
for(i=8;i>0;i--){
SCP=0;
if((command & 0x80)==0){
SI=0;}
else {
SI=1;}
command<<=1;
SCP=1;}
LCP=1;}
void key1(void){
fun++;
if(fun==4)
fun=0x00;}
void key2(void){
tl++;
if(tl==0x1f)
th++;}
void key3(void){
tl--;
if(tl==0x00)
th--;}
void key4(void){
double t;
int f;
TR0=0;
t=(65535-th*256-tl)*0.4;
f=(int)(1000/t);
S3=tab[f%10];
f=f/10;S2=tab[f%10];
f=f/10;
if(f==0)
S1=0;
else
S1=tab[f];
TR0=1;}
void key5(void){
tl--;
if(tl==0x00)
th++;}
void judge(void){
uchar line,row,de1,de2,keym;
P1=0x0f;
keym=P1;
if(keym==0x0f)return;
for(de1=0;de1<200;de1++)
for(de2=0;de2<125;de2++){;} P1=0x0f;
keym=P1;
if(keym==0x0f)return;
P1=0x0f;
line=P1;
P1=0xf0;
row=P1;
line=line+row;/*存放特征键值*/
if(line==0xde)key1();
if(line==0x7e)key2();
if(line==0xbd)key3();
if(line==0x7d)key4();}
void time0_int(void)interrupt 1 //中断服务程序 {
TR0=0;
if(fun==1){
DA0832=tosin[b];//正弦波
b++;}
else if(fun==2)//锯齿波 {
if(c<128)
DA0832=c;
else
DA0832=255-c;
c++;}
else if(fun==3)// 方波
{
d++;
if(d<=128)
DA0832=0x00;
else
DA0832=0xff;}
TH0=th;
TL0=tl;
TR0=1;}
void main(void){
TMOD=0X01;TR0=1;
th=0xff;
tl=0xd0;
TH0=th;
TL0=tl;
ET0=1;
EA=1;
while(1){
display();
judge();} }
五、心得体会
开始的时候由于没有经验,不知如何下手,所以就去图书管找了一些书看,尽管有许多的设计方案,可是总感觉自己还是有许多的东西弄不太清楚,于是就请教同学。他常做一些设计,有一些经验。经过他的解释分析各方案之后,决定用查表的方法来做。这样可以降低一些硬件设计的难度,初次设计应切合自己的水平。用8031需要扩展ROM,这样还要进行存储器扩展。而且现在8031实际中已经基本上不再使用,实际用的AT89S51芯片有ROM,这样把经过采样得到的数值制成表,利用查表来做就简单了。我认为程序应该不大,片内ROM应该够用的。用LED显示频率和幅值,现有集成的接口驱动芯片,波形可通过示波器进行显示,单片机接上D/A转换芯片即可,这样硬件很快就搭好了。
我以为这些做好了,构思也有了,写程序应该是相对容易的。谁知道,写起程序来,才想到功能键要有扫描程序才行呀,我真的感到很难。那时真的有点想放弃?于是就去请教了老师,老师帮忙分析了一下,自己又查阅了一些资料,终于明白了扫描程序怎么写。
于是在自己的努力下,程序很快就写好了。这次是我的第一个设计器件,尽管经历了不少的艰辛,但给我积累了一点设计的经验,最后也有点小小的成就感。后面的路还很长,我还的努力!
参考文献
[1] 童诗白,华成英.模拟电子技术基础〔M〕.北京:高等教育出版社,2003.345-362
[2] 潘永雄,沙河,刘向阳.电子线路CAD实用教程〔M〕.西安:西安电子科技大学出版社,2001.13-118.[3] 张毅刚,彭喜源,谭晓昀,曲春波.MCS-51单片机应用设计[M].哈尔滨:哈
尔滨工业大学出版社,1997.53-61.
第五篇:基于单片机设计的简易信号发生器资料
辽东学院信息技术学院
《可编程逻辑器件原理及应用》教学实习报告
简易信号发生器
学生姓名: 杨刚 学 号: 0915110619 班 级: B1106 专 业: 电子信息工程 指导教师: 张俊芳
2014年07月
辽东学院EDA教学实习报告
简易信号发生器
1引言
信号发生器又称信号源或振荡器,在生产实践和科技领域中有着广泛的应用。它能够产生多种波形,如三角波、锯齿波、矩形波(含方波)、正弦波等,在电路实验和设备检测中具有十分广泛的用途。例如在通信、广播、电视系统中,都需要射频(高频)发射,这里的射频波就是载波,把音频(低频)、视频信号或脉冲信号运载出去,就需要能够产生高频的振荡器。在工业、农业、生物医学等领域内,如高频感应加热、熔炼、淬火、超声诊断、核磁共振成像等,都需要功率或大或小、频率或高或低的信号发生器。
本设计采用FPGA来设计制作多功能信号发生器。该信号发生器可以产生锯齿波、三角波、方波等波形。FPGA简介
FPGA(Field-Programmable Gate Array)即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
与传统们阵列和掩模可编程门阵列(MPGA)相比,FPGA具有很多的优点,传统门阵列可以用来设计任何电路,但是只能在工厂中一次性编程,而且还需要针对该电路的特定的掩模。FPGA是标准通用器件。使用其代替MPGA,可以将设计时间由几个月缩短至几小时,并且使设计更加简单,从而减少了错误修改和设计指标变更的花费。
FPGA器件在结构上,由逻辑功能块排列为阵列,它的结构可以分为三个部分:可编程快CLB(Configurable Logic Blocks)、可编程I/O模块IOB(Input Block)和可编程内部连线PI(Programmable Interconnect)。CLB在器件中排列为阵列,周围有环形内部连线,IOB分布在四周的管脚上。
FPGA也存在缺点,FPGA中,每个可编程的点都有电阻和电容。电阻和电容的使用
辽东学院EDA教学实习报告
减慢了信号的传输速度,所以FPGA的速度比传统门阵列要低,而且,FPGA中互联延迟是不可预测的。
FPGA的基本特点主要有:
一、采用FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片。
二、FPGA可做其它全定制或半定制ASIC电路的中试样片。
三、FPGA内部有丰富的触发器和I/O引脚。
四、FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。
五、FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。
使用FPGA时,可以根据不同的配置模式,采用不同的编程方式。加电时,FPGA芯片将EPROM中数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。FPGA的编程无须专用的FPGA编程器,只须用通用的EPROM、PROM编程器即可。当需要修改FPGA功能时,只需换一片EPROM即可。这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能。因此,FPGA的使用非常灵活。FPGA有多种配置模式:并行主模式为一片FPGA加一片EPROM的方式;主从模式可以支持一片PROM编程多片FPGA;串行模式可以采用串行PROM编程FPGA;外设模式可以将FPGA作为微处理器的外设,由微处理器对其编程。VHDL & Verilog简介
VHDL(Very High Speed Integrated Circuit Hardware Description Language,超高速集成电路硬件描述语言)是一种用来描述数字系统行为和结构的硬件描述语言,被广泛的运用于描述和仿真各种数字系统,小到几个门,大到许多复杂集成电路相连的系统。
VHDL诞生于1982年,是由美国国防部开发的一种快速设计电路的工具,目前已经成为IEEE(The Institute of Electrical and Electronics Engineers)的一种工业标准硬件描述语言。相比传统的电路系统的设计方法,VHDL具有多层次描述系统硬件功能的能力,支持自顶向下(Top to Down)和基于库(Library Based)的设计的特点,因此设计者可以不必了解硬件结构。从系统设计入手,在顶层进行系统方框图的划分和结构设计,在方框图一级用VHDL对电路的行为进行描述,并进行仿真和纠错,然后在系统一级进行验证,最后再用逻辑综合优化工具生成具体的门级逻辑电路的网表,下载到具体的FPGA器件中去,从而
辽东学院EDA教学实习报告
实现可编程的专用集成电路(ASIC)的设计。
Verilog也是一种流行的硬件描述语言,他是由工业界开发的,1984年,Verilog作为一种私用的硬件描述语言,由Gateway Design Automation公司给出,1988年,Synopsis公司为Verilog开发了综合工具。1995年,Verilog成为IEEE的一个标准。Verilog 适合算法级,寄存器级,逻辑级,门级和版图级等各个层次的设计和描述。
VHDL的语法是基于ADA语言的,而Verilog的语法是基于C语言的。由于是基于C语言,所以它更容易掌握,但是VHDL语言在设计和描述大型系统时具有突出优势。目前两种语言各占一半市场份额,两种语言都可以满足数字系统设计者的需求。
本设计中采用VHDL语言进行设计。设计工具简介
本次设计是基于Altera公司的QuartusII软件。
Quartus II 是Altera公司的综合性PLD开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。
QuartusII支持Altera的IP核,包含了LPM/MegaFuction宏功能模块库,使用它,可以简化设计的复杂性,加快设计速度。QuartusII平台支持一个工作组环境下的设计要求,其中包括支持基于Internet的协作设计。此外,QuartusII通过和DSP Builder工具与Matlab/SIMULINK相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统开发,集系统级设计、嵌入式软件设计、可编程逻辑设计于一体,是一种综性的开发平台。系统设计
基于VHDL语言设计一个多功能信号发生器,通过选择输入信号,可以输出递增锯齿波、递减锯齿波、三角波、方波等四种信号。信号发生器的控制模块可以选用数据选择器实现,4种信号的数据选择可以使用4选1数据选择器实现。
辽东学院EDA教学实习报告
5.1 VHDL程序语言基本设计
一个VHDL语言的设计程序描述的是一个电路单元,这个电路单元可以是一个门电路,或者是一个计数器,也可以是一个CPU,一般情况下,一个完整的VHDL语言程序至少包括实体、结构体和程序包三个部分。实体给出电路单元的外部输入输出接口信号和引用信息,结构体给出了电路单元的内部结构和信号的行为特点,程序包定义在设计结构体和实体中将用到的常数、数据类型、子程序和设计好的电路单元等。
第一部分是程序包,程序包是用VHDL语言编写的共享文件,定义在设计结构体和实体中将要用到的常数、数据类型、子程序和设计好的电路单元等,放在文件目录名称为IEEE的程序包库中。
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;第二部分是程序的实体,定义电路单元的输入/输出引脚名称。程序的实体名称可以任意取,但必须与VHDL程序的文件名称相同。实体的标示符是ENTITY,实体以ENTITY开头,以END结束。
ENTITY fulladder IS PORT(a,b,Ci:in std_logic;Co,s: out std_logic_vector(7 downto 0));END fulladder;其中,定义了a,b, Ci为输入信号引脚,定义Co,s为输出信号引脚。
第三部分是程序的结构体,具体描述电路的内部结构和逻辑功能。结构体有三种描述方式,分别是行为(BEHAVIOR)描述方式、数据流(DATAFLOW)描述方式和结构描述方式。其中数据流描述方式又被称为寄存器(RTL)描述方式。结构体以表示ARCHITECHTURE开头,以END结尾。结构体的名称可以任取。
architecture behav of fulladder is BEGIN
s<=a xor b xor Ci;Co<=(a and b)or(a and Ci)or(b and Ci);
辽东学院EDA教学实习报告
END fulladder 上面程序段中结构体的描述方式属于程序流描述方式。以上三段程序是一个完整的VHDL程序段,实现的功能是一位全加器。
5.2 波形发生器设计
采用DDS技术可以很方便地产生各种高质量的波形。DDS技术是从相位概念出发之结合成所需要波形的一种频率合成技术。以正弦波为例,首先要按照一定的采样点数将正弦波形一个周期的数据信息存于ROM表中,表中包含着一个周期正弦波的数字幅度信息,每个地址对应正弦波中0到360度范围内的一个相位点的幅度值,查找表时即是把输入的地址相位信息映射成正弦波幅度的数字量信号,通过设置的输出端口输出。在实物设计中,可以使用D/A接口来实现波形信号的输出。
为简化设计过程,本设计并未采用DDS技术,而是采用描点输出的方式,实现波形发生器的设计。程序中设置一个波形的起始点,经过比较、计算得出波形的其他数值,将这些点依次连续输出,从而实现波形的仿真。以递增锯齿波为例,首先定义初始点为
tmp=“00000000”;在时钟上升沿到来时,执行tmp<=tmp+1;语句,同时将tmp输出,当
tmp=“11111111”;时,将tmp值清零,执行下一个循环。
在本设计中,采用QuartusII软件仿真,所以可以通过波形文件直观的反映出输出的数字量的变化情况,以达到波形输出的仿真。
设计中分别对四种波形进行编程,编译无误后,封装生成模块文件,以供在后面的顶层电路设计中使用。
inst3triangleclkresetq[7..0]squareclkresetq[7..0]sawtooth_adderclkresetq[7..0]sawtooth_minusclkresetq[7..0]instinst16
inst2辽东学院EDA教学实习报告
图5-1 四种波形封装图块
本设计中设置了四种波形,分别是递增锯齿波、递减锯齿波、三角波、方波。四种波形通过一个4选1数据选择器来实现选择性输出。
5.3 四选一数据选择器设计
可以采用集成四选一数据选择器CT54153/CT74153,也可以使用软件编程生成模块的方式实现数据四选一的功能。在本设计中采用后者,程序中,为每一种波形分配一个通道,并为之赋予一唯一的代码,当在sel端输入不同的代码时,被选中的通道打开,响应的波形发生模块产生波形。
entity mux41 is port(sel:in std_logic_vector(2 downto 0);--定义输入端口sel d1,d2,d3,d4: in std_logic_vector(7 downto 0);--定义输入端口d1,d2,d3,d4 q: out std_logic_vector(7 downto 0));--定义输出端口 end mux41;architecture behav of mux41 is begin process(sel)begin
case sel is when “001”=>q<=d1;
mux41when “010”=>q<=d2;when “011”=>q<=d3;when “100”=>q<=d4;when others=>null;end case;
sel[2..0]d1[7..0]d2[7..0]d3[7..0]d4[7..0]inst4q[7..0]end process;
图5-2四选一数据选择器封装图块 end behav;以上为四选一数据选择器程序段,其中sel端口为外部输入选择信号,d1,d2,d3,d4分
辽东学院EDA教学实习报告
别连接四个波形发生模块,以二进制形式给sel幅值,选择相应的通道。q为输出端口,将波形信息的数字代码输出。
5.4 程序设计
递增锯齿波递减锯齿波12开始波形选择(1、2、3、4)43三角波方波波形输出结束图5-3 系统流程图
5.5 主要函数语句分析
在程序设计中,主要使用的函数语句有两种:If-else语句和case-when语句。这两种语句也是VHDL程序设计中常用的语句。二者都属于流程控制语句。流程控制语句通过条件控制开关决定是否执行一条或几条语句或重复执行一条或几条语句或跳过一条或几条语句。
IF语句是一种条件语句,它根据语句中所设置的一种或多种条件,有选择地执行指定的顺序语句。IF语句的语句结构有以下三种:
IF 条件句 Then
--第一种IF语句结构
顺序语句
END IF
辽东学院EDA教学实习报告
IF 条件句 Then
--第二种IF语句结构
顺序语句
ELSE
顺序语句
END IF
IF 条件句 Then
--第三种IF语句结构
顺序语句
ELSIF 条件句 Then
顺序语句
ELSE
END IF
...顺序语句
CASE语句根据满足的条件直接选择多项顺序语句中的一项执行,CASE语句的结构如下:
CASE 表达式 IS When 选择值 => 顺序语句 When 选择值 => 顺序语句
...END CASE
当执行到CASE语句时,首先计算表达式的值,然后根据条件句中与之相同的选择值。执行对应的顺序语句,最后结束 CASE语句。表达式可以是一个整数类型或枚举类型的值,也可以是由这些数据类型的值构成的数组。
5.6 系统顶层文件
将上述5个模块(递增锯齿波sawtooth_adder、递减锯齿波sawtooth_minus、三角波triangle、方波square、4选1数据选择器mux41)封装成为模块文件,供顶层电路调用。可以得到以下顶层文件电路:
sel[2..0]sawtooth_adderclkINPUTVCCINPUTVCCINPUTVCCclkresetq[7..0]resetinst1sawtooth_minussel[2..0]辽东学院EDA教学实习报告
clkresetq[7..0]mux41sel[2..0]d1[7..0]d2[7..0]d3[7..0]d4[7..0]q[7..0]OUTPUTq[7..0]图5-4 系统顶层电路图
inst2triangleclkresetq[7..0]
instinst4squareclkresetq[7..0]
inst3 10
辽东学院EDA教学实习报告
6系统仿真
通过选择不同的sel值,可以实现不同的波形输出。仿真中reset复位信号一直置高电平,即没有仿真复位情况。
输入的选择信号为1时,信号发生器顶层电路的仿真输出波形为递增锯齿波。输出的波形线性递增。
图6-1 递增锯齿波仿真波形
输入的选择信号为2时,信号发生器顶层电路的仿真输出波形为递减锯齿波。输出的波形线性递减。
图6-2 递减锯齿波仿真波形
输入的选择信号为3时,信号发生器顶层电路的仿真输出波形为三角波。输出的波形线性减小到最小值0后,再线性增加。
图6-3 三角波仿真波形
辽东学院EDA教学实习报告
输入的选择信号为4时,信号发生器顶层电路的仿真输出波形为方波。输出的波形为周期性的全0或全1。(在仿真中,只有将CLK信号频率取得很高的时候,才可以清晰地看出仿真效果。)
图6-4 方波仿真波形 设计总结
7.1 小结
FPGA是当前数字系统设计领域比较火热的一种工具,它可以大大缩短设计需要的时间,降低成本的同时也提高了系统的稳定性。使用VHDL语言描述硬件系统使得FPGA技术有了更广阔的应用领域。本设计使用了基于Altera公司的FPGA系列,采用Altera公司提供的系统开发工具Quartus II软件进行了系统的设计和仿真。数字信号发生器在实验室以及工业场所都被大量使用着,本系统即实现了可以输出四种波形的简易多功能波形发生器,仿真结果证明,该设计正确有效,可以作为制作实物的理论依据。但由于设计者能力有限,本系统仍然有着很多可改进的地方,比如可以升级为输出频率、幅值可调的波形,或者输出任意波形以更贴近实际情况。
7.2 心得体会
对FPGA一直都有着浓厚的兴趣,借做课设的机会,认真的研究了一下这门科学。发现FPGA技术比我想象中的要有很大的难度。里面有很多的思想来源于信息电子技术里面的基本知识,包括门电路的概念以及寄存器传送的基本知识。VHDL语言与C语言有很大的不同,但是C语言的编程思想也可以移植到VHDL语言中,尤其是一些逻辑算法的设计,需要有很强的C语言编程功底。学习一门知识要从最基本的体系架构开始,倘若一开始就从
辽东学院EDA教学实习报告
顶层设计入手,就会造成很多基本原理、基本概念上的偏差,甚至会拖延学习设计的时间,事倍功半。虽然课设完成了,但是我意识到,我对FPGA技术仅仅只是停留在入门的阶段,想要有更大的发展,更深入的研究,还需要更多的努力与实践。
辽东学院EDA教学实习报告
参考文献
[1] 蒋小燕,俞伟钧.EDA技术及VHDL.南京:东南大学出版社.2008年12月.[2] 李国丽,朱维勇.EDA与数字系统设计.北京:机械工业出版.2005年3月.[3] 江国强.EDA技术与实验.北京:电子工业出版社.2005年1月.[4] 欧伟明.基于MCU、FPGA、RTOS的电子系统设计方法与实例.北京:北京航空航天大学出版社.2007年4月.[5] Charles H.Roth,Jr、Lizy Kurian John著,金明录译.数字系统设计与VHDL.北京:电子工业出版社.2008年8月
辽东学院EDA教学实习报告
附录
附录一:递增锯齿波程序
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;
entity sawtooth_adder is port(clk,reset:in std_logic;
q:out std_logic_vector(7 downto 0));end sawtooth_adder;
architecture behav of sawtooth_adder is begin process(clk,reset)
variable tmp:std_logic_vector(7 downto 0);
begin
if reset='0'then
tmp:=“00000000”;
elsif rising_edge(clk)then
if tmp=“11111111”then
tmp:=“00000000”;
else
tmp:=tmp+1;
end if;
end if;q<=tmp;
end process;
end behav;
附录二:递减锯齿波程序
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity sawtooth_minus is port(clk,reset:in std_logic;
q:out std_logic_vector(7 downto 0));end sawtooth_minus;architecture behav of sawtooth_minus is begin process(clk,reset)variable tmp:std_logic_vector(7 downto 0);begin
if reset='0'then
tmp:=“11111111”;
elsif rising_edge(clk)then
--程序包
--定义clk、reset为输入信号--定义q为输出信号--实体
--定义进程
--定义变量,8位
--如果复位信号为0,tmp为0--捕捉时钟上升沿
--如果tmp递增至最大,增归零
--否则,tmp继续递增
--q等于变量tmp--进程结束
--结构体结束
辽东学院EDA教学实习报告
if tmp=“00000000”then
tmp:=“11111111”;
else
tmp:=tmp-1;
end if;
end if;q<=tmp;end process;end behav;附录三:三角波程序
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;
entity triangle is
port(clk,reset:in std_logic;
q:out std_logic_vector(7 downto 0));end triangle;architecture behav of triangle is
begin process(clk,reset)
variable tmp:std_logic_vector(7 downto 0);
variable a:std_logic;begin
if reset='0'then
tmp:=“00000000”;
elsif rising_edge(clk)then
if a='0'then
if tmp=“11111110”then
tmp:=“11111111”;
a:='1';
else
tmp:=tmp+1;
end if;
else
if tmp=“00000001”then
tmp:=“00000000”;
a:='0';
else
tmp:=tmp-1;
end if;
end if;
end if;q<=tmp;
end process;end behav;
--程序包
--定义三角波实体
--定义三角波结构体--进程开始
--定义中间变量tmp、a
--复位信号设置
--捕捉时钟信号上升沿
--a=0时依次输出三角波上升沿--a=1时依次输出三角波下降沿--输出信号q=tmp--结构体结束
辽东学院EDA教学实习报告
附录四:方波程序
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity square is port(clk,reset: in std_logic;
q:out std_logic_vector(7 downto 0));end square;architecture behav of square is signal a:std_logic;begin process(clk,reset)
variable tmp:std_logic_vector(7 downto 0);
begin
if reset='0'then
a<='0';
elsif rising_edge(clk)then
if tmp=“11111111”then
tmp:=“00000000”;
else tmp:=tmp+1;
end if;
if tmp<=“10000000”then
a<='1';
else
a<='0';
end if;
end if;end process;process(clk,a)
begin
if rising_edge(clk)then
if a='1' then
q<=“11111111”;
else
q<=“00000000”;
end if;
end if;end process;end behav;附录五:四选一数据选择器程序
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;
entity mux41 is
port(sel:in std_logic_vector(2 downto 0);
--程序包
--定义实体
--信号选择端口sel
辽东学院EDA教学实习报告
d1,d2,d3,d4: in std_logic_vector(7 downto 0);
--d1d2d3d4分别连接四个波形发生模块
q: out std_logic_vector(7 downto 0));end mux41;architecture behav of mux41 is
begin
process(sel)
begin
case sel is
when “001”=>q<=d1;
when “010”=>q<=d2;
when “011”=>q<=d3;
when “100”=>q<=d4;
when others=>null;
end case;end process;
end behav;
--定义输出信号端口
--结构体
--case when语句进行信号位的选择
--进程结束
--结构体结束