发布时间: 2026-03-13
操控树莓派去控制舵机,最为令人头疼的究竟是什么呢?并非舵机自身,而是在明明已经连接好线路,编写完代码之后,舵机却出现了这样几种状况,要么根本不转动,要么抖动得如同筛子一般,要么无法转到你期望的角度。这些问题几乎每位刚踏入这个领域的朋友都会遭遇,追根溯源,通常并非硬件出现了故障,而是在程序或者接线之中隐藏着几个容易被人忽视的陷阱。
舵机通常会有三根线,其颜色较为统一,棕色或者黑色的线条属于负极(GND),红色的线条为正极(VCC,通常是5V),橙色或者黄色的线条是信号线。你需要将负极与树莓派的GND针脚连接在一起,把正极连接到一个可靠的5V电源上,要留意千万不要直接将树莓派的5V输出用于给它供电,因为舵机转动时电流较大,容易烧坏树莓派的板子。再者,信号线要连接到树莓派任意一个GPIO引脚,像常用的18号引脚。线接错了,舵机情况是,轻则没反应,重则直接冒烟,因而接线的时候,千万得仔细核对。
搞定接线之后,就要看程序了。最常被使用的库是RPi.GPIO,它主要承担控制GPIO引脚输出高低电平的职责。然而仅有它是不足够的,因为控制舵机需要精准的PWM(脉冲宽度调制)信号。你能够运用RPi.GPIO自身具备的软件PWM功能,或者采用更强大的库。更推荐于我个人而言的是,其产生PWM信号借助的是树莓派的硬件定时器的方式舵机品牌伟创动力,在精确度以及稳定性方面相较于软件PWM要高出许多,舵机转动起来会更为顺滑,并且抖动也会更少。安装之时使用sudo apt ,启动服务只需sudo 即可。
进行代码编写的关键所在便是把控PWM的占空比,舵机的转动角度与特定宽度的脉冲相互对应,通常情况下,1毫秒(ms)的脉冲对应0度,1.5ms对应90度,2.5ms对应180度,不过不同的舵机,此个参数或许会存在些许偏差,你能够在程序当中定义一个函数,将你想要转动的角度(例如90°)映射为对应的占空比数值。举例来说,运用 `` 库,预先设定好 PWM 频率,这频率一般而言是 50Hz伟创动力,接着借助 `` 函数,径直往引脚写入精准的脉冲宽度,像 1500 微秒这样的数值,如此一来,舵机便会顺从地转动到中间位置。
舵机处于持续不停抖动状态,很大程度上是电源供电欠缺充足,又或者是信号处于不稳定情形。先对电源予以检查:若为借助USB供电的小型舵机,尝试运用外接的5V 2A及以上的电源为舵机单独供电,并且将树莓派的地线与舵机电源的地线连接在一起,共地是不可或缺的关键要点。再去查看程序:要是运用RPi.GPIO的软件脉宽调制,抖动或许会相对明显众多,改换运用库能够迅速改善诸多状况。进行接线检查:信号线是否存在过长或者过细的情况呢?杜邦线接触不良也是常事,把线重新插拔一下舵机厂家伟创动力,或者换根线试试。
期望制作一个机器人,使得几个舵机能够协调开展动作,按顺序执行绝对是行不通的,要让它们“同时”进行动作。关键之处在于不要运用sleep()函数。要是你的程序里面编写了pwm.(角度A),接着sleep(1),随后再执行(角度B),那么舵机B就只能等待舵机A转动完毕之后才会开始动作。正当的做法乃是运用时间戳或者定时器。举例来讲 ,你能够于一个循环之中 ,持续不断地去计算当下时间理应对应的是哪一个角度 ,接着与此同时去更新全部舵机的PWM占空比。如此一来 ,所有的舵机均在自身的轨道之上平稳地进行运动 ,彼此之间不会产生干扰。
![]()
阐述了这般诸多内容之后,我们来瞧一瞧一个结构简易的实例。假定你运用库,操控连接于18号引脚上的舵机,使其转动至90度。
time
pi = .pi() # 连接本地守护进程
if not pi.:
print("请先运行 sudo ")
exit()
= 18
pi.(, .)
# 设置脉冲宽度为1500微秒,对应90度
pi.(, 1500)
time.sleep(2) # 保持2秒
# 关闭PWM,释放舵机
pi.(, 0)
pi.stop()
将这段代码存储成为名为.py的文件,在运行之前要记得先行执行sudo 。它难道不比你所想象的更为简单吗?
视线落于此,你可曾思索,要是将此舵机应用于你正着手设计的那款产品原型之上,除令其转向既定角度外,你还需其反馈当下的实际位置吗?欢迎于评论区畅谈你的项目,没准我可为你提供点子!若觉此文有所助益,切莫忘了点赞并分享与更多玩树莓派的友人~。