树莓派教程 - 1.1 树莓派GPIO库wiringPi 硬件PWM可调频率

Git例程源码仓库https://github.com/ZhiliangMa/raspberry.git

使用到的硬件:

led,200Ω左右的电阻、杜邦线。

 

上一节使用最基本的 GPIO数字输出,led亮了,可如果想要调整led亮度怎么办?

PWM简介

PWM脉宽调制技术广泛存在于现实生活中,例如TFT显示屏的背光亮度调整,电机的速度控制,开关电源输出电压的控制。

相比于早期的线性调制,PWM具有效率高、电路简单等优点。

图中a)可以类比于灯的亮度/电机的速度/电源输出的电压,b)就对应为PWM的脉冲宽度。

如果想要灯变亮一些,就增大PWM的占空比;如果想要灯暗一些,就减小PWM的占空比。

 

树莓派的硬件PWM

树莓派的硬件pwm只有l路,也就是 物理引脚的12引脚,wiringPi引脚的1引脚

树莓派内部pwm发生器的基频为19.2MHz,输出频率 freq(Hz) = 19200000 / divisor / range

使用到的函数

函数语句函数功能
wiringPiSetup();使用wiring编码去初始化GPIO序号
pinMode(int pin, int mode);设置GPIO电气属性
pwmSetRange(unsigned int range);设置pwm脉宽范围,range与divisor共同决定pwm输出频率
pwmSetClock(int divisor);设置pwm分频系数,range与divisor共同决定pwm输出频率
pwmWrite(int pin, int value);输出pwm值,到pwm引脚
delay(unsigned int howLong);延时 xx ms

c代码:

Git例程源码仓库https://github.com/ZhiliangMa/raspberry.git

wiringPi编码的1引脚,led亮度渐变。

#include <wiringPi.h>

int hpwmLed = 1;                    // 定义使用wiringPi编码的1引脚
int main(void)
{
    int xnum = 0;
    wiringPiSetup();                // 使用wiring编码去初始化GPIO序号
    pinMode(hpwmLed, PWM_OUTPUT);   // 设置GPIO电气属性为pwm输出
    pwmSetRange(1024);              // pwm脉宽范围 0~1024
    pwmSetClock(75);                // 250Hz,19.2MHz / 75 / 1024 = 250Hz
    while(1)
    {
        for(xnum = 0; xnum <= 1024; xnum++)
        {
            pwmWrite(hpwmLed,xnum);
            delay(2);               // 延时2ms
        }
    }
    return 0;
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值