Pulse width modulator

Exclusive offer: get 50% off this eBook here
BeagleBone Home Automation

BeagleBone Home Automation — Save 50%

Live your sophisticated dream with home automation using BeagleBone with this book and ebook

$17.99    $9.00
by Juha Lumme | December 2013 | Networking & Telephony Open Source

In this article by Juha Lumme, the author of BeagleBone Home Automation, we can drive our GPIOs to high or low state, and if we have an LED attached in our circuit, it will either light up or not. We can control the brightness by adjusting the resistance in the circuit, but this is a static way to do it, and once our circuit is complete, we can't change the resistor easily.

So, how can the LEDs on your wrist watch, mobile phone and remote control then fade in and out so perfectly? This is where pulse modulation comes in.

(For more resources related to this topic, see here.)

PWM allows us to drive a certain pin to on and off at desired frequency and duty cycle. This way we can pulse our LEDs much faster than our eyes can react, and while we only see a dimmer or a brighter LED, if one would look at it with a high speed camera, one would see that the LED still only turns on or off. Our eyes just perceive this differently.

There are three basic terms you need to understand about PWM:

  • Frequency: This defines how many full on/off "cycles" are generated in a second
  • Period: This defines how long one complete pulse cycle takes
  • Duty cycle: This specifies the time the signal is high during one full period

Think about the following figure:

In the preceding figure, we have PWM generating first a 50 percent duty cycle and then dropping to 25 percent. The effective time the LED spends as on and off can be controlled with very high precision, and this way we can achieve smooth brightness fluctuations.

Let's try doing just that. First, we will design a schematic with two LEDs that are connected to two different PWMs. Nothing fancy here either really, we have a current limiting resistor after the LEDs and that's it.

This time we will be using input from both headers, as PWM1 and PWM2 are located on P9 and P8, respectively.

Our third and last program in this article will be called racing_PWMs.py. As usual, we need to include the Adafruit library here as well, this time the PWM part of it:

import Adafruit_BBIO.PWM as PWM

When you initialize a PWM, you can initialize it with two to four parameters listed as follows:

  • Channel (header pin)
  • Duty (as in percent, 0-100)
  • Frequency (periods in a second, default is 2000)
  • And polarity (0 or 1. With this you can invert the duty cycle, default is 0)

So, we will initialize both our channels:

PWM.start("P9_14", 50, 100) #50% duty and 100hz cycle PWM.start("P8_13", 50, 100)

At this point, the LEDs will light up, and now we can start changing our duty cycle in a loop to adjust the average voltage.

Full listing of racing_PWMs.py is as follows:

#!/usr/bin/python import time import Adafruit_BBIO.PWM as PWM sleep_time=0.005 #The lower the value the faster the activity PWM.start("P9_14", 50, 100) #50% duty and 100hz cycle PWM.start("P8_13", 50, 100) while True: for i in range(100,1, -1): PWM.set_duty_cycle("P9_14", i) # Dimming PWM.set_duty_cycle("P8_13", abs(i-100)+1) # Getting brighter time.sleep(sleep_time) for i in range(1, 100): PWM.set_duty_cycle("P9_14", i) PWM.set_duty_cycle("P8_13", abs(i-100)+1 ) time.sleep(sleep_time)

When you run the program, you should see both LEDs racing (blinking) in opposite phases.

As you see, the Adafruit BBIO library is extremely useful and easy to use. And so far we have only used two functionalities it provides. Actually, the library also supports easy access to SPI and I2C communication and Analog to Digital Converter(ADC) as well.

Summary

In this article we went through foundations of input and output on a very basic level. We talked about the general purpose I/O pins, and how they can be used to control external components, such as LEDs or buttons. As you must have gathered already, with proper application of voltage and care, we can operate many of the basic electronic components. You should now feel comfortable with the basic building blocks that can help you build some external inputs and outputs to your Beagle programs.

Resources for Article:


Further resources on this subject:


BeagleBone Home Automation Live your sophisticated dream with home automation using BeagleBone with this book and ebook
Published: December 2013
eBook Price: $17.99
Book Price: $29.99
See more
Select your format and quantity:

About the Author :


Juha Lumme

Juha Lumme is an engineer with over 10 years' experience in the telecommunications field in various roles. He has been developing platform software for mobile phones and also working on the telecommunication networks side. Embedded systems are his passion, and a hobby he is working on in free time as well.

He is passionate about Linux and open source software in general. The open hardware movement in the recent years is also close to his heart, and he hopes we can all soon hack and build our dreams in a world free of patent abuse.

When not working on his computer, he loves traveling and riding mountain roads on his motorbike around Kanto prefecture in Japan.

Books From Packt


Scalix: Linux Administrator's Guide
Scalix: Linux Administrator's Guide

 Understanding TCP/IP
Understanding TCP/IP

Rapid BeagleBoard Prototyping with MATLAB and Simulink
Rapid BeagleBoard Prototyping with MATLAB and Simulink

BeagleBone Robotic Projects
BeagleBone Robotic Projects

Building a Home Security System with BeagleBone
Building a Home Security System with BeagleBone

Raspberry Pi Home Automation with Arduino
Raspberry Pi Home Automation with Arduino

Netduino Home Automation Projects
Netduino Home Automation Projects

Linux Utilities Cookbook
Linux Utilities Cookbook


No votes yet

Post new comment

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
x
w
m
Y
n
n
Enter the code without spaces and pay attention to upper/lower case.
Code Download and Errata
Packt Anytime, Anywhere
Register Books
Print Upgrades
eBook Downloads
Video Support
Contact Us
Awards Voting Nominations Previous Winners
Judges Open Source CMS Hall Of Fame CMS Most Promising Open Source Project Open Source E-Commerce Applications Open Source JavaScript Library Open Source Graphics Software
Resources
Open Source CMS Hall Of Fame CMS Most Promising Open Source Project Open Source E-Commerce Applications Open Source JavaScript Library Open Source Graphics Software