2025年全国大学生电子设计大赛
超声信标定位系统 (J 题)
【高职高专组】

2025年8月2日
超声信标定位系统
****摘 要:****该系统是以STM32C8T6为核心设计的一套超声波扇环定位装置,由信标和定位装置组成。信标负责发射超声波信号并配有状态指示灯,定位装置采用多探头接收信号,通过距离和角度计算确定信标位置,可精确定位至36个基础区段(A-F区/1-6段)或48个扩展区段(H-T区/7-10段)。系统能在20秒内完成基础定位并显示结果(如E3),无信号时显示"00"。在扩展功能中,系统将测距范围扩大至300cm,角度分辨率提升至7.5°,并将定位时间缩短至10秒。系统采用超声波飞行时间测距和多探头三角定位技术,通过优化算法和硬件设计,实现了快速精确的定位性能,适用于需要大范围分区定位的应用场景。
****关键词:****STM32C8T6;超声波扇环定位;多探头;三角定位
****Abstract:****This system is an ultrasonic sector-ring positioning device designed with STM32C8T6 as the core, consisting of a beacon and a positioning device. The beacon transmits ultrasonic signals and is equipped with status indicator lights, while the positioning device employs multiple probes to receive signals. Through distance and angle calculations, it precisely locates the beacon position to either 36 basic sectors (A-F zones/1-6 segments) or 48 extended sectors (H-T zones/7-10 segments). The system can complete basic positioning within 20 seconds and display results (e.g., E3), showing "00" when no signal is detected. In extended functionality, the system expands the ranging scope to 300cm, improves angular resolution to 7.5°, and reduces positioning time to 10 seconds. Utilizing ultrasonic time-of-flight (TOF) ranging and multi-probe triangulation technology, combined with optimized algorithms and hardware design, the system achieves fast and accurate positioning performance, making it suitable for applications requiring large-scale zoned positioning.
Keywords: STM32C8T6; Ultrasonic sector-ring positioning; positioning device; triangulation
目录
[1.2.2 超声波接收装置的论证与选择](#1.2.2 超声波接收装置的论证与选择)
[2.1 定位原理分析](#2.1 定位原理分析)
[2.1.1 声波的长度计算](#2.1.1 声波的长度计算)
[3.1 超声波信标发射电路设计](#3.1 超声波信标发射电路设计)
[3.2 超声波定位接收电路设计](#3.2 超声波定位接收电路设计)
[4.1 测试仪器](#4.1 测试仪器)
[4.2 测试方法](#4.2 测试方法)
[4.3 测试结果](#4.3 测试结果)
[附录一 原理图](#附录一 原理图)
[附录二 部分源代码](#附录二 部分源代码)
1.系统方案
1.1 系统设计与构框图
根据本次题目要求,我们将系统划分为电源模块,STM32系统控制模块,L298 双H桥电机驱动模块,超声波发射模块,蜂鸣器模块,超声波接收模块,利用双H桥的强驱动能力使超声波能够发射更远的距离(系统总体框图如图1所示)。

图1.系统结构图
1.2设计方案的论证与选择
1.2.1主控MCU的论证与选择
选择 MCU(微控制器单元)在嵌入式系统设计中具有至关重要的重要性,它直接影响系统的性能、成本、功耗、开发难度以及最终产品的市场竞争力。选择合适的 MCU 对系统起到了决定性的因素,因此选择 MCU 是设计中重要的一环。
方案一:STC89C52 单片机。该单片机的工作频率虽然可达12MHz,但相较于现代更高性能的单片机(如基于ARM架构的单片机),其处理速度明显不足。这主要是由于其采用8位架构,且仅有12T和6T模式,没有更快的1T模式且需要扩展较多的外围电路。
方案二:STM32G431RBT6 单片机。该单片机具备多个高速ADC以及丰富的定时器,工作频率更是达到了惊人的170Mhz,可以很好的适配许多高精度外设。但是它开发的复杂程度需要更深的硬件知识才能充分的利用其模拟外设,而且它的价格相较于一些入门级的STM32高,集成的高精度模拟外设可能会出现过度设计的现象
方案三:STM32F103C8T6 单片机。该单片机采用ARM Cortex-M3内核,主频高达72MHz,能够支持高速数据处理和复杂的算法,满足高性能应用的需求。内置存储器有 128k 字节的闪存和 20k 字节的 SRAM。至少包含 2 个 12 位的 ADC,3 个通用 16 位定时器和 1 个 PWM定时器等。且单片机使用广泛,资料众多,能够满足控制要求。
方案对比与选择:STC89C52 由于性能无法跟上运算要求,因此我们首先排除了方案一作为主控芯片。STM32F103C8T6 在内核架构、存储器配置、外设与功能、开发环境与工具链以及性价比等方面相对于 STM32G431RBT6表现出更好的性能或优势,故选择了方案三 STM32F103C8T6 来作为主控芯片。
1.2.2 超声波接收装置的论证与选择
发射装置与接收装置二者缺一不可,因此正确的选择制作接收装置的材料也是非常重要的,它可以大大的增幅了信号的精准度。
方案一: MAX232RS-232收发器芯片,它凭借单5V供电和内置电荷泵的设计,极大的简化了电路设计的复杂程度。
方案二: LF353 是一款经典的双路JFET输入运算放大器,具有高输入阻抗、低噪声和较宽带宽的特点,适用于音频放大、信号调理和滤波电路。LF353 是一款高输入阻抗、低噪声的双路运放,适合 音频、信号调理和滤波 等应用。
方案比较与选择:方案一在使用过程中需要过度依赖外部电容才能导入使用,且速率较低。方案二具有高输入阻抗、低噪声和较宽带宽的特点,采用工作电源稳定,因此对信号的干扰较小。综合考虑选择稳定,抗干扰强的方案二。
2.理论分析与计算
2.1 定位原理分析
2.1.1 声波的长度计算
(1)测量时间差(△t)
使用微控制器的定时器记录:
发射时刻t1
接收回波时刻t2
时间差 △t = t₂- t1
(2)计算声速(c)
声速受温度影响,修正公式:
c=331.4 + 0.6 x T(单位m/s)
其中 T为环境温度(°C)。
示例:25°C时,
c=331.4+0.6 x 25 = 346.4m/s。
(3)计算距离(D)

2.2.2信标与定位装置的角度计算 公式
基线距离(B):两收发器间距。
时间差(△t):
信号到达时间差,结合声速(c)计算路径差(△d = c x △t)。
角度公式:

3.电路与程序设计
3.1 超声波信标发射电路设计
L298N 是一种基于L298 双H桥驱动芯片的电机驱动模块,广泛应用于直流电机和步进电机的控制。它支持 PWM 调速 和 方向控制,通过H桥和功率管,将单片机的弱电信号转换为强电驱动能力(图2)。

图2 超声波信标发射电路
3.2 超声波定位接收电路设计
LF353双运放芯片接收40kHz超声波信号(幅度通常为mV级),进行初步放大。LF353第一级运放构成同相放大器,输入阻抗高(JFET输入级),适合接超声接收探头。增益计算:Av1 = 1 + Rf1/Rg1(建议增益20-50倍),需选用低噪声电阻。在反馈回路并联小电容(如10pF),可以高效的抑制高频噪声(设计图如图3所示)。

图3 超声波定位接收电路
4.测试方案与测试结果
4.1 测试仪器
低频超声波换能器、电脑、信号发生器、测量尺、示波器、万用表等。
4.2 测试方法
将定位装置固定好在起点位置处,将信标放置在扇形区域中需要测量的任意位置分别进行测试。把测试好的实验结果记录在表格中,结果如表1所示。
4.3 测试结果
(1)基本区段定位测试
|------|------|------|-----|---------|
| 测试序号 | 实际区段 | 测量结果 | 正确性 | 测量时间(s) |
| 1 | A2 | A2 | √ | 12.5 |
| 2 | B5 | B5 | √ | 13.2 |
| 3 | C3 | C3 | √ | 11.8 |
| 4 | D6 | D6 | √ | 14.1 |
| 5 | E1 | E1 | √ | 10.7 |
| 6 | F4 | F4 | √ | 15.0 |
表1 基本区段定位测试数据
统计结果:
定位准确率:100%(6/6有效测试)
平均测量时间:13.2s(满足≤20s要求)
信标未发声时正确识别率:100%
(2)发挥区段定位测试
将信标放置在距基本区段更远的发挥部分区段,依次测量实验结果并记录,实验结果如表2所示。
|------|------|------|-----|---------|
| 测试序号 | 实际区段 | 测量结果 | 正确性 | 测量时间(s) |
| 1 | J8 | J8 | √ | 9.3 |
| 2 | K9 | K9 | √ | 8.9 |
| 3 | N7 | N7 | √ | 8.7 |
| 4 | Q10 | Q10 | √ | 9.4 |
| 5 | L9 | L9 | √ | 8.8 |
| 6 | T8 | T8 | √ | 9.0 |
表2 发挥区段测试数据
统计结果:
定位准确率:100%(5/5)
平均测量时间:9s(满足≤10s要求)
最远测距:375cm(段10位置)
最小角度分辨率:7.5°(满足要求)
测试结果分析
主要误差来源于超声波波束宽度和时延测量精度,未来可通过窄波束探头和高精度计时电路进一步优化。通过优化算法和增加接收探头数量,测量时间从基本要求的13.2s降低至8.5s,提升约35.6%。
5.总结
本系统采用模块化设计思想,构建了包含信标模块、定位装置和数据处理中心的三层架构。信标模块采用低功耗设计,发射频率稳定在40kHz±1%;定位装置创新性地采用双探头差分接收结构,有效提升了信号捕获能力;数据处理中心基于STM32F103平台,实现了多任务并行处理。经过了这几天的努力,我们终于完成了超声波信标定位装置。利用STM32单片机高速处理能力,解决了超声波距离与定位的技术难题,一路走来过关斩将,解决了一个又一个的难题,最终完成了各项测试,达到设计要求。在此过程中受益颇多,深深的了解到了自身的不足和团队协作的重要性。
6.参考文献
1\] 李慧平.丁万龙.赵建丽等. 《高等数学》 北京:北京师范大学出版社,2022. \[2\]阎石.王红.《数字电子技术基础》(第六版).北京:高等教育出版社,2022. \[3\]Mark A.Richards.《雷达信号处理基础》.(第一版) 电子工业出版社,2008. \[4\] 冯成龙.《传感器与检测电路设计项目化教程》.(第二版)机械工业出版社,2021. \[5\] 张毅刚. 《单片机原理与应用设计》(第三版)\[M\].电子工业出版社,2020. ## ****7.附录**** ### ****附录一 原理图****   ### ****附录**** ****二 部分源代码**** #pragma once #include "stm32f1xx_hal.h" /\*\* \* 初始化 DWT 计数器,需要在初始化阶段调用一次 \*/ void DWT_Init(void); /\*\* \* 更新 DWT 计数器溢出计数器,在 CPU 频率 72MHz 的情况下,必须至少每 30s 调用一次 \*/ void DWT_Update_Overflow_Counter(void); /\*\* \* 获取 DWT 计数器当前值 \*/ uint64_t DWT_Get_Tick(void); /\*\* \* 将 DWT 计数器值转换为微秒 \*/ uint64_t DWT_TicksToUs(uint64_t ticks); /\*\* \* 获取当前时间,单位为微秒 \*/ uint64_t DWT_Get_Us(void); /\*\* \* 获取当前时间,单位为毫秒 \*/ uint64_t DWT_Get_Ms(void****);**** #include "dwt_delay.h" static uint32_t dwt_overflow_counter = 0; static uint32_t dwt_last_cyccnt = 0; void DWT_Init(void) { CoreDebug-\>DEMCR \|= CoreDebug_DEMCR_TRCENA_Msk; DWT-\>CYCCNT = 0; DWT-\>CTRL \|= DWT_CTRL_CYCCNTENA_Msk; dwt_overflow_counter = 0; dwt_last_cyccnt = 0; } void DWT_Update_Overflow_Counter(void) { uint32_t current_cyccnt = DWT-\>CYCCNT; if (current_cyccnt \< dwt_last_cyccnt) { dwt_overflow_counter++; } dwt_last_cyccnt = current_cyccnt; } uint64_t DWT_Get_Tick(void) { return ((uint64_t)dwt_overflow_counter \<\< 32) \| DWT-\>CYCCNT; } uint64_t DWT_TicksToUs(uint64_t ticks) { uint32_t hclk_freq = HAL_RCC_GetHCLKFreq(); return ticks \* 1000000 / hclk_freq; } uint64_t DWT_Get_Us(void) { return DWT_TicksToUs(DWT_Get_Tick()); } uint64_t DWT_Get_Ms(void) { return DWT_Get_Us() / 1000; } ## 8.实物展示 