533|2

166

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

【Raspberry Pi 5测评】树莓派5学习笔记03(PWM应用) [复制链接]

树莓派5(Raspberry Pi 5)是一款功能强大且价格实惠的小型计算机,可以广泛应用于各种硬件控制项目。通过树莓派的GPIO引脚,可以轻松控制各种硬件设备,比如舵机。舵机(servo motor)是常见的电动驱动设备,广泛应用于机器人、遥控模型、自动化控制等领域。通过PWM(脉宽调制)信号控制舵机的角度,树莓派5可以实现对舵机的精确控制。

本文将介绍如何使用树莓派5的GPIO接口,通过PWM信号控制舵机的旋转角度。

1. 什么是舵机(Servo Motor)?

舵机是一种具有反馈控制系统的电动机,能够根据输入信号调整角度。与常规电动机不同,舵机并不是连续旋转的,而是可以在特定范围内(通常是0°到180°)调整其角度。舵机通过接收PWM信号来确定其角度,PWM信号的占空比(duty cycle)决定了舵机的转动角度。

  • 占空比与角度的关系

    :舵机的PWM信号通常为50Hz的周期,周期为20毫秒。占空比的大小决定了舵机转动的角度。例如:

    • 0°对应大约 5% 的占空比(1毫秒)
    • 90°对应大约 10% 的占空比(1.5毫秒)
    • 180°对应大约 15% 的占空比(2毫秒)

2. 树莓派5和舵机的连接

树莓派5具有多个GPIO引脚,可以用来控制外部设备。舵机一般有三根线:

  • VCC(红色):供电线,通常接5V电源。
  • GND(黑色或棕色):接地线,接树莓派的GND。
  • 信号线(黄色或橙色):接树莓派的GPIO引脚,用于接收PWM信号。

对于大多数舵机,供电需要5V,通常树莓派的GPIO电压为3.3V,这意味着舵机需要通过外部电源供电,而信号线仍然可以直接连接到树莓派的GPIO引脚。

3. 安装所需的库

为了在树莓派上使用PWM信号控制舵机,我们需要使用Python的 RPi.GPIO 库。这个库允许我们通过GPIO接口与硬件进行交互。

首先,确保树莓派系统已经安装了 RPi.GPIO 库。如果未安装,可以使用以下命令安装:

  1. bash复制代码sudo apt-get update
  2. sudo apt-get install python3-rpi.gpio

4. 使用PWM控制舵机

在Python中,使用 RPi.GPIO 库可以非常方便地控制GPIO引脚输出PWM信号,从而控制舵机的角度。以下是一个简单的示例,展示如何通过树莓派5驱动舵机:

  1. python复制代码import RPi.GPIO as GPIO # 导入 Raspberry Pi GPIO 库,用于控制 GPIO 引脚
  2. import time # 导入时间模块,用于设置延时
  3. # 设置 GPIO 模式
  4. GPIO.setmode(GPIO.BCM) # 设置 GPIO 引脚的编号模式为 BCM(Broadcom SOC 引脚编号)
  5. # 设置舵机的 GPIO 引脚
  6. servo_pin = 16 # 舵机连接到树莓派的 GPIO 16 引脚
  7. GPIO.setup(servo_pin, GPIO.OUT) # 将 GPIO 16 设置为输出模式,用来控制舵机
  8. # 设置 PWM(脉宽调制)
  9. pwm = GPIO.PWM(servo_pin, 50) # 设置 PWM 信号的频率为 50Hz(舵机通常使用 50Hz)
  10. pwm.start(0) # 启动 PWM 输出,初始占空比为 0(即没有信号输出)
  11. # 定义一个函数用于设置舵机的角度
  12. def set_angle(angle):
  13. # 将角度转换为对应的占空比
  14. # 舵机的占空比与角度之间的关系为:占空比 = (angle / 18) + 2
  15. # 这个公式是基于舵机的工作原理(50Hz PWM 信号)
  16. duty = angle / 18 + 2 # 计算占空比
  17. GPIO.output(servo_pin, True) # 设置 GPIO 引脚为高电平(启动 PWM 信号)
  18. pwm.ChangeDutyCycle(duty) # 改变 PWM 的占空比,控制舵机的角度
  19. time.sleep(1) # 暂停 1 秒钟,等待舵机完成移动
  20. GPIO.output(servo_pin, False) # 设置 GPIO 引脚为低电平,停止信号
  21. pwm.ChangeDutyCycle(0) # 停止 PWM 输出,关闭信号
  22. try:
  23. # 主循环,用户输入舵机角度
  24. while True:
  25. angle = int(input("输入角度 (0-180): ")) # 提示用户输入一个角度(0 到 180)
  26. if 0 <= angle <= 180: # 如果输入的角度在有效范围内
  27. set_angle(angle) # 调用 set_angle 函数,设置舵机角度
  28. else:
  29. print("请输入有效角度") # 如果角度不在 0 到 180 之间,提示用户输入有效角度
  30. except KeyboardInterrupt:
  31. pass # 如果按下 Ctrl+C,捕获键盘中断异常,退出程序
  32. finally:
  33. pwm.stop() # 停止 PWM 输出
  34. GPIO.cleanup() # 清理 GPIO 设置,恢复 GPIO 引脚的默认状态,防止其他程序出错

5. 代码解析

  1. GPIO 设置:我们使用 GPIO.setmode(GPIO.BCM) 来设置引脚编号模式为BCM(即使用树莓派的物理引脚编号)。GPIO.setup(servo_pin, GPIO.OUT) 用于将GPIO 16引脚配置为输出模式,控制舵机。
  2. PWM 初始化:通过 GPIO.PWM(servo_pin, 50) 创建一个频率为50Hz的PWM信号,启动时占空比为0。pwm.start(0) 启动PWM输出。
  3. 角度转换:在 set_angle(angle) 函数中,我们将输入的角度(0到180)转换为对应的PWM占空比。占空比与角度的关系为:占空比 = (角度 / 18) + 2
  4. 控制舵机旋转:通过 pwm.ChangeDutyCycle(duty) 改变占空比,从而控制舵机的角度。time.sleep(1) 确保舵机有足够的时间完成角度调整。
  5. 用户交互:程序进入一个循环,等待用户输入角度。当用户输入一个有效的角度时,程序会调整舵机到对应的角度。如果输入无效,程序会提示用户重新输入。

6. 注意事项

  • 外部电源:舵机通常需要较大的电流,树莓派的GPIO引脚只能提供少量电流,因此最好使用外部电源为舵机供电,而不是直接通过树莓派的5V引脚。
  • 电流保护:在连接舵机和树莓派时,建议使用一个适当的电流保护电路,以防止电流过大损坏树莓派。
  • 延迟问题:在调整舵机角度时,确保给予足够的时间来完成旋转,否则可能导致舵机无法准确定位。

7. 总结

通过树莓派5的GPIO引脚,结合PWM信号,可以非常方便地控制舵机,实现精确的角度控制。在本篇文章中,我们展示了如何通过树莓派5驱动舵机,并且提供了一个简单的Python示例程序,帮助读者了解舵机控制的基本原理和应用。通过这种方式,树莓派可以广泛应用于机器人、自动化控制等项目中,为各种硬件控制提供了便利。

播放器加载失败: 未检测到Flash Player,请到安装
树莓派5驱动舵机

查看精华帖全部内容,请登录或者注册

最新回复

用树莓派5的GPIO的PWM控制舵机,进行角度控制的精度不知道到底会怎样   详情 回复 发表于 2025-1-18 10:31
点赞 关注
 

回复
举报

6997

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

用树莓派5的GPIO的PWM控制舵机,进行角度控制的精度不知道到底会怎样

点评

舵机精度的话,一般水平吧,你要精确控制的话,肯定要换成电机  详情 回复 发表于 2025-1-20 09:12
 
 

回复

166

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
Jacktang 发表于 2025-1-18 10:31 用树莓派5的GPIO的PWM控制舵机,进行角度控制的精度不知道到底会怎样

舵机精度的话,一般水平吧,你要精确控制的话,肯定要换成电机

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
报名最后一周!2025 英飞凌消费、计算与通讯创新大会-北京站
会议时间:3月18日(周二)09:30签到
参会奖励:电动螺丝刀套装、户外登山包、京东卡

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表