Changchun Master Li

树莓派产生 PWM 的三种方式

2021-03-15

Introduction

某鱼上树莓派1代a已经不到20块钱了,256MB低至15元,bcm垃圾终于价格合理了,
那谁还用8kb的单片机呀,遂入了一打,准备做个逗猫的玩意儿。

舵机需要两路 PWM,这里是我对各种实现PWM的方法总结

PWM 3 methods

Software PWM

因为很多系统已经预装好RPI.GPIO,开箱即用,所以我首先测试了这种方案
结果显示这是个大坑,RPI.GPIO的 PWM 用的是软计时器,上来给我干坏一个舵机
示波器可以看到稳定性尿崩,网络上抱怨rpi pwm的基本都是在使用此方案

DMA timer PWM

pigs 是通过dma timer来实现的,精度非常好,最大的优点是可以分配任意gpio作为pwm pin来使用
访问硬件需要root权限,所以使用前要先启动一个服务 sudo pigpiod
参考 http://abyz.me.uk/rpi/pigpio/pigs.html

Hardware PWM

linux kernel已经集成了硬件pwm驱动,非常稳定。板子hack一下可以利用耳机接口产生pwm,不必要占用rpi1a宝贵的P1 Header

  1. kernel: rpi kernel可以忽略这一步,如果上upstream kernel需要配置pwm_bcm驱动
  2. dts: 在/boot/config.txt里加上dtoverlay=pwm-2chan
  3. setup gpio pin alt function: 允许pigs设置全部gpio sudo pigpiod -x -1,设置gpio40,gpio45 pigs m 40 0 && pigs m 45 0
  4. hardware modification:改造耳机接口,短接C34,C48电容,断开R20,R26电阻
  5. have fun with /sys/class/pwm interface



参考 https://github.com/jdimpson/syspwm

使用支付宝打赏
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏

扫描二维码,分享此文章