====== Двигатель постоянного тока ======
//Необходимые знания: [HW] [[et:hardware:homelab:motor]], [AVR] [[et:avr:io]], \\ [LIB] [[et:software:homelab:library:module:motor]], [LIB] [[et:software:homelab:library:delay]]//
===== Теория =====
[{{ :examples:motor:dc:motor_dc_picture.jpg?220|Двигатель постоянного тока}}]
Двигатели постоянного тока с постоянным магнитом широко распространены в различных приложениях, где важны маленькие размеры, большая мощность и низкая цена. В связи с относительно большой скоростью вращения, их часто используют вместе с редуктором для достижения низкой скорости и увеличения крутящего момента.
[{{ :examples:motor:dc:motor_dc_performance.png?220|График зависимости между идеальной скоростью (V) двигателя постоянного тока, силы тока (I), мощностью (P), эффективностью (η) и крутящего момента (T).}}]
Двигатели постоянного тока с постоянным магнитом - это двигатели с простым строением и элементарным управлением. Не смотря на то, что управление легкое, скорость их вращения точно не определяется управляющим сигналом, так как она зависит от многих факторов, прежде всего от нагрузки, прилагаемой на вал и напряжения питания. Соотношение идеального крутящего момента двигателя постоянного тока и скорости - линеарное, что означает, что чем больше нагрузка на вал, тем медленнее скорость и тем больше проходящий в обмотке ток.
HДвигатели постоянного тока со щетками работают на постоянном токе и, в принципе, не нуждается в отдельной управляющей электронике, т.к. вся необходимая коммутация происходит внутри двигателя. Во время работы двигателя на вращающемся коммутаторе ротора скользят две статические щетки и держат обмотки под напряжением. Направление движения вращения устанавливается полярностью напряжения питания. Если управлять двигателем нужно только в одну сторону, то питающий ток можно подать через реле или другим простым включением, а если в обе стороны, то используется электросхема называемая H-мостом.
[{{ :examples:motor:dc:motor_h_bridge_principle.png?220|Принцип работы H-моста на примере выключателей.}}]
В H-мосте ток, нужный для вращения двигателя, направляют четыре транзистора (или их группа). Электросхема H-моста напоминает букву H - отсюда и название. Особенность H-моста заключается в возможности применения обоих полярностей двигателя. На рядом находящейся картинке приведена принципиальная схема H-моста на примере выключателей. Если в этой схеме замкнуть два диагонально расположенных выключателя, двигатель начнет работать. Направление вращения зависит от того, в какой диагонали выключатели замыкаются. В реальном H-мосте вместо выключателей используются, конечно, транзисторы, которые выбраны в соответствии с током и напряжением двигателя.
С помощью H-моста можно помимо направления вращения изменять так же и скорость вращения двигателя - для этого следует непрерывно открывать и закрывать транзисторы широтно-импульсной модуляцией (PWM) так, чтобы суммарная энергия, подводимая к двигателю, была где-то между выключенным состоянием и полной мощностью. Открытое время на протяжении всего периода PWM, называют рабочим циклом (в английском языке //duty cycle//), и обозначают процентами. 0% означает, что транзистор закрыт, т.е. не проводит ток, 100% означает, что транзистор открыт или проводит ток. Частота PWM должна быть достаточно высокой, чтобы избежать вибрации вала двигателя. При низкой частоте двигатель создает так же шум и поэтому в основном используют частоту модуляции выше 20 kHz. С другой стороны эффективность H-моста не настолько хороша при очень высоких частотах. Так же испытывает большую эффективность H-моста при очень большой частоте. Вибрацию вала двигателя так же уменьшают инерция ротора и индуктивность обмотки двигателя.
Для управления маленькими токами имеются H-мосты в виде интегрированного компонента или драйвера, для больших токов используют специальные мощные транзисторы (//Power MOSFET//). H-мосты и входящую в них электронику называют так же контроллером двигателя.
Примечание: Не путать RC (радиоуправляемый серводвигатель) PWM сигнал с сигналом обычного PWM.
===== Практика =====
Используемый в Домашней Лаборатории драйвер L293D двигателя постоянного тока содержит в себе два интегрированных H-моста и защитных диода. Двигатель управляется тремя дигитальными сигналами, одним из которых является общий, разрешающий работу сигнал (на английском языке //enable//). Два других сигнала обозначают состояние транзисторов H-моста. Два вертикальных транзистора не могут быть никогда открыты, т.к. это замкнет источник питания. Таким образом, драйвер сделан сверхнадежным и выбрать можно только то, который из транзисторов (низкий или высокий) с одной стороны H-моста (полумоста) открыт. Другими словами выбирается полярность с двумя ведущими сигналами, которая прилагается к обоим концам обмотки двигателя.
На плате модуля «Двигатели» Домашней Лаборатории есть возможность подключить до четырех двигателей постоянного тока. Схемы и обучение по подключению находятся в главе модуля «Двигатели». По существу, для каждого двигателя есть H-мост, который управляется двумя дигитальными выходными выводами микроконтроллера, т.к. вывод разрешения постоянно высокий. Если у обоих ведущих выводах одинаковое значение, то двигатель не работает, если значения отличаются, то двигатель вращается в соответствующем направлении. Состояние H-моста характеризует следующая таблица:
^ Вход А ^ Вход Б ^ Выход А ^ Выход Б ^ Результат ^
| 0 | 0 | - | - | Двигатель стоит |
| 1 | 1 | + | + | Двигатель стоит |
| 1 | 0 | + | - | Двигатель вращается в одну сторону |
| 0 | 1 | - | + | Двигатель вращается в другую сторону |
Двигателями постоянного тока можно управлять напрямую, манипулируя выводами микроконтроллера входные выводы драйвера двигателя, но в библиотеке Домашней Лаборатории имеются для этого упрощающие функции.
//
// Настройка выводов контроллера двигателя постоянного тока
//
static pin dcmotor_pins[4][2] =
{
{ PIN(B, 7), PIN(B, 4) },
{ PIN(D, 1), PIN(D, 0) },
{ PIN(D, 7), PIN(D, 6) },
{ PIN(D, 5), PIN(D, 4) }
};
//
// Разрешение управления выбранного двигателя постоянного тока
//
void dcmotor_init(unsigned char index)
{
pin_setup_output(dcmotor_pins[index][0]);
pin_setup_output(dcmotor_pins[index][1]);
}
//
// Обозначение работы выбранного двигателя постоянного тока и направления работы.
//
void dcmotor_drive(unsigned char index, signed char direction)
{
pin_set_to(dcmotor_pins[index][0], direction < 0);
pin_set_to(dcmotor_pins[index][1], direction > 0);
}
В библиотеке определяются управляющие выводы четырёх микроконтроллеров массивом //dcmotor_pins//. Перед управлением двигателем нужно вызвать функцию dcmotor_init вместе с цифровым (от 0 до 3) параметром микроконтроллера, который настраивает соответствующие выводы выходом. Для управления имеется функция //dcmotor_drive//, с помощью которой дается выбранному двигателю негативным параметром direction одно направление вращения, а позитивным параметром другое направление и в случае 0 двигатель останавливается.
Далее приведен пример программы, который управляет первым и вторым двигателем постоянного тока таким образом, что они изменяют направление вращения каждую секунду. Скорость можно изменять, если один управляющий вывод модулировать PWM сигналом.
//
// Тестирующая программа двигателя постоянного тока
// модуля «Двигатели» Домашней Лаборатории
//
#include
#include
//
// Основная программа
//
int main(void)
{
// Изменяющая направление
signed char direction = 1;
// Настройка двигателя 0 и 1
dcmotor_init(0);
dcmotor_init(1);
// Бесконечный цикл
while (true)
{
// Один двигатель работает в одну сторону, другой в другую сторону
dcmotor_drive(0, -direction);
dcmotor_drive(1, +direction);
// Пауза в 1 секунду
sw_delay_ms(1000);
// Изменение направления вращения
direction = -direction;
}
}