基于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接口,见下面表格:
序号符号功能定义
1AD0AD输入0
2AD0AD输入0
3AD0AD输入0
4AD0AD输入0
5GND电源地
63.3VA内部稳压模拟3.3V
7DAC1DA输出1
8DAC2DA输出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输出

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

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("%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 ↩︎

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卓晴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值