Введение. Понятие ШИМ
Широко-импульсная модуляция (сокращенно ШИП) – это техника, используемая для преобразования аналогового сигнала в цифровой. Ведь компьютер не может выдавать аналоговый сигнал: выходы цифровой техники могут принимать только одно из двух значений – например, 0V или 5V. Поэтому используется счетчик высокой точности для кодирования аналогового сигнала в ШИМ-сигнал, которые – уже цифровой, поскольку в любой момент времени он принимает значение либо 5V (ВКЛ), либо 0V (ВЫКЛ). Напряжение подается на аналоговую нагрузку (например, светодиод, или сервопривод) в виде повторяющейся последовательности ВКЛ и ВЫКЛ. Получаемое выходное напряжение вычисляется по продолжительности сигналов ВКЛ и ВЫКЛ, по следующей формуле:
Выходное напряжение = (Время ВКЛ / время импульса) * максимальное напряжение.
Взгляните на рисунок ниже для лучшего понимания.
ШИМ имеет множество применений, например:
- регулирование яркость свечения ламп,
- скорости вращения мотора,
- генерация звука и т.д.
ШИМ имеет 3 параметра:
- Период
- Скважность
- Величина
У Ардуино 6 портов, поддерживающие ШИМ: это цифровые пины 3, 5, 6, 9, 10 и 11.
В предыдущем примере мы подключили LED к цифровому пину. Теперь мы будем менять его яркость с помощью ШИМ-сигнала.
Часть 1. Управление яркостью светодиода
Необходимые компоненты
- LED M5
- 220R
Схема
Соберем вот эту схему:
Обратите внимание, что мы подключаем LED к цифровому пину 11, которые поддерживает ШИМ. Если подключить к пину 12, то желаемого результата мы не получим.
Скетч
/*******************************************************
* (C) jarduino.ru 2019
* Изучение ардуино через опыты.
*
* Опыт №3.1. Управление яркостью светодиода
*
* ****************************************************/
// Глобальные константы и переменные
const int pinLed = 11; // порт для светодиода
const int nDelay = 2; // задержка в мсек. между изменением яркости
const int nLedMin = 0; // минимальная яркость
// настройка платы
void setup()
{
pinMode(pinLed, OUTPUT);
}
// основной цикл
void loop()
{
static int i = nLedMin; // статическая переменная для хранения текущей яркости светодиода
// постепенной увеличиваем яркость светодиода:
while (i < 255)
{
analogWrite(pinLed, i);
delay(nDelay);
++i;
}
// постепенно уменьшаем яркость светодиода:
while (i > nLedMin)
{
analogWrite(pinLed, i);
delay(nDelay);
--i;
}
}
Результат
Часть 2. Управление яркостью с помощью потенциометра
Необходимые компоненты
- Дополнительно на понадобится потенциометр
Схема
Добавим на схему потенциометр:
Среднюю ногу потенциометра мы подключаем к аналоговому входу A0.
Скетч
/*******************************************************
* (C) jarduino.ru 2019
* Изучение ардуино через опыты.
*
* Опыт №3.2 Управление яркостью светодиода с помощью потенциометра
*
* ****************************************************/
// Глобальные константы и переменные
const int pinLed = 11; // порт для светодиода
const int pinPot = A0; // порт для светодиода
// настройка платы
void setup()
{
Serial.begin(9600); // инициализировать последовательные порт
pinMode(pinLed, OUTPUT); // установть пин светодиода в режим вывода
// аналоговые пины по умолчанию уже стоят в режиме ввода.
}
// основной цикл
void loop()
{
static int nValOld = 0;
static int nVal; // статическая переменная для хранения текущей яркости светодиода
nVal = analogRead(pinPot);
// выведем значение nVal в окно отладки, а чтобы
// не реагировать на помехи, будет выводить значение только если оно изменилось хотя бы на 3:
if (abs(nValOld - nVal) > 3) {
Serial.println(nVal);
nValOld = nVal;
}
analogWrite(pinLed, nVal / 4);
delay(10); // пауза в 0.01 сек.
}
Результат
Когда вы вращаете ручку потенциометра, вы видите в мониторе последовательно порта как меняется напряжение и яркость светодиода в соответствии с ним.
Объяснение
В программе мы считываем аналоговое значение, задаваемое потенциометром, и применяем его к цифровому ШИМ порту, к которому подключен светодиод. В соответствии с изменением ШИМ-сигналом, меняется и яркость светодиода.
Обратите внимание, что максимальное значение для порта ШИМ – это 255, а аналогового порта – 1024. Поэтому считанное значение приходится делить на 4.
Заключение
В этом примере мы показали как использовать ШИМ, изменять напряжение на цифровом выходе, использовать потенциометр для управления нагрузкой.
Потенциометр какой номинал? На 10ком не работает
Номинал – практически любой. Берите в пределах 1K и 1M.
Проверьте как подключили потенциометр. Всё обязано работать.