stm32中舵机和超声波
时间: 2025-04-08 07:34:32 浏览: 29
### STM32中实现舵机控制与超声波传感器功能集成
#### 一、硬件准备
为了完成STM32对舵机和超声波传感器的控制,需要以下硬件组件:
- 主控芯片:STM32F103C8T6最小系统板[^1]。
- 超声波模块:用于测量目标物体的距离并反馈给主控板。
- SG90舵机:通过PWM信号驱动其旋转角度[^2]。
#### 二、软件配置
##### 1. 定时器初始化 (PWM 波生成)
舵机的角度由PWM信号决定,频率约为50Hz,占空比范围对应不同的角度。具体操作如下:
```c
void TIM_PWM_Init(void) {
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
// 配置定时器基本参数
TIM_TimeBaseStructure.TIM_Period = 19999; // 自动重装载值
TIM_TimeBaseStructure.TIM_Prescaler = 71; // 分频系数
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
// 配置通道输出比较模式
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_Pulse = 0; // 初始脉冲宽度设为零
TIM_OC1Init(TIM4, &TIM_OCInitStructure);
TIM_Cmd(TIM4, ENABLE); // 开启定时器
}
```
上述代码实现了定时器4的PWM输出初始化,其中`TIM_Period`决定了整个周期长度(约20ms),而具体的高电平时间则通过后续调用`TIM_SetCompare1()`动态调整[^3]。
##### 2. 舵机角度设定函数
根据计算公式,将所需角度转换为对应的计数值,并写入到比较寄存器中改变PWM波形:
```c
void SetServoAngle(float angle){
uint16_t pulseWidth;
if(angle<5){
angle=5;
}
if(angle>175){
angle=175;
}
pulseWidth = (uint16_t)(angle * 11.111f); // 每一度增加约11.1微秒
TIM_SetCompare1(TIM4, 500 + pulseWidth); // 基础偏移量加上增量部分
}
```
该函数接受浮点数形式的角度输入,将其限定在合理范围内后再转化为实际使用的脉宽值。
##### 3. 超声波测距处理逻辑
利用回声原理获取前方障碍物距离数据后传递至处理器内部变量存储起来供判断条件使用即可。一般流程包括触发发射端发出短促声波以及监听接收端返回信号持续时间段从而得出两者间直线间距大小关系表达式。
```c
float GetDistance(){
GPIO_ResetBits(GPIOA,GPIO_Pin_9); // TRIG脚拉低至少2us以上
delay_us(2);
GPIO_SetBits(GPIOA,GPIO_PIN_9); // 发送一个大于10us的方波启动测量过程
delay_us(15);
GPIO_ResetBits(GPIOA,GPIO_PIN_9);
while(!GPIO_ReadInputDataBit(GPIOB,GPIO_PIN_6)); // 等待ECHO变为高电平时刻记录起始时刻t_start
start_time = get_current_microseconds();
while(GPIO_ReadInputDataBit(GPIOB,GPIO_PIN_6)); // 继续等待直到ECHO重新回到低电平为止结束时刻t_end
end_time = get_current_microseconds();
return ((end_time - start_time)/58.0f); // 返回厘米单位下的真实物理尺寸结果
}
```
这里假设已经定义好了辅助性的延迟子程序及相关I/O口映射表项等内容以便简化描述重点突出核心算法思路。
#### 三、综合应用实例——自动开盖垃圾桶
当检测到有人靠近桶前一定区域内时开启上翻式的垃圾投放入口;反之无人接近时隔一段时间自行关闭恢复原状防止异味散发出来影响环境整洁美观程度等方面考虑因素较多需结合实际情况灵活调整各项阈值参数取舍平衡点达到最佳用户体验效果为目的进行优化改进工作不断迭代完善最终形成稳定可靠的产品解决方案提供给广大消费者选购试用体验评估价值所在之处体现技术创新带来的便利优势特点鲜明易于推广普及适用性强等特点显著优于传统手动方式更加卫生安全高效快捷方便实用值得大力推荐采用实施落地执行落实到位切实解决日常生活中的痛点难点问题贡献自己的一份力量共同营造美好家园社会氛围良好风气盛行人人受益共享成果共赢未来前景广阔充满希望期待更多优秀人才加入进来一起努力奋斗共创辉煌明天!
---
阅读全文
相关推荐


















