基于stm32的信号发生器设计
- 格式:doc
- 大小:73.50 KB
- 文档页数:17
绍兴文理学院数理信息学院课程设计报告书题目基于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的程序控制,就可以得到各种简单的波形。
摘要摘要信号发生器是一种能产生多个函数信号的的仪器,常见的有正弦波、方波、三角波等。
在电子技术飞速发展的今天,信号发生器作为各种信号源无论在实验室还是在设备检测中已经具有十分广泛的用途。
传统的信号发生器大多是基于模拟电子技术设计制作的,这种信号源制作简单,成本低廉,但是它的缺点也很多,比如不便于存储,频率稳定度差,失真度高等。
DDS是以全数字技术,从相位概念出发直接合成所需波形的一种新的合成原理。
本设计采用DDS和单片机技术相结合,以STM32F103RBT6芯片及AD9834为核心设计了一种幅度、相位、频率都可调节的信号发生器,它不仅能克服传统的正弦波信号发生器的缺点,而且由模拟乘法器产生调幅电路、采用数字键控的方法实现二进制PSK、ASK信号,且频带较宽、频率稳定度高,波形良好。
该信号发生器具有更强的市场竞争力,在跳频技术、无线电通信技术方面具有比较广阔的发展前景。
关键字:信号发生器,STM32F103RBT6,DDS,AD9834IABSTRACTABSTRACTSignal generator can generate multiple functions is a signal of the instrument, common have a sine wave, square wave, triangle wave, etc. In today's rapid development of electronic technology, signal generator as a variety of signal source in the laboratory or in the equipment testing has a very wide range of USES. Most of the traditional sine wave signal generator is designed based on analog electroni c technology, this is simple and low cost production source, but it has many shortcomin gs, such as it is not easy to store,its frequency stability is poor, high distortion and so on. DDS is a new synthetic principle which based on the all-digital technology, starting fro m the concept of phase direct synthesis of waveforms required.This design uses DDS an d microcontroller technology, the AD9850 DDS chip to the core ,design a sine wave sig nal generator,whose magnitude, phase, frequency can be regulated.It’s not only can over come the traditional shortcomings of the sine wave signal generator, and the amplitude circuit is produced by the analog multiplier , the digital keying is used to achieve binary PSK, ASK signal, and it has wide band, high frequency stability, wave good. The signal generator has a stronger market competitiveness, in the frequency hopping, radio comm unication technology has relatively broad prospects for development.Key words: signal generator, STM32F103RBT6, DDS, AD9834II目录目录第1章引言 (1)1.1 选题背景 (1)1.2 研究目标和意义 (2)1.3 研究思路 (2)第2章方案论证 (3)2.1 主控制器 (3)2.2 信号发生源 (4)2.3 系统稳压模块 (5)2.4 DDS稳压模块 (5)2.5 频率控制模块 (5)2.6 串口模块 (6)2.7 显示模块 (6)第3章硬件模块详解 (8)3.1 STM32F103RBT6简介 (8)3.1.1 综述 (8)3.1.2 结构概览 (8)3.1.3 特性 (9)3.1.4 芯片引脚排列说明 (10)3.2 信号发生模块 (12)3.2.1 综述 (12)3.2.2 特点和优势 (12)3.2.3 芯片引脚排列及功能 (13)3.3 正弦调制信号的产生 (15)3.4 三角波调制信号的产生 (16)3.5 LCD显示器 (17)3.5.1 综述 (17)3.5.2 基本特征 (17)3.5.3 控制器接口信号说明 (18)III目录第4章硬件电路设计 (20)4.1 STM32主控电路及液晶显示电路 (20)4.2 AD9834信号源模块 (22)4.3 系统电源模块及DDS电源 (23)4.4 控制模块 (24)4.5 串口模块 (24)第5章系统软件设计及调试 (26)5.1 Keil软件的介绍 (26)5.2 系统软件设计 (27)5.2.1 软件流程图 (28)5.2.2 系统软件设计原理 (28)5.3 信号产生的程序 (29)5.4 测试仪器 (31)5.4.1 技术性能 (34)5.5 指标测试 (34)5.5.1 正弦波指标测试 (34)5.5.2 三角波指标测试 (34)5.5.3 方波指标测试 (34)5.6 测试结果 (35)参考文献 (38)致谢 ...........................................................................错误!未定义书签。
基于STM32的汽车空调调速模块信号发生器的设计毕业论文,多少人心中的痛,过来人都体会过那种滋味。
为了表示小编对毕业生们的无限同情,在这里直接送上物理学毕业论文一篇!摘要:适应汽车电子技术的发展,根据汽车空调调速模块生产中的测试需要,设计了一种支持多类型信号输出的汽车空调调速模块信号发生器。
可支持OV-10V分辨率O.1V的直流输出;频率10Hz-lOOOHz,占空比O%-lOO%的PWM输出;LIN-BUS总线输出。
涵盖了目前主流的三种类型信号,具有输出精度高、输出稳定、使用简单的特点。
根据实际需要,设计了测试和老化两种工作模式,测试模式用于人工测试产品使用,老化模式用于产品老化实验阶段自动循环扫描输出。
关键词:DC;LIN;PWM引言近年来,随着汽车电子技术的发展,汽车已经深入人们的生活。
汽车空调作为汽车舒适系统的重要部分,也越来越引起驾驶者的关注。
汽车空调调速模块主要用于控制空调鼓风机的转速,进而改变空调出风量的大小,是汽车空调系统里的重要组成部分也是最容易损坏的部件。
从过去简单的纯电阻分压换挡到现在的电子开关式调速模块的无级调速,集成度越来越高,功能也越来越丰富。
汽车空调控制器ECU发出的调速信号类型也从DC直流、PWM占空比等模拟信号向LIN通信的数字化方向发展。
以往测试模块往往需要借助直流电源、DDS 函数信号发生器,带LIN通信的模块测试时,甚至需要购买整套空调控制系统才可进行测试,成本高、操作复杂。
本文设计的汽车空调调速模块信号发生器则将上述几种信号集成在了一个信号发生器里,并根据产品实际研发和生产需要,设计了简洁的人机界面,大大降低了对操作工人的技术水平要求。
同时增加了老化模式,方便产品老化需要。
本文提出的汽车空调调速模块信号发生器设计方案支持OV~10V直流电压信号输出,分辨率O.lV,数字步进输出;频率范围10Hz~1000Hz,0%~100%占空比下的PWM信号输出:支持LIN2.0标准LIN-BUS总线通信输出,数据帧内容可根据新增模块进行升级扩展。
梧州学院毕业设计(论文)任务书课题名称:基于STM32的触屏式信号发生器的设计与实现系部:电子信息工程系专业:电子信息工程专业班级:10电本(1)班学号:1001902137姓名:颜枝源指导教师(签名)2014年3月3日教研室主任(签名)2014 年3月5日一、课题的内容和要求:本设计以STM32F103RBT6芯片作为系统的主控核心,在此基础上设计开发一款基于AD9851芯片的触屏式多波形DDS信号发生器。
设计分为两大内容。
第一大内容是触屏控制部分的研究与实现,具体将实现TFT电阻触摸屏的显示和触摸控制功能,制作完成一个良好的人机交互界面;第二大内容是信号发生部分的研究与实现,利用AD9851芯片,通过低通滤波电路、AD603可调增益放大电路、比较电路和积分电路等电路,实现正弦波、方波、三角波的输出,同时实现信号频率、信号峰值、正弦波相位、方波占空比可调等功能。
要求:1. 实现正弦波、方波、三角波的输出,同时实现信号频率、信号峰值、正弦波相位、方波占空比可调等功能。
2.在TFT彩屏上将当前设置信号的波形、频率、幅值等信息显示出来。
3.在触摸屏上设计波形选择按键、频率步进按键和幅值相位调节按键,实现对信号相应参数的调节。
4. 在工作状态下,如果超过60秒没人触碰触摸屏,系统将自动进入低功耗模式,达到节能省电的效果。
二、设计的技术要求与数据(或论文主要内容):本设计以STM32F103RBT6芯片作为系统的主控核心,通过给DDS芯片AD9851发送不同指令以实现各项既定功能。
本设计要求纯熟掌握STM32的硬件结构,学会运用STM32固件库进行程序编写,深入了解TFT彩屏的显示原理和电阻触摸屏的触摸控制原理,深入学习直接数字频率合成技术(DDS),学会应用AD603可调增益电路、比较电路、积分电路和低通滤波电路等典型电路对波形进行处理优化。
数据:1.波形种类:正弦波、方波、三角波,触屏选择波形;2.频率范围:AD9851输出1Hz~20MHz稳定正弦波,最终输出端输出1~10MHz正弦波、1Hz~1MHz方波和1Hz~1MHz三角波,触屏调节信号频率;3.幅值范围:1~5V,触屏调节峰值;4.方波占空比:10%~90%,触屏调节占空比。
基于STM32的可编程函数信号发生器设计【摘要】该文设计了一种基于STM32和DAC8871的可编程函数信号发生器。
该装置由STM32子系统、DA转换电路、电压基准电路、Flash存储电路、波形选择电路及显示电路六大部分组成。
该装置采用SPI通信方式,可同时产生六种幅值可调(可达±15V)、频率可变的不规则波形信号。
【关键词】STM32;DA转换;不规则波形;函数信号发生器引言函数信号发生器是电子测量、电子设备开发及电子工程相关课程实验必备的仪器设备之一,除供通信,仪表和信号采集处理,自动控制系统测试用外,还广泛用于其他非电测量领域。
不过,现今多数函数信号发生器仅能产生固定的常规波形信号,如:三角波、阶梯波、方波及正弦波等。
为此,笔者提出一种基于STM32的可编程函数信号发生器的设计方法。
该方法以STM32单片机为核心,从Flash芯片读取波形信息,通过DAC8871进行DA转换,得到各种非常规波形,并可通过外部中断口实现不同波形的选择,而且可通过电压基准电路调节和末端运放调节输出信号的增益来实现波形幅度的调节,能满足产生任意波形的需求。
1.系统总体结构本装置的总体结构图如图1所示。
本系统主要分为STM32子系统、DA转换电路、电压基准电路、Flash存储电路、波形选择电路以及显示电路六大部分。
首先,系统从Flash芯片中读取不规则波形数组信息,通过SPI2口传送入STM32,由外部中断口检测波形的选择,再通过SPI1口将波形数字信号传送到DAC8871进行DA转换,经过电压基准电路以及运放电路对其幅度的调节后,最终输出不规则的模拟信号波形。
图1 系统总体结构图2.硬件设计2.1 STM32子系统及Flash存储电路STM32子系统及Flash存储电路图如图2所示。
STM32子系统以意法半导体(ST)公司生产的32位中容量ARM芯片STM32F103RBT6[1]为核心,结合复位电路、晶振电路、PL2303接口转换电路及电源电路构成。
基于STM32单片机的变频正弦信号发生器蒋昭颖【摘要】In order to satisfy the requirement of frequency domain response of AC servo motor, we proposed a method for produce a sine-wave signal of frequency conversion based on ARM. The hardware system is used to PWM output to produce a sine-wave signal of frequency conversion by STM32F103. The software system adopts the Keil as development environment. Simulations using software and oscilloscope accomplish to detect output signal. The results show that the proposal can satisfy the requirement of frequency domain response of AC servo motor.%为了实现对三相永磁式同步交流伺服电机频域响应的检测需求,提出了一种基于ARM单片机的变频率PWM正弦信号发生器的设计方案,并完成系统的软硬件设计。
该系统的硬件部分采用STM32F103系列ARM单片机,用于PWM方式输出变频率的模拟正弦信号,软件部分采用Keil进行编程。
通过软件仿真和示波器对输出信号进行检测,利用该方案的正弦信号发生器对三相永磁式同步交流伺服电机进行频率响应测试,将得到的数据利用matlab绘图,实验结果表明此方案产生的正弦信号发生器满足电机频响需求。
【期刊名称】《电子设计工程》【年(卷),期】2016(024)005【总页数】4页(P190-193)【关键词】交流伺服电机;ARM单片机;PWM;正弦信号发生器【作者】蒋昭颖【作者单位】国电子科技集团第15研究所北京 100083【正文语种】中文【中图分类】TN710近年来,中国航空工业的发展进一步加速,新型号,新机型不断推出,大型运输机成功首飞,C919大型客机开始进行结构总装,航空零部件生产规模不断扩大,这一系列成就预示着中国的大飞机时代正离我们越来越近。
www�ele169�com | 15电子电路设计与方案0 引言信号发生器在生产实践和科技领域中有着广泛的作用,而且如今高校实验室都有装备,它是一种不可缺少的通用信号源,但是在市面上的函数信号发生器少则几百多则上千,对于一名学生来说是奢侈的。
现如今,电子科技技术高速发展,嵌入式系统设计越来越成熟,我们可以通过使用成熟的嵌入式芯片系统用来设计具有真正的实用性和成本低廉的函数信号发生器。
1 系统设计如图1所示,基于STM32函数信号发生器的研究内容分为任意波形合成与任意波形合成后模拟通道数据综合处理后的信息显示部分,其中程控接口为写入STM32最小系统的软件控制部分,这是基于STM32函数信号发生器的核心部分。
任意波形合成则由软件进行控制合成,硬件采用的是成熟的STM32最小系统板。
模拟通道数据综合处理后的信息显示部分主要实现的就是输出经过单片机处理后的模拟信号使其显示在屏幕上。
图1 系统框图2 函数信号发生器系统波形生成原理任何波形可以看成由一系列时间点电压组成,这些点包含了电压信息,时间信息,我们需要根据实际情况确定一个周期内要多少个时间间隔相同的点组成,改变点数量或者改变时间间隔,这样来改变频率,再来确定每个时刻点输出的电压大小用来确定/改变波形的电压。
图2 任意波形合成流程图单片机只可以处理数字信号,输出高低电平,要想生成模拟信号可以使用STM32单片机内部自带的D/A 转换,实现定时在某一时刻输出某一电压,这些数字量事先存储在存储器里,由单片机定时输出一个数字量传递给D/A 转换芯片由芯片进行转换, D/A 转换出的一系列点服从相应的函数表达式,故改变这个函数表达式就可以得到相应的波形,以此来进行输出不同波形。
由于受到D/A 转换器本身属性限制与精度无关,所有的波形都是阶梯波逼近,当频率越高这种现象越不明显,但是实际上仍然存在,故采用STM32内部的12位精度D/A转换器可以满足要求。
3 函数信号发生器系统硬件与软件设计■3.1 系统硬件设计基于STM32函数信号发生器采用的STM32F103VET6最小系统版可以很好的满足要求,而且此系列之间引脚功能都可以兼容,设计时可以选用性价比更高的芯片或者直接选用成熟的STM32成熟模块,省去了硬件设计的烦恼,增强设备的稳定性与性能。
h g 攀枝花学院本科毕业设计(论文)基于STM32的信号发生器学生姓名: 钟尚儒学生学号: 201310501084院(系): 电气信息工程学院年级专业: 2013级电子信息工程2班指导教师:郝小江 助理指导教师:二〇一七年六月摘要随着电子产品的发展,单片机处理器的应用已经广泛的应用在日常生活中每个角落。
特别是在信号发生器中的应用,信号发生器在各行各业中发挥着重要的作用,具有非常重要的意义,现实中接触比较多的是教学实践中,由于很多学校的研究经费有限,不能购买精密的昂贵器材等原因,急需要设计出一款智能化,低成本的信号发生器,可以输出三角波、方波和正弦波等波形。
在本文中根据现实的需求设计出一款基于STM32F103Cx的信号发生器系统,整体设计由处理器模块、电源电路模块、AD9833电路模块、按键电路模块、数字显示模块几部分组成。
处理器模块采用STM32F103Cx芯片作为该系统的核心处理模块,采用LCD1602液晶显示器作为该系统的显示模块,按键方案采用独立按键的方式更加容易控制设置输出数据,电源接口采用USB方式,使用更加方便。
该设计系统采用altium designer等软件完成PCB版的设计,然后进行焊接和测试等,采用keil软件进行编写软件程序,完成波形的输出等,最后经过软硬件设计出可输出三种波形:三角波、方波和正弦波。
该系统的设计具有简单和性能优良等优点,最后经过软硬件的调试之后,各项功能和性能都满足设计的要求。
关键词:STM32F103Cx单片机,AD9833电路模块,液晶显示器1602,DDS信号发生器攀枝花学院本科毕业设计(论文)ABSTRACTABSTRACTAbstract: With the development of electronic products, the application of single-chip processor has been widely used in every corner of daily life. Especially in the application of signal generator, the signal generator in all walks of life play an important role, has a very important significance, the reality of contact with more teaching practice, because many schools of research funding is limited, not The purchase of sophisticated equipment and other reasons, the urgent need to design an intelligent, low-cost signal generator, you can output triangular wave, square wave and sine wave and other waveforms. In this paper, according to the actual needs of a design based on STM32F103Cx signal generator system, the overall design by the processor module, power circuit module, AD9833 circuit module, key circuit module, digital display module composed of several parts. Processor module using STM32F103Cx chip as the core of the system processing module, the use of LCD1602 LCD display as the system's display module, the key program using a separate key way easier to control the output data output, power interface using USB way, the use of more convenient. The design system uses altium designer and other software to complete the PCB version of the design, and then welding and testing, the use of keil software to write software programs to complete the output of the waveform, and finally through the hardware and software design can output three waveforms: triangular wave Wave and sine wave. The design of the system is simple and excellent performance, etc., and finally after the hardware and software debugging, the functions and performance to meet the design requirements.Key words:STM32F103Cx single-chip,AD9833 circuit module, liquid crystal display 1602, DDS Signal generator目录摘要 (I)ABSTRACT (II)第一章绪论 (1)1.1 课题背景与研究意义 (1)1.2国内外研究现状和发展趋势 (3)1.3本文研究的主要内容 (5)第二章系统方案设计 (6)2.1DDS的基本原理 (6)2.2处理器方案 (7)2.3显示方案 (9)2.4按键方案 (9)2.5方案确立 (10)第三章硬件设计方案 (11)3.1系统总体设计 (11)3.2处理器模块 (12)3.3AD9833电路模块 (12)3.4按键电路模块 (13)3.5电源模块 (14)3.6显示模块电路 (15)3.7本章总结 (16)第四章软件设计方案 (17)4.1系统总体软件设计 (17)4.2三角波输出模块软件设计 (17)4.3方波输出模块软件设计 (18)4.4正弦波模块软件设计 (19)4.5按键子程序模块软件设计 (20)4.6数字显示模块软件设计 (21)4.7本章总结 (22)第五章系统调试 (23)第六章结论 (29)参考文献 (30)附录A:原理图 (31)附录B:系统主程序 (33)致谢 (49)第1章绪论1.1 课题背景与研究意义随着二十世纪四十年代电子仪器时代的兴起到现在,示波器和函数信号发生器的技术越来越成熟,精度和集成度越来越高,体积也越来越小。
课程设计报告设计课题:基于STM32的信号发生器设计专业班级:电气与信息工程通信二班学生姓名:***指导教师:***设计时间:2013.9.20~~~2013.10.7信号发生器一.实验概述本系统以低功耗单片机stm32为主控器件,分为微控制器、FPGA、DA转换器、功率放大等模块,实现了一个能产生任意波形的波形发生器。
本设计利用单片机生成各种波形的数据,将数据传输给RAM存储器,通过后级的DA转换器实现波形的产生。
系统采用触摸屏方式输入波形参数和手绘波形,频率1HZ步进可调,峰-峰值可在0到10V之间任意调节。
电路设计条理清晰,人机交互界面友好,控制方便,很好地完成了题目的所有基本和发挥要求。
二.实验要求与目的实验要求:设计简易函数信号发生器系统实验目的:掌握应用嵌入式系统生成函数信号的方法三.实验内容与实验设备实验内容:a)设计程控放大器电路b)设计嵌入式系统电路及程序,实现信号发生器基本功能,可以产生三种标准波形:正玄波、三角波和方波;c)编写嵌入式系统程序,实现函数信号发生器功能,可以对标准波形设计频率、周期、最大值、最小值、峰峰值、偏移量和方波占空比。
d)编写嵌入式系统程序,实现随机信号发生器功能,输出在手写板上描绘的波形。
e)编写嵌入式系统程序,实现通讯功能,可以通过RS232接口设置输出信号。
实验设备:a)示波器、信号发生器、万用表b)STC单片机开发板、C8051F开发板、STM32开发板实验器件: STM32F103ZET6、ADUC7026四.方案比较1.1波形生成方案方案一:采用锁相式频率合成方案这种方案利用锁相环将压控振荡器VCO的输出频率锁定在所需频率上。
这种方案具有很好的窄带跟踪特性,很好的选择所需频率。
但由于模拟方法合成的正弦波参数(如:幅度,频率,相位)都很难被控制,难以满足实现任意波形的要求。
方案二:采用STM32单片机生成波形,由于是软件滤波,所以不会有寄生的高次谐波分量,生成的波形比较纯净。
基于STM32的信号发生器设计【摘要】本系统以单片机STM32F107为控制核心,通过按键输入所需波形参数的数字量,然后由STM32F107自带的DA把数字量转换成模拟量来调整波形的幅值、频率及方波的占空比;电压步进100mV,频率步进50Hz,方波占空比可调;按键应用的是独立按键,用来切换波形、时钟,幅值,频率以及占空比;其频率的调解就是调节其中断间隔的时间,幅值就是调节其数字的大小;为了波形的合成,采用的点的个数都是128个;显示部分采用TFT液晶,实时显示其波形名称,幅值、频率以及占空比参数变化。
关键字:信号发生器设计;三相;STM32;DA转换目录前言 (1)1设计任务 (2)1.1 波形发生器系统的设计指标 (2)1.2基本要求 (2)2设计方案 (3)2.1 信号产生部分 (3)2.2 幅度进行调整部分 (3)2.3 对频率调整部分 (4)3系统整体设计 (5)3.1 系统总框图 (5)3.2 各模块功能 (5)3.2.1 波形产生电路 (5)3.2.2 按键部分 (5)3.2.3 显示部分 (5)3.2.4 DAC转换器 (6)4各个模块的实现及分析 (7)4.1 正弦波的产生 (7)4.2 三角波的产生 (7)4.3 方波的产生 (7)4.4 幅度的控制 (7)4.5 频率的控制 (7)4.6 按键模块 (8)4.7 RTC的设置 (8)5 软件设计 (10)6调试部分 (11)6.1控制电路的调试 (11)6.2硬件电路的调试 (11)7系统测试与数据分析 (12)7.1 正弦波、方波和三角波的频率测试 (12)7.2 正弦波、方波和三角波的幅值测试 (12)7.3 方波占空比测试 (12)总结 (14)参考文献 (15)附录信号发生器各模块的程序 (16)前言信号发生器作为一种历史悠久的测量仪器,早在20年代电子设备刚出现时就产生了。
随着通信和雷达技术的发展,40年代出现了主要用于测试各种接收机的标准信号发生器,使得信号发生器从定性分析的测试仪器发展成定量分析的测量仪器。
课程设计报告For personal use only in study and research; not for commercial use设计课题:信号发生器专业班级:电子信息科学与技术一班学生姓名:***指导教师:***设计时间:信号发生器一.实验概述本系统以低功耗单片机stm32为主控器件,分为微控制器、FPGA、DA转换器、功率放大等模块,实现了一个能产生任意波形的波形发生器。
本设计利用单片机生成各种波形的数据,将数据传输给RAM存储器,通过后级的DA转换器实现波形的产生。
系统采用触摸屏方式输入波形参数和手绘波形,频率1HZ步进可调,峰-峰值可在0到10V之间任意调节。
电路设计条理清晰,人机交互界面友好,控制方便,很好地完成了题目的所有基本和发挥要求。
二.实验要求与目的实验要求:设计简易函数信号发生器系统实验目的:掌握应用嵌入式系统生成函数信号的方法三.实验内容与实验设备实验内容:a)设计程控放大器电路b)设计嵌入式系统电路及程序,实现信号发生器基本功能,可以产生三种标准波形:正玄波、三角波和方波;c)编写嵌入式系统程序,实现函数信号发生器功能,可以对标准波形设计频率、周期、最大值、最小值、峰峰值、偏移量和方波占空比。
d)编写嵌入式系统程序,实现随机信号发生器功能,输出在手写板上描绘的波形。
e)编写嵌入式系统程序,实现通讯功能,可以通过RS232接口设置输出信号。
实验设备:a)示波器、信号发生器、万用表b)STC单片机开发板、C8051F开发板、STM32开发板实验器件: STM32F103ZET6、ADUC7026四.方案比较1.1波形生成方案方案一:采用锁相式频率合成方案这种方案利用锁相环将压控振荡器VCO的输出频率锁定在所需频率上。
这种方案具有很好的窄带跟踪特性,很好的选择所需频率。
但由于模拟方法合成的正弦波参数(如:幅度,频率,相位)都很难被控制,难以满足实现任意波形的要求。
方案二:采用STM32单片机生成波形,由于是软件滤波,所以不会有寄生的高次谐波分量,生成的波形比较纯净。
它的特点是价格低、性能高,在低频范围内稳定性好、操作方便、体积小、耗电少。
经比较,方案二既可满足课程设计的基本要求又能充分发挥其优势,电路简单,易控制,性价比高,所以采用该方案1.2任意波形的生成原理方案一:触摸屏绘制波形以触摸屏作为操作界面,用户可在触摸屏上输入波形参数及绘制波形。
此方法操作简易,并且可绘制任意波形,但是对编程者要求较高,故选择相对简单的用键盘输入数据。
方案二:用键盘输入数据采用键盘输入,这是最基本的方法。
优点是输入值精确。
但用户自定义输入时无法自由输入想要的特殊波形,而且输入数据繁琐,操作麻烦,由于实现相对简单,故本实验采用该方案。
五.系统设计分析(A)硬件部分(B ) 微控制器软件实现:微控制器主要用于完成数据的采集,显示以及处理,生成各种波形数据,本系统采样256个数据,采用8位DA 转换器,因此RAM 地址位设置为8位,数据位设置为8位。
微控制器先进行数据收集处理,生成各种波形的归一化数据,然后存储在256位的数组里,根据幅值要求乘以相应的系数,最终生成可以存放在RAM 里的数据。
本系统采用12位DA 转换器,最大输出电压为5Vpp ,功率放大为2倍,所以系统最大的输出电压可以达到10Vpp,可计算出最小电压分辨率为:电压分辨率:K=10/4096(V )(A) 是波形发生器的主流图,由系统初始化和人机交互模块组成,其中液晶显示子模块和键盘输入处理子模块占用单片机主要处理时间,单片机反复运行该模块程序人机交互模块相当于系统的监控程序;(B )是定时中断服务流程图,波形发生模块放置在定时中断服务程序中,系统每隔一定时间,产生一个定时中断,暂停主流程运行,转到定时中断服务程序起始处,执行波形发生模块,该模块输出一个样值后,结束此次中断服务,返回主流程断点处继续运行。
反复多次定时中断服务,从而完成波形生成。
(C)键盘输入处理子模块在具体实现时,键值识别部分作为主程序,键功能处理部分作为子程序,它们之间的关系是主程序调用子程序。
键盘的工作过程:(1)扫描键盘,获得列扫描码和行状态码,从而确定被按下的按键的键值;(2)根据键值,通过散转表,跳转到相应的键功能处理部分;(3)进入键处理部分,完成键功能;(4)完成一次键输入工作。
通过键盘对单片机系统进行设置,每按一次键,键盘都会有上述的处理过程,每次仅能完成一个键功能。
在实际设置波形参数时,一个参数需要多个键功能来实现,那么相应的键盘也要多次完成键值识别,跳转键处理的工作过程。
(D)函数参数设置(1)正弦波归一化数据生成函数S(t)=sin(t) /(2K)(2)三角波归一化数据生成函数T(t)=t/(63 *2K) (t<64)T(t)=(127-t)/(63 *2K) (64<t<128)T(t)=(t-128)/(63 *2K) (128<t<192)T(t)=(255-t)/(63 *2K) (192<t<256)(3)方波归一化数据生成函数根据电压分辨率可以得出方波归一化数据生成函数为:F(t)= 1/(2k) (0<t<128)F(t)= - 1/(2k) (128<t<256)(4)5次谐波数据的生成函数W(t)=a*sin(t)+ b*sin(2t+m)+ c*sin(3t+n)+d* sin(4t+p)+ e*sin(5t+q) 此函数要求幅值和相位参数:(5)正弦波、方波、三角波线性组合波数据生成函数D(t)=a*S(t)+ b*F(t+m)+ c*T(t+n)(E)实验参考程序/*----------------------------------------------------------------------------* 功能:STM32 DAC 数模转换(正弦波/矩形波/三角波)输出实验* 说明:按SW5 输出正弦波/ 按SW4 输出矩形波/ 按SW3 输出三角波, 输出端口PA4*----------------------------------------------------------------------------*/#include <stdio.h>#include <stm32f10x_lib.h> // STM32F10x Library Definitions#include "STM32_Reg.h" // STM32 register and bit Definitions #include "STM32_Init.h" // STM32 Initialization#include "common.h"#include "sine_wave_1024.h"// 输出端口: PA4#define SINE_W A VE 1//sine 正弦波#define RECT_W A VE 2//rectangular 矩形波#define HACKLE_WA VE 3//hackle 三角波UINT8 flag = 0;UINT8 func = SINE_W A VE;/*----------------------------------------------------------------------------MAIN function*----------------------------------------------------------------------------*/int main (void){UINT16 i = 0;UINT32 *pDAC_BASE = (UINT32 *)DAC_BASE;stm32_Init(); // STM32 setupLED_Init();//打开DAC时钟使能RCC->APB1ENR |= (UINT32)(1 << 29);//设置DAC控制参数*(pDAC_BASE + 0x00) = (0x01 << 0)| (0x00 << 2) | (0x04 << 3) | (0x03 << 6) | (0x0b << 8);*(pDAC_BASE + 0x04) = 0x01printf(" --------------- Program start --------------- \r\n");while (TRUE) // Loop forever{if(!Get_SW5()){func = SINE_W A VE;}else if(!Get_SW4()){func = RECT_W A VE;}else if(!Get_SW3()){func = HACKLE_WA VE;}switch(func){case SINE_W A VE://------------------------------------------------------------- #ifdef SINE_W A VEif(i < 1024) i+=2;else i = 0;*(pDAC_BASE + 0x08) = Sine_W A VE[i] << 4;#endif//------------------------------------------------------------- break;case RECT_W A VE:#ifdef RECT_W A VEfor(i=0;i<2000;i++)*(pDAC_BASE + 0x08) = 0x0fff;for(i=0;i<2000;i++)*(pDAC_BASE + 0x08) = 0;#endif//------------------------------------------------------------- break;case HACKLE_WA VE:#ifdef HACKLE_WA VEif(flag){flag = 0;while(TRUE){if(i < 4096) i += 1;else break;*(pDAC_BASE + 0x08) = i;}}else{flag = 1;while(TRUE){if(i > 0) i -= 1;else break;*(pDAC_BASE + 0x08) = i;}}#endifbreak;default:break;}//-------------------------------------------------------------} // end while} // end main/*---------------------------------------------------------------------------- * 设置方向*----------------------------------------------------------------------------*/ void Set_IO_direction(UINT8 PORT, UINT8 GPIO, UINT8 Value) {RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;if(PORT == PORT_A){if(GPIO < 8){GPIOA->CRL &= ~(0x0f << (GPIO * 4)); //Clr used bitGPIOA->CRL |= (Value << (GPIO * 4)); //Set used bit }else{GPIOA->CRH &= ~(0x0f << (GPIO * 4 - 8 * 4));//Clr used bitGPIOA->CRH |= (Value << (GPIO * 4 - 8 * 4));//Set used bit }}if(PORT == PORT_B){if(GPIO < 8){GPIOB->CRL &= ~(0x0f << (GPIO * 4)); //Clr used bitGPIOB->CRL |= (Value << (GPIO * 4)); //Set used bit }else{GPIOB->CRH &= ~(0x0f << (GPIO * 4 - 8 * 4));//Clr used bitGPIOB->CRH |= (Value << (GPIO * 4 - 8 * 4));//Set used bit }}if(PORT == PORT_C){if(GPIO < 8){GPIOC->CRL &= ~(0x0f << (GPIO * 4)); //Clr used bitGPIOC->CRL |= (Value << (GPIO * 4)); //Set used bit }else{GPIOC->CRH &= ~(0x0f << (GPIO * 4 - 8 * 4));//Clr used bitGPIOC->CRH |= (Value << (GPIO * 4 - 8 * 4));//Set used bit }}if(PORT == PORT_D){if(GPIO < 8){GPIOD->CRL &= ~(0x0f << (GPIO * 4)); //Clr used bitGPIOD->CRL |= (Value << (GPIO * 4)); //Set used bit }else{GPIOD->CRH &= ~(0x0f << (GPIO * 4 - 8 * 4));//Clr used bitGPIOD->CRH |= (Value << (GPIO * 4 - 8 * 4));//Set used bit }}if(PORT == PORT_E){if(GPIO < 8){GPIOE->CRL &= ~(0x0f << (GPIO * 4)); //Clr used bitGPIOE->CRL |= (Value << (GPIO * 4)); //Set used bit }else{GPIOE->CRH &= ~(0x0f << (GPIO * 4 - 8 * 4));//Clr used bitGPIOE->CRH |= (Value << (GPIO * 4 - 8 * 4));//Set used bit }}}/*---------------------------------------------------------------------------- SendCharWrite character to Serial Port.*----------------------------------------------------------------------------*/int SendChar (int ch) {while (!(USART2->SR & USART_FLAG_TXE));USART2->DR = (ch & 0x1FF);return (ch);}/*---------------------------------------------------------------------------- GetKeyRead character to Serial Port.*----------------------------------------------------------------------------*/int GetKey (void) {while (!(USART2->SR & USART_FLAG_RXNE));return ((int)(USART2->DR & 0x1FF));}void LED_Init(void){Set_IO_direction(PORT_E,LED1,OUTPUT);Set_IO_direction(PORT_E,LED2,OUTPUT);Set_IO_direction(PORT_E,LED3,OUTPUT);Set_IO_direction(PORT_E,LED4,OUTPUT);Set_IO_direction(PORT_B,SW2,INPUT);Set_IO_direction(PORT_B,SW3,INPUT);Set_IO_direction(PORT_E,SW4,INPUT);Set_IO_direction(PORT_E,SW5,INPUT);Turn_OFF_LED1();Turn_OFF_LED2();Turn_OFF_LED3();Turn_OFF_LED4();}/*---------------------------------------------------------------------------- insert a delay time.*----------------------------------------------------------------------------*/ void delay(unsigned int nCount){for(; nCount != 0; nCount--);}正弦波归一化程序: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,0 xe7,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,0xf f,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,0xf1,0xef,0xee,0xec,0x ea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0x b4,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 };六.数据测试与测试分析(1)输出波形频率范围测试测试数据见下表:条件:峰峰值为5V。