Реклама ⓘ
Главная » Радиоуправление
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Похожие статьи:


Реклама ⓘ

Машинка на ДУ управлении своими руками - Вперёд-назад (Atmel)!

На этом уроке мы научимся изменять направление вращения с сохранением функции регулирования скорости вращения двигателя при помощи AVR-микроконтроллера компании ATMEL.

Для изменения направления вращения нашего двигателя нам необходимо изменять полярность. Осуществить это можно несколькими способами: реле, интегральные драйверы (L293, L292, L292).

Релейный H-мост не устраивает быстродействием. Интегральные драйверы – решение для «ленивых».

Наш выбор H-мост на биполярных транзисторах. Схематическое изображение представлено ниже. Включив транзисторы Q1 и Q4, вращаем двигатель в одну сторону, включив Q2 и Q3 в другую. Всё просто!

H-мост на биполярных транзисторах

Обратим внимание на тот факт, что нельзя допускать одновременного включения 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 во вложении.

Прикрепленные файлы:

Теги:

Опубликована: 0 1
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (1) | Я собрал (0) | Подписаться

0
Sevas #
По моему в тексте ошибка
точка «B» включает вращение в направлении BACKWARD (BWR), точка «D» - ШИМ режима BWR.
D надо заменить на C
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическая мощность?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Набор 4WD Kit Bluetooth
Набор 4WD Kit Bluetooth
Конструктор УНЧ 60 Вт на LM3886 USB-реле (2 канала)
вверх