Поиск…


Управление двигателем постоянного тока через последовательный порт с использованием 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);
}


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow