ДВС РОТОРНЫЙ EMDRIVE РАСКОКСОВКА HONDAВИДЫ

Драйвер Шагового На Avr. Шаговый двигатель avr


AVR360: контроллер для шагового двигателя | avr

Здесь приведен перевод апноута [1], описывающего реализацию компактного, высокоскоростного, управляемого прерываниями контроллера шагового мотора. Шаговые двигатели (ШД) обычно используются для приложений наподобие управления фокусом камеры, привода ленты, перемещения печатающей головки, управления движением механики в факсах, принтерах, копировальных аппаратах, 3D-принтерах, станках с ЧПУ, жестких дисках, приводах DVD-ROM и т. п. Высокое быстродействие микроконтроллеров AVR позволяет разработчику реализовать высокоскоростные приложения для управления ШД, причем вычислительное ядро процессора остается слабо нагруженным. Особенности описываемого контроллера:

• Высокоскоростной котроллер ШД• Применяются прерывания• Компактный код (в обработчике прерывания используется около 10 байт)• Низкие требования к вычислительным ресурсам• Можно реализовать на всех микроконтроллерах семейства AVR

[Немного теории: как это работает]

Шаговый мотор (шаговый двигатель, ШД) постоянного тока преобразует импульсы тока во вращение своего ротора. Типичный ШД содержит в своем составе 4 силовые обмотки, на которые подаются эти импульсы тока. Обмотки часто помечены разными цветами как red (красный), yellow/white (желтый/белый), red/white (красный/белый) и yellow (желтый), но могут использоваться и другие цвета. Приложенное напряжение к этим обмоткам приводит к выполнению мотором одного шага.

Во время нормального функционирования (когда ротор ШД вращается) в каждый момент времени напряжение подключено к 2 обмоткам из четырех. ШД поворачивает свой ротор на один шаг по часовой стрелке с каждым переключением пар обмоток в определенном порядке. Если порядок переключения обмоток меняется на противоположный, то ШД будет вращать ротор в обратном направлении. Переключение обмоток иногда называют переключением фаз ШД.

Скорость вращения управляется частотой импульсов переключения фаз ШД. С каждым импульсом (с каждым шагом ШД) ротор поворачивается на фиксированный угол. Обычный угол поворота составляет 1.8 градуса. С таким углом поворота на шаг полный оборот ротора (360 градусов) потребует 200 шагов (циклов переключения фаз).

Путем изменения интервала между прерываниями таймера можно регулировать скорость вращения ШД, а путем подсчета количества шагов можно управлять углом поворота. На рис. 1 показаны диаграммы переключения фаз ШД. В таблице 1 показано соответствие шагов мотора значениям, записываемым в выводы порта микроконтроллера.

AVR360-Step-Motor-Step-Sequence

Рис. 1. Последовательность переключения фаз.

Таблица 1. Значения фаз ШД.

Шаг Yellow Red/White Yellow/White Red Значение (HEX)
0 1 0 0 1 9
1 1 1 1 0 C
2 0 1 1 0 6
3 0 0 1 1 3

[Описание программного обеспечения]

Программа микроконтроллера использует 16-разрядный таймер с функцией захвата для генерирования прерывания каждые 100 мкс. Когда выполняется обработчик прерывания, новое значение для формирования фаз выводится в выходные разряды порта PORTB (они управляют силовыми ключами, которые подают напряжения на обмотки ШД).

Значения для фаз шагового двигателя записаны в память программ (FLASH) микроконтроллера. При включении питания или сбросе эти значения копируются в SRAM, чтобы ускорить к ним доступ со стороны кода программы - этим достигается максимальное быстродействие. В этой реализации подпрограмма обработчика прерывания (interrupt service routine, ISR) занимает 7 циклов процессорного времени + 4 цикла на вход в ISR и 4 цикла на выход из ISR. Всего получается 15 тактовых циклов. Таким образом, на рабочей тактовой частоте 8 МГц один шаг мотора займет меньше 2 мкс. Если запуск ISR потребуется каждые 100 мкс, то обработка управления фазами ШД займет примерно 2% вычислительных ресурсов ядра микроконтроллера.

В этой программе значения для формирования фаз ШД сохраняются в по адресу 0x0100 в памяти RAM. Старший байт адреса RAM всегда постоянный, и используется только младший ниббл младшего байта адреса для получения доступа доступа к значениям (см. рис. 2). Младший ниббл в ячейке памяти (4 бита) содержат действительное значение для управления фазами ШД, старший ниббл содержит адрес следующего значения.

AVR360-Step-Motor-Addresses-and-Values

Рис. 2. Использование адресов и значений из таблицы переключения фаз.

При использовании такого метода можно достичь максимальной скорости работы кода и минимального расхода процессорного времени микроконтроллера. В таблицах 2 и 3 показано использование ресурсов микроконтроллера.

Таблица 2. Использование вычислительных ресурсов и памяти.

Функция Размер кода Циклов Использование регистров Прерывание Описание
Main 38 слов - R16, XL, XH, ZL, ZH - Инициализация и пример основной программы.
OC1A 10 слов 13 + возврат R16, XL, XH Timer1 Output Compare A Формирование шагов мотора путем вывода очередных значений в порты управления фазами. Вычисление адреса для следующего значения фаз.
Всего 48 слов - R16, XL, XH, ZL, ZH

Таблица 3. Использование периферийных устройств.

Периферийное устройство Описание Разрешенные прерывания
4 вывода портов GPIO Выходы для управления силовыми ключами фаз ШД.
Timer1 Использование прерываний таймера для генерации частоты смены фаз ШД. Timer 1 Output Compare A
;*************************************************************************** ;* Имя файла: avr360.asm ;* Тема: простая реализация высокоскоростного контроллера ШД ;* Date :98.07.02 ;* Version :1.00 ;* Support telephone :+47 72 88 43 88 (ATMEL Norway) ;* Support fax :+47 72 88 43 99 (ATMEL Norway) ;* Support E-mail :[email protected] ;* Target MCU :может работать на всех моделях AVR ;* : (в этом примере используется ATmega8515) ;*************************************************************************** .include "..\8515def.inc" ;*************** Используемые глобальные регистры ************************** .def temp = R16 ;*************** Определение констант ******************************** .equ c_value = 500 ;значение сравнения для output compare interrupt ; 500 циклов на 5 МГц соответствует 100 мкс ;************************************************************************= ;* ;* Начало программы - с этого места начинается выполнение кода ;* ;************************************************************************= .cseg ;Начало таблицы векторов прерываний .org 0x00 rjmp main ;Вектор прерывания Output compare A interrupt .org OC1Aaddr rjmp OC1A ;************************************************************************= ;* OC1A - Обработчик прерывания (ISR) Timer1 Output compare A ;* ;* Описание: ;* Этот ISR загружает новое значение фаз из таблицы, расположенной ; в памяти SRAM. Значения в ячейках таблицы имеют 2 функции: младший ;* ниббл содержит значение для вывода в порт, а старший содержит адрес для ;* следующего значения. Младший ниббл выводится в порт, а старший ниббл ;* помещается в регистр XL. ;* ;* Количество слов кода : 6 + возврат ;* Количество тактовых циклов : 7 + возврат ;* Младшие регистры : не используются ;* Старшие регистры : 3 (temp, XL, XH) ;************************************************************************= OC1A: ld temp,X ;Загрузить в temp значение по указателю X mov XL,temp ;Поместить это значение в младший байт указателя X andi temp,0x0F ;Сброс старшего ниббла temp out PORTB,temp ;Вывод младшего ниббла в фазы ШД swap XL ;Поменять местами старший и младший нибблы XL andi XL,0x0F ;Подготовка адреса следующей ячейки: сбросить старший ниббл reti ;**************************************************************************** ;* Основная программа ;* ;* Эта программа инициализирует Timer 1 output compare interrupt, чтобы оно ;* срабатывало с интервалом, определенным константой c_value. ;* Для достижения максимальной скорости работы таблица преобразования значений ;* загружается из памяти программ (FLASH) и сохраняется в SRAM по адресу 0x0100. ;**************************************************************************** main: ldi r16,high(RAMEND) ;Инициализация указателя стека out SPH,r16 ldi r16,low(RAMEND) out SPL,r16 ldi temp,0x0F ;Настройка выходов порта PORTB out DDRB,temp ldi temp,0x00 out PORTB,temp ;Запись начального значения в PORTB ldi temp,high(c_value);Загрузка старшего байта величины сравнения out OCR1AH,temp ldi temp,low(c_value) ;Загрузка младшего байта величины сравнения out OCR1AL,temp ldi temp,0x00 out TCNT1H,temp ;Очистка старшего байта таймера out TCNT1L,temp ;Очистка младшего байта таймера out TCCR1A,temp ;Очистка регистра управления таймера A (timer control reg A) ldi temp,0x40 out TIFR,temp ;Очистка ожидающего прерывания таймера out TIMSK,temp ;Разрешение прерывания сравнения таймера (Timer compare interrupt) ldi ZH,high(step*2) ;Инициализация указателя Z на таблицу фаз мотора в памяти FLASH ldi ZL,low(step*2) ldi XH,high(0x0100) ;Инициализация указателя X на место в оперативной памяти (RAM) ldi XL,low(0x0100) ldi temp,0x04 ;Загрузка значения счетчика load: lpm ;Загрузка значения шага из FLASH st X+,R0 ;Сохранение значения шага в RAM adiw ZL,0x01 ;Инкремент указателя на FLASH dec temp ;Декремент счетчика brne load ;Повторить, пока не будет загружена вся таблица ldi XH,high(0x0100) ;Инициализация указателя X на место таблицы в RAM ldi XL,low(0x0100) ldi temp,0x9 out TCCR1B,temp ;Очистка таймера при совпадении значения (compare match), CK/1 sei ;Общее разрешение прерываний loop: rjmp loop ;Бесконечный цикл по метке loop ;Таблица преобразований для формирования фаз ШД (Step motor lookup table): step: .db 0x19,0x2C,0x36,0x03

[Ссылки]

1. AVR360: Step Motor Controller site:atmel.com.2. AVR-USB-MEGA16: управление шаговым двигателем по USB.

microsin.net

AVR Урок 18. Подключаем шаговый двигатель. Часть 1 |

&nbsp

&nbsp

&nbsp

 

Урок 18

Часть 1

 

 

 

Сегодня мы попробуем к микроконтроллеру Atmega8a подключить шаговый двигатель.

Шаговые двигатели — это такие двигатели, которые посредством подачи напряжения на определённую обмотку переводят свой ротор в определённое место, тем самым достигается более точное управление угловой скоростью. Можно также, в принципе, управлять и положением ротора, но это уже как-то больше сервоприводы, с которыми, мы, возможно, тоже, когда-то столкнёмся.

Шаговые двигатели в наше время приобретают всё больший интерес, так как в наш век точной электроники люди что-то мастерят движущееся, наподобие роботов и каких-то умных машин, также доходит дело до определённых летательных аппаратов и прочих устройств.

Поэтому я также не обошел этот вопрос стороной и решил также что-то об этом рассказать и подключить шаговый двигатель к контроллеру и попробовать им поуправлять. Как только мне это удалось, я решил этим поделиться и с вами.

Мне в руки попался именно вот такой вот шаговый двигатель 28-BJ48 компании Kiatronics

 

image00

 

Питается данный двигатель от 5 вольт, питание подается попеременно на различные обмотки, которых 4, и если питание снимается с одной обмотки и подается на другую, то ротор. соответственно. устраемляется к ней.

Данные обмотки своими сердечниками в статоре находятся не в 4 местах, а намного чаще, а именно каждая повторяется 2048 раз, поэтому когда мы подаем напряжение на соседнюю обмотку, ротор поворачивается на очень малый угол. А если напряжение подавать ещё и на 2 соседние обмотки, то ротор можно расположить между ними, и количество положений при этом вообще удваивается. А есть вообще микрошаговый режим, когда мы на одну обмотку подаём меньшее напряжение, а на другую большее, то и вообще можно потеряться в количестве шагов и вообще крутить данный шаговый двигатель очень плавно.

Питать двигатель лучше не от ножек контроллера, а лучше через какую-нибудь развязку. Можно использовать мощные транзисторы, но существует специальная микросхема-драйвер для шаговых двигателей. Как правило, выпускается данный драйвер в виде готовых модулей, выглядящих приблизительно вот так вместе с подключенным шаговым двигателем

 

image01

 

Данный модуль представляем собой микросхему ULN2003. Можно использовать ее не только для двигателей. Но мы будем использовать здесь 4 входа и 4 выхода, так как у нашего двигателя 4 провода. каждый из которых подключен к определённой обмотке, а пятый провод является общим. Подключенный таким образом мотор уже не влияет на ножки портов, у которых ограничен максимальный ток и можно уже ничего не бояться на этот счёт. При подключении к ножкам контроллера мы используем входы модуля IN1, IN2, IN3 и IN4, а разъём двигателя просто соединим с разъёмом модуля.

Нарисуем вот такую схему, чтобы лучше понять принцип работы двигателя (чтобы увидеть процесс рисования, смотрите видеоверсию урока, ссылка на которую внизу страницы)

 

image02

 

Здесь мы видим 4 катушки, одним выводом которые соединены к общему проводу, а на другие выводы каждой катушки мы будем подавать логические уровни, например на рисунке поданы 1000.

Данные обмотки потом по кругу так циклически и повторяются.

 

 

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

1 режим — этот простейший режим, при котором мы по очереди подаём логические единицы или высокие логические уровни на каждую обмотку. Называется он также полношаговый режим или One Phase Step Mode.

Схематично данный режим можно изобразить таким образом

 

image03

 

Существует также ещё один интересный режим — это режим когда ротор будет шагать между обмотками, то есть мы единички будем подавать на 2 соседние обмотки

 

image04

 

Вот так.

А также есть ещё и третий решим — это полушаговый режим, когда мы уже чередуем комбинации, сначала ротор будет находиться у обмотки, потом наполовину переместится к соседней обмотке, потом совсем к соседней обмотке и т.д. Это полушаговый режим или one and two-phase-on

 

image05

 

Вот таких вот три режима существуют. мы остановимся на 3 режиме, так как он будет самый плавный и самый интересный.

На следующем занятии мы соберём всю нашу схему с шаговым двигателем и начнём уже писать какой-то исходный код.

 

Предыдущий урок Программирование МК AVR Следующая часть

 

Техническая документация на шаговый двигатель

 

Программатор и шаговый двигатель 28YBJ-48 с драйвером ULN2003 можно приобрести здесь:

Программатор (продавец надёжный) USBASP USBISP 2.0

Шаговый двигатель 28YBJ-48 с драйвером ULN2003

 

 

Смотреть ВИДЕОУРОК (нажмите на картинку)

 

AVR Подключаем шаговый двигатель

Post Views: 2 619

narodstream.ru

Драйвер Шагового На Avr

Драйвер Шагового На Avr

Шаговый двигатель используется в машинах для точного перемещения. Наладим управление шаговым двигателем через USB с компьютера своими руками. Нам потребуется: 1) Шаговый двигатель, возьмем - Nema23 76 мм, вместо него может быть другой, управлять будем биполяным методом, любой гибридный и биполярный шаговый двигатель будет работать с таким же управлением. 2) Блок питания, возьмем - импульсный блок питания мощностью 360W с выходным напряжением 24V / 15A, может использоваться любой другой блок питания, если будет достаточно мощности и напряжения для работы двигателя. Более мощному двигателю будет нужно больше напряжения. Предел напряжения нашего драйвера ограничивается максимальным напряжением, которое выдерживают транзисторы, это 100V, у нас блок питания на 24V. В случае большего напряжения транзисторы в схеме необходимо заменить на более мощные, также при увеличении напряжения, транзисторы могут начать греться, если такое случилось, необходимо дополнительно обдувать их куллером (у меня все в порядке и куллер не требуется).

Недавно пришлось подключать шаговый двигатель - ШД к микроконтроллеру, но в силу некоторых особенностей строения ШД пришлось решить несколько проблем: - Драйвер. Из-за того что через обмотки ШД проходит ток до 1А необходимо подключать ШД к микроконтроллеру через так. Вот фото собранного драйвера шагового двигателя с usb. Эта программа на языке avr.

Для подключения блока питания к сети 220V также нужен шнур и нужно определить где в вашей розетке ноль, а где фаза. Контакт блока N подключается к нулю, а L к фазе, также можно подключить заземление (но не обязательно). Определение возможно при помощи индикаторной отвертки, у меня определилось, что слева ноль, а справа фаза.

Как крутить шаговый двигатель Шаговый двигатель работает от подачи комбинаций напряжения в разных направлениях на его обмотки, у этого шагового двигателя 2 обмотки - 4 провода, первая обмотка - черный (A) и зеленый (A*) провод, вторая обмотка - красный (B) и синий (B*). За одну смену комбинаций делается 1 шаг - 1,8 градусов. Если комбинации быстро менять, то двигатель будет быстро и точно позиционироваться - крутиться. Смена комбинаций возможна в двух направлениях, соответственно двигатель будет крутиться вперед или назад.

Чтобы крутить шаговый двигатель, надо: 1) Собрать устройство - USB контроллер шагового двигателя на микроконтроллере AVR и драйвер шагового двигателя, 2 в 1. Перед тем как собирать это сложное устройство, рекомендую сначало отдельно собрать и проверить работу только USB контроллера, его я уже собрал вот тут -. Если USB связь работает нормально, то можно приступать к изготовлению драйвера. 2) Написать программу для компьютера, которая будет посылать USB команды устройству. 3) Написать программу для микроконтроллера AVR, которая будет принимать USB команды и крутить двигатель. USB контроллер шаговых двигателей и USB драйвер шагового двигателя Взятый нами двигатель является гибридным и поддерживает несколько вариантов управления. Управлять двигателем будем биполярным методом и соответственно собираем мы драйвер биполярного шагового двигателя с USB контроллером.

Сначало покажу готовый результат, а потом подробно рассмотрим его. Вот фото собранного драйвера шагового двигателя с USB управлением, который я собрал: Драйвер шагового двигателя с USB управлением своими руками На картинке сверху - биполярный (гибридный) шаговый двигатель NEMA 23 с потреблением - 3А тока на обмотку. Под ним - импульсный блок питания 360 Вт, 24 В, 15 А. Мощности блока хватает на 15 / 3 = 5 одновременно запитанных обмоток, у одного двигателя 2 обмотки, т.е хватит на 2 одновременно работающих двигателя (4 обмотки). Я не вижу необходимости включать одновременно больше одного двигателя, в случае если необходимо двигаться по кривой траектории, то нужно чередовать короткие включения то одного, то другого двигателя. Так что имеющейся мощности с запасом хватает. Двигатель и блок питания подключены к устройству, которое также подключено через USB к компьютеру.

Все соединено по схеме. Схема драйвера биполярного шагового двигателя и USB контроллера (схема длинная и нуждается в прокрутке для просмотра): Драйвер шагового двигателя USB на микроконтроллере AVR своими руками. Дополнительно нужно (нет в наличии): 1) Модуль питания DC-DC SMAU01L-12 (вместо него пойдет любой конвертер DC-DC с 5V до 10V-15V) - 1 шт., возможно можно без него, от 5V питать (не проверено) Главным компонентом схемы является программируемый микроконтроллер AVR - ATmega16A, если вы не знаете как с ними работать (записывать программу), сначало ознакомьтесь с основами такой работы, которые подробно описаны в первой статье. Для устройства можно использовать и другой микроконтроллер AVR, я выбрал ATmega16A, т.к. В нем с запасом имеется много памяти и контактов для подключения нескольких двигателей и большого количества рабочих инструментов. Слева от ATmega16A находятся компоненты для организации связи по протоколу USB - к выводам XTAL подключен внешний кварцевый резонатор с USB-совместимой частотой 12 МГц. Для сглаживания сигнала у него есть 2 конденсатора по 20 пФ, все это соединяется с минусом питания.

К контактам, через которые идет обмен сообщениями с USB, подключены 2 резистора по 68 Ом, как того требует протокол USB. Резистор на 1.5 кОм, подключенный к D- линии задает низкоскоростной режим работы USB устройства. Диоды Зенера 3V6 понижают напряжение на линиях, через которые идет обмен данными USB с 5 до 3.6V. Управление двигателем подключается к контактам PB0, PB1, PB2, PB3, на остальные свободные P-контакты можно в будующем подключить еще двигатели и рабочие инструменты, но пока они пустуют.

Микроконтроллер ATmega16 отдает команды и обрабатывает USB сигналы после того как в него записана программа (ниже она будет написана). После него идет конструкция из микросхем и транзисторов (2 так называемых H-моста) - она приводит шаговый двигатель в движение. Драйвер IR2101 нужен для преодаления большой емкости затвора транзистора IRF540N, что позволяет открывать и закрыть транзистор с большой скоростью (например принимать сигнал ШИМ, которым может регулироваться скорость двигателя при необходимости - об этом сигнале дальше напишу), что нам и нужно. К сожалению для питания этого драйвера необходимо 10-15V, у нас есть только 5V от USB. Поэтому пришлось поставить компонент DC-DC SMAU01L-12, который преобразует 5V в 12V, вместо него можно использовать любой другой способ получения такого напряжения, например, при помощи трансформатора или любым другим путем. К VCC подключается +12V, к COM -12V.

Один драйвер работает с 2мя транзисторами - верхним (H) и нижним (L). Контакты HIN и LIN - входной сигнал с микроконтроллера для верхнего и нижнего транзистора, по этому сигналу транзисторы открываются и закрываются. HO и LO - это выходные сигналы, транзисторы подключаются гейтами (G) к этим контактам.

Они подключаются не просто так - справа на линиях 2 резистора 10/100 Ом и диод, они нужны для нормальной работы транзисторов - чтобы они замедлялись при открытии и не замедлялись при закрытии, эти транзисторы слишком быстро открываются и это может вызвать проблемы. Диод и конденсаторы 3300 пФ - нужны для работы драйвера IR2101 согласно документации на эту микросхему. Каждая обмотка (фаза) двигателя (у двигателя 2 обмотки A и B - 4 контакта) подключается к H-мосту из транзисторов IRF540N. H-мост - это специальная схема соединения транзисторов, которая позволяет подавать через них напряжение высокого уровня (24V) в разных направлениях. Один мост изготавливается из 4-х транзисторов. В итоге здесь вы видите 2 H-моста, которые позволяют гонять разнонаправленное напряжение высокого уровня по 2м обмоткам двигателя и тем самым крутить его.

Обратите внимание, что в мосту - HIN верхнего драйвера соединяется с LIN нижнего драйвера, а LIN верхнего с HIN нижнего. Это сделано для одновременной подачи сигналов.

Если вы включили HIN сверху, то обя

xsonarcolour.web.fc2.com