Управління швидкостями мотору або "Міксер"

Теми по керування сервоприводами, управління обертами двигунів, драйвери моторів, перетворювачі струму для моторів, управління кроковими двигунами, шілди для підключення моторів квадрокоптнрів та літаків
Відповісти
Аватар користувача
Arduino
Site Admin
Повідомлень: 98
З нами з: 16 травня 2017 18:18

Управління швидкостями мотору або "Міксер"

Повідомлення Arduino » 25 травня 2017 18:24

У цьому експерименті ми створюємо прототип міксера з двома швидкостями роботи мотору. Пояснюється включення підтягуючих резисторів. Використовується MOSFET-транзистор.

Захисний діод на схемі нам потрібен для того, щоб струмо зворотного напрямку, який почне створювати двигун, обертаючись по інерції, не вивів з ладу транзистор.
Не переплутайте полярність діода, інакше, відкривши транзистор, ви влаштуєте коротке замикання!
Причину відсутності підтягуючих / стягають резисторів в схемі ви зрозумієте, ознайомившись з програмою.
Ми підключили живлення схеми до виходу Vin плати мікроконтролера, тому що, на відміну виходу 5V, звідси можна отримати напругу, підключену до плати, без змін і без обмежень за величиною струму.
l9-mikser1.jpg
Програма управління швидкістю мотору
#define MOTOR_PIN 9
#define FIRST_BUTTON_PIN 5
#define BUTTON_COUNT 3
// імена можна давати не тільки числам, а й цілим виразами.
// Ми визначаємо з яким кроком (англ. Step) потрібно міняти
// швидкість (англ. Speed) мотора при натисканні черговий кнопки
#define SPEED_STEP (255 / (BUTTON_COUNT - 1))

void setup ( )
{
pinMode ( MOTOR_PIN, OUTPUT ) ;
// насправді, в кожному піне вже є підтягуючий
// резистор. Для його включення необхідно явно налаштувати пін
// як вхід з підтяжкою (англ. Input with pull up)
for ( int i = 0 ; i < BUTTON_COUNT ; ++ i )
pinMode ( i + FIRST_BUTTON_PIN, INPUT_PULLUP ) ;
}

void loop ( )
{
for ( int i = 0 ; i < BUTTON_COUNT ; ++ i ) {
// якщо кнопка відпущена, нам вона не цікава. Пропускаємо
// решту циклу for, продовжуючи (англ. Continue)
// його далі, для наступного значення i
if ( digitalRead ( i + FIRST_BUTTON_PIN ) )
continue ;

// кнопка натиснута - виставляємо відповідну їй швидкість
// мотора. Нульова кнопка зупинить обертання, перша
// змусить крутитися в півсили, друга - на повну
int speed = i * SPEED_STEP ;

// подача ШІМ-сигналу на мотор змусить його крутитися з
// зазначеною швидкістю: 0 - стоп машина, 127 - півсили,
// 255 - повний вперед!
analogWrite ( MOTOR_PIN, speed ) ;
}
}
Коментарі до коду програми

Ми використовували новий режим роботи портів: INPUT_PULLUP. На цифрових портах Arduino є вбудовані підтягують резистори, які можна включити зазначеним чином одночасно з налаштуванням порту на вхід. Саме тому ми не використали резистори при складанні схеми.
На кожній ітерації циклу ми задаємо мотору швидкість обертання, пропорційну поточному значенню лічильника. Але виконання інструкцій не дійде до призначення нової швидкості, якщо при перевірці натискання кнопки вона виявиться відпущеної. Інструкція continue, яка виконається в цьому випадку, скасує продовження даної ітерації циклу і виконання програми продовжиться з наступною. А мотор буде крутитися зі швидкістю, заданою при останньому натисканні на якусь із кнопок.

Відповісти

Повернутись до “Керування двигунами”