硬件方案
硬件主要由stm32单片机核心板+LCD1602液晶显示屏+LM358运算放大电路+DAC0832数模电路+TL431基准参考电压电路+ICL7660稳压电路+按键电路等构成;如图:
设计功能
1.LCD1602液晶显示波形种类和频率值(0-50KHZ)。
2.按键可用于设置波形种类和设定频率步进值;
3.电位器器改变振幅0-5V(2V-4V稳定)。
4.共可产生4种波形,分别为正弦波、锯齿波、三角波、矩形波。
5.有四个指示灯用于分别对应四种波形,指示当前系统发出的是哪种信号波形。
设计原理图
硬件电路使用Altium Designer 15设计完成。主要包括STM32主控电路,DAC0832电路,稳压电路,按键电路,串口电路,显示电路。,如图:
整体硬件采用DDS和单片机技术相结合,以STM32F103C8T6芯片及DAC0832为核心设计了一种幅度、相位、频率都可调节的信号发生器,它不仅能克服传统的正弦波信号发生器的缺点,而且由模拟乘法器产生调幅电路、采用数字键控的方法实现二进制PSK、ASK信号,且信号频带较宽、以及频率稳定度高,输出的信号波形良好。
PCB图如下:
软件设计
本系统的软件设计采用C语言,对STM32单片机功能代码进行编程实现各项功能。采用KEIL软件编写,可以实现波形的切换、幅度频率的调节以及方波的占空比调节、液晶显示等功能。
主程序主要起到一个导向和决策功能,运行的是整体的功能,通过调用各个子模块的驱动函数以实现整体功能。其余各种功能的实现主要通过具体的子程序来完成。程序流程图如下:
主程序源码
int main(void)
{
int a=1,b=0,c=0,d=0,e=0,zkb_s=5,zkb_g=0;
u16 n;
Stm32_Clock_Init(10); //系统时钟设置
delay_init(128); //延时初始化
dac_creat_buf();
LCD_init();
KEY_Init();
Dac1_Init(); //DAC通道1初始化
Timerx_Init(255,0); //256分频 500K的中断频率
LCD_write_string(1,1," zhankongbi=00% ");
LCD_write_string(2,1," Sin f= 00000HZ ");
M=8589.93452*data_f;
while(1)//1:右,2:上,3:左,4:下, 5:中
{
KEY_Scan(); //按键扫描函数
if(Data_key==3) //左键,设置频率
{
KEY5_num=0;
KEY3_num++;
if(KEY3_num>=6)
KEY3_num=0;
}
else if(Data_key==1) //右键,切换波形
{
KEY5_num=0;
KEY1_num++;
if(KEY1_num>=4)
KEY1_num=0;
//设置波形及显示波形种类
if(KEY1_num==0)
{
wave=0;LCD_write_string(2,1," Sin ");
}
else if(KEY1_num==1)
{
wave=1;LCD_write_string(2,1," Tri " );
}
else if(KEY1_num==2)
{
wave=2;LCD_write_string(2,1," Saw ");
}
else if(KEY1_num==3)
{
wave=3;LCD_write_string(2,1," squ ");
}
}
else if(Data_key==5) //中键,设置占空比
{
KEY3_num=0;
KEY5_num++;
if(KEY5_num>=3)
KEY5_num=0;
}
...
}
}
链接:https://pan.baidu.com/s/1CG9bi8EC3jOuhDFzGd1mIg?pwd=3wq1
提取码:3wq1