基于STM32F103ZET6和AD9850的任意波形发生器

本文介绍了基于STM32F103ZET6和AD9850设计的任意波形发生器,能够产生正弦、方波和三角波,频率范围100Hz至100kHz,峰值电压可达2V以上。通过OLED屏显示波形信息,使用4*4矩阵按键调整波形和频率。项目在电赛中获得满分,详细探讨了方案选择、实现过程及遇到的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于STM32F103ZET6和AD9850的任意波形发生器

一、任务
设计制作一个任意波形发生器,该波形发生器能产生正弦波、方波、三角波,
波形发生器能够在一定范围内保证恒压输出。
二、要求
1、基本要求

(1)波形发生器能产生正弦波、方波、三角波三种周期性信号;
(2)输出波形的频率范围为 100Hz~100kHz;频率可调,频率步进间隔≤
100Hz;
(3)在 50Ω负载条件下,输出电压峰-峰值最大值≥2V;
(4)显示输出波形的类型、重复频率(周期)和幅度的功能;
(5)用示波器观察时无明显失真。

2.发挥部分

(1)正弦信号频率范围扩展至 1Hz~10MHz,进一步提高方波和三角波输
出频率。
(2)具有输出频率和频率步进设置功能;
(3)在 50Ω负载条件下,输出电压峰-峰值最大值≥5V;
(4)具有波形类型和频率和幅度显示功能;
(5)可以输出至少一种任意波形。

三、说明
1、基本部分频率调节方式可以采用模拟式或数字式,发挥部分的频率调节
只能为数字式。
2、发挥部分输出频率和频率步进需要利用键盘进行设置。
3、任意波波形的种类可以任选,可以改变频率。

*************分割线-----------------------/
这是我们学校电赛校级选拔赛的一道题目,我和我的队友梁某人从7/19-7/25早上八点前完成的,大概共花了6天左右的时间。验收时所有功能都能实现,成绩是满分(2333hhhh),所以用博客记录下我们的第一次合作完成一个小比赛的历程~
*************分割线-----------------------/
开始准备做的时候 第一件事当然是查找资料和确定方案。一开始选择这个题目的原因完全是因为觉得 “任意波形发生器,是真的可以产生波形吗?感觉好像很好看 又好玩的亚子”…然后就选了,但是其实那时候连DDS是啥我都不知道。。老师说了一堆方案,可惜我好像啥也听不懂(水过鸭背233)?!果然还是得自己慢慢查找资料,最终我们确定了两种主要的方案。

1、用STM32内部自带的AD产生所有的波形

2、用STM32内部自带AD产生三角波,再用AD9850产生正弦波和方波

由于考虑到32产生的波形最高只能达到14MHz,达不到题目要求。故我们选择了方案2。

我们最终的成品:

1、能产生最高频率为14MHz的三角波、锯齿波,
2、正弦波和方波的频率能保证100MHz内不失真,
3、输出幅值能达到6~7V(但其实也可以更高,改变后级放大电路的阻值即可)
4、产生的波形名称在OLED屏上显示
5、通过按键实现任意波形的切换和频率值的改变

程序如下:

1、主函数

主要包括一些硬件的初始化、及显示

int main(void)
{
   	
//	u32 freq;
	float Um;
	Um= 6.6;
//	freq=100;
	SineWave_Init1(freq,Um);  ///******///
	
	delay_init();
	OLED_Init();
	HardwareInit();	
	AD9850_Init();
	OLED_ShowString(0,0, "xiuer");
	OLED_Refresh_Gram();	 //调用显示函数之后必须更新缓存
	OLED_Clear();
	Delay_ms(100);
	while(1)
	{
   		  
		    GetKeyVal();
		if(flange==1)
		{
   
			SineWave_Init2(freq,Um);
			display();
		}
		else
		{
   
			 SineWave_Init1(freq,
评论 39
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值