树莓派PWM引脚
关于树莓派的引脚图可以看《(五)树莓派3B+ wiringPi库的使用–点亮LED》。我的是树莓派3B+,排针的第12引脚也就是GPIO.1就是PWM输出的引脚。
在库rpio中介绍了树莓派的PWM引脚
- 26-pin models: pin 12
- 40-pin models: pins 12, 32, 33, 35
那么我的树莓派3B+的第12,322,33,35引脚都可以输出PWM。
当然如果采用软件PWM,那么每个GPIO引脚都可以当做PWM输出引脚使用。
什么是PWM
什么是PWM,我觉得可以看看百度百科的解释:PWM–百度百科。
PWM占空比
pwm的占空比,就是指高电平保持的时间,与该pwm时钟周期时间之比。
代码实现
#include <wiringPi.h>
#define pwm_pin 1 //定义PWM引脚 GPIO.1
int main (void)
{
wiringPiSetup (); // wiringPi库初始化
pinMode (pwm_pin, PWM_OUTPUT); // 设置GPIO.1为PWM输出
int val = 0;
while(1)
{
val ++;
if(val >= 1024){
val = 0;
}
pwmWrite(pwm_pin,val); // 输出占空比为val/1024的pwm波
delay(10); // 延时3毫秒
}
return 0 ;
}
PWM其他函数
- 设置PWM模式:
void pwmSetMode (int mode)
,树莓派的PWM有两种工作模式,
#define PWM_MODE_MS 0 // 标记和空格
#define PWM_MODE_BAL 1 // 平衡 默认是这个模式
- 设置PWM发生器范围
void pwmSetRange (unsigned int range)
,默认是1024,这也是为什么上面的代码中的最大值是2014了。 - 设置分频器分频
void pwmSetClock (int divisor)
,默认是32分频,也就是19.2/32 = 600KHZ,至于这里为什么是19.2,输出是的频率是否为600KHZ,还需要有示波器的哥哥器实践一下。博通CPU手册写的是100MHZ.
这写在void pinMode (int pin, int mode)
函数内就设置好了的。
实验电路图
排针的第12引脚也就是GPIO.1是其中的一个PWM输出引脚,接LED的正极,LED的负极直接接电源负极。
效果图
效果不是很明显,CSDN图片限制,只能是2M以内,不能上传视频,将就一下。