基于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,