Рубрики
Схемы на Arduino

Регулятор напряжения питания на Arduino Uno

В этой статье мы рассмотрим проектирование источника изменяющегося напряжения (регулятор) питания с максимальным напряжением 5 В на основе платы Arduino Uno. Для этой цели мы воспользуемся АЦП (аналого-цифровым преобразованием) и ШИМ (широтно-импульсной модуляцией).

Некоторые электронные устройства работают с напряжением питания 3.3 В, а некоторые — с напряжением 2.2 В. Некоторые схемы работают даже при более низких питающих напряжениях. Поэтому в этом проекте мы создадим простую схему, которая будет обеспечивать на своем выходе напряжение питания в диапазоне 0-5 В с точностью 0.05 В.

Эта схема будет обеспечивать рабочий ток до 100 мА, поэтому ее можно будет использовать для питания большинства используемых в настоящее время датчиков различного назначения. Также эту схему можно применить для зарядки аккумуляторов форматов AA и AAA. С помощью ЖК дисплея можно будет наглядно контролировать величину напряжения и его изменения. Уменьшение и увеличение выходного напряжения в схеме осуществляется с помощью кнопок.

Необходимые компоненты

  1. Плата Arduino Uno (купить на AliExpress).
  2. ЖК дисплей 16х2 (купить на AliExpress).
  3. Транзистор 2N2222 (купить на AliExpress).
  4. Резистор 1 кОм (3 шт.) (купить на AliExpress).
  5. Конденсатор 100 мкФ (2 шт.) (купить на AliExpress).
  6. Кнопка (2 шт.).
  7. Источник питания с напряжением 5 В.

Работа схемы

Схема устройства представлена на следующем рисунке.

Напряжение на выходе устройства не будет полностью линейным – оно будет подвержено влиянию шумов. Для нейтрализации этого эффекта параллельно выходу включены конденсаторы. Две кнопки на схеме служат для увеличения и уменьшения напряжения на выходе схемы. ЖК дисплей служит для отображения текущего значения выходного напряжения.

Исходный код программы

Прежде чем приступим к рассмотрению программы кратко повторим принципы использования АЦП и ШИМ в плате Arduino Uno.

Напряжение с выхода схемы мы будем подавать на один из каналов АЦП платы Arduino Uno. После осуществления преобразования (АЦП) мы полученное цифровое значение будем преобразовывать в соответствующее ему значение напряжения и показывать его на экране ЖК дисплея.

Плата Arduino имеет шесть каналов АЦП. Мы можем использовать любой из них. Разрешение АЦП Arduino составляет 10 бит – то есть мы сможем работать с диапазоном целых чисел (0-(2^10) 1023)). Это означает что данный АЦП преобразует входное напряжение от 0 до 5 Вольт в целое число от 0 до 1023. То есть имеем точность АЦП 5/1024= 4.9 мВ. То есть один шаг приращения целого числа на выходе АЦП равен изменению в 4.9 мВ на его входе.

В нашей схеме для АЦП мы будем использовать канал A0. Для осуществления функций АЦП мы должны в программе сделать следующие вещи:

1. analogRead(pin);
2. analogReference();
3. analogReadResolution(bits);

Все каналы АЦП платы Arduino Uno имеют опорное напряжение 5В – то есть это максимальное значение входного напряжения, которое способны обрабатывать данные каналы. Поскольку, к примеру, некоторые датчики обеспечивают на своем выходе диапазон напряжений 0-2.5В, то использование опорного напряжения 5В в данном случае приведет к уменьшению точности измерений. Поэтому в подобных случаях для изменения опорного напряжения целесообразно использовать функцию “analogReference();”. Мы в рассматриваемом случае оставим значение опорного напряжения без изменений.

По умолчанию разрешающая способность каналов АЦП платы Arduino Uno составляет 10 бит. Однако в некоторых случаях (например, для увеличения скорости преобразования) можно уменьшить эту разрешающую способность с помощью команды “analogReadResolution(bits);”. Мы в нашем примере не будем изменять разрешающую способность каналов АЦП.

Если все необходимые настройки канала АЦП сделаны (или оставлены по умолчанию), то для чтения значения с выхода АЦП можно воспользоваться функцией “analogRead(pin);”, где pin обозначает контакт платы Arduino, который мы будем использовать для аналого-цифрового преобразования, в нашем случае это будет контакт “A0”. Для того чтобы сразу сохранить значение с выхода АЦП в переменной можно использовать команду вида ”float VOLTAGEVALUE = analogRead(A0);”, в результате этой команды значение с выхода АЦП будет сохранено в переменной “VOLTAGEVALUE”.

Контакты платы Arduino Uno, на которых возможно формирование ШИМ сигнала, обозначены символом “~”. Всего таких каналов на плате Arduino Uno шесть. Мы в рассматриваемом примере для формирования ШИМ сигнала будем использовать контакт PIN3.

Как использовать ШИМ сигнал в Arduino? Это можно сделать, к примеру, с помощью функции analogWrite(3,VALUE) – эта функция на 3-м контакте сформирует ШИМ сигнала со значением (коэффициентом заполнения), определяемым параметром VALUE. Параметр VALUE может изменяться в диапазоне от 0 до 255. 0 соответствует самому низшему значению, а 255 – самому высшему. При VALUE=255 в результате приведенной команды мы получим 5В на контакте PIN3. Если VALUE=125, то на PIN3 мы получим среднее значение напряжения равное 2,5 В.

Кнопки в схеме подключены к контактам PIN4 и PIN5 платы Arduino Uno. При нажатии одной кнопки мы будем увеличивать коэффициент заполнения ШИМ, а при нажатии другой – уменьшать. Таким образом, мы будем изменять коэффициент заполнения ШИМ на контакте PIN3.

ШИМ сигнал с контакта PIN3 подается на базу NPN транзистора, который обеспечивает изменяющееся напряжение на своем эмиттере. Поскольку на базе транзистора за счет изменения коэффициента заполнения ШИМ напряжение будет изменяться, то и на его эмиттере напряжение также будет изменяться. Таким образом, мы получили источник изменяющегося напряжения питания (регулятор питания).

С выхода схемы напряжение подается на канал АЦП платы Arduino Uno чтобы визуализировать его потом на экране ЖК дисплея.

Видео, демонстрирующее работу схемы

8 ответов к “Регулятор напряжения питания на Arduino Uno”

Для защиты микроконтроллера на базу транзистора поставил резистор 100 Ом, от вч помех поставил паралельно электролитам керамику 100n.

Хорошо, спасибо за конструктивный комментарий по улучшению работы схемы

Не учтено, но оно не окажет существенного влияния на работу схемы

просто так, для красоты, можете использовать один раз delay (5000)

Странно, что подтягивающие резисторы на 1 кОм. На 10 кОм обычно ставят.

10 кОм для подключения светодиодов больше подходят, а для кнопок и 1 кОм вполне подойдут, хотя никто и здесь не запрещает вам использовать 10 кОм

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *