当前位置:文档之家› 基于STM32的简易信号发生器

基于STM32的简易信号发生器

绍兴文理学院数理信息学院课程设计报告书题目基于STM32的简易信号发生器电子信息工程专业1班姓名xxx指导教师xxx时间2014年7月12日课程设计任务书基于STM32的简易波形发生器摘要函数信号发生器是一种能够产生多种波形,如正弦波、方波、三角波、锯齿波等的电路。

函数信号发生器在电路实验和设备检测中具有十分广泛的用途。

通过对函数波形发生器的原理以及构成分析,可设计一个能变换出以上波形的波形发生器。

本课题采用STM32[1]为控制芯片,采用DDS[2]的设计方法,可将采样点经D/A[3]转换后输出任意波形,可通过调节D/A转换的频率来调节输出波形的频率,也可通过改变取点的起始位置来调节波形的初始相位。

关键词信号发生器STM32 DDS目录课程设计任务书 (I)摘要 (II)1 设计概述 (1)2 设计方案 (2)3 设计实现 (3)3.1 设计框图及流程图 (3)3.2 MCU控制模块 (5)3.3 按键控制模块 (5)3.4 信号输出模块 (6)3.5 LCD显示模块 (8)4 设计验证 (8)5 总结 (11)1设计概述信号发生器作为一种历史悠久的测量仪器,早在20年代电子设备刚出现时就产生了。

随着通信和雷达技术的发展,40年代出现了主要用于测试各种接收机的标准信号发生器,使得信号发生器从定性分析的测试仪器发展成定量分析的测量仪器。

同时还出现了可用来测量脉冲电路或作脉冲调制器的脉冲信号发生器。

自60年代以来信号发生器有了迅速的发展,出现了函数发生器。

这个时期的信号发生器多采用模拟电子技术,由分立元件或模拟集成电路构成,其电路结构复杂,且仅能产生正弦波、方波、锯齿波和三角波等几种简单波形。

自从70年代微处理器出现以后,利用微处理器、模数转换器和数模转换器,硬件和软件使信号发生器的功能扩大,产生比较复杂的波形。

这时期的信号发生器多以软件为主,实质是采用微处理器对D/A的程序控制,就可以得到各种简单的波形。

在80年代以后,数字技术日益成熟,信号发生器绝大部分不再使用机械驱动而采用数字电路,从一个频率基准有数字合成电路产生可变频率信号。

90年代末出现了集中真正高性能的函数信号发生器,HP公司推出了型号为HP770S的信号模拟装置系统,它是由HP8770A任意波形数字化和HP1770A波形发生软件组成。

信号发生器技术发展至今,引导技术潮流的仍是国外的几大仪器公司,如日本横河、Agilent、Tektronix等。

美国的FLUKE公司的FLUKE-25型函数发生器是现有的测试仪器中最具多样性功能的几种仪器之一,它和频率计数器组合在一起,在任何条件下都可以给出很高的波形质量,能给出低失真的正弦波和三角波,还能给出过冲很小的快沿方波,其最高频率可达到5MHz,最大输出幅度可达到10Vpp。

国内也有不少公司已经有了类似的仪器。

如南京盛普仪器科技有限公司的SPF120DDS信号发生器,华高仪器生产的HG1600H型数字合成函数\任意波形信号发生器。

国内信号发生器起步晚,但发展至今,已经渐渐跟上国际的脚步,能够利用高新技术开发出达到国际水平的高性能多功能信号发生器。

信号发生器在生产实践和科技领域中有着广泛的应用,各种波形曲线均可用三角函数方程式来表达。

函数信号发生器是各种测试和实验过程中不可缺少的工具,在通信、测量雷达、控制教学等领域应用十分广泛。

不论是在生产、科研还是在教学上,信号发生器都是电子工程师信号仿真实验的最佳工具。

而且,信号发生器的设计方法多,设计技术也越来越先进,随着我国经济和科技的发展,对对应的测试仪器和测试手段也提出了更高的要求,信号发生器已成为测试仪器中至关重要的一类,因此,开发信号发生器具有重大意义。

2 设计方案方案一:模数结合实现,一般是在模拟电路上产生函数信号波形,而用数字方式改变信号的频率和幅度。

如采用D/A 装换器与压控电路改变信号频率,用数控放大器或数控衰减器改变信号幅度等。

方案二:模拟电路实现,全采用模拟电路,可用正弦波发生器产生正弦波信号,然后过零比较产生方波,再经积分电路产生三角波。

这种方法电路简单,并具有良好的正弦波和方波信号。

但要通过积分器电路产生同步的三角波信号,存在较大难度。

原因是积分电路的积分时间常数通常不变,而随着方波频率改变,积分器输出的三角波幅度将同时改变。

若要保持三角波幅度,就得同时改变积分时间长度的大小,要实现这点会很难。

方案三:数字电路实现,采用DDS 方法,任何频率的波形都可看做由一系列的取样点所组成,可事先将各波形的数据点存储在ROM 中,再通过时钟的控制顺序从ROM 中读出,再经D/A 转化器进行逐点恢复。

这种方案的波形精度主要取决于函数信号波形的存储点数、D/A 转换器的转换速度、以及整个电路的时序处理等。

设取样时钟频率为c f ,一个正弦波由N 个取样点构成,频率控制字为K ,则输出正弦波信号的频率为c o K f f N ⋅= 公式2-1其信号频率的高低,是通过改变D/A 转换器输入数字量的速率或是取点数量来实现的。

这种方案在信号频率较低时,具有较好的波形质量。

随着信号频率提高,需要提高输入数字量的速率,或减少波形点数。

波形点数的减少,将直接影响函数型号波形的质量,而数字量的输入速率的提高也是有限。

因此,该方案比较适合低频信号,而较难产生高频(如1MHz 以上)信号。

经上各方案比较,为切合本次课题,故采用方案三。

3设计实现本课题硬件原理图较为简单,仅有一单片机STM32F103ZET6及相应的一些外围器件,每种波形在ROM中都存了360个点,在保持波形失真不太明显的条件下,最高频率时可取点40个,此时需要外加RC低通滤波器,使得输出波形较为平滑。

系统时钟频率为72MHz,理论上取40个点的输出波形频率为1.8MHz,但在不同频率下,经过RC低通滤波后的波形会有幅值上的衰减,衰减程度在不同频率下也各不相同,此时可在RC滤波后加入放大器提高幅值,由于此次设计不对5KHz以上频率的波形有过多要求,所以幅值的变化不做太多的关注,仅尝试提高频率。

显示部分采用LCD12864,此LCD与MCU连接较易,仅需片选线、电源线、时钟线及串行数据线,用法也较简单,内置中文字库,4*16点阵完全够实现本次课题所需显示。

本设计原理图见附录。

3.1设计框图及流程图本设计由四个模块组成:MCU控制模块、按键模块、信号输出模块和LCD 显示模块。

如图3-1所示:图3-1 系统框图本设计的流程图如图3-2,主要需要完成的任务有:按键扫描、LCD的显示和D/A转换。

因此在主程序中对各个模块进行初始化。

图3-2主函数流程图程序主函数包括时钟树、GPIO口、中断的初始化。

本设计利用定时器触发DAC转换器的DMA传输,事先将各波形的取样点存在ROM中,在定时器作用下,将点取出,由DMA传输至D/A转换,输出,由于DMA传输不受主程序控制,因此主程序无需保持其运行。

按键控制信号的变换,每个按键对应一个IO 口,当按键按下时电平触发外部中断,此时打开定时器,产生一个20ms的延时去抖动,进入定时器中断后判断IO口的电平是否与记录的键值相同,若相同则说明确有按键按下。

相同的按键有有着不同的键值,不同的键值搭配在程序内对应不同的状态。

此时根据不同的键值所对应的不同的状态选择将要执行的操作。

在波形结构体中保存了“波形”、“幅值”、“频率”和“相位”四个参数信息,利用按键更改其中的值,按下“完成”键后确定修改状态,接着将目前状态的各个参数信息显示在LCD上,由此可完成对波形的自由修改。

通过LCD显示波形信息,可提高操作的可视性和便捷性。

STM32F103ZET6硬件资源丰富,具有512KB的FLASH ROM和64KB 的SRAM,具有144个引脚和105个GPIO口,因此采用独立按键边沿触发的方法来检测按键。

LCD12864采用串行方式传输数据,只需三根数据线。

DAC外设具有两个输出通道,通道1相位可调,通道2用作与通道1对比相位衡为0°。

因此采用如表3-1引脚分配表。

表3-1引脚分配表引脚功能PA0 “减”键PB10 “加”键PB11 “确定”键PB12 “右”键PB13 “左”键PB14 “上”键PB15 “下”键PE15 LCD12864片选PE11 LCD12864数据PE7 LCD12864时钟PA4 信号输出通道1PA5 信号输出通道23.2MCU控制模块系统的MCU采用STM32F103ZET6作为控制模块,主要完成按键扫描、信号输出、LCD显示等。

STM32系列单片机具有内置DAC转换器和DMA控制器,并有最高72MHz的主频,可完成较高频率信号的稳定输出。

3.3按键控制模块系统采用一个摇杆(包含“上”、“下”、“左”、“右”、“选择”键)和两个独立按键(“加”键、“减”键)来控制输出波形的特征。

由于STM32单片机的定时器资源丰富,因此按键消抖延时采用定时器中断的方式。

按键扫描模块的程序流程图如图3-3、图3-4所示:图3-3外部中断流程图图3-4定时器中断流程图当确定有按键按下时,判断键值并完成相应的动作。

其中“上”、“下”、“左”、“右”键切换将要更改的波形特征,“加”键和“减”键修改波形特征的值,如“幅值”、“频率”和“相位”。

3.4信号输出模块单片机的DAC外设、DMA控制器和定时器共同协作完成信号波形的输出。

信号输出采用定时器触发DMA传输数据到DAC寄存器的方式,可大大降低信号输出对CPU的占用率并提高波形的精准性。

DAC信号输出的流程图如图3-5所示:图3-5 D/A 转换流程图输出波形分别为:正弦波、方波、三角波、锯齿波。

程序中采用四个常数数组保存波形值。

为了方便相位的变换,每个数组保存了360个波形数据。

通过将常数数组中的固定值乘以一个比例系数后保存到新数组中,并将新数组的地址与DAC 转换寄存器的地址通过DMA 控制器关联,完成幅值的变换。

初始相位的更改,只需更改数据的起始取样点即可。

本设计的难点是频率的提高。

根据公式2-1c o K f f N ⋅=可得出,要改变信号的频率,可以通过改变频率控制字K 或改变DAC 频率c f 实现。

当c f 到达一定值时,完成一次DAC 转换的时间将大于DMA 传输的时间间隔,此时会出现部分值无法被转换的情况,因此c f 不可太高。

通过调整频率控制字K 也可提高信号的频率,即波形数据中每K 个点取样一个点,可使频率大大提高。

但是由于频率控制字K 的提高会造成波形的明显失真,所以波形的输出采用一级RC 低通滤波器进行滤波,平滑波形。

综上所述,当频率低于课题的基本要求5KHz 时,通过改变c f 实现频率的变换。

当频率大于5KHz 时,通过改变频率控制字K 提高信号的频率,并将波形通过RC 低通滤波器滤波。

相关主题