单片机波形发生器实习报告(优秀)

CHANGCHUN INSTITUTE OF TECHNOLOGY

基于单片机双通道的多波形发生器

Double Channel Waveform Generator Based On Microcontroller

设计题目:  基于单片机双通道的多波形发生器  

学生姓名:           

学院名称:                           

专业名称:                    

班级名称:                        

学    号:                   

完成时间:       2011年7月6号              

2011    7 6

组员:

          

 基于单片机双通道的多波形发生器

摘要:

利用单片机控制灵活的特点,采用软件方式实现信号生成,系统采用查表法基本工作原理,使用片内ROM 波形查询表实现相幅转换. 系统采用 80C51 单片机实现数据处理, DAC0832 实现D/ A 转换, 采用拨码开关设置频率的参数,采用按键选取波形。使用LED七段数码管作为波形的代号。实现了正弦波、方波、三角波信号生成、幅值和频率调节,各种波形信号的参数控制,根据按键的设置可以同时输出两列波。

关键词:

     查表法,数字频率合成技术,单片机,可调波形,双通道

引言

   信号发生器输出的常规波形,常应用于电子电路的性能测试和参数测量。但常规的波形发生器一般是只能同时产生一种可控的波形,为此设计一种基于单片机控制的信号波形发生器,以满足设计需求。

一、设计方案论述:

本课题的设计方案有四种:

  (1)采用函数信号发生器ICL8038集成模拟芯片,它是一种可以同时产生方波、三角波、正弦波的专用集成电路。但是这种模块产生的波形都不是纯净的波形,会寄生一些高次谐波分量,采用其他的措施虽可滤除一些,但不能完全滤除掉。

  (2) 传统的直接频率合成技术(DS)。该类方法能实现快速频率变换,具有低相位噪声以及所有方法中最高的工作频率。但由于采用大量的倍频、分频、混频和滤波环节,导致其结构复杂、体积庞大、成本昂贵 ,而且容易产生过多杂散分量。

  (3)锁相环式频率合成器( PLL)。该类技术具有良好窄带跟踪特性,可选择所需频率信号,抑制杂散分量,且省去大量滤波器,有利于集成化和小型化。但由于锁相环本身是个惰性环节,锁定时间较长,因而频率转换时间较长,且由模拟方法合成的正弦波的参数(如幅度、频率和相位等)都难以定量控制。

  (4)直接数字式频率合成器(Direct Digital Frequency ,DDS)。该类方法具有高频率稳定度、 高频率分辨率以及极短的频率转换时间。此外 ,全数字化结构便于集成 ,输出相位连续,频率、 相位和幅度均可实现程控 ,而且理论上能够实现任意波形。

经综合比较,第四种方法课通过要求的单片机实现程序控制,程序简单。因此本实验采用第四种方案

二、系统工作原理                 

利用单片机的片内ROM 存储所需的信号波形相位幅度值(又称波形表),根据外电路的输入信号利用查表方式查找片内ROMA中相应地址的相位幅度值。将输                               图1

出的八位二进制数据进行D/A转换,I/V转换后输出。

                           

根据正弦信号波形的频率和相位在波形表中查找相应的响应点,由于输出的常规波形都具有周期性,波形的产生以正弦波为例:

因其周期性,因此只需要设计一个完整的周期,信号的输出部分采用了D/A转换,因此为了适应D/A转换的特征,将正弦函数波形整体上移,时期最低点的值为0,如上图1所示。                       

D/A转换的最大输入值为255,因此对于周期函数,需要采样的点数最多不超过256个,本设计中采样点数设置为256,相位累加器的数值由累加器A的值传送,将A中的值作为偏移相位值,送还到指针,通过指针查找相应相位的幅度值,并通过P0口输出到D/A转换器转换成相应的模拟信号。

系统整体原理框图如下所示:

                      图2-1 系统原理方框图

三、硬件设计及原理

3.1主控电路设计

单片机是整个波形发生器的核心部件,本次设计采用了应用广泛的MCS-51系列的AT89C51单片机。单片机在整个系统中的作用是形成扫描码,进行键值识别、键处理、参数设置;形成显示段码;形成波形的数字编码,并输出到D/A接口电路。

拨码开关输入的值为查找一个值的周期,因此通过拨码开关实现波形周期的设置。主控部分及时钟复位电路、变频电路设计原理图如图3.1所示:

                                                    图3.1

3.2 D/A转换电路设计

 D/A部分本设计采用ADC0832芯片实现,该芯片输出量是电流值,因此需要通过一个高阻抗的线性运放实现I/V(电流到电压)转换实现电压的输出。由于本设计是面向双通道设计,所以需采用两列DA装换同时输出AD部分如图3.2所示

                                               图3.2

     为实现不同波形的同时产生,软件实现时采用复合查表方式。由于查找表输出的速度很快,因此输出波形的可以近似成连续波形,在世博其上显示的波形则为模拟信号的波形图。

     例如为同时输出正弦波形和三角波形,在执行完一次正弦波形查找输出操作后紧接着又执行一次三角波的波形查找操作,由于信号输出的端口使用的是同一个端口,又要能同时输出两种信号波形,因此采用两个DAC0832芯片通过总线接入到P0口,使用P3.7输出的信号作为DAC0832的片选信号,为实现该端口的任何一种状态均能选择到一个芯片,因此该端口的信号一个直接接到一个DAC0832的CS端,另一个通过一个反相器接入到另外一个DAC0832的CS端。经运放实现I/V转换后的电压值可以直接输出到示波器观察到相应的波形情况。

3.3 键盘/显示接口电路设计

   因为本设计按键较少,所以键盘采用独立式键盘,一个按键对应一个IO口,P1.0对应输出方波按键,P1.2对应输出三角波按键,P1.3对应正弦波输出按键,当两个键同时按下是,会同时输出两列波。显示部分采用LED显示,输出方波时显示“1”,三角波时显示“2”,正弦波时显示“3”.

四、系统软件设计

4.1程序总体设计

 程序是本设计中的重点。单片机的功能与它的程序有很大关系,本设计中,为实现输出三种波形,并且实现同时可以输出两列波要使单片机定时向数模转换器发送数据,数据的不同将实现不同的波形输出。大致程序流程图如4.1:详细的流程图如图4.2

              

                                                             图4.1

 

                                     图4.2  

4.2键盘扫描程序

   将P1口得值送给累加器A,如果有键按下,P1的相应位为0,否则为1,所以可以根据判断P1口得值来分析哪一个键按下,具体程序如下:

MAIN: MOV A,P1   //扫描按键

      SUBB A,#249   //  当SW3和SW2按键按下,跳转到REL1,输出三角波和正弦波

      JZ REL1

      SUBB A,#1      //当SW1和SW3按下,跳转到rel2,输出矩形波和正弦波

      JZ REL2

      SUBB A,#1     //当sw3按下,跳转到rel4,只输出正弦波

      JZ REL4

      SUBB A,#1      //当sw1和sw2按键按下,跳转到rel3,输出矩形波和三角波

      JZ REL3

      SUBB A,#1     //当sw2按键按下,跳转到rel5,只输出三角波

      JZ REL5

      SUBB A,#1    //当sw1按键按下,跳转到rel6,只输出矩形波

      JZ REL6

      LJMP MAIN

4.3波形产生程序

为了简化设计程序三种波形均采用查找表,以正弦波为例,方波,三角波类似。

REL4: MOV A,P1   //由于程序较长JZ直接跳转不到相应位置,需加一个中间跳转

      CJNE A,#251,MAIN

      LJMP DAN1  

DAN1: MOV R0,#00H   //当sw3按下,跳转到rel4,只输出正弦波

LOOP3:MOV A,P1

      CJNE A,#251,OVER1

      MOV A,R0

      MOV DPTR,#TAB2    //TAB2是正弦波的取值表

      MOVC A,@A+DPTR

      MOV P3,#30H

      MOV P0,A

      INC R0

      MOV P2,#0FFH

      MOV A,P2

      CPL A

      MOV R3,A

L304: DEC R3

      CJNE R3,#255,L304

      CJNE R0,#255,LOOP3

      LJMP DAN1

OVER1:LJMP MAIN

      RET

四.系统调试与结果分析

用WAVE6000编译调试运行生成 .HEX文件,使用Proteus设计电路(电路图见附录一),将.HEX文件加载到AT89C51上,进行硬软结合综合仿真,以正弦波为例进行仿真分析:    

 频率调试

  正弦波仿真频率最低时只有5HZ

 正弦波仿真频率最高时200HZ       幅度测试

最低幅度0.4mv

最高幅度为2.5mv

频率调节可以实现从5HZ到200HZ,步进为0.76HZ

虽然幅度都很低,不过最高幅度是最低幅度的6倍,在应用是可在加以放大器可以实现从0.8V到5V的幅度调节,可以满足一般信号发生器的要求。

其他仿真输出波形如下所示

   

           方波波形                                   三角波形

  

              正弦波形                           方波和正弦波形同时发生

  

         三角和正弦波形同时发生                     方波和三角波形同时发生

总结

 通过调试可得,我们设计的电路能够完成产生方波、三角波、正弦波,并对进行调幅与调频操作,而且可以同时输出两列波。在调试的过程中不是一帆风顺的,有很多的问题都是自己摸索和在与同学交流的过程中得到了解决。在设计的过程中,我先完成的是发生三种波形,通过编程实现并调试成功,同时也实现了调幅与调频,但是怎么实现双通道输出波形把我们难住了,使设计无法进行,通过询问老师,经过老师的指导和同学交流后,如果三种波形的产生都采用一种方法--查表法,同时输出几列波成为了可能,由于双通道输出对IO口数量的要求加大,老师建议我们采用总线结构共用数据总线,通过片选实现同时输出两列波,对此进行了尝试,完成了设计并调试成功。调试过程是发现问题的过程,这要求我们耐心和心细,有一种严谨的科学态度,以能够更好的实现我们的设计。

    通过为期两周的课程设计,在老师的精心指导下和同学合作之下最终成功地完成了此次设计,并从中学到了很多的知识和经验,对单片机以及汇编语言有了更深层次的理解。本次课程设计使我认识到:设计思路是实施操作的扎实基石。一个良好的设计思路,是电路的生命。宁愿在思路设计上多花上50%的时间。因为前期看似慢,实际上恰恰给后期的制作带来很大的方便,效果往往是更节省了许多时间。活学活用。这次设计让我真正体会到了书本知识永远是基础,而基础正是你向高层次迈进的扎实阶梯,没有这个基础,就无法实现技术上的腾飞。在实践当中,灵活运用书本上所讲的知识,万变不离其中,只有扎实掌握了核心的方法,才有可能做到活用巧用。

参考文献

  [1] 周兴华《手把手教你单片机》北京航空航天大学出版社。

  [2] 张友德、赵志英、徐时亮《单片微机原理应用与实验》复旦大学出版社。

  [3] 姚福安《电子电路设计与实践》山东科学与技术出版社。

  [4] 张毅刚、彭喜圆《MCS-51单片机应用设计》哈尔滨工业大学出版社。

  [5]康华光、华中理工大学电子学教研室《电子技术基础》高等教育出版社。

  [6]高吉祥、唐朝京编著《全国大学生电子设计竞赛培训系列教程 》清华大学出版社。

  附录1:Proteus仿真电路图

附录二:Protel原理图

附录三:PCB图

附录三:源程序代码

ORG  0000H

      LJMP MAIN

      ORG  0100H

MAIN: MOV A,P1   //扫描按键

      SUBB A,#249   //  当SW3和SW2按键按下,跳转到REL1,输出三角波和正弦波

      JZ REL1

      SUBB A,#1      //当SW1和SW3按下,跳转到rel2,输出矩形波和正弦波

      JZ REL2

      SUBB A,#1     //当sw3按下,跳转到rel4,只输出正弦波

      JZ REL4

      SUBB A,#1      //当sw1和sw2按键按下,跳转到rel3,输出矩形波和三角波

      JZ REL3

      SUBB A,#1     //当sw2按键按下,跳转到rel5,只输出三角波

      JZ REL5

      SUBB A,#1    //当sw1按键按下,跳转到rel6,只输出矩形波

      JZ REL6

      LJMP MAIN

REL4: MOV A,P1   //由于程序较长JZ直接跳转不到相应位置,需加一个中间跳转

      CJNE A,#251,MAIN

      LJMP DAN1    

REL1:  MOV R0,#00H  //  当SW3和SW2按键按下,跳转到REL1,输出三角波和正弦波

 LOOP: MOV A,P1

      CJNE A,#249,MAIN

      MOV A,R0

      MOV DPTR,#TAB1

      MOVC A,@A+DPTR

      CLR P3.7

      MOV P0,A

      MOV A,R0

      MOV DPTR,#TAB2

      MOVC A,@A+DPTR

      SETB P3.7

      MOV P0,A

      INC R0

      MOV P2,#0FFH

      MOV A,P2

      CPL A

      MOV R3,A

L301: DEC R3

      CJNE R3,#255,L301

      CJNE R0,#255,LOOP

      LJMP REL1

      RET

REL5: MOV A,P1     //由于程序较长JZ直接跳转不到相应位置,需加一个中间跳转

      CJNE A,#253,MAIN

      LJMP DAN2

REL6: MOV A,P1     //由于程序较长JZ直接跳转不到相应位置,需加一个中间跳转

      CJNE A,#254,MAIN

      LJMP DAN3               

REL2: MOV R0,#00H  //当SW1和SW3按下,跳转到rel2,输出矩形波和正弦波

 LOOP1:MOV A,P1

      CJNE A,#250,MAIN

      MOV A,R0

      MOV DPTR,#TAB

      MOVC A,@A+DPTR

      CLR P3.7

      MOV P0,A

      MOV A,R0

      MOV DPTR,#TAB2

      MOVC A,@A+DPTR

      SETB P3.7

      MOV P0,A

      INC R0

      MOV P2,#0FFH

      MOV A,P2

      CPL A

      MOV R3,A

L302: DEC R3

      CJNE R3,#255,L302

      CJNE R0,#255,LOOP1

      LJMP REL2

      RET     

REL3: MOV R0,#00H   //当sw1和sw2按键按下,跳转到rel3,输出矩形波和三角波

LOOP2:MOV A,P1

      CJNE A,#252,OVER

      MOV A,R0

      MOV DPTR,#TAB

      MOVC A,@A+DPTR

      CLR P3.7

      MOV P0,A

      MOV A,R0

      MOV DPTR,#TAB1

      MOVC A,@A+DPTR

      SETB P3.7

      MOV P0,A

      INC R0

      MOV P2,#0FFH

      MOV A,P2

      CPL A

      MOV R3,A

L303: DEC R3

      CJNE R3,#255,L303

      CJNE R0,#255,LOOP2

      LJMP REL3

OVER: LJMP MAIN

      RET

DAN1: MOV R0,#00H   //当sw3按下,跳转到rel4,只输出正弦波

LOOP3:MOV A,P1

      CJNE A,#251,OVER1

      MOV A,R0

      MOV DPTR,#TAB2

      MOVC A,@A+DPTR

      MOV P3,#30H

      MOV P0,A

      INC R0

      MOV P2,#0FFH

      MOV A,P2

      CPL A

      MOV R3,A

L304: DEC R3

      CJNE R3,#255,L304

      CJNE R0,#255,LOOP3

      LJMP DAN1

OVER1:LJMP MAIN

      RET

DAN2 : MOV R0,#00H     //当sw2按键按下,跳转到rel5,只输出三角波

LOOP4:MOV A,P1

      CJNE A,#253,OVER2

      MOV A,R0

      MOV DPTR,#TAB1

      MOVC A,@A+DPTR

      MOV P3,#24H

      MOV P0,A

      INC R0

      MOV P2,#0FFH

      MOV A,P2

      CPL A

      MOV R3,A

L305: DEC R3

      CJNE R3,#255,L305

      CJNE R0,#255,LOOP4

      LJMP DAN2

OVER2:LJMP MAIN

      RET

DAN3: MOV R0,#00H //当sw1按键按下,跳转到rel6,只输出矩形波

LOOP5:MOV A,P1

      CJNE A,#254,OVER3

      MOV A,R0

      MOV DPTR,#TAB

      MOVC A,@A+DPTR

      MOV P3,#79H

      MOV P0,A

      INC R0

      MOV P2,#0FFH

      MOV A,P2

      CPL A

      MOV R3,A

L306: DEC R3

      CJNE R3,#255,L306

      CJNE R0,#255,LOOP5

      LJMP DAN3

OVER3:LJMP MAIN

      RET 

      // 矩形波列表       

        TAB:  DB  0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH

              DB  0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH

              DB  0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH

              DB  0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH

              DB  0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH

              DB  0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH

              DB  0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH

              DB  0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH

              DB  00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H

              DB  00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H

              DB  00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H

              DB  00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H

              DB  00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H

              DB  00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H

              DB  00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H

              DB  00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H

              //三角波列表

      TAB1:   DB  00H,02H,04H,06H,08H,0AH,0CH,0EH,10H,12H,14H,16H,18H,1AH,1CH,1EH

              DB  20H,22H,24H,26H,28H,2AH,2CH,2EH,30H,32H,34H,36H,38H,3AH,3CH,3EH

              DB  40H,42H,44H,46H,48H,4AH,4CH,4EH,50H,52H,54H,56H,58H,5AH,5CH,5EH

              DB  60H,62H,64H,66H,68H,6AH,6CH,6EH,70H,72H,74H,76H,78H,7AH,7CH,7EH

              DB  80H,82H,84H,86H,88H,8AH,8CH,8EH,90H,92H,94H,96H,98H,9AH,9CH,9EH

              DB  0A0H,0A2H,0A4H,0A6H,0A8H,0AAH,0ACH,0AEH,0B0H,0B2H,0B4H,0B6H,0B8H,0BAH,0BCH,0BEH

              DB  0C0H,0C2H,0C4H,0C6H,0C8H,0CAH,0CCH,0CEH,0D0H,0D2H,0D4H,0D6H,0D8H,0DAH,0DCH,0DEH

              DB  0E0H,0E2H,0E4H,0E6H,0E8H,0EAH,0ECH,0EEH,0F0H,0F2H,0F4H,0F6H,0F8H,0FAH,0FCH,0FEH

              DB  0FEH,0FCH,0FAH,0F8H,0F6H,0F4H,0F2H,0F0H,0EEH,0ECH,0EAH,0E8H,0E6H,0E4H,0E2H,0E0H

              DB  0DEH,0DCH,0DAH,0D8H,0D6H,0D4H,0D2H,0D0H,0CEH,0CCH,0CAH,0C8H,0C6H,0C4H,0C2H,0C0H

              DB  0BEH,0BCH,0BAH,0B8H,0B6H,0B4H,0B2H,0B0H,0AEH,0ACH,0AAH,0A8H,0A6H,0A4H,0A2H,0A0H

              DB  9EH,9CH,9AH,98H,96H,94H,92H,90H,8EH,8CH,8AH,88H,86H,84H,82H,80H

              DB  7EH,7CH,7AH,78H,76H,74H,72H,70H,6EH,6CH,6AH,68H,66H,64H,62H,60H

              DB  5EH,5CH,5AH,58H,56H,54H,52H,50H,4EH,4CH,4AH,48H,46H,44H,42H,40H

              DB  3EH,3CH,3AH,38H,36H,34H,32H,30H,2EH,2CH,2AH,28H,26H,24H,22H,20H

              DB  1EH,1CH,1AH,18H,16H,14H,12H,10H,0EH,0CH,0AH,08H,06H,04H,02H,00H

              //正弦波列表

       TAB2:  DB  80H,82H,84H,86H,88H,8AH,8CH,8EH,90H,92H,94H,96H,98H,9AH,9CH,9EH

             DB  0A0H,0A2H,0A4H,0A6H,0A8H,0AAH,0ABH,0ADH,0AFH,0B1H, 0B2H,0B4H, 0B6H,0B7H,0B9H,0BAH

             DB  0BCH,0BDH,0BFH,0C0H,0C1H,0C3H,0C4H,0C5H,0C6H,0C8H,0C9H,0CAH,0CBH,0CCH,0CDH,0CEH

             DB  0CEH,0CFH,0D0H,0D1H,0D1H,0D2H,0D2H,0D3H,0D3H,0D4H,0D4H,0D4H,0D4H,0D5H,0D5H,0D5H

             DB  0D5H,0D5H,0D5H,0D5H,0D4H,0D4H,0D4H,0D4H,0D3H,0D3H,0D2H,0D2H,0D1H,0D1H,0D0H,0CFH

             DB  0CEH,0CEH,0CDH,0CCH,0CBH,0CAH,0C9H,0C8H,0C6H,0C5H,0C4H,0C3H,0C1H,0C0H,0BFH,0BDH

             DB  0BCH,0BAH,0B9H,0B7H,0B6H,0B4H,0B2H,0B1H,0AFH,0ADH,0ABH,0AAH,0A8H,0A6H,0A4H,0A2H

             DB  0A0H,9EH,9CH,9AH,98H,96H,94H,92H,90H,8EH,8CH,8AH,88H,86H,84H, 82H

             DB  80H,7DH,7BH,79H,77H,75H,73H,71H,6FH,6DH,6BH,69H,67H,65H,63H,61H

             DB  5FH,5DH,5BH,59H,57H,55H,54H,52H,50H,4EH,4DH,4BH,49H,48H,46H,45H

             DB  43H,42H,40H,3FH,3EH,3CH,3BH,3AH,39H,37H,36H,35H,34H,33H,32H,31H

             DB  31H,30H,2FH,2EH,2EH,2DH,2DH,2CH,2CH,2BH,2BH,2BH,2BH,2AH,2AH, 2AH

             DB  2AH,2AH,2AH,2AH,2BH,2BH,2BH,2BH,2CH,2CH,2DH,2DH,2EH,2EH,2FH,30H

             DB  31H,31H,32H,33H,34H,35H,36H,37H,39H,3AH,3BH,3CH,3EH,3FH,40H,42H

             DB  43H,45H,46H,48H,49H,4BH,4DH,4EH,50H,52H,54H,55H,57H,59H,5BH,5DH

             DB  5FH,61H,63H,65H,67H,69H,6BH,6DH,6FH,71H,73H,75H,77H,79H,7BH,7DH

      END

         

相关推荐