基于STM32F103RE ADDA板制作

举报
tsinghuazhuoqing 发表于 2021/12/26 22:42:19 2021/12/26
【摘要】 近期需要进行基于声音传播测距的实验,需要临时制作一款可以发送Chirp音频信号和接收信号的电路板。要求其中的内部RAM足够大,可以采集到音频信号进行后期处理。   电路硬件设计1 1.电路...

近期需要进行基于声音传播测距的实验,需要临时制作一款可以发送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输出

在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);

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

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

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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7


 

产生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()```

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

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 ↩︎

文章来源: zhuoqing.blog.csdn.net,作者:卓晴,版权归原作者所有,如需转载,请联系作者。

原文链接:zhuoqing.blog.csdn.net/article/details/104180878

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。