1、实验前准备
树莓派3B及电源 x1
面包板 x1
LED灯 x1
ULN2003电机驱动或者L293、L298 x1
直流电机小风扇x1
电阻220欧 x1
杜邦线若干
2、实验原理
PWM就是脉冲宽度调制,也就是占空比可变的脉冲波形.
脉冲宽度调制是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM进行编码。
如图占空比为 t:T
对于树莓派硬件PWM只有1脚(wiringPi)GPIO.1,那么我们单独测试此脚通过不同占空比可以实现呼吸灯或者控制电机速度。
3、实验步骤
按照如下接线。 LED正极接GPIO.1,串联一个220Ω电阻接地,ULN2003电源接入5V电源和地,输出接直流小电机暂且用D,对应GPIO.1接入IN4。 编写控制代码如下,我们实现一个很简单的功能,PWM从小的占空比到最大然后在从小到大,实现呼吸灯的效果,电机也速度从慢到快,从快再到慢的过程。代码如下:
#include <wiringPi.h> #define PWMPin 1 //定义PWM引脚 void setup(); int main (void) { setup(); intval = 0; intstep = 2; while(1) { if(val>1024) { step = -step; val = 1024; } else if(val<0) { step = -step; val = 0; } pwmWrite(PWMPin,val); val+=step; delay(10); } return 0 ; } /*初始化配置*/ void setup() { wiringPiSetup (); //wiringPi库初始化 pinMode (PWMPin, PWM_OUTPUT); //设置1为PWM输出 }
编写完代码通过SSH文件上传到wiringPi目录下。 输入如下命令:
# gcc -o pwm pwm.c -lwiringPi
运行: # ./pwm或者sudo ./pwm 实验现象:我们执行程序,则LED会从亮到灭再到亮逐渐变化的过程即呼吸灯效果,直流电机小风扇从快到慢再到快实现了电机的调速功能。到此我们按键输入的学习到此结束,下一讲我们开始学习树莓派中断的知识,可以引入外部中断来处理突发事件,比如障碍物靠近,开始下一讲吧! 下一讲:6、树莓派中断实验, 通过按键模拟外部中断,控制LED亮灭。