Difference between revisions of "Tutorials/Arduino Projects/Additional Info/PWM"

From ROBOTC API Guide
Jump to: navigation, search
(What is PWM)
 
(5 intermediate revisions by one user not shown)
Line 12: Line 12:
  
 
== What is PWM ==
 
== What is PWM ==
PWM works by turning the circuit on and off very rapidly. By adjusting the ratio of the time on and the time off, it is possible to adjust the brightness of the LED. This ratio is called the Duty-Cycle and is the percentage of time the output is high with respect to the time of one cycle (when the output goes high then low then back to high). If the Duty-Cycle is 100% then the output is high all the time and thus the LED would be a full brightness. If the Duty-Cycle is 0%, the output is off all the time, so the LED would just be off. Now if the Duty-Cycle is set to 50%, the output is on 50% of the time and off the other 50%. In this setup, the LED would appear be at 50% of its full brightness, an thus appears to be dimmed. This works by basically averaging the time on with the time off.
+
PWM works by turning a circuit on and off very rapidly succession. By adjusting the ratio of the time on and the time off, it is possible to adjust the brightness of an LED. This ratio is called the Duty-Cycle and is the percentage of time the output is high with respect to the time of one cycle (a cycle consists of a consecutive high and low period). If the Duty-Cycle is 100% then the output is continually high and the LED would be at full brightness. If the Duty-Cycle is 0%, the output is continually low so the LED would be kept off. If the duty cycle is set to a percentage in between, then the LED will reflect that in its brightness. For example, if the duty cycle is set to 50%, the output is on 50% of the time and off the other 50%. In this scenario, the LED would appear be at 50% of its full brightness (dimmed). To find the brightness level, divide the time high with the total cycle time (also known as the period of the wave form).
 
[[image:PWM_Duty_Cycle_Graphic.png|thumb|c|center|700px|]]
 
[[image:PWM_Duty_Cycle_Graphic.png|thumb|c|center|700px|]]
 
<br />
 
<br />
  
 
== PWM as a signal ==
 
== PWM as a signal ==
Since PWM have set periods, it is possible to change the Duty-Cycle to transmit data. This is a common practice for controlling servo motors. By setting the Duty-Cycle to some value between an expected range of values, it is possible to map the value of the Duty-Cycle in the range, to another range of values that you will actually use. For instance with servos, the PWM signal is between 1.0ms and 2.0ms, but the servo maps these values to between -100% and 100%.
+
Since PWM have set periods, it is possible to change the duty cycle to transmit data. This is a common practice for controlling servo motors. By setting the duty cycle to values between 1.0ms and 2.0ms (expected range for servos), you can change the position of the servo simply by changing the PWM signal. A  1.0ms high pulse moves the servo to one extreme, a 2.0ms pulse moves it to the opposite extreme, and 1.5ms pulse moves it to the center position.
  
 
== PWM on a Microcontroller ==
 
== PWM on a Microcontroller ==
Due to the high frequency that PWM operates at, to get an accurate signal using code would basically prevent you from doing anything else with the chip. To eliminate this problem, chip manufacturers included hardware to generate the PWM signal. However not every I/O pin supports PWM output. For the Arduino UNO, only digital pins 3, 5, 6, 9, 10, and 11, support it. Luckily, ROBOTC has a tab in the Motors and Sensors Setup window that lists the pins that can be used. ROBOTC also handles all of the complex options that need to be set for the hardware PWM to work.
+
Due to the high frequency that PWM operates at, generating a PWM signal strictly through the ATMega328 microprocessor would essentially prevent users from doing anything else with an Arduino. To eliminate this problem, chip manufacturers included hardware to generate the PWM signal. However, not every I/O pin supports PWM output. For the Arduino UNO, digital pins 3, 5, 6, 9, 10, and 11 can be used for PWM. ROBOTC lists all the compatible pins under the 'Motor' tab of the Motor and Sensors Setup window and automatically configures hardware PWM for the user.

Latest revision as of 19:08, 10 October 2012

PWM
PWM
PWM


What is PWM

PWM works by turning a circuit on and off very rapidly succession. By adjusting the ratio of the time on and the time off, it is possible to adjust the brightness of an LED. This ratio is called the Duty-Cycle and is the percentage of time the output is high with respect to the time of one cycle (a cycle consists of a consecutive high and low period). If the Duty-Cycle is 100% then the output is continually high and the LED would be at full brightness. If the Duty-Cycle is 0%, the output is continually low so the LED would be kept off. If the duty cycle is set to a percentage in between, then the LED will reflect that in its brightness. For example, if the duty cycle is set to 50%, the output is on 50% of the time and off the other 50%. In this scenario, the LED would appear be at 50% of its full brightness (dimmed). To find the brightness level, divide the time high with the total cycle time (also known as the period of the wave form).

PWM Duty Cycle Graphic.png


PWM as a signal

Since PWM have set periods, it is possible to change the duty cycle to transmit data. This is a common practice for controlling servo motors. By setting the duty cycle to values between 1.0ms and 2.0ms (expected range for servos), you can change the position of the servo simply by changing the PWM signal. A 1.0ms high pulse moves the servo to one extreme, a 2.0ms pulse moves it to the opposite extreme, and 1.5ms pulse moves it to the center position.

PWM on a Microcontroller

Due to the high frequency that PWM operates at, generating a PWM signal strictly through the ATMega328 microprocessor would essentially prevent users from doing anything else with an Arduino. To eliminate this problem, chip manufacturers included hardware to generate the PWM signal. However, not every I/O pin supports PWM output. For the Arduino UNO, digital pins 3, 5, 6, 9, 10, and 11 can be used for PWM. ROBOTC lists all the compatible pins under the 'Motor' tab of the Motor and Sensors Setup window and automatically configures hardware PWM for the user.