stm32f103c8t6智能小车超声波避障
时间: 2024-12-29 11:20:39 浏览: 10
### STM32F103C8T6 智能小车超声波避障实现方案
#### 1. 系统概述
智能小车通过STM32F103C8T6微控制器来控制其运动和感知周围环境。为了实现避障功能,采用HC-SR04超声波传感器检测前方障碍物的距离,并据此调整行驶方向。
#### 2. 硬件连接
- **电源供电**
- STM32F103C8T6开发板需稳定的工作电压输入。
- HC-SR04模块应接到5V电源以确保正常工作[^3]。
- **信号线连接**
- 将HC-SR04的Trig引脚连到STM32的一个GPIO口作为触发端;Echo引脚也接入另一个GPIO用于接收回响脉冲宽度表示距离的信息。
#### 3. 软件编程逻辑
编写程序使MCU定时发出高电平给Trig启动测量周期,在此期间等待并记录下由Echo返回低至高的时间差从而计算目标物体离传感器的实际间距:
```c
#include "stm32f1xx_hal.h"
// 定义使用的IO端口号
#define TRIG_PIN GPIO_PIN_9
#define ECHO_PIN GPIO_PIN_8
#define TRIG_PORT GPIOA
#define ECHO_PORT GPIOB
void Ultrasonic_Init(void){
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
GPIO_InitTypeDef GPIO_InitStruct = {0};
// 配置TRIG为推挽输出模式
GPIO_InitStruct.Pin = TRIG_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(TRIG_PORT, &GPIO_InitStruct);
// 配置ECHO为浮空输入模式
GPIO_InitStruct.Pin = ECHO_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(ECHO_PORT, &GPIO_InitStruct);
}
float Get_Distance(){
uint32_t start_time,end_time,duration;
float distance;
// 发送10us以上的正脉冲触发测距
HAL_GPIO_WritePin(TRIG_PORT,TRIG_PIN,GPIO_PIN_SET);
HAL_Delay(10);
HAL_GPIO_WritePin(TRIG_PORT,TRIG_PIN,GPIO_PIN_RESET);
while(HAL_GPIO_ReadPin(ECHO_PORT,ECHO_PIN)==GPIO_PIN_RESET);//等待上升沿到来
start_time=HAL_GetTick(); //记录开始时刻
while(HAL_GPIO_ReadPin(ECHO_PORT,ECHO_PIN)==GPIO_PIN_SET)//等待下降沿到来
end_time=HAL_GetTick(); //记录结束时刻
duration=end_time-start_time; //得到持续时间ms单位转换成cm
distance=(duration*0.034/2)*100; //声音速度取340m/s即0.034cm/us * 100 得厘米数
return distance;
}
```
上述代码实现了基本的超声波测距初始化以及获取当前距离的功能。
#### 4. 控制策略
当检测到前方有障碍物时(设定阈值),停止前进并向左转一定角度重新探测路径直至无障碍为止再继续直行前进。具体转向动作可通过PWM驱动电机完成。
---
阅读全文