树莓派5驱动sg90舵机
时间: 2025-04-06 17:01:37 浏览: 44
### 关于树莓派5控制SG90舵机
尽管当前提供的引用主要涉及树莓派4B和Pico系列,但这些方法可以适配到树莓派5上。以下是基于现有资料整理的解决方案。
#### 一、硬件连接
对于SG90舵机,其引脚通常有三个:红色(电源)、棕色(接地)以及橙色(信号)。在树莓派5上的接线方式如下:
- **VCC (红)** 连接到树莓派的5V供电端子。
- **GND (棕)** 接至树莓派的地线(GND)。
- **Signal (橙)** 需要连接到GPIO引脚之一[^1]。
#### 二、软件环境配置
为了实现对SG90舵机的有效控制,需安装必要的Python库`RPi.GPIO`或`Adafruit_PCA9685`。如果采用PCA9685模块,则还需要启用I2C接口并加载相应的驱动程序。
```bash
sudo apt-get update
sudo apt-get install python3-pip i2c-tools
pip3 install adafruit-circuitpython-pca9685
```
#### 三、示例代码
下面提供两种不同的编程方案来操控SG90舵机:
##### 方法A: 使用标准 GPIO 输出 PWM 波形
此法适用于不借助额外扩展板的情况。
```python
import RPi.GPIO as GPIO
import time
servo_pin = 17 # 定义使用的GPIO编号
GPIO.setmode(GPIO.BCM)
GPIO.setup(servo_pin, GPIO.OUT)
pwm = GPIO.PWM(servo_pin, 50) # 设置频率为50Hz
pwm.start(0)
def set_angle(angle):
duty_cycle = angle / 18 + 2
pwm.ChangeDutyCycle(duty_cycle)
time.sleep(0.5)
pwm.ChangeDutyCycle(0)
try:
while True:
user_input = int(input("Enter an angle between 0 and 180 degrees: "))
if 0 <= user_input <= 180:
set_angle(user_input)
except KeyboardInterrupt:
pass
pwm.stop()
GPIO.cleanup()
```
##### 方法B: 利用 PCA9685 扩展控制器
当项目复杂度增加或者需要管理多个伺服设备时推荐这种方法。
```python
from board import SCL, SDA
import busio
from adafruit_pca9685 import PCA9685
i2c_bus = busio.I2C(SCL, SDA)
pca = PCA9685(i2c_bus)
pca.frequency = 60
def map_range(x, in_min, in_max, out_min, out_max):
return (x - in_min) * (out_max - out_min) // (in_max - in_min) + out_min
channel_num = 0 # 假设舵机连到了通道0
min_pulse = 150
max_pulse = 600
for degree in range(0, 181): # 循环遍历角度从0°到180°
pulse_width = map_range(degree, 0, 180, min_pulse, max_pulse)
pca.channels[channel_num].duty_cycle = int(pulse_width / 100 * 0xFFFF)
time.sleep(0.03)
```
以上两段代码分别展示了通过直接操作GPIO口发送PWM信号以及利用专用芯片简化多路输出的设计思路[^2][^3]。
#### 四、注意事项
- 确认所选GPIO能够支持PWM功能。
- 如果发现动作迟缓或是不稳定,请检查电压供应是否充足;建议单独配备稳压器给舵机供电以防干扰主控单元工作状态。
阅读全文
相关推荐


















