Git例程源码仓库:/ZhiliangMa/raspberry.git
使用到的硬件:
led,200Ω左右的电阻、杜邦线。
上一节使用硬件PWM来控制led亮度,可树莓派的硬件PWM引脚只有1路,在实际应用中,1路PWM几乎干不了什么。
庆幸的是wiringPi库提供了一个软PWM功能。可以将任意GPIO都复用为PWM,但缺点是会增加CPU负担。
树莓派的软件PWM
软件PWM默认频率是100Hz,一般的pwm范围设置为100,所以一般的pwm分辨率为0.1ms,太大会增加CPU开销。
int softPwmCreate (int pin, int initialValue, int pwmRange) ; //pin引脚,initialValue初始PWM值,pwmRange输出pwm范围
用软件PWM,实现的呼吸灯:
Git例程源码仓库:/ZhiliangMa/raspberry.git
include <wiringPi.h>#include <softPwm.h>int spwmLed = 1; // 定义使用wiringPi编码的1引脚int main(void){int xnum = 0;wiringPiSetup();// 使用wiring编码去初始化GPIO序号softPwmCreate (spwmLed, 0, 100); // 设置wiringPi编码的1引脚为软件PWM输出while(1){for(xnum = 0; xnum <= 100; xnum++){softPwmWrite(spwmLed, xnum);delay(15); // 延时15ms}for(xnum = 99; xnum > 0; xnum--){softPwmWrite(spwmLed, xnum);delay(15); // 延时15ms}}return 0;}
应用要点
由于软件PWM会很大程度上占用树莓派的CPU开销,挤压其他任务的调度。
而且性能一般般,准确性查,几KHz以上的高频PWM几乎是输出不了的。
所以建议应用电机控制的玩家,外挂一片单片机/PCA9685,使用总线通信方式去控制其他外设做PWM输出。