基于STM32F103RE ADDA板制作

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

电路硬件设计1

1.电路原理2

原理图设计-MCU及其接口

原理图设计-MCU及其接口

原理图设计-电管部分原理图设计-电源部分

2. 电路PCB版图

PCB版图PCB版图

底部的两个接口的定义:

  1. 左4PIN接口:电源接口,PIN1,2:VCC(+5V), PIN3,4:GND
  2. 右8PIN接口:ADDA接口,见下面表格:
序号 符号 功能定义
1 AD0 AD输入0
2 AD0 AD输入0
3 AD0 AD输入0
4 AD0 AD输入0
5 GND 电源地
6 3.3VA 内部稳压模拟3.3V
7 DAC1 DA输出1
8 DAC2 DA输出2
  1. 顶部4PIN接口:SPI接口,从左到右分别是:MOSI,MISO,SCK,NSS
  2. 左侧4PIN接口:IO口,从上到下:IO1,2,3,4

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

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

PSPI管脚重新定义为TIME3,TIME2的PWM输出

PSPI管脚重新定义为TIME3,TIME2的PWM输出

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("%d\r\n", 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 Signal display数学产生的Chirp信号

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

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


  1. DOP 文件 : D:\zhuoqing\DesignCenter\MyResearch\2020\ADDAF103RE\Hardware.dop ↩︎

  2. 电路原理图 : d:\zhuoqing\AltiumDesigner\Test\2020\ADDAF103RE\ADDAF103RE.SchDoc ↩︎

  3. 电路软件所在的目录:D:\zhuoqing\window\ARM\IAR\STM32\Application\Test\2020\ADDAF103RE\Src\main.c ↩︎

发布了257 篇原创文章 · 获赞 9 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/zhuoqingjoking97298/article/details/104180878
今日推荐