В этой статье мы рассмотрим понижающий преобразователь постоянного тока (в англоязычной литературе его называют DC-DC Buck Converter) на основе платы Arduino и N-канального MOSFET транзистора с максимальным допустимым током 6 Ампер. С помощью данного преобразователя мы будем понижать напряжение постоянного тока 12 В до любого напряжения постоянного тока в диапазоне 0-10 В. Напряжение на выходе конвертора будет управляться с помощью потенциометра.
Понижающий преобразователь (конвертер) постоянного тока (buck converter) похож на трансформатор с той лишь разницей что трансформатор понижает (или повышает) напряжение переменного тока, а buck converter понижает напряжение постоянного тока. Эффективность работы buck converter’а меньше чем эффективность работы трансформатора.
Ключевыми элементами понижающего преобразователя (конвертера) постоянного тока является mosfet-транзистор (с n-каналом или p-каналом) и генератор прямоугольных импульсов с высокой частотой (на основе микросхемы таймера, например, таймера 555 (555 Timer IC), или микроконтроллера). В этом проекте мы в качестве генератора прямоугольных импульсов с высокой частотой будем использовать плату Arduino Uno.
Необходимые компоненты
Плата Arduino Uno
MOSFET транзистор IRF540N
Катушка индуктивности 100 мкГн
Конденсатор 100 мкФ
Диод Шоттки (Schottky Diode)
Потенциометр
Резисторы 10 кОм и 100 Ом
Нагрузка
Батарея на 12 В
Работа схемы
Схема устройства представлена на следующем рисунке.
В схеме необходимо сделать следующие изменения:
- Соедините один вывод катушки индуктивности с истоком MOSFET транзистора, а другой ее вывод соедините со светодиодом (последовательно которому можно включить резистор на 1 кОм). Нагрузка подключается параллельно этой части схемы.
- Подключите резистор 10 кОм между затвором и истоком MOSFET транзистора.
- Подключите конденсатор параллельно нагрузке.
- Подключите положительный вывод батареи к стоку транзистора, а отрицательный – к конденсатору.
- Подключите положительный вывод диода к отрицательному выводу батареи, а его отрицательный вывод – к истоку транзистора.
- Затвор транзистора подключите к контакту платы Arduino, на котором можно задействовать широтно-импульсную модуляцию (ШИМ). В данном случае мы использовали контакт 6 платы Arduino.
- Подключите контакт GND (земля) платы Arduino к истоку транзистора.
- Подключите крайние клеммы потенциометра к контактам 5V и GND платы Arduino соответственно. А средний контакт потенциометра подключите к аналоговому контакту A1 платы Arduino.
Функция платы Arduino
В нашей схеме плата Arduino будет подавать прямоугольные тактовые импульсы частотой примерно 65 кГц на базу MOSFET транзистора. Это приведет к быстрым переключениям MOSFET транзистора и мы в результате получим некое усредненное значение напряжения. Чтобы лучше понять принцип действия этих импульсов при регулировке величины напряжения рекомендуем ознакомиться со следующими материалами на нашем сайте:
- регулятор силы свечения светодиода на основе платы Arduino;
- как использовать АЦП в плате Arduino Uno.
Функция MOSFET транзистора
Mosfet транзистор в нашей схеме используется для двух целей:
- Для высокоскоростного переключения выходного напряжения.
- Для обеспечения большой силы тока с минимальным рассеиванием энергии.
Функция катушки индуктивности
Она используется для сглаживания выбросов напряжения которые могут повредить mosfet транзистор. Катушка индуктивности запасает энергию когда mosfet транзистор включен (on) и высвобождает накопенную энергию когда он выключен (off). Поскольку в схеме мы имеем дело с достаточно высокой частотой, то величина индуктивности должна быть достаточно малой (около 100 мкГн).
Функция диода Шоттки
Диод Шоттки в нашей схеме замыкает петлю тока которую переключает mosfet транзистор и, таким образом, обеспечивает сглаживание тока нагрузки. В отличие от обычных диодов диод Шоттки рассеивает очень мало тепла (энергии) и может работать на высоких частотах.
Функция светодиода
Яркость свечения светодиода косвенно указывает на величину напряжения на нагрузке и изменяется в зависимости от вращения ручки потенциометра.
Функция потенциометра
При вращении ручки потенциометра изменяется величина напряжения, поступающего на контакт A1 платы Arduino. Значение с выхода АЦП контакта A1 затем преобразуется в диапазон от 0 до 255 и подается на контакт 6 платы Arduino для регулировки значения ШИМ.
Конденсатор сглаживает напряжение, подаваемое на нагрузку.
Зачем резистор между стоком и истоком
Даже небольшой шум на затворе MOSFET транзистора может привести к его включению. Чтобы предотвратить этот эффект рекомендуется включать резистор большого номинала между затвором и истоком транзистора.
Объяснение работы программы для Arduino
Полный код программы для Arduino приведен в конце статьи, здесь же мы рассмотрим только его наиболее важные фрагменты.
В переменную x мы будем записывать значение, которые мы будем получать с выхода АЦП контакта A1.
x= analogRead(A1);
В переменную w мы будем записывать сопоставленное значение в диапазоне от 0 до 255. Значение с выхода АЦП платы Arduino (от 0 до 1023) преобразуется (сопоставляется) в диапазон от 0 до 255 с помощью функции map.
w= map(x,0,1023,0,255);
Обычная частота ШИМ на контакте 6 платы Arduino составляет приблизительно 1 кГц. Этого недостаточно для работы нашего понижающего преобразователя напряжения постоянного тока. Поэтому эту частоту необходимо значительно увеличить с помощью следующей строчки кода в функции void setup:
TCCR0B = TCCR0B & B11111000 | B00000001;// изменяем частоту ШИМ до величины примерно 65 кГц
Работа понижающего преобразователя напряжения постоянного тока
При подаче питания на схему mosfet транзистор будет переключаться с частотой примерно 65 кГц. Это приводит к тому, что катушка индуктивности будет сохранять энергию когда транзистор включен и отдавать запасенную энергию в нагрузку когда он выключен. Поскольку все это происходит с высокой частотой, то на нагрузке мы получим усредненное значение напряжения, зависящее от положения ручки потенциометра. При увеличении значения напряжения при помощи вращения ручки потенциометра, подаваемого на контакт A1 платы Arduino, напряжение на нагрузке будет также увеличиваться поскольку будет увеличиваться коэффициент заполнения ШИМ на контакт 6 платы Arduino.
Допустим, после преобразования (сопоставления) значения с выхода АЦП у нас получилось значение 200. Тогда напряжение ШИМ на контакте 6 будет равно:
[(200*5) / 255]= 3.921 Вольта
И поскольку MOSFET транзистор является зависимым от напряжения устройством, это напряжение ШИМ автоматически приведет к изменению напряжения на нагрузке.
В нашем примере мы в качестве нагрузки использовали двигатель постоянного тока (на фото ниже). Таким образом, вращая ручку потенциометра, мы управляем скоростью вращения двигателя (и яркостью свечения светодиода).
Исходный код программы
Программа для этого проекта получилась достаточно простой, все ее функции подробно объяснены в статье, но если у вас остались какие-нибудь вопросы, вы можете задать их в комментариях к данной статье.
int x; // инициализируем переменные
int w;
void setup() {
pinMode(6,OUTPUT);// ШИМ контакт 6 – в режим вывода данных
pinMode(A1,INPUT);// аналоговый контакт A1 – в режим ввода данных
TCCR0B = TCCR0B & B11111000 | B00000001;// изменяем частоту ШИМ до величины примерно 65 кГц
Serial.begin(9600);// инициализируем последовательную связь
}
void loop() {
x= analogRead(A1);
w= map(x,0,1023,0,255);
analogWrite(6,w); // генерируем ШИМ на контакте 6
Serial.print("w "); //выводим значение переменной w в окно монитора последовательной связи
Serial.println(w);
}