STM32
直播中

mintsy

9年用户 1573经验值
擅长:MEMS/传感技术
私信 关注
[问答]

如何制作一款可以发送Chirp音频信号和接收信号的ADDA电路板呢

如何制作一款可以发送Chirp音频信号和接收信号的ADDA电路板呢?其原理是什么?

回帖(1)

闫颖慧

2021-12-14 14:35:53
近期需要进行基于声音传播测距的实验,需要临时制作一款可以发送Chirp音频信号和接收信号的电路板。要求其中的内部RAM足够大,可以采集到音频信号进行后期处理。
   
  电路硬件设计1

  1.电路原理2

  
  

  

   原理图设计-MCU及其接口  
  
  

  
原理图设计-电源部分
   
  2. 电路PCB版图

  
  

  
PCB版图
  底部的两个接口的定义:
  

  • 左4PIN接口:电源接口,PIN1,2:VCC(+5V), PIN3,4:GND
  • 右8PIN接口:ADDA接口,见下面表格:

  [tr]序号符号功能定义[/tr]
1AD0AD输入0
2AD0AD输入0
3AD0AD输入0
4AD0AD输入0
5GND电源地
63.3VA内部稳压模拟3.3V
7DAC1DA输出1
8DAC2DA输出2


  • 顶部4PIN接口:SPI接口,从左到右分别是:MOSI,MISO,SCK,NSS
  • 左侧4PIN接口:IO口,从上到下:IO1,2,3,4

  调试错误:
(1)在第一版本中没有将UART3的管脚引出来。
  

  • 顶部的4PIN另外功能定义:根据STM32F103cb管脚复用,顶部的4PIN还可以定义为TIME3,TIME2的PWM输出。

  
  

  

   PSPI管脚重新定义为TIME3,TIME2的PWM输出  
  在PIO中的IO从上到下分别是PB15,PB14,PB13,PB12。在CONTROL.H中分别定义为:IO1,IO2,IO3,IO4。
它们的输入,输出功能请在Control.C的初始化程序中进行设置。

  

  

   PIO中定义的输入输出口  
  3. 电路软件3调试以及调用命令

  安装完毕元器件之后,下载初步的开发软件,便可以设置读取AD采集的信号波形了。
  

   安装完毕后,下载程序进行调试  

  
采集到的信号源典型波形  
  对F103内部的DA、AD模块初始化的语句。

HAL_ADC_Start(&hadc1);
    HAL_ADC_Start(&hadc3);
    HAL_ADC_Start(&hadc2);


    //--------------------------------------------------------------------------
    HAL_TIM_Base_Start_IT(&htim1);
    g_nTime1InterruptCount = 0;
    g_nADC1BufferPoint = 0;


extern DAC_HandleTypeDef hdac;
    HAL_DAC_Start(&hdac, DAC_CHANNEL_1);
    HAL_DAC_Start(&hdac, DAC_CHANNEL_2);


每个10ms通过如下语句赋值DAC1,DAC2相应的输出波形:


    //--------------------------------------------------------------------------
    if(++nShowCount >= 10) {
        nShowCount = 0;
//        printf("%drn", g_nTime1InterruptCount);
        DACOutput1(GetADC1());
        DACOutput2(0xfff - GetADC1());
    }


  

  


  产生Chirp声音

  1. 使用Python产生仿真Chirp波形

  具体产生Chirp信号的参数和方法见下面的代码。

#------------------------------------------------------------
startf = 50
endf = 1500
data_length = 2048
samplefrequency = 5e3
deltat = 1/samplefrequency
#------------------------------------------------------------
angle = 0
data_buffer = []
#------------------------------------------------------------
for i in range(data_length):
    data = int((sin(angle) + 1) * 0xfff)
    data_buffer.append(data)


    frequency = (endf - startf) * (i + 1) / data_length + startf
    angle = angle + frequency * deltat
t = linspace(0, data_length * deltat, data_length, endpoint=True)
plt.plot(t, data_buffer)
plt.xlabel('Time (s)')
plt.ylabel('Sample Value')
plt.show()```



  
数学产生的Chirp信号
  2. F103 产生相同的Chirp信号并输出

  
  

  
使用单片机产生的Chirp信号在示波器上显示的波形
      


  • DOP 文件 : D:zhuoqingDesignCenterMyResearch2020ADDAF103REHardware.dop ↩︎
  • 电路原理图 : d:zhuoqingAltiumDesignerTest2020ADDAF103READDAF103RE.SchDoc ↩︎
  • 电路软件所在的目录:D:zhuoqingwindowARMIARSTM32ApplicationTest2020ADDAF103RESrcmain.c ↩︎
举报

更多回帖

发帖
×
20
完善资料,
赚取积分