发布时间:2022-12-21 09:00
成为码农半年了,第一次在csdn上写博客,意在分享自己的学习方法和对学习内容的鉴定。小白一枚,望指点。
1.我认为的舵机
舵机由电动机、传动部件和离合器组成。接受指令而工作。舵机大部分由伺服电机组成,舵机接受PWM信号,舵机就旋转角度。所以就可以给舵机输入不同的信号,来控制其旋转到不同的角度。
2.舵机的工作原理
舵机有三根接线:电源线,地线,信号线。电源线和地线大家都知道,PWM波就是从信号线输出到舵机。SG90舵机接收的PWM信号频率为50HZ,T=1/f,所以周期为20ms。当高电平的脉宽在0.5ms-2.5ms之间时舵机就可以对应旋转到不同的角度。
3。如何使用PWM来控制舵机的角度
由公式:72000000/((TIM_Period+1)*(TIM_Prescaler+1)) = f可以求出TIM_Period(周期)和TIM_Prescaler(预分频)的值。 占空比:t/T。t即为脉宽。根据舵机50Hz = 20ms 一个周期,如果频率为50Hz ,也就是说一个周期是20ms ,那么一秒钟就有 50次PWM周期。由于PWM周期为20ms,如果舵机会转动90度,占空比就应该为1.5ms/20ms = 7.5%,所以TIM_SetCompare1的 TIMx 捕获比较 1 寄存器值就为200-200*7.5% =185. 所以在SG90云台中:
#define SG90_Right_90 TIM_SetCompare2(TIM2,195)
#define SG90_Right_45 TIM_SetCompare2(TIM2,190)
#define SG90_Front TIM_SetCompare2(TIM2,185)
#define SG90_Left_45 TIM_SetCompare2(TIM2,180)
#define SG90_Left_90 TIM_SetCompare2(TIM2,175)
ps:因为我设置转动90度时为电机的正前方
4.代码
搞懂原理之后写代码就要简单很多了。将PWM初始化,开启相应的定时器和IO口并使能定时器就OK啦。写完之后把SG90_Front,SG90_Left_45,SG90_Right_45调用到主函数中,然后下载进去看看效果就知道有没有成功了,哪里不对改哪里。对了记得加上延迟函数不然你很难观察出来。
第一次写我的心得,相当于又复习一次。我认为只有多做项目多动手才能实打实的了解。下一次我可能会把其他模块的新的都写出来,因为我这个是为了做小车而写的代码。互勉!
Microsoft Visual C++ 14.0 or greater is required的解决方法
android 文字识别实现的,基于Android平台文字识别应用的设计与实现
面试必考排序算法最详细介绍,包含动画演示、大厂真题(每天一遍,面试必过)
springboot 整合 redis + @cacheAble
使用 Terraform 在阿里云上快速部署 MQTT 集群
外星人跑深度学习_轻量化 | 如何让笨重的深度学习模型在移动设备上跑起来?看它!...
android反编译工具!开发者必备的顶级Android开发工具,大厂直通车!
java面试总结(一)java面向对象、arraylist与linkedlist区别、高并发中的集合问题、JDK1.8新特性