香橙派 OrangePi5B 使用PWM

配置引脚复用功能

查阅OrangePi官网引脚信息(http://www.orangepi.cn/)

在这里插入图片描述

在这里插入图片描述
参照OrangePi说明书打开复用引脚(/sys/class/pwm下面已经有两个pwmchipX,不知道为什么有的,可能是WiringOP?,先不管)。

配置方法,sudo vim /boot/orangepiEnv.txt
上述文件追加一行
overlays=pwm15-m2 pwm13-m2
重启。

查看/sys/class/pwm目录,ls -l
找到你添加的那两个pwm对应的地址,这两个pwmchip目录就是接下来要操控的pwm目录。

PWM控制

虽然OrangPi可以用wiringOP很方便地控制GPIO,但是下面这个方法是通用方法,不管是树莓派OrangePi还是NVIDIA Jetson 都是一样的操作。

Linux中设备即文件。操作PWM即为操作文件。

sudo -i  # 进入root
echo 0 > /sys/class/pwm/pwmchip**/export  # 创建pwm,运行完成后会生成pwm0目录
echo 20000000 > /sys/class/pwm/pwmchip**/pwm0/period  #配置周期 单位纳秒
echo 1000000 > /sys/class/pwm/pwmchip2/pwm0/duty_cycle  # 配置占空比 单位纳秒
echo "normal" > /sys/class/pwm/pwmchip2/pwm0/polarity  # 配置极性,默认为“inversed”,SG90舵机需为“normal”
echo 1 > /sys/class/pwm/pwmchip2/pwm0/enable  # 使能pwm,开始发生波形
echo 0 > /sys/class/pwm/pwmchip2/pwm0/enable  # 暂停发生pwm波形

舵机控制

假如需要控制舵机,将pwm引脚和舵机信号线相连即可。
如果是独立电源供电,将OrangePi GND引脚和电源共地。

### Orange Pi Python 控制舵机教程 对于在 Orange Pi 上通过 Python 编程控制舵机的操作,可以利用 GPIO 接口发送脉宽调制 (PWM) 信号给舵机。根据提供的信息,在 500 到 2500 微秒范围内的高电平 PWM 脉冲能够使舵机转动到不同的角度位置[^1]。 为了实现这一功能,首先需要安装并设置好 `RPi.GPIO` 或者适用于 Orange Pi 的类似库——例如 `OPi.GPIO` 来管理硬件引脚的状态。下面是一个简单的例子展示怎样初始化 GPIO 并向指定通道发出适当宽度的 PWM 波形: ```python import time from OPi import GPIO servo_pin = "PA7" # 定义连接至舵机的数据线所接的具体针脚编号 GPIO.setboard(GPIO.ZEROPLUS2H3) # 设置开发板型号 GPIO.setmode(GPIO.SOC) # 使用 SOC 命名方式定义管脚 GPIO.setup(servo_pin, GPIO.OUT) pwm_frequency = 50 # 设定频率为 50Hz(周期=20ms) duty_cycle_min = 2.5 # 对应最小占空比(约等于500us) duty_cycle_max = 12.5 # 对应最大占空比(约等于2500us) def angle_to_dutycycle(angle): """Convert an angular position into a duty cycle.""" return ((angle / 180) * (duty_cycle_max - duty_cycle_min)) + duty_cycle_min # 创建 PWM 实例对象并与之前设定好的引脚关联起来 pwm_servo = GPIO.PWM(servo_pin, pwm_frequency) try: while True: desired_angle = float(input("Enter target angle between 0 and 180 degrees: ")) if not 0 <= desired_angle <= 180: print("Invalid input! Please enter value within range.") continue dc = angle_to_dutycycle(desired_angle) pwm_servo.start(dc) time.sleep(1) finally: pwm_servo.stop() GPIO.cleanup() # 清理释放资源 ``` 这段代码实现了基本的功能需求:用户可以通过命令行输入想要达到的角度值;程序会计算相应的占空比率并通过 PWM 输出驱动舵机到达该位置。需要注意的是实际应用中可能还需要考虑更多细节因素如误差校正等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值