板子支持的PWM频率范围是48khz-192mhz,但是舵机云台需要50hz的频率才能转,不在支持范围内啊。该用什么方法解决呢?
#!/usr/bin/env python3
import sys
import signal
import Hobot.GPIO as GPIO
import time
舵机参数配置
SERVO_MIN_DUTY = 2.5 # 0度位置占空比 (2.5%)
SERVO_MAX_DUTY = 12.5 # 270度位置占空比 (12.5%)
SERVO_FREQ = 50 # 舵机PWM频率 (50Hz = 20ms周期)
支持PWM的管脚: 32 or 33
output_pin = 33
def signal_handler(signal, frame):
sys.exit(0)
def angle_to_duty(angle):
“”“将角度(0-270)转换为占空比(2.5%-12.5%)”“”
angle = max(0, min(270, angle)) # 限制角度范围
return SERVO_MIN_DUTY + (SERVO_MAX_DUTY - SERVO_MIN_DUTY) * (angle / 270.0)
def main():
# 初始化GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
# 创建PWM实例
pwm = GPIO.PWM(output_pin, SERVO_FREQ)
# 初始位置设为135度(中间位置)
init_angle = 135
pwm.start(angle_to_duty(init_angle))
print(f"舵机云台控制中 (0-270度), 当前: {init_angle}度. 按CTRL+C退出")
try:
while True:
# 示例动作: 0° -> 135° -> 270° -> 135° 循环
for target_angle in [0, 135, 270, 135]:
duty_cycle = angle_to_duty(target_angle)
pwm.ChangeDutyCycle(duty_cycle)
print(f"转到: {target_angle}度, 占空比: {duty_cycle:.1f}%")
time.sleep(1) # 等待舵机转动
except KeyboardInterrupt:
pass
finally:
pwm.stop()
GPIO.cleanup()
if name == ‘main’:
signal.signal(signal.SIGINT, signal_handler)
main()