zoukankan      html  css  js  c++  java
  • 树莓派进阶之路 (013)

    我手里面的是树莓派3,系统是Raspbian官方操作系统,已经安装好了wiringPi。

      PWM简介:脉宽调制(PWM)是指用微处理器的数字输出来对模拟电路进行控制,是一种对模拟信号电平进行数字编码的方法。wiringpi有两种方式产生PWM,第一种为树莓派硬件PWM,如果需要精确的PWM控制的话,最好使用硬件PWM。第二种为wiringpi软件模拟的pwm,我们一种一种的介绍。
      首先是电路连接,准备做一个LED呼吸灯程序。所以电路很简单,一个LED,一个100Ω的电阻。电阻串联在LED正极,然后连接到树莓派12号引脚。LED负极接地。
    一、硬件PWM。
    硬件PWM IO口为物理的12号端口(当然,这个也作为软件PWM使用)。如下图所示:

     
    1、使用C语言编写硬件PWM程序
     
     
    pi@Raspi:~ $ sudo nano hardware_pwd.c

    2、写入以下程序

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <stdint.h>
     4 #include <wiringPi.h>
     5 
     6 #define LED 1
     7 
     8 int main(void)
     9 {
    10     int bright;
    11     printf("Raspberry Pi wiringPi PWM test program
    ");
    12     if (wiringPiSetup() == -1)
    13     {
    14         printf("GPIO setup error!
    ");
    15         exit(1);
    16     }
    17     pinMode(LED,PWM_OUTPUT);
    18     while(1)
    19     {
    20     for (bright = 0; bright < 1024; ++bright)
    21         {
    22             pwmWrite(LED,bright);
    23             delay(12);
    24         }
    25     for (bright = 1023; bright >= 0; --bright)
    26         {
    27             pwmWrite(LED,bright);
    28             delay(12);
    29         }
    30     }
    31     return 0;
    32 }

    3、编译

    pi@Raspi:~ $ gcc -o hardware_pwd hardware_pwd.c -lwiringPi

    4、运行

    pi@Raspi:~ $ sudo ./hardware_pwd

    现在应该可以看到你的LED有呼吸灯效果了。

    二、软件模拟PWM

     1 /*
     2  ============================================================================
     3  Name        : software_pwm.c
     4  Author      : Cheetah
     5  Version     :
     6  Copyright   : Geeiot
     7  Description : PWM in C, Ansi-style
     8  ============================================================================
     9  */
    10 
    11 #include <stdio.h>
    12 #include <stdlib.h>
    13 #include <stdint.h>
    14 #include <wiringPi.h>
    15 #include <softPwm.h>
    16 
    17 #define LED 1   //同样使用1号IO口
    18 
    19 int main(void) 
    20 {
    21     int i = 0;
    22     if (wiringPiSetup() == -1)  //初始化wiringpi
    23     {
    24         printf("Setup GPIO error!
    ");
    25         return -1;
    26     }
    27     softPwmCreate(LED, 0, 100);  //创建软PWM
    28     while (1) 
    29     {
    30         for (i = 0; i < 100; i++) 
    31         {
    32             softPwmWrite(LED, i);
    33             delay(10);
    34         }
    35         for (i = 99; i > 0; i--) 
    36         {
    37             softPwmWrite(LED, i);
    38             delay(10);
    39         }
    40     }
    41     return 0;
    42 }

      wiringPi 中包含了一个软件驱劢的 PWM 处理库,可以在任意的树莓派 GPIO 上输出PWM 信号。但是软件模拟的PWM有一些限制。因为PWM的频率越高,所需要的CPU资源越多,所以在这之间有一些平衡。
    步骤同上,我这里就直接贴出代码了。特别注意编译的时候会多一个-lpthread选项。

    编译

    pi@Raspi:~ $ gcc -o software_pwm software_pwm.c -lwiringPi -lpthread

    运行之后会有同样的效果!

    特别注意:必须使用 wiringPiSetup()、 wiringPiSetupGpio()或者 wiringPiSetupPhys()函数来初始化 wiringPi。wiringPiSetupSys()是需要要调用底层资源,因此,必须使用 sudo 命令来运行程序。
    附上wiringpi用户手册的下载:https://www.geeiot.net/forum.php ... 1121&extra=page%3D1

    转载:https://www.geeiot.net/forum.php?mod=viewthread&tid=1122&extra=page%3D1

     
  • 相关阅读:
    kubernetes之配置Pod的Volume存储
    kubernetes之配置Pod的QoS
    kubernetes之定义容器和Pod的CPU资源
    kubernetes之定义容器和Pod的内存资源
    kubernetes之配置namespace中Pod的总数
    kubernetes之配置namespace中CPU最大最小值约束
    kubernetes之配置namespace中内存最大最小值约束
    kubernetes之配置namespace的默认CPU请求和限制
    Kubernetes之配置namespace的默认内存请求和限制
    信步漫谈之Jmeter—引入外部函数加解密报文
  • 原文地址:https://www.cnblogs.com/jikexianfeng/p/6938119.html
Copyright © 2011-2022 走看看