1、 掌握应用嵌入式系统生成函数信号的方法 三实验内容与实验设备 实验内容: 设计程控放大器电路 a)设计嵌入式系统电路及程序,实现信号发生器基本功能,可 b) 以产生三种标准波形:正玄波、三角波和方波;编写嵌入式系统程序,实现函数信号发生器功能,可以对标 c)准波形设计频率、周期、最大值、最小值、峰峰值、偏移量 和方波占空比。编写嵌入式系统程序,实现随机信号发生器功能,输出在手 d) 写板上描绘的波形。接口编写嵌入式系统程序,实现通讯功能,可以通过RS232e) 设置输出信号。 实验设备: 示波器、信号发生器、万用表a) 开发板C8051F单片机开发板、开发板、STM32STCb) ADUC70
2、26 、 实验器件: STM32F103ZET6 文档大全实用标准文案 四方案比较 1.1 波形生成方案 方案一:采用锁相式频率合成方案 这种方案利用锁相环将压控振荡器VCO的输出频率锁定在所需频率上。这种方案具有很好的窄带跟踪特性,很好的选择所需频率。但由于模拟方法合成的正弦波参数(如:幅度,频率,相位)都很难被控制,难以满足实现任意波形的要求。方案二:采用STM32单片机生成波形,由于是软件滤波,所以不会有寄生的高次谐波分量,生成的波形比较纯净。它的特点是价格低、性能高,在低频范围内稳定性好、操作方便、体积小、耗电少。经比较,方案二既可满足课程设计的基本要求又能充分发挥其优势,电路简单,易
3、控制,性价比高,所以采用该方案 1.2 任意波形的生成原理 触摸屏绘制波形 以触摸屏作为操作界面,用户可在触摸屏上输入波形参数及绘制波形。此方法操作简易,并且可绘制任意波形,但是对编程者要求较高,故选择相对简单的用键盘输入数据。用键盘输入数据 采用键盘输入,这是最基本的方法。优点是输入值精确。但用户自定义输入时无法自由输入想要的特殊波形,而且输入数据繁琐,操作麻烦,由于实现相对简单,故本实验采用该方案。五系统设计分析 (A)硬件部分 液晶屏 STM32 D/A 运放 示波器键盘输入控制 微控制器软件实现: B)( 微控制器主要用于完成数据的采集,显示以及处理,生成各种波形数据,本系统采样256
4、个数据,采用8位DA转换器,因此RAM地址位设置为8位,数据位设置为8位。微控制器先进行数据收集处理,生成各种波形的归一化数据,然后存储在256位的数组里,根据幅值要求乘以相应的系数,最终生成可以存放在RAM里的数据。 本系统采用12位DA转换器,最大输出电压为5Vpp,功率放大为2倍,所以系统最大的输出电压可以达到10Vpp,可计算出最小电压分辨率为:电压分辨率:K=10/4096(V) 主流程 定时中断开始 初始化 判断波形 液晶显示 锯正 方 三 波 弦 角 齿 波波波 键盘输入处理 中断返回 是波形发生器的主流图,由系统初始化和人机交互模块组成,其中液(A) 单片机反复运行晶显示子模块
5、和键盘输入处理子模块占用单片机主要处理时间,)是定时中断服务流程图,B(该模块程序人机交互模块相当于系统的监控程序;产生一个定时中波形发生模块放置在定时中断服务程序中,系统每隔一定时间,断,暂停主流程运行,转到定时中断服务程序起始处,执行波形发生模块,该模反复多次返回主流程断点处继续运行。结束此次中断服务,块输出一个样值后, 定时中断服务,从而完成波形生成。(C)键盘输入处理子模块 在具体实现时,键值识别部分作为主程序,键功能处理部分作为子程序,它们之间的关系是主程序调用子程序。键盘的工作过程:(1)扫描键盘,获得列扫描码和行状态码,从而确定被按下的按键的键值;(2)根据键值,通过散转表,跳转
6、到相应的键功能处理部分;(3)进入键处理部分,完成键功能;(4)完成一次键输入工作。通过键盘对单片机系统进行设置,每按一次键,键盘都会有上述的处理过程,每次仅能完成一个键功能。在实际设置波形参数时,一个参数需要多个键功能来实现,那么相应的键盘也要多次完成键值识别,跳转键处理的工作过程。(D)函数参数设置 (1)正弦波归一化数据生成函数 S(t)=sin(t) /(2K) (2)三角波归一化数据生成函数 T(t)=t/(63 *2K) (t64) T(t)=(127-t)/(63 *2K) (64t128) T(t)=(t-128)/(63 *2K) (128192) T(t)=(255-t)/
7、(63 *2K) (192256) (3)方波归一化数据生成函数 根据电压分辨率可以得出方波归一化数据生成函数为: F(t)= 1/(2k) (0 F(t)= - 1/(2k) (128(4)5次谐波数据的生成函数 W(t)=a*sin(t)+ b*sin(2t+m)+ c*sin(3t+n)+d* sin(4t+p)+ e*sin(5t+q) 此函数要求幅值和相位参数:a.b.c.d.e.m.n.p.q (5)正弦波、方波、三角波线性组合波数据生成函数 D(t)=a*S(t)+ b*F(t+m)+ c*T(t+n) (E)实验参考程序 /*- * 功 能 :STM32 DAC 数模转换(正弦
8、波/矩形波/三角波)输出实验 * 说 明 :按 SW5 输出正弦波 / 按 SW4 输出矩形波 / 按 SW3 输出三角波, 输出端口 PA4 *-*/ #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 #defin
9、e SINE_WAVE 1/sine 正弦波 #define RECT_WAVE 2/rectangular 矩形波 3/hackle #define HACKLE_WAVE 三角波 UINT8 flag = 0;VE;AUINT8 func = SINE_W/*- MAIN function int main (void) UINT16 i = 0; UINT32 *pDAC_BASE = (UINT32 *)DAC_BASE; stm32_Init(); / STM32 setup LED_Init(); /打开DAC时钟使能 RCC-APB1ENR |= (UINT32)(1 29);
10、/设置DAC控制参数 *(pDAC_BASE + 0x00) = (0x01 0)| (0x00 2) | (0x04 3) | (0x03 6) | (0x0b 8); *(pDAC_BASE + 0x04) = 0x01 printf( - Program start - rn); while (TRUE) / Loop forever if(!Get_SW5() func = SINE_WA else if(!Get_SW4() A func = RECT_W Get_SW3() func = HACKLE_WA switch(func) VE: case SINE_WA/- VE #ifdef SINE_W Aif(i 1024) i+=2;else i = 0; *(pDAC_BASE + 0x08) = Sine_WAVEi 4;#endif /- break;case RECT_WAVE:#ifdef RECT_WAVE for(i=0;i2000;i+) *(pDAC_BASE + 0x08) = 0x0fff;for(i=0;*(pDAC_BASE + 0x08) = 0;case HACKLE_WAVE: #ifdef HACKLE_WAVE if(flag) flag = 0; while(TRUE) if(i 40
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1