Меню

Регулировка напряжения с помощью ардуино



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

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

Внешний вид регулятора напряжения питания на 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 мВ на его входе.

Читайте также:  Указатель напряжения контакт 55 сз et unn131

В нашей схеме для АЦП мы будем использовать канал 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 чтобы визуализировать его потом на экране ЖК дисплея.

Источник

ШИМ. Урок 4. Ардуино

Привет! Продолжаем говорить про ардуино. Сегодня речь пойдет про широтно-импульсную модуляцию или шим. Что это, как использовать, при чем здесь ардуино? Давайте разбираться.

В прошлый раз мы говорили про написание своей собственной функции. Пожалуйста, посмотрите тот пост, если уже забыли или пропустили его.

В предыдущих статьях мы рассматривали возможности ардуино по приему и выводу цифровых сигналов. В этом случае мы можем вывести на пин напряжение 0 или 5 вольт. Что считается логическим 0 и 1 соответственно. И также мы можем считать напряжение на пине. Например, когда используем кнопку.

Но часто необходимо использовать напряжение между 0 и 5 вольтами. Чтобы вывести такое напряжение платы ардуино uno недостаточно. Можно использовать ардуино due или подключить внешнюю схему цифроаналогового преобразователя.

Однако, мы можем имитировать аналоговый сигнал на цифровых выходах ардуино с помощью широтно-импудьсной модуляции или шим.

Контакты, которые можно использовать для генерации шим сигнала, помечены на плате ардуино специальным символом

На плате ардуино uno, контакты 3, 5, 6, 9, 10, 11 поддерживают вывод ШИМ сигнала.

Давайте соберем небольшую схему на макетной плате, чтобы посмотреть как это работает. Для того, чтобы выполнить этот урок нам понадобиться.

  • Ардуино UNO
  • Макетная плата
  • Перемычки
  • 4 Резистора номиналом 220 Ом
  • 4 Светодиода 5 мм
  • Кабель USB

analogWrite()

Чтобы использовать возможности шим, рассмотрим новую функцию analogWrite().

Функция analogWrite() принимает два аргумента: номер пина для вывода и 8 разрядное число от 0 до 255, которое будет выводиться на контакте.

В стандартной библиотеке ардуино ide уже есть программа для демонстрации работы шим. Давайте загрузим ее и посмотрим как это работает.

Загрузим программу из меню File — Examples — Basics — Fade.ino и соберем простую схему на макетной плате. Нам понадобятся один резистор, один светодиод и несколько перемычек.

Читайте также:  Супервизор напряжения что это такое

Текст программы

В тексте программы все уже должно быть понятно, чуть позже мы модифицируем ее и разберем подробнее. Пока что нас интересует только функция analogWrite() которая устанавливает на пин 9 напряжение 5 вольт, но особым способом.

Скважность

Скважность — это отношение периода повторения импульсов к длительности импульса. Чтобы лучше это понять рассмотрим графики.

ШИМ представляет собой изменение скважности прямоугольной последовательности импульсов. Скважность можно трактовать как процент времени, когда прямоугольный импульс имеет уровень HIGH, ко всему периоду повторения. Скважность 50% означает, что половину периода сигнал имеет высокий уровень, а половину — низкий.

Функция analogWrite() устанавливает скважность последовательности прямоугольных импульсов в зависимости от значения, передаваемого ей.

На графиках видно, что для сигнала со скважностью 25% значение HIGH действует в течение четверти периода, а остальные 75% времени установлено значение LOW. Частота прямоугольной последовательности импульсов в случае Arduino составляет приблизительно 490 Гц. Другими словами, уровень сигнала меняется от высокого (5 В) к низкому (0 В) приблизительно 490 раз каждую секунду.

Как видим, напряжение, подаваемое на светодиод, на самом деле не понижается, почему же при уменьшении скважности наблюдается спад яркости свечения светодиода? Это связано с особенностью нашего зрения. Если светодиод включается и выключается один раз за 1 мс (при скважности 50%), то вам кажется, что яркость свечения светодиода составляет приблизительно 50% от максимальной, потому что переключение происходит быстрее, чем глаза могут это зафиксировать. Ваш мозг фактически усредняет сигнал и создается впечатление, что светодиод работает на половине яркости.

Теперь изменим программу и соберем более интересную схему.

Подключим все 4 светодиода к шим портам ардуино через резисторы. Катоды всех диодов подключим к общей земле. Используем контакты 3, 6, 9 и 11.

Объявим массив светодиодов, счетчики и настроим пины на вывод.

Для того, чтобы плавно зажигать и гасить светодиоды напишем свою функцию. Она будет принимать на вход номер светодиода в массиве, плавно включать его и плавно выключать.

А в основном цикле loop() будем вызывать функцию и последовательно передавать ей номер массива. В конце меняем знак переменной delta, чтобы цикл шел в обратном направлении.

Полный текст программы

Заключение

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

Источник