跳到主要内容

PWM 接口

接口介绍

PWM(Pulse Width Modulation,脉宽调制)接口提供高精度可编程脉冲信号输出能力,通过调节占空比实现对外部设备的精确控制。该接口可用于驱动舵机、电机、LED 灯、蜂鸣器等执行设备,实现速度调节、位置控制、亮度调节等功能,为机器人运动控制、智能硬件交互及嵌入式应用提供灵活可靠的控制方式。

案例目标

通过 PWM 接口控制舵机转动特定角度。

设备清单

  • RDK X5 开发板

  • 公对母杜邦线

  • PWM 舵机(180°):PWM 舵机一种基于脉宽调制(PWM)信号进行位置控制的执行机构,通过接收不同脉宽的控制信号,实现指定角度的精准转动。舵机分为 180° 和 360° 两种,控制信息如下:

    舵机类型0.5ms1.0ms1.5ms2.0ms2.5ms
    180°45°90°135°180°
    360°顺时针(快速)顺时针(慢速)逆时针(慢速)逆时针(快速)停止

硬件连接

该案例使用的 MG90S 舵机,黄色为信号线,红色为正极,棕色为负极。

连接示意图

接口说明

说明

舵机接口名称与板端接口号对应关系如下,板端接口号参考 40PIN 管脚定义表中的 BOARD 编码。

接口名称板端接口号功能说明
DATA32PWM 接收
VCC1电源
GND39

40PIN 管脚定义

40PIN 管脚定义

案例代码

创建 pwm_servo.py 文件,在 pwm_servo.py 文件中粘贴以下代码:

#!/usr/bin/env python3
import sys
import signal
import Hobot.GPIO as GPIO
import time

def signal_handler(signal, frame):
sys.exit(0)

output_pin = 32

GPIO.setwarnings(False)

def main():
GPIO.setmode(GPIO.BOARD)
p = GPIO.PWM(output_pin, 50)
incr = 0.5
val = 12.5
p.start(val)
print("PWM running. Press CTRL+C to exit.")
try:
while True:
time.sleep(0.25)
if val >= 12.5:
incr = -incr
if val <= 2.5:
incr = -incr
val += incr
print("Duty Cycle: {}".format(val))
p.ChangeDutyCycle(val)
p.start(val)
finally:
p.stop()
GPIO.cleanup()

if __name__ == '__main__':
signal.signal(signal.SIGINT, signal_handler)
main()

运行案例

使用以下命令运行案例代码:

python3 pwm_servo.py

运行后舵机在 0-180° 之间来回转动。