当前位置:   article > 正文

基于stm32单片机的信号发生器设计_基于stm32的信号发生器

基于stm32的信号发生器

硬件方案

      硬件主要由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软件编写,可以实现波形的切换、幅度频率的调节以及方波的占空比调节、液晶显示等功能。

    主程序主要起到一个导向和决策功能,运行的是整体的功能,通过调用各个子模块的驱动函数以实现整体功能。其余各种功能的实现主要通过具体的子程序来完成。程序流程图如下:


主程序源码 

  1. int main(void)
  2. {       
  3.   int a=1,b=0,c=0,d=0,e=0,zkb_s=5,zkb_g=0; 
  4.   u16 n;             
  5.   Stm32_Clock_Init(10);   //系统时钟设置
  6.   delay_init(128);    //延时初始化
  7.   dac_creat_buf();
  8.   LCD_init(); 
  9.   KEY_Init();   
  10.   Dac1_Init();       //DAC通道1初始化   
  11.   Timerx_Init(255,0);     //256分频 500K的中断频率
  12.   LCD_write_string(1,1," zhankongbi=00% ");  
  13.   LCD_write_string(2,1," Sin f= 00000HZ "); 
  14.   M=8589.93452*data_f;    
  15.   while(1)//1:右,2:上,3:左,4:下, 5:中      
  16.   {   
  17.     KEY_Scan();        //按键扫描函数  
  18.     if(Data_key==3)        //左键,设置频率
  19.     {
  20.       KEY5_num=0;
  21.       KEY3_num++;
  22.       if(KEY3_num>=6)
  23.         KEY3_num=0;
  24.     }
  25.     else if(Data_key==1)  //右键,切换波形
  26.     {
  27.       KEY5_num=0;
  28.       KEY1_num++;
  29.       if(KEY1_num>=4)
  30.         KEY1_num=0;
  31.       //设置波形及显示波形种类
  32.       if(KEY1_num==0)
  33.       {
  34.         wave=0;LCD_write_string(2,1," Sin ");
  35.       }
  36.       else if(KEY1_num==1)
  37.       {
  38.         wave=1;LCD_write_string(2,1," Tri " );
  39.       }  
  40.       else if(KEY1_num==2)
  41.       {
  42.         wave=2;LCD_write_string(2,1," Saw ");
  43.       }
  44.       else if(KEY1_num==3)
  45.       {
  46.         wave=3;LCD_write_string(2,1," squ ");
  47.       }
  48.     }
  49.     else if(Data_key==5) //中键,设置占空比
  50.     {
  51.       KEY3_num=0;
  52.       KEY5_num++;
  53.       if(KEY5_num>=3)
  54.         KEY5_num=0;
  55.     }
  56.     ...
  57.   }
  58. }

链接:https://pan.baidu.com/s/1CG9bi8EC3jOuhDFzGd1mIg?pwd=3wq1 
提取码:3wq1

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号