赞
踩
单片机型号:STM32F103C8
要求通过STM32实现舵机180°旋转,超声波放置在舵机上,实现一边旋转一边测距,同时可以设置测距的最大距离。
设计的STM32的技术有:串口中断,外部中断,定时器中断,PWM,滴答定时器等
超声波使用的型号如下:
舵机的型号如下(其它型号同样适用):
超声波测距是通过定时器加中断实现的,接线:
VCC——+5V
GND——GND
Trig——PC7
Echo——PC8 (同时映射为外部中断口8)
代码实现依据:
舵机的实现:因为舵机需要通过PWM才能驱动舵机正常转动,时序图如图:
舵机的主要组成部分为伺服电机,所谓伺服就是服从信号的要求而动作。在信号来之前,转子停止不动;信号来到之后,转子立即运动。因此我们就可以给舵机输入不同的信号,来控制其旋转到不同的角度。
舵机接收的是 PWM 信号,当信号进入内部电路产生一个偏置电压,触发电机通过减速齿轮带动电位器移动,使电压差为零时,电机停转,从而达到伺服的效果。简单来说就是给舵机一个特定的 PWM 信号,舵机就可以旋转到指定的位置。舵机上有三根线,分别是 GND、VCC 和 SIG,也就是地线、电源线和信号线,其中的 PWM 波就是从信号线输入给舵机的。一般来说,舵机接收的 PWM 信号频率为 50HZ,即周期为 20ms。当高电平的脉宽在 0.5ms-2.5ms 之间时舵机就可以对应旋转到不同的角度。
代码中使用PA6口作为PWM输出引脚。
同时配置了串口,并设计了测量范围控制,控制器测量的最远距离。
由于代码设计文件比较多,无法一一粘贴。
模块名称 HC-SR04 | STM32的IO口 | 工作模式 |
GND | GND | - |
VCC | +5V | - |
Trig | PC7 | GPIO_Mode_Out_PP (推挽输出) |
Echo | PC8 | GPIO_Mode_IN_FLOATING (浮空输入) |
- | PB6 | USART1_TX(需要映射) |
- | PB7 | USART1_RX(需要映射) |
模块名称 舵机 | STM32的IO口 | 工作模式 |
DATA | PC6 | GPIO_Mode_AF_PP (需要输出PWM) |
GND | GND | |
VCC | +5V | |
代码片段:
- /****************************************
- 函数名称:void SteeringEngineAndUltrasonic(uint8_t fun)
- 函数参数:
- uint8_t fun:指定TFT显示屏的功能,0X01显示第一页,0X02显示第二页,10-1F选择第一页的第几行数据,20-2F选择第二页的第几行数据
- 函数返回值:无
- 函数功能:
- 舵机与超声波测距,舵机左右旋转180°,边旋转边测距
- 创建作者:
- 创建时间:2021.4.30
- 联系方式:QQ:
- 修改作者:
- 修改时间:
- 修改说明:
- ****************************************/
- void SteeringEngineAndUltrasonic(uint8_t fun)
- {
- s32 rang = 0;
- int i;
- for(i = 1950;i >= 1805;i--)
- {
- TIM_SetCompare1(TIM3, i);// 设置占空比
- rang = Ultrasonic_Ranging();
- //USART1_printf(USART1,"\r\nrang=%d\n",rang); // 发至串口助手显示
- sendDataToTFT(fun, rang); // 可以输出到液晶屏显示
- delay_ms(20);
- }
- for(;i <= 1950;i++)
- {
- TIM_SetCompare1(TIM3, i);// 设置占空比
- rang = Ultrasonic_Ranging();
- //USART1_printf(USART1,"\r\nrang=%d\n",rang); // 发至串口助手显示
- sendDataToTFT(fun, rang); // 可以输出到液晶屏显示
- delay_ms(20);
- }
- }
注意:我们这里使用了串口屏,如果需要发送至串口助手显示,需要放开USART1_printf(USART1,"\r\nrang=%d\n",rang); 然后将sendDataToTFT(fun, rang);注释掉就可以。
代码可链接下载:
(1条消息) 舵机加超声波测距源码.7z-电信文档类资源-CSDN下载
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。