ШИМ — Широтно-Импульсная Модуляция


ШИМ (Широтно-Импульсная Модуляция (PWM — Pulse Width Modulation))
— импульсный сигнал постоянной частоты и переменной скважности (отношение длительности импульса к периоду его следования). С помощью задания скважности можно менять среднее напряжение на выходе ШИМ.

Т.е. хоть мы и работаем с цифровым устройством, которое понимает только 1 и 0 (высокий уровень напряжения +3..+5V (HIGH) и низкий уровень напряжения 0..+2V (LOW)), но мы всё же можем получить напряжение отличное от данных изменяя скважность импульсов. Другими словами – получаем аналоговый сигнал цифровыми методами.

Ниже представлен вид сигнала на выходе при разных параметрах функции analogWrite()

ШИМ

0V, 1.25V, 2.5V, 3.75V и 5V соответственно.

Разумеется, как видно из того же рисунка — на выходе наблюдается всё тот же цифровой сигнал, но если подключить простую интегрирующую цепочку
интегрирующуя цепочка
, то на выходе мы получим уже вполне аналоговый сигнал 🙂

Пример работы ШИМ можно посмотреть в тестовом скетче Fading (File -> SketchBook -> Examples -> Analog -> Fading)
Здесь светодиод подключается к Arduino/CraftDuino напрямую, а «интегрирующую» роль выполняет инерционность наших глаз 🙂

// Fading LED 
// by BARRAGAN  

int value = 0;       // переменная для хранения значения ШИМ
int ledpin = 9;      // светодиод подключён к выводу 9
 
void setup() 
{ 
  // ничего не устанавливаем
} 
 
void loop() 
{ 
  for(value = 0 ; value <= 255; value+=5) // напряжение постепенно увеличивается (от 0V to 5V)
  { 
    analogWrite(ledpin, value);           
    delay(30);                            // ждём 30 миллисекунд, чтобы был виден эффект (светодиод постепенно загорается)
  } 
  for(value = 255; value >=0; value-=5)   // а здесь напряжение будет постепенно уменьшаться (от 5V to 0V) (светодиод постепенно гаснет)
  { 
    analogWrite(ledpin, value); 
    delay(30);                            
  }  
}

Ссылки
http://arduino.cc/en/Tutorial/PWM
http://ru.wikipedia.org/wiki/ШИМ
Использование ШИМ

По теме
Программирование Arduino — аналоговый ввод/вывод
Библиотека TimerOne


Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Android Arduino Bluetooth CraftDuino DIY IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд юмор

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение