• Windows 10 IoT Core用PWM控制器控制树莓派LED灯亮度


    我接到一个需求,需要调节LED灯的亮度,且是从上位机进行控制,我了解到树莓派也有PWM,就准备通过PWM来控制灯的亮度。

    PWM又叫脉宽调制,是用微处理器的数字输出来对模拟电路进行控制,对模拟信号电平进行数字编码。

    微软也提供了PWM的类库

    https://docs.microsoft.com/en-us/uwp/api/windows.devices.pwm?view=winrt-19041

    于是我根据msdn写了一段实现PWM控制的代码

    private async void InitPWM()
            {
                try
                {
                    _pwmController = await PwmController.GetDefaultAsync();//获取系统上的默认PWM控制器.
                    _pwmController.SetDesiredFrequency(40);//设置PWM频率
    
                    _redLed = controller.OpenPin(__redLed);//打开22引脚
                    _redLed.SetActiveDutyCyclePercentage(20);//设置占空比
                    _redLed.Start();
                }
                catch(Exception ex)
                {               
                }
                
            }
    

      定义:

            private int __redLed = 22;
            private PwmPin _redLed;
            private PwmController _pwmController;
    

      但控制失败了。我查了一下,树莓派是通过GPIO编程来实现PWM,于是改成了下面这样

    private async void SetupGPIO()
            {
                try
                {
                    var gpioController = GpioController.GetDefault();
                    var pwmManager = new PwmProviderManager();
                    pwmManager.Providers.Add(new SoftPwm());
                    var pwmControllers = await pwmManager.GetControllersAsync();
                    _pwmController = pwmControllers[0];
                    _pwmController.SetDesiredFrequency(1000);//频率只支持40-1000赫兹
    
                    _redLed = _pwmController.OpenPin(__redLed);
                    _redLed.Start();
                }
                catch (Exception ex)
                {
                }
                
            }
    

      就可以通过改变引脚的占空比来改变灯的亮度了

    _redLed.SetActiveDutyCyclePercentage(0.5);//设置引脚的占空比百分比
    

      需要注意的是,这个PWM控制器只支持40-1000赫兹的频率,超过或低于这个区间都会出错。

  • 相关阅读:
    函数基础
    全局变量与类似配置文件的模块文件
    global语句(python学习手册422页)
    作用域实例
    变量名解析:LEGB原则
    作用域
    第三方库安装方法
    s[-1]和s[len(s)-1]
    查找特定后缀的文件
    logging日志管理-将日志写入文件
  • 原文地址:https://www.cnblogs.com/ssvip/p/12888523.html
Copyright © 2020-2023  润新知