当前位置:   article > 正文

【STM32学习】(26)STM32实现舵机旋转并实现超声波检测_stm32控制舵机旋转并超声波测距

stm32控制舵机旋转并超声波测距

单片机型号: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口工作模式
GNDGND-
VCC+5V-
TrigPC7

GPIO_Mode_Out_PP

(推挽输出)

EchoPC8

GPIO_Mode_IN_FLOATING

(浮空输入)

-PB6USART1_TX(需要映射)
-PB7USART1_RX(需要映射)

模块名称

舵机

STM32的IO口工作模式
DATAPC6

GPIO_Mode_AF_PP

(需要输出PWM)

GNDGND 
VCC+5V 
   

 

代码片段:

  1. /****************************************
  2. 函数名称:void SteeringEngineAndUltrasonic(uint8_t fun)
  3. 函数参数:
  4. uint8_t fun:指定TFT显示屏的功能,0X01显示第一页,0X02显示第二页,10-1F选择第一页的第几行数据,20-2F选择第二页的第几行数据
  5. 函数返回值:无
  6. 函数功能:
  7. 舵机与超声波测距,舵机左右旋转180°,边旋转边测距
  8. 创建作者:
  9. 创建时间:2021.4.30
  10. 联系方式:QQ:
  11. 修改作者:
  12. 修改时间:
  13. 修改说明:
  14. ****************************************/
  15. void SteeringEngineAndUltrasonic(uint8_t fun)
  16. {
  17. s32 rang = 0;
  18. int i;
  19. for(i = 1950;i >= 1805;i--)
  20. {
  21. TIM_SetCompare1(TIM3, i);// 设置占空比
  22. rang = Ultrasonic_Ranging();
  23. //USART1_printf(USART1,"\r\nrang=%d\n",rang); // 发至串口助手显示
  24. sendDataToTFT(fun, rang); // 可以输出到液晶屏显示
  25. delay_ms(20);
  26. }
  27. for(;i <= 1950;i++)
  28. {
  29. TIM_SetCompare1(TIM3, i);// 设置占空比
  30. rang = Ultrasonic_Ranging();
  31. //USART1_printf(USART1,"\r\nrang=%d\n",rang); // 发至串口助手显示
  32. sendDataToTFT(fun, rang); // 可以输出到液晶屏显示
  33. delay_ms(20);
  34. }
  35. }

注意:我们这里使用了串口屏,如果需要发送至串口助手显示,需要放开USART1_printf(USART1,"\r\nrang=%d\n",rang); 然后将sendDataToTFT(fun, rang);注释掉就可以。

 

 

代码可链接下载:

(1条消息) 舵机加超声波测距源码.7z-电信文档类资源-CSDN下载

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/560162
推荐阅读
相关标签
  

闽ICP备14008679号