arduino
PWM - широтно-импульсная модуляция
Поиск…
Управление двигателем постоянного тока через последовательный порт с использованием PWM
В этом примере мы стремимся выполнить одну из наиболее распространенных задач: у меня есть небольшой двигатель постоянного тока, который я могу использовать, как я могу использовать Arduino для управления им? Легко, с PWM и последовательной связью, используя функцию analogWrite()
и Serial
библиотеку.
Основы
Широкополосная широтно-импульсная модуляция или ШИМ - это метод имитации аналоговых сигналов с использованием цифрового выхода. Как это работает? Использование последовательности импульсов, отношение D (рабочий цикл) между временем на высоком уровне (цифровое 1, обычно 5 В) и время на низком уровне (цифровое 0, 0 В) в каждый период может быть изменено для создания среднего напряжения между этими двумя уровнями:
Используя analogWrite(pin,value)
Arduino analogWrite(pin,value)
мы можем изменить value
рабочего цикла pin
. Обратите внимание, что pin
должен быть помещен в выходной режим, а value
должно быть между 0 (0 В) и 255 (5 В). Любое значение между ними будет имитировать пропорциональный промежуточный аналоговый выход.
Однако назначение аналоговых сигналов обычно связано с управлением механическими системами, которые требуют большего напряжения и тока, чем только плата Arduino. В этом примере мы узнаем, как усилить возможности PWM Arduino.
Для этого используется диод MOSFET. По сути, этот диод действует как коммутатор. Он позволяет или прерывает электрический поток между его истоком и дренажными терминалами. Но вместо механического переключателя он имеет третий терминал, называемый gate . Очень маленький ток (<1 мА) будет «открывать» этот затвор и пропускать ток. Это очень удобно, потому что мы можем отправить PWM-выход Arduino на этот затвор, тем самым создавая еще один импульсный импульс PWM с тем же рабочим циклом через MOSFET, который позволяет напряжениям и токам разрушать Arduino.
Билль материалов: что вам нужно для создания этого примера
- MOSFET диод: например, популярный BUZ11
- Защитный диод для двигателя: Schottky SB320
- Резистор: все 10K ~ 1M Ом
- Двигатель: типичный небольшой двигатель (типичный может быть 12 В)
- Источник питания, совместимый с выбранным вами двигателем
- Макет
- Красочные кабели!
- Ардуино, но ты это уже знал.
Сборка
Соедините все вместе! Поверните рельсы макета и поместите в него диод MOSFET. Подключите двигатель между положительным рельсом и сливным отверстием MOSFET. Подключите защитный диод таким же образом: между сливом MOSFET и положительным рельсом. Подключите источник MOSFET к общей наземной шине. Наконец, подключите штырь PWM (мы используем вывод 10 в этом примере) к затвору MOSFET, а также к общей земле через резистор (нам нужен очень низкий ток!).
Вот пример того, как выглядит эта сборка. Если вы предпочитаете схему здесь один «s.
Код
Теперь мы можем подключить Arduino к компьютеру, загрузить код и управлять двигателем, отправив значения через последовательную связь. Напомним, что эти значения должны быть целыми числами от 0 до 255. Фактический код этого примера очень прост. Объяснение дается в каждой строке.
int in = 0; // Variable to store the desired value
byte pinOut = 10; // PWM output pin
void setup() { // This executes once
Serial.begin(9600); // Initialize serial port
pinMode(pinOut, OUTPUT); // Prepare output pin
}
void loop() { // This loops continuously
if(Serial.available()){ // Check if there's data
in = Serial.read(); // Read said data into the variable "in"
analogWrite(pinOut, in); // Pass the value of "in" to the pin
}
}
И это все! Теперь вы можете использовать возможности PWM Arduino для управления приложениями, для которых требуются аналоговые сигналы, даже когда требования к мощности превышают пределы платы.
ШИМ с TLC5940
TLC5940 - удобный элемент, который должен иметь, когда вы заканчиваете порты PWM на Arduino. Он имеет 16 каналов, каждый из которых индивидуально управляется с 12 бит разрешения (0-4095). Существующую библиотеку можно найти по адресу http://playground.arduino.cc/Learning/TLC5940 . Он полезен для управления несколькими сервоприводами или светодиодами RGB. Просто имейте в виду, что светодиоды должны быть обычным анодом для работы. Кроме того, чипы являются гибкими, что позволяет еще больше портов PWM.
Пример:
// Include the library
#include <Tlc5940.h>
void setup() {
// Initialize
Tlc.init();
Tlc.clear();
}
unsigned int level = 0;
void loop() {
// Set all 16 outputs to same value
for (int i = 0; i < 16; i++) {
Tlc.set(i, level);
}
level = (level + 1) % 4096;
// Tell the library to send the values to the chip
Tlc.update();
delay(10);
}