Плавный пуск двигателя постоянного тока с использованием таймеров

Серия-статей: Arduino, использование двигателей постоянного тока #2

При управлении двигателями постоянного тока иногда возникает необходимость резкого изменения скорости (на пример пуск c 0% на 100% мощности или изменение скорости на протвоположную). Но такой режим работы двигателя требует очень высоких токов – в несколько раз больше, чем простое движение. Если, например, при вращении с постоянной скоростью двигатель потребляет ток порядка 500мА, то в момент пуска это значение может достигать 2-3 А. Из за этого приходится применять более мощное подсистему питания и контроллер.

Решить проблему пусковых токов можно плавным повышением скорости. Т.е. вместо мгновенного разгона двигатель будет разгоняться постепенно, при этом сглаживая пик потребления тока в момент пуска.

Подключим двигатель к motor-shield на безе L298P, как и в предыдущем примере: Подключение двигателя постоянного тока к Arduino через драйвер L298P

Не забываем, что двигатель не имеет обатной связи, поэтому для контроля текущей скорости воспользуемя дополнительной переменной motorPower

byte E1=5; // Управление скоростью двигателя – подключение к 5 выходу

byte I1=4; // Управление направлением вращения – подключение к 4 выходу

unsigned long StartTimer; // Таймер для плавного пуска

int StartTimeStep=2; // Интервал изменения мощности двигателя, в мс

int StartPowerStep=1; // Один шаг изменения мощности двигателя

int motorPower; // Мощность двигателя

void setup()

{

pinMode (E1, OUTPUT); // Задаем работу соответствующих пинов в качестве выходов

pinMode (I1, OUTPUT);

motorPower=0; // Начальная мощность - 0

}

void loop()

{

digitalWrite (I1, HIGH); // На вывод I1 подан высокий логический уровень, мотор вращается в одну сторону

for (motorPower=0;motorPower<255;motorPower+=StartPowerStep) // Увеличиваем скорость до тех пор, пока не достигнем максимума

{

analogWrite (E1, motorPower); // На выводе ENABLE управляющий сигнал с новой скоростью

delay(StartTimeStep);

}

}

Теперь двигатель разгоняется более плавно. Разгон от 0 до 255 займет почти пол секунды, а установить интервал изменения в 1 мс – то вообще за четверть секунды. Невооруженным глазом разница не очень заметна. Но такое разгон намного более щадящий для силовой части. К тому-же скорость разгона мы можем регулировать, добиваясь нужного ускорения.

Вот только использование delay() не дает использовать параллельно

никаких других действий, поэтому реализуем плавный пуск с помощью таймеров, как при плавном движеним сервоприводов.

byte E1=5; // Управление скоростью двигателя – подключение к 5 выходу

byte I1=4; // Управление направлением вращения – подключение к 4 выходу

unsigned long StartTimer; // счетчик время для плавного пуска

int StartTimeStep=2; // Интервал изменения мощности двигателя, в мс

int StartPowerStep=1; // Один шаг изменения мощности двигателя

int motorPower; // Мощность двигателя

void setup()

{

pinMode (E1, OUTPUT); // Задаем работу соответствующих пинов в качестве выходов

pinMode (I1, OUTPUT);

motorPower=0; // Начальная мощность - 0

}

void loop()

{

digitalWrite (I1, HIGH); // На вывод I1 подан высокий логический уровень, мотор вращается в одну сторону

if (motorPower<255) // Увеличиваем скорость до тех пор, пока не достигнем максимума

if ((millis()-StartTimer)>= StartTimeStep) // Проверяем, сколько прошло с последнего изменения скорости

// если больше, чем заданный интервал – увеличим скорость еще на один шаг

{

motorPower+= StartPowerStep; // увеличение скорости

analogWrite (E1, motorPower); // На выводе ENABLE управляющий сигнал с новой скоростью

StartTimer=millis(); // Начало нового шага

}

}

Теперь двигатель разгоняется плавно, причем параллельно с разгоном можно выполнять любые другие действия

Еще:

Подключаем двигатель постоянного тока. Микросхема L298P (Arduino, использование двигателей постоянного тока #1)
Плавный пуск двигателя постоянного тока с использованием таймеров (Arduino, использование двигателей постоянного тока #2)
Создание класса для работы с двигателем постоянного тока (Arduino, использование двигателей постоянного тока #3)
Создание собственной библиотеки управления двигателем постоянного тока (Arduino, использование двигателей постоянного тока #4)