PWM定义
PWM(Pulse-width modulation)的中文名是脉冲宽度调制.那么我们来看一下wikipedia对它的定义:
脉冲宽度调制(英语:Pulse Width Modulation,缩写:PWM),简称脉宽调制,是将模拟信号变换为脉冲的一种技术,一般变换后脉冲的周期固定,但脉冲的占空比会依模拟信号的大小而改变.在模拟电路中,模拟信号的值可以连续进行变化,在时间和值的幅度上都几乎没有限制,基本上可以取任何实数值,输入与输出也呈线性变化。所以在模拟电路中,电压和电流可直接用来进行控制对象,例如家用电器设备中的音量开关控制、采用卤素灯泡灯具的亮度控制等等。
硬件PWM控制LED
硬件pwm控制wiringPi初始化 和 引脚模式设置与之前相同
要注意的是 硬件pwm控制的引脚只有 wiringPi编码 的 1号引脚,不能使用其他引脚
pwmWirte 的 参数范围为 [ 0 ,1024) 的整数
以上代码 实现了LED灯由暗变亮再变暗的过程。
还有一点要注意的是 运行可执行文件时 必须使用 root权限 比如: sudo ./a.out
软件控制
软件控制软件控制与硬件类似 不过 引脚可随意选择。
需要使用 softPwmCreate函数来 设置 精度。设置的参数最好不要超过1024。
代码
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <wiringPi.h>
#include <softPwm.h>
#define LED 1
#define GREEN 4
#define BEEP 7
int main()
{
if(wiringPiSetup()==-1){
return -1;
}
pinMode(LED,PWM_OUTPUT);
pinMode(GREEN,PWM_OUTPUT);
pinMode(BEEP,OUTPUT);
digitalWrite(BEEP,HIGH);
pinMode(BEEP,PWM_OUTPUT);
int i;
//硬件pwm控制
// while(1)
// {
i = 0;
for(i=0;i<1024;i++)
{
pwmWrite(LED,i);
delay(5);//wiringPi 中 休眠函数
}
for(i=1024;i>=0;i--)
{
pwmWrite(LED,i);
delay(5);//wiringPi 中 休眠函数
}
// }
//软件控制
softPwmCreate(GREEN,0,100);
softPwmCreate(BEEP,0,100);
// while(1)
// {
i = 0;
for(i=0;i<100;i++)
{
softPwmWrite(GREEN,i);
softPwmWrite(BEEP,99-i);
delay(20);//wiringPi 中 休眠函数
}
for(i=99;i>=0;i--)
{
softPwmWrite(GREEN,i);
softPwmWrite(BEEP,99-i);
delay(20);//wiringPi 中 休眠函数
}
// }
return 0;
}
网友评论