На этом уроке мы научимся изменять направление вращения с сохранением функции регулирования скорости вращения двигателя при помощи AVR-микроконтроллера компании ATMEL.
Для изменения направления вращения нашего двигателя нам необходимо изменять полярность. Осуществить это можно несколькими способами: реле, интегральные драйверы (L293, L292, L292).
Релейный H-мост не устраивает быстродействием. Интегральные драйверы – решение для «ленивых».
Наш выбор H-мост на биполярных транзисторах. Схематическое изображение представлено ниже. Включив транзисторы Q1 и Q4, вращаем двигатель в одну сторону, включив Q2 и Q3 в другую. Всё просто!
Обратим внимание на тот факт, что нельзя допускать одновременного включения Q1 и Q3, Q2 и Q4. Это приведёт к короткому замыканию! Поэтому отключив Q1 и Q4 необходимо дать им время закрыться, прежде чем включить Q2 и Q3. Эту паузу назовём -+ dead time.
Управлять будем следующим способом.
Точка «А» включает вращение в направлении FORWARD (FWR), в точку «D» поступает ШИМ последовательность режима FWR. Соответственно точка «B» включает вращение в направлении BACKWARD (BWR), точка «D» - ШИМ режима BWR.
Пишем программу. Добавляем новый файл...
#include "H-bridge.c" // Файл инициализации периферии
...с процедурами управления двигателем:
void FORWARD(); // Движение вперёд void BACKWARD(); // Движение назад
Чтобы исключить ложные выполнения процедур введём переменную направления движения direction_of_motion перечисляемого типа direction. Начальное значение переменной присвоим _BACKWARD.
enum direction {_FORWARD,_BACKWARD} direction_of_motion = _BACKWARD;
Далее, после инициализации...
initPORTs(); // Инициализация портов initTIMERs(); // Настройка таймера initADC(); // Настройка АЦП
...в основном цикле...
OCR2 = ADCH; // Опрашивем ручку газа
Если предыдущее движение было _BACKWARD кнопка заднего хода не нажата, переключаем Н-мост в режим движения вперёд. Скорость движения соответствует положению ручки газа на момент переключения.
// Движение вперёд if (direction_of_motion != _FORWARD && PIND & (1 << PD4)){ direction_of_motion = _FORWARD; FORWARD(); }
Если предыдущее движение было _FORWARD и кнопка заднего хода нажата, переключаем Н-мост в режим движения назад. Скорость движения соответствует положению ручки газа на момент переключения.
// Движение назад if(!(PIND & (1 << PD4)) && direction_of_motion != _BACKWARD){ direction_of_motion = _BACKWARD; BACKWARD(); }
Проект с исходным кодом и симуляция в Proteus во вложении.
Прикрепленные файлы:
- uprav77.rar (35 Кб)
Комментарии (1)
|
Я собрал (0) |
Подписаться
Для добавления Вашей сборки необходима регистрация