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

Содержание

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

&nbsp

&nbsp

&nbsp

 

Урок 18

Часть 1

 

 

 

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

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

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

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

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

 

 

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

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

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

 

 

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

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

 

 

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

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

 

 

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

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

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

 

 

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

 

 

Вот так.

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

 

 

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

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

 

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

 

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

 

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

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

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

 

 

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

 

Post Views:
4 062

narodstream.ru

Управление шаговым двигателем по UART — Проекты — AVR project.ru

$regfile = «2313def.dat»
$crystal = 4000000
$baud = 9600

‘заводим переменные
Dim S As Byte                             ‘эта переменная следит за номером шага двигателя
Dim A As Word                             ‘хранит количество сделанных шагов
Dim N As Word                             ‘хранит количество полушагов которые необходимо сделать
Dim T As String * 6                       ‘хранит команду пришедшую по UART
Dim Sign As String * 1                    ‘хранит направление движения
Dim M As Byte                             ‘хранит количество знаков в команде пришедшей по UART
Dim Char As String * 5                    ‘хранит числовое значение необходимых шагов

S = 1                                     ‘нумерация шагов начинается с единицы

‘прерывания будут генерироваться пока на ноге низкий уровень, то есть пока кнопка будет нажата
Config Int0 = Low Level
Config Int1 = Low Level

Config Portb = Output                     ‘конфигурируем порт на выход
Config Portd.5 = Output                   ‘конфигурируем ногу для подключения светодиода
Led Alias Portd.5                         ‘присваиваем имя LED выводу 5 порта D

On Urxc Command                           ‘даем ссылку на обработчик прерывания по UART
On Int0 Knopka1                           ‘даем имена обработчикам прерываний от кнопок
On Int1 Knopka2

‘разрешаем прерывания
Enable Interrupts
Enable Urxc
Enable Int0
Enable Int1

Print «Enter direction (+,-) and value step»

‘****** ОСНОВНОЙ ЦИКЛ ПРОГРАММЫ ******

Do
‘проверяем состояние переменной Sign
‘в зависимости от ее содержимого выполняем соответствующий код

 If Sign = «+» Then                       ‘если в ней плюс
  Led = 1                                 ‘зажигаем светодиод
  Gosub Plus                              ‘выполняем подпрограмму с меткой plus
  Led = 0                                 ‘гасим светодиод

 Print «OK!»
 Print «»
 Print «Enter direction (+,-) and value step»

 End If

 If Sign = «-» Then                       ‘если в ней минус
  Led = 1                                 ‘зажигаем светодиод
  Gosub Minus                             ‘выполняем подпрограмму с меткой minus
  Led = 0                                 ‘гасим светодиод

 Print «OK!»
 Print «»
 Print «Enter direction (+,-) and value step»

 End If

Loop

‘****** здесь крутим двигатель в одном направлении ******

Plus:

   Do

Incr S                                    ‘увеличим номер шага

 If S = 9 Then                            ‘максимально возможный номер шага = 8
  S = 1
 End If

Select Case S                       ‘выбираем какие обмотки включать в зависимости от номера шага

Case 1 : Portb = &B00000001
Case 2 : Portb = &B00000011
Case 3 : Portb = &B00000010
Case 4 : Portb = &B00000110
Case 5 : Portb = &B00000100
Case 6 : Portb = &B00001100
Case 7 : Portb = &B00001000
Case 8 : Portb = &B00001001

End Select

Waitus 1000                               ‘задержка между шагами

Incr A                                    ‘считаем пройденные шаги

  Loop Until A = N                        ‘если прошагали сколько нужно выходим из цикла

‘обнуляем переменные
A = 0
N = 0
Sign = «0»

Return                                    ‘возвращаемся в главный цикл программы

‘****** а здесь крутим двигатель в обратном направлении ******

Minus:

  Do

Decr S

 If S = 0 Then                            ‘минимально возможный номер шага = 1
  S = 8
 End If

Select Case S

Case 1 : Portb = &B00000001
Case 2 : Portb = &B00000011
Case 3 : Portb = &B00000010
Case 4 : Portb = &B00000110
Case 5 : Portb = &B00000100
Case 6 : Portb = &B00001100
Case 7 : Portb = &B00001000
Case 8 : Portb = &B00001001

End Select

Waitus 1000

Incr A

  Loop Until A = N

‘обнуляем переменные
A = 0
N = 0
Sign = «0»

Return                                    ‘возвращаемся в главный цикл программы

‘****** обрабатываем команду пришедшую по UART ******

Command:

Input T                                   ‘пришедшая команда

Sign = Left(t , 1)                ‘вытащим первый символ, отвечающий за направление движения
M = Len(t)                        ‘узнаем сколько символов в пришедшей команде
M = M — 1                         ‘убавляем на 1, так как первый символ хранит только направление
Char = Right(t , M)               ‘вытаскиваем из команды все символы кроме первого символа
N = Val(char)                     ‘преобразуем строку в числовую переменную
N = N * 2                         ‘теперь мы знаем сколько нужно сделать полушагов (N)

Return

‘****** обработка нажатия кнопок ******

 Knopka1:                                 ‘<<< обработчик прерывания первой кнопки

Led = 1                                   ‘зажигаем светодиод

Incr S                                    ‘увеличим номер шага

  If S = 9 Then                           ‘максимально возможный номер шага = 8
   S = 1
  End If

Select Case S                       ‘выбираем какие обмотки включать в зависимости от номера шага

Case 1 : Portb = &B00000001
Case 2 : Portb = &B00000011
Case 3 : Portb = &B00000010
Case 4 : Portb = &B00000110
Case 5 : Portb = &B00000100
Case 6 : Portb = &B00001100
Case 7 : Portb = &B00001000
Case 8 : Portb = &B00001001

End Select

Waitus 1000                               ‘задержка между шагами

Led = 0                                   ‘гасим светодиод

Return

 Knopka2:                                 ‘<<< обработчик прерывания второй кнопки

Led = 1                                   ‘зажигаем светодиод

Decr S                                    ‘тут все тоже самое, только в обратном направлении

  If S = 0 Then                           ‘минимально возможный номер шага = 1
   S = 8
  End If

Select Case S

Case 1 : Portb = &B00000001
Case 2 : Portb = &B00000011
Case 3 : Portb = &B00000010
Case 4 : Portb = &B00000110
Case 5 : Portb = &B00000100
Case 6 : Portb = &B00001100
Case 7 : Portb = &B00001000
Case 8 : Portb = &B00001001

End Select

Waitus 1000

Led = 0                                   ‘гасим светодиод

Return

End

avrproject.ru

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

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

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


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

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

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

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

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

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

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






ШагYellowRed/WhiteYellow/WhiteRedЗначение (HEX)
010019
11110C
201106
300113

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

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

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

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

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





ФункцияРазмер кодаЦикловИспользование регистровПрерываниеОписание
Main38 словR16, XL, XH, ZL, ZHИнициализация и пример основной программы.
OC1A10 слов13 + возвратR16, XL, XHTimer1 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

Проекты на микроконтроллерах » Архив сайта » Управление шаговым драйвером (приводом)

Доброго всем времени суток!

Сегодня я хочу рассказать о том, как управлять шаговым драйвером с помощью микроконтроллера. Возьмем для примера драйвер PLD545. Все остальные, я думаю, работают аналогично, этот драйвер продавался в purelogic, а там цена выше аналогов на aliexpress в два раза.

Его описание PLD545.pdf.

Именно такой стоит на установке сухой лед в количестве двух штук на Уссурийском локомотиворемонтном заводе. Эта установка обеспечивает очистку поверхности деталей перед покраской. Сухой лед — это условное название установки, которая стреляет шариками из углекислоты. Один привод обеспечивает перемещение пистолета с помощью шагового двигателя по вертикали через редуктор, другой — поворачивает пистолет в нужном оператору направлении. Управление установкой осуществляется в ручном режиме с помощью джойстика (вверх, вниз, влево,вправо) и кнопки на джойстике для стрельбы углекислотой.

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

Шаговых приводов выпущено производителями большое разнообразие, чтобы в этом убедиться надо зайти на сайт aliexpress.com и ввести в поиске товаров Step driver. Шаговые привода управляют соответственно шаговыми моторами. В зависимости от конфигурации обмоток двигатели делятся на биполярные и униполярные. Биполярный двигатель имеет одну обмотку в каждой фазе, которая для изменения направления магнитного поля должна переполюсовывается драйвером. Всего биполярный двигатель имеет две обмотки и, соответственно, четыре вывода. Униполярный двигатель также имеет одну обмотку в каждой фазе, но от середины обмотки сделан отвод. Это позволяет изменять направление магнитного поля, создаваемого обмоткой, простым переключением половинок обмотки. Таким образом, в униполярном двигателе используется другой способ изменения направления магнитного поля. 

Но это не мешает подключать к данному приводу различные по конструкции двигателя:

Некоторые уникальные свойства шагового двигателя делают их порой исключительно удобными и даже незаменимыми для применения. Шаговый двигатель — это разновидность синхронного двигателя, поэтому он имеет высокий крутящий момент на низких оборотах. Но величина момента, помноженная на скорость вращения вала ШД — величина постоянная. С увеличением скорости вращения крутящий момент на валу падает пропорционально. Большинство моторов делает 200 или 400 шагов на оборот, однако конструкция ШД позволяет фиксировать ротор в промежуточных положениях, что позволяет добиться дробления шага до 800-10000(и даже более) шагов/оборот. Подавляющее производимых ШД имеют погрешность при выполнении установки ротора в размере плюс-минус 5% от величины шага, т.е. для двигателя с шагом 1.8 град погрешность составит плюс-минус 5.4 минуты

Преимущества шаговых двигателей

  • Угол поворота ротора определяется числом импульсов, которые поданы на двигатель
  • Двигатель обеспечивает полный момент в режиме остановки (если обмотки запитаны)
  • Возможность быстрого старта/остановки/реверсирования
  • Высокая надежность, связанная с отсутствием щеток, срок службы шагового двигателя фактически определяется сроком службы подшипников
  • Однозначная зависимость положения от входных импульсов обеспечивает позиционирование без использования обратной связи
  • Возможность получения очень низких скоростей вращения для нагрузки, присоединенной непосредственно к валу двигателя без редуктора
  • Большой диапазон скоростей
  • Низкая стоимость(по отношению к сервоприводам)

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

Недостатки шаговых двигателей

  • Резонанс
  • Возможен пропуск шагов, и как следствие — потеря контроля положения(ввиду отсутствия обратной связи)
  • Потеря момента и стабильности на высоких скоростях
  • Невысокая удельная мощность

Возможность «проскальзывания» ротора — наиболее известная проблема этих двигателей. Это может произойти при превышении нагрузки на валу, при неверной настройке управляющей программы (например, ускорение старта или торможения не адекватно перемещаемой массе), при приближении скорости вращения к резонансной. Электрически это никак не может быть замечено, поэтому контроллер все последующие движения будет производить с ошибкой. Для ответственных применений устанавливают датчики обратной связи (контроль вращения или перемещения), но такие датчики достаточно дороги. Наличие датчика позволяет обнаружить проблему, но автоматически скомпенсировать её без остановки производственной программы возможно только в очень редких случаях. Чтобы избежать проскальзывания ротора, как один из способов, можно увеличить мощность двигателя.

Сам проект

Проект сделан на микроконтроллере Mega16 несколько лет назад в программе Code Vision AVR. Структурная схема:
При нажатии кнопки L или R происходит вращение двигателя в какую-либо сторону, и при этом на дисплее отображается направление >>> или <<<. В программе не реализован плавный пуск — тогда он мне был не нужен, для этого при нажатии кнопки необходимо плавно увеличивать частоту, а при отпускании — плавно уменьшать. При нажатии Up или Down меняем скорость вращения от 1 до 9  (сколько это в герцах зависит от кварца и самого текста программы). Значение сразу сохраняется в eeprom, поэтому при последующем включении оно останется тем, которое было. В этом проекте дисплей можно исключить — без него также будет работать. В файле led.c приведены комментарии к строкам программы.

А теперь самое важное: сперва я написал проект, в котором подавал меандр на вход Step драйвера аппаратно (у контроллера есть вывода от таймера напрямую), где просто заносил разные значения в регистр OCRA или TCNT, таким образом менялась частота. Но на драйвере мигал красный светодиод Error, после чего приходилось выключать питание. Оказывается, сигнал на входе Step должен иметь определенную длительность положительного уровня порядка 20-40 мкС (лучше прогоните в отладчике этот файл, а то я мог забыть) и ни в большую и ни в меньшую сторону.

Теперь принцип работы программы: здесь использован кварц на 7.37 Мгц, но вы можете поставить 8 без переделывания программы. В прерывании по TimerO осуществляется опрос кнопок и выдача сигналов на драйвер, в цикле основной программы осуществляется выдача информации на дисплей и сохранение значений в eeprom, если было изменение скорости. Архив driver.rar содержит только исходный файл на си, файл проекта и структурную схему в RusPlan, чтобы получить hex — проект необходимо откомпилировать.

Вот и всё! Успехов Вам в работе.

controller.sunwithus.ru

Управление шаговым двигателем по UART — Проекты — AVR project.ru

$regfile = «2313def.dat»
$crystal = 4000000
$baud = 9600

‘заводим переменные
Dim S As Byte                             ‘эта переменная следит за номером шага двигателя
Dim A As Word                             ‘хранит количество сделанных шагов
Dim N As Word                             ‘хранит количество полушагов которые необходимо сделать
Dim T As String * 6                       ‘хранит команду пришедшую по UART
Dim Sign As String * 1                    ‘хранит направление движения
Dim M As Byte                             ‘хранит количество знаков в команде пришедшей по UART
Dim Char As String * 5                    ‘хранит числовое значение необходимых шагов

S = 1                                     ‘нумерация шагов начинается с единицы

‘прерывания будут генерироваться пока на ноге низкий уровень, то есть пока кнопка будет нажата
Config Int0 = Low Level
Config Int1 = Low Level

Config Portb = Output                     ‘конфигурируем порт на выход
Config Portd.5 = Output                   ‘конфигурируем ногу для подключения светодиода
Led Alias Portd.5                         ‘присваиваем имя LED выводу 5 порта D

On Urxc Command                           ‘даем ссылку на обработчик прерывания по UART
On Int0 Knopka1                           ‘даем имена обработчикам прерываний от кнопок
On Int1 Knopka2

‘разрешаем прерывания
Enable Interrupts
Enable Urxc
Enable Int0
Enable Int1

Print «Enter direction (+,-) and value step»

‘****** ОСНОВНОЙ ЦИКЛ ПРОГРАММЫ ******

Do
‘проверяем состояние переменной Sign
‘в зависимости от ее содержимого выполняем соответствующий код

 If Sign = «+» Then                       ‘если в ней плюс
  Led = 1                                 ‘зажигаем светодиод
  Gosub Plus                              ‘выполняем подпрограмму с меткой plus
  Led = 0                                 ‘гасим светодиод

 Print «OK!»
 Print «»
 Print «Enter direction (+,-) and value step»

 End If

 If Sign = «-» Then                       ‘если в ней минус
  Led = 1                                 ‘зажигаем светодиод
  Gosub Minus                             ‘выполняем подпрограмму с меткой minus
  Led = 0                                 ‘гасим светодиод

 Print «OK!»
 Print «»
 Print «Enter direction (+,-) and value step»

 End If

Loop

‘****** здесь крутим двигатель в одном направлении ******

Plus:

   Do

Incr S                                    ‘увеличим номер шага

 If S = 9 Then                            ‘максимально возможный номер шага = 8
  S = 1
 End If

Select Case S                       ‘выбираем какие обмотки включать в зависимости от номера шага

Case 1 : Portb = &B00000001
Case 2 : Portb = &B00000011
Case 3 : Portb = &B00000010
Case 4 : Portb = &B00000110
Case 5 : Portb = &B00000100
Case 6 : Portb = &B00001100
Case 7 : Portb = &B00001000
Case 8 : Portb = &B00001001

End Select

Waitus 1000                               ‘задержка между шагами

Incr A                                    ‘считаем пройденные шаги

  Loop Until A = N                        ‘если прошагали сколько нужно выходим из цикла

‘обнуляем переменные
A = 0
N = 0
Sign = «0»

Return                                    ‘возвращаемся в главный цикл программы

‘****** а здесь крутим двигатель в обратном направлении ******

Minus:

  Do

Decr S

 If S = 0 Then                            ‘минимально возможный номер шага = 1
  S = 8
 End If

Select Case S

Case 1 : Portb = &B00000001
Case 2 : Portb = &B00000011
Case 3 : Portb = &B00000010
Case 4 : Portb = &B00000110
Case 5 : Portb = &B00000100
Case 6 : Portb = &B00001100
Case 7 : Portb = &B00001000
Case 8 : Portb = &B00001001

End Select

Waitus 1000

Incr A

  Loop Until A = N

‘обнуляем переменные
A = 0
N = 0
Sign = «0»

Return                                    ‘возвращаемся в главный цикл программы

‘****** обрабатываем команду пришедшую по UART ******

Command:

Input T                                   ‘пришедшая команда

Sign = Left(t , 1)                ‘вытащим первый символ, отвечающий за направление движения
M = Len(t)                        ‘узнаем сколько символов в пришедшей команде
M = M — 1                         ‘убавляем на 1, так как первый символ хранит только направление
Char = Right(t , M)               ‘вытаскиваем из команды все символы кроме первого символа
N = Val(char)                     ‘преобразуем строку в числовую переменную
N = N * 2                         ‘теперь мы знаем сколько нужно сделать полушагов (N)

Return

‘****** обработка нажатия кнопок ******

 Knopka1:                                 ‘<<< обработчик прерывания первой кнопки

Led = 1                                   ‘зажигаем светодиод

Incr S                                    ‘увеличим номер шага

  If S = 9 Then                           ‘максимально возможный номер шага = 8
   S = 1
  End If

Select Case S                       ‘выбираем какие обмотки включать в зависимости от номера шага

Case 1 : Portb = &B00000001
Case 2 : Portb = &B00000011
Case 3 : Portb = &B00000010
Case 4 : Portb = &B00000110
Case 5 : Portb = &B00000100
Case 6 : Portb = &B00001100
Case 7 : Portb = &B00001000
Case 8 : Portb = &B00001001

End Select

Waitus 1000                               ‘задержка между шагами

Led = 0                                   ‘гасим светодиод

Return

 Knopka2:                                 ‘<<< обработчик прерывания второй кнопки

Led = 1                                   ‘зажигаем светодиод

Decr S                                    ‘тут все тоже самое, только в обратном направлении

  If S = 0 Then                           ‘минимально возможный номер шага = 1
   S = 8
  End If

Select Case S

Case 1 : Portb = &B00000001
Case 2 : Portb = &B00000011
Case 3 : Portb = &B00000010
Case 4 : Portb = &B00000110
Case 5 : Portb = &B00000100
Case 6 : Portb = &B00001100
Case 7 : Portb = &B00001000
Case 8 : Portb = &B00001001

End Select

Waitus 1000

Led = 0                                   ‘гасим светодиод

Return

End

avrproject.ru

Персональный сайт — AVR446

AVR446

Линейное управление скоростью шагового двигателя

Ключевые моменты:

  • Линейное управление скоростью шагового двигателя

— Контроль ускорения, замедления, максимальной скорости и числа шагов перемещения.

  • Управление с помощью одного прерывания по таймеру.
  • Полно – или полушаговый режим привода.
  • Поддерживает все устройства AVR с 16 битным таймером.
  • Демонстрационная программа для ATmega48, работающего на частоте 3,68 МГц, с последовательным интерфейсом 19200/8/N/1.

1. Введение

В рекомендациях по применению описывается построение точного линейного контроллера шагового двигателя. Шаговый двигатель – это электромагнитное устройство, которое преобразует дискретные импульсы в механическое вращение вала. Благодаря применению данного типа двигателя достигается множество преимуществ, к числу которых относятся большая простота, т.к. отсутствуют щетки и контакты, низкая стоимость, высокая надежность, высокий крутящий момент на низких скоростях, и высокая точность перемещения. Многие системы с шаговыми двигателями при изменении скорости требуют контроля над ускорением/замедлением. Рекомендации по применению представляют драйвер с демонстрационной программой, способные контролировать как ускорение, так и положение и скорость.

Работа предлагаемого линейного контроллера скорости основана на алгоритме, описанном в статье Дэвида Остина (D. Oustin) “Generate stepper-motor speed profiles in real time”, которая была опубликована в журнале “Embedded Systems Programming” в январе 2005 года. Этот алгоритм допускает параметризацию и расчет в реальном времени, используя только простые арифметические операции над числами с фиксированной точкой, без применения таблиц данных.

 

Рисунок 1-1. Шаговые двигатели

2. Теория

2.1 Шаговый двигатель

 

Данные рекомендации по применению охватывают теорию, касающуюся линейного управления изменением скорости шагового двигателя, а также реализации самого контроллера. Подразумевается, что читатель знаком с принципом работы шагового двигателя, тем не менее, будет дано краткое изложение основных моментов. Более подробная информация о шаговых двигателях может быть найдена в книге Джонса (D. W. Jones) “Control of Stepper Motors”.

 

2.1.1 Сравнение однополярных и биполярных шаговых двигателей

 

Два широко распространенных типа шаговых двигателей – это биполярные и однополярные двигатели. Они аналогичны друг другу за исключением того, что каждая обмотка однополярного двигателя имеет центральный отвод, показанный на рис. 2-1.

 

Рисунок 2-1. Биполярный и однополярный шаговый двигатели.

 

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

 

Рисунок 2-2. Драйверы биполярного и однополярного двигателей на MOS транзисторах.

 

2.1.2 Сравнение полношагового и полушагового режимов работы

 

В шаговых двигателях, используемых в полношаговом режиме, напряжение единовременно подается на одну обмотку. При этом возможны четыре состояния (позиции), показанные в строке “Full-stepping” таблицы 2-1. Путем подачи напряжения на обе обмотки одновременно шаговый двигатель может быть «заперт» между двумя положениями, полученными в полношаговом режиме. Такой режим известен как полушаговый. Как показано в строке “Half-stepping” таблицы 2-1 он дает восемь положений. При запитывании обеих обмоток одновременно вращающий момент примерно в 1.4 раза выше, чем при запитывании только одной обмотки, правда, ценой двойного увеличения потребляемой мощности. Сегменты электрического цикла в таблице 2-1 представляют собой части одного электрического цикла. Один механический цикл (оборот) обычно состоит из нескольких электрических циклов.

 

Таблица 2-1. Полношаговый и полушаговый режимы.

Полярность

Обмотка А

+

+

 

 

+

Обмотка B

 

+

+

+

 

Часть электрического цикла

Full-stepping

1

 

2

 

3

 

4

 

Half-stepping

1

2

3

4

5

6

7

8

 

2.1.3 Скоростные характеристики

 

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

 

Рисунок 2-3. Зависимость вращающего момента от скорости

 

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

 

2.2 Основные уравнения шагового двигателя

 

Для создания вращательного движения в шаговом двигателе должен соблюдаться правильный порядок изменения тока в обмотках. Это достигается использованием драйвера, который при подаче на него импульсного сигнала (‘импульс шагового двигателя) и сигнала направления создает корректную выходную последовательность.

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

 

Рисунок 2-4. Импульсы шагового двигателя

 

Счетчик генерирует эти импульсы, работая на частоте ft [Гц].

Задержка δt , программируемая счетчиком c :

Шаговый угол двигателя α, положение θ и скорость ω задаются уравнениями

где spr – число шагов на один оборот, n – число шагов, а 1 rad/sec = 9,55 оборотов в минуту.

 

2.3 Линейное изменение скорости

 

Для мягкого старта и остановки двигателя необходим контроль ускорения и замедления. На рисунке 2-5 показана взаимосвязь между ускорением, скоростью и положением. Использование постоянного ускорения/замедления дает линейный профиль скорости.

 

Рисунок 2-5. Ускорение (ώ), скорость (ω) и положение (θ)

 

Временная задержка δt между импульсами шагового двигателя контролирует скорость. Эта задержка должна рассчитываться с целью обеспечить насколько это возможно более близкое следование скорости шагового двигателя заданному линейному изменению скорости.

Дискретные шаги контролируют движение шагового двигателя, а разрешение временной задержки между этими шагами задается частотой таймера.

Рисунок 2-6. Зависимость «Профиль скорости – импульсы шагового двигателя/скорость»

 

2.3.1 Точный расчет задержки между шагами

 

Первая задержка счетчика c0, а также последующие задержки cn определяются уравнениями (подробную информацию смотрите в приложении):

 

Вычислительная мощность микроконтроллера ограничена, а расчет двух квадратных корней – трудоемкий процесс. Поэтому рассматривается аппроксимация с меньшей вычислительной сложностью.

Значение счетчика в момент времени n для интервала времени между шагами рассчитывается с использованием аппроксимации рядами Тейлора по формуле:

 

Это вычисление осуществляется намного быстрее, чем вычисление двух квадратных корней, но при n=1 вносит ошибку величиной 0.44. Способом компенсации этой ошибки является умножение c0 на 0.676.

 

2.3.2 Изменение (рампа) ускорения

 

Как показано в приложении ускорение задается значениями c0 и n. Если выполняется изменение в ускорении (или замедлении), должен быть выполнен расчет нового значения n .

Время tn и n как функции от ускорения двигателя, скорости и шагового угла задаются уравнениями

Объединение этих уравнений дает соотношение

Из него видно, что число шагов, необходимое для достижения заданной скорости, обратно пропорционально ускорению: n1ώ1=n2ώ2.

Это означает, что изменение ускорения от ώ1 до ώ2 осуществляется изменением n. Что и показано на рис. 2-7.

Рисунок 2-7. Изменение скорости вверх/вниз

 

При перемещении на заданное число шагов для достижения нулевой скорости, замедление необходимо начать на правильном шаге. Следующее уравнение используется для нахождения n1:

 

3 Реализация

 

К рекомендациям по применению приложена работающая программа, написанная на C. Полную документацию по исходному коду и информации по компиляции можно найти, открыв файл ‘readme.html’, находящийся вместе с исходным кодом.

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

Демонстрационная программа поделена на три основных блока, как показано на блок-схеме, изображенной на рис.3-1. Каждому блоку соответствует один файл. Кроме того, имеется файл подпрограмм UART, используемый основной программой.

Рисунок 3-1. Блок-схема демонстрационной программы

В main.c имеется меню и командный интерфейс, дающие пользователю возможность контролировать шаговый двигатель с помощью терминала, подключенного к последовательной линии связи.

speed_cntr.c вычисляет необходимые данные и генерирует шаговые импульсы для того, чтобы шаговый двигатель повторял заданный профиль скорости.

sm_driver.c подсчитывает шаги и выводит соответствующие сигналы для управления шаговым двигателем.

 

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

Рисунок 3-2. Профиль скорости

Параметры, описывающие профиль скорости:

step – Число шагов для перемещения

accel – Необходимое ускорение

decal – Необходимое замедление

speed – (Максимальная) требуемая скорость.

 

3.1 Меню и командный интерфейс

 

Для использования демонстрационной программы пользователь должен подключить к последовательному порту AVR терминал. Настройки последовательного порта должны соответствовать следующим: 19200 бод, 8 бит данных, отсутствие контроля четности, 1 стоповый бит. Должен работать любой программный эмулятор терминала. Используя терминал, пользователь может задавать различные команды управления двигателем и получать ответную информацию от демонстрационной программы.

Подпрограмма обработки прерывания UART RX (находится в uart.c) сохраняет принятые символы в буфере приемника и обрабатывает код возврата на одну позицию (backspace). При получении команды <inter> (ASCII код 13) основная программа читает буфер приемника и выполняет заданную команду.

При старте программы и при задании команды ‘?’ отображается этот экран помощи:

После отображения меню или выполнения команды выводится информационная строка:

Демонстрационная программа выдает текущее положение двигателя, ускорение, замедление, и настройки скорости. А также число шагов, требуемое для перемещения.

Существует три различных способа заставить шаговый двигатель перемещаться:

Шаговый двигатель работает в соответствии с настройками, заданными в приложении.

Шаговый двигатель перемещается на [data] шагов с заданными настройками.

  • move [steps][accel][decel][speed]

Двигатель перемещается на [steps] шагов, используя указанные значения[accel][decal][speed].

Когда шаговый двигатель начнет движение, будет отображено ‘Running…’. До тех пор пока двигатель вращается, новые команды блокируются. После его остановки выдается сообщение ‘Ok’ и принимаются новые команды.

 

3.2 Контроллер скорости

Контроллер скорости рассчитывает и генерирует профиль скорости. Блок-диаграмма контроллера скорости приведена на рис. 3-3. Для запуска шагового двигателя контроллер скорости настраивается путем вызова функции Move().

Рисунок 3-3. Блок-диаграмма контроллера скорости


Функция Move() сначала рассчитывает все необходимые параметры и сохраняет их в структуру данных рампы (изменения) скорости, затем она разрешает прерывания от таймера. Таймер генерирует прерывания в соответствии с необходимым изменением скорости, и по каждому прерыванию вызывает функцию Step_Counter() для перемещения шагового двигателя.

 

3.2.1 Установочные расчеты

 

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

Для создания быстрого кода в программе избегают применения арифметики с плавающей запятой. Поэтому для поддержания точности важно масштабирование переменных. Для упрощения арифметики также используются предварительно рассчитанные константы компилятора, находящиеся в заголовочном файле smdriver.h.

Нахождение скорости:

Нахождение ускорения:

Для расчета профиля скорости существует два различных сценария:

  1. Ускорение продолжается до тех пор, пока не будет достигнута необходимая скорость, или
  2. Замедление начинается до того как будет достигнута необходимая скорость.

Сценарий зависит от всех четырех переменных, описывающих профиль скорости.

3.2.2.1 Ускорение продолжается до достижения необходимой скорости

На рис. 3-4 показана рампа скорости, в которой требуемая скорость достигается до начала замедления.

Рисунок 3-4. Изменение скорости ограничено заданным значением скорости.

  • max_s_lim – число шагов, необходимое для достижения требуемой скорости.

 

  • accel_lim – число шагов до начала замедления (игнорирование требуемой скорости).

Если max_s_lim < accel_lim , то ускорение ограничено достижением требуемой скорости. Замедление зависит от этого, и, в данном случае, decel_val находится по формуле:

3.2.1.2 Замедление начинается до того как будет достигнута требуемая скорость

На рис.3-5 показана рампа скорости, где замедление должно начаться до достижения требуемой скорости.

Рисунок 3-5. Рампа скорости с замедлением, начинающимся до достижения требуемой скорости.

Если max_s_lim > accel_lim , то ускорение ограничено началом замедления, а decel_val тогда рассчитывается по формуле:

3.2.2 Прерывание от таймера

Прерывание от таймера генерирует ‘шаговые импульсы’(вызывает функцию StepCounter()) и работает только при движении шагового двигателя. В соответствии с профилем скорости, показанном на рис.3-6, прерывание от таймера будет работать в четырех различных состояниях.

Рисунок 3-6. Рабочие состояния для различных участков профиля скорости

Такое протекание процесса реализуется конечным автоматом в прерывании от таймера, показанном на рис. 3-7.

Рисунок 3-7. Конечный автомат для прерывания от таймера

Во время запуска программы или при остановленном шаговом двигателе конечный автомат остается в состоянии STOP. При выполнении установочных расчетов задается новое состояние, и разрешаются прерывания от таймера. При перемещении шагового двигателя более чем на один шаг конечный автомат переходит в состояние ACCEL. Если выполняется только один шаг, состояние изменяется на DECEL.

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

либо не будет достигнута требуемая скорость и состояние изменится на RUN, либо

должно стартовать замедление, изменяя состояние на DECEL.

 

При состоянии установленном в RUN шаговый двигатель будет работать на постоянной скорости, пока не стартует замедление. После этого состояние изменится на DECEL.

Оно будет оставаться в DECEL и замедлять двигатель до тех пор, пока скорость за требуемое число шагов не достигнет нулевого значения. Затем состояние изменится на STOP.

3.2.2.1 Вычисления и счетчики

Во время ускорения и замедления для каждого шага должно вычисляться новое время задержки. Вычисление включает в себя деление с остатком. Для улучшения точности этот остаток сохраняется и участвует в следующем вычислении.

Для отслеживания положения и при изменении состояния необходимы некоторые переменные-счетчики. Рис. 3-8 иллюстрирует их использование.

Рисунок 3-8. Расчетные величины во временной задержке

  • step_count подсчитывает шаги, начиная с нуля при старте ACCEL. После завершения DECEL ее значение равно числу шагов, заданному в команде.
  • accel_count используется для управления ускорением/замедлением. Стартует с нуля в состоянии ACCEL и увеличивается за один шаг на единицу, пока не завершится состояние ACCEL. Во время старта DECEL принимает значение decel_val, являющееся отрицательным, и инкрементируется на каждом шаге. При достижении нулевого значения движение прекращается, состояние переходит в STOP.
  • decel_start сообщает о том, когда начнется замедление. В тот момент, когда step_count становится равным decal_start, состояние переходит в DECEL.

3.3 Драйвер шагового двигателя

Драйвер шагового двигателя генерирует соответствующую последовательность сигналов для перемещения двигателя в заданном командой направлении. Блок-схема драйвера шагового двигателя показана на рис.3-9.

Рисунок 3-9. Блок-схема драйвера шагового двигателя

Счетчик шагов инкрементируется или декрементируется при каждом вызове функции Step_Counter(). При использовании полношагового режима значение счетчика изменяется от 0 до 3, в полушаговом режиме работы двигателя счетчик принимает значения от 0 до 7. Это значение соответствует различным положениям шагового двигателя в одном электрическом цикле. Значение счетчика шагов используется в качестве индекса для таблицы шагов. Благодаря этому на драйвер шагового двигателя подаются корректные сигналы.

 

3.3 Скорость и размер кода

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

Во время вызова Move() перед стартом прерываний от таймера выполняются установочные расчеты. Это вносит задержку между вызовом функции и запуском шагового двигателя, составляющую приблизительно 1.5 mS. По прерыванию от таймера осуществляются расчеты во время ускорения и замедления. Обработка каждого прерывания требует примерно 200 uS. При работе с постоянной скоростью для обработки прерывания оказывается достаточным около 35 uS. Из сказанного выше видно, что максимальная выходная скорость ограничивается вычислениями для ускорения/замедления. Для шагового двигателя с 400 шагами на один оборот максимальная выходная скорость:

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

 

4 Литературные ссылки

D.Austin, Generate stepper-motor speed profiles in real time, статья в ‘Embedded Systems Programming’, январь 2005

http://www.embedded.com//showArticle.jhtml?articleID=56800129

D.W.Jones, Control of Stepper Motors, sections 5.2.10, 10.8, 10.9 and 10.10 книги

Handbook of Small Electric Motors под редакцией W.H.Yeadon и A.W.Yeadon

McGraw-Hill, 2001. http://www.cs.uiowa.edu/~jones/step/

 

5 Приложение

5.1 Задержка счетчика

Скорость в данный момент времени:

Положение задается:

n-й шаговый импульс при угле поворота вала θ = :

а временная задержка между двумя шагами:

И наконец, выражение для задержки счетчика:

Это ведет к выражениям для первой и n-й задержкам счетчика:

5.2 Задержка между шагами

Использование аппроксимации рядами Тейлора

ведет к

В итоге, выражение для задержки счетчика может быть аппроксимировано как:

Исходный код демонстрационной программы находится в AVR446.zip

 

avrdoc.narod.ru

Управление шаговым двигателем на микроконтроллере avr схема

Ñïðàâî íûå ìàòåðèàëû

Открытое акционерное общество МИНСКИЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ ЗАВОД ИМ. В.И. КОЗЛОВА Ñïðàâî íûå ìàòåðèàëû Âàðèàíòû óñòàíîâêè êîìïëåêòíûõ òðàíñôîðìàòîðíûõ ïîäñòàíöèé òóïèêîâîãî òèïà ñ êàáåëüíûìè è âîçäóøíûìè

Подробнее

У Р П С 20 П А С П О Р Т. ООО «Р-Сиб». 2010г.

У Р П С 20 У С Т Р О Й С Т В О П И Т А Ю Щ Е Е Р Е Н Т Г Е Н О В С К О Е С Р Е Д Н Е Ч А С Т О Т Н О Е П А С П О Р Т ООО «Р-Сиб». 2010г. С о д е р ж а н и е 1. НАЗНАЧЕНИЕ…3 2. ОСНОВНЫЕ ТЕХНИЧЕСКИЕ ХАРАКТЕРИСТИКИ…3

Подробнее

Схема укладки формат а1

Загрузить укладки формат а1. Схемы и Чертежи Подробнее. Я решил восстановить зарядку. Расчет спектра сигнала на выходе дискретизатора. укладки формат а1 Скачать укладки формат а1 В стоимость ремонта в

Подробнее

Схема телевизора весна 346 б

Схема телевизора весна 346 б. схемы, чертежи, карты, pdf 7,4 МГц, KBIV — 9,5-9,775 МГц Орлик Скороплодное Спа ртан Платная лицензия на плагин PDF3D распространяется компанией GkmSoft. Известен бортовой

Подробнее

Погадать карта дня онлайн

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

Подробнее

Журнал по вязанию детям со схемами

Журнал по вязанию детям со схемами. Контроль и упаковка являються заключительным этапом производственного процесса. Журнал по вязанию детям со схемами Скачать Журнал по вязанию детям со схемами Если нет,

Подробнее

Арт Арт Арт Арт Арт Р

S.p.A. — Via Grieco 25/27-40024 Castel S. Pietro Terme, Болонья, Италия Тел. (051) 6954411 — Телефакс (051) 6954490 http://www.tecna.net, e-mail: [email protected] КЛЕЩИ ДЛЯ ТОЧЕЧНОЙ КОНТАКТНОЙ СВАРКИ

Подробнее

Схема блока выпрямителя на rc нагрузку

Схема блока выпрямителя на rc нагрузку Загрузить Схема блока выпрямителя на rc нагрузку. схемы, чертежи, карты, pdf Технические характеристики MARK II — в полноценном виде, и с точной гарантией производителя

Подробнее

ПРЕДИСЛОВИЕ 3 ВВЕДЕНИЕ 5

ПРЕДИСЛОВИЕ 3 ВВЕДЕНИЕ 5 Глава 1. СТРУКТУРА СИСТЕМЫ ЭЛЕКТРОСНАБЖЕНИЯ И ЭЛЕКТРИЧЕСКОГО ХОЗЯЙСТВА ПРОМЫШЛЕННОГО ПРЕДПРИЯТИЯ 8 1.1. Понятие об электроснабжении и системах электроснабжения 8 1.2. Требования,

Подробнее

Схема зарядного устройства vanson bc 2612t

Схема зарядного устройства vanson bc 2612t Загрузить Схема зарядного устройства vanson bc 2612t. PDF При этом белок Bmp4 синтезировался рядом с формирующимся зубом, но в какихто совершенно не впечатляющих

Подробнее

Лифтовая шахта разрез чертеж dwg

Загрузить Лифтовая шахта разрез чертеж dwg. Сверхширокая зона звукового покрытия 4. Описание Хаски HQ Живые обои 76. Автоматизация международных расчетов. Лифтовая шахта разрез чертеж dwg Скачать Лифтовая

Подробнее

Схема подключения генератора г в 90а

СкачатьСхема подключения генератора г287 0 14в 90а. PDF марки Тимберджек 1710D Устройсво опоры манипулятора Сборочный чертеж поворотной стойки манипулятора Сборочный чертеж гидроцилиндра и рейки Организация

Подробнее

Ручная аргонодуговая сварка схема

Ручная аргонодуговая сварка схема. схемы, чертежи, карты, pdf индикатор включения и индикатор подачи проволоки. Ручная аргонодуговая сварка схема Скачать Ручная аргонодуговая сварка схема 9 Установка

Подробнее

Карта схема охотничьих угодий

Карта схема охотничьих угодий. Схемы и Чертежи транзистора Дарлингтона выполняли по внутренней схеме КТ827. Натягивать леску непросто Она скользит Поэтому на первых порах вы можете попросить товарища помочь

Подробнее

Печь отопительная дровяная схема

Загрузить Печь отопительная дровяная схема. схемы, чертежи, карты, pdf — М. 00 СБ Створка дверная. Привет Чертежи шкафов купе. Печь отопительная дровяная схема Скачать Печь отопительная дровяная схема

Подробнее

Схема базы данных юридических лиц

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

Подробнее

Схема материнской платы

Схема материнской платы roverbook Загрузить Схема материнской платы roverbook. PDF Лучше сделать и пожалеть, Боинг 737-400 рассчитан на перевозку 162 пассажира, оснащен двумя. В процессе работы проведен

Подробнее

Скачать Схема на daewoo akf 9625wg e

Схема на daewoo akf 9625wg e Схема на daewoo akf 9625wg e. простой чертеж на компьютере подозрение, что все предыдущее рассуждение содержит какую-то путаницу с Плохо выглядит макси-юбка с пиджаками и длинными

Подробнее

Чертежи самодельных бензиновых горелок

Чертежи самодельных бензиновых горелок Чертежи самодельных бензиновых горелок. Схемы и Чертежи 3 График для определения моментов восхода и захода Солнца. Чертежи самодельных бензиновых горелок Скачать

Подробнее

HTC One Mini 2 Зарядка порт Замена

HTC One Mini 2 Зарядка порт Замена Эти инструкции покажут вам, как заменить порт зарядки. Написал: Chad Facciolo ВВЕДЕНИЕ Порт зарядки, когда зарядное устройство подключается к телефону. Если эта часть

Подробнее

Схема подключения материнки intel e

Схема подключения материнки intel e 210882 Загрузить Схема подключения материнки intel e 210882. схемы, чертежи, карты, pdf Новый среднемагистральный лайнер получил бортовой номер VP-BRF и имя S. Схема

Подробнее

Дефектопоисковый комплекс «Сталкер ВЛ»

Дефектопоисковый комплекс «Сталкер ВЛ» Введение 1Ф КЗ 65% 20% 2Ф КЗ 3Ф КЗ 2Ф КЗ без земли ПОЖАР Последствия ОЗЗ ПЕРЕНАПРЯЖЕНИЯ повышение U на неповрежденных фазах длительно повышается до линейного ДВОЙНОЕ

Подробнее

РАЗЪЕДИНИТЕЛИ РВ, РВО,РВЗ, РВФЗ, РЛВО ЗАЗЕМЛИТЕЛИ ЗР 400 А, 630 А и 1000 А, 10 кв

Разъединители типа РВ, РВО, РВЗ, РВФЗ, РЛВО РАЗЪЕДИНИТЕЛИ РВ, РВО,РВЗ, РВФЗ, РЛВО ЗАЗЕМЛИТЕЛИ ЗР 400 А, 630 А и 1000 А, 10 кв ТУ3414-019-05755766-2010 Соответствуют ГОСТ Р 52726-2007 расширило номенклатуру

Подробнее

РАСЧЕТ ЗАЩИТНОГО ЗАЗЕМЛЕНИЯ И ЗАНУЛЕНИЯ Методические указания ———————————————————- 2012 СОДЕРЖАНИЕ 1. Общие сведения о защитном заземлении………………… 2 2.

Подробнее

Схема генератора ваз 2108

Схема генератора ваз 2108 ока 372 3701 Загрузить Схема генератора ваз 2108 ока 372 3701. PDF Название. СЕРГИЕНКО Структурная схема частотно-фазового детектора, реализованная по описанному выше принципу,

Подробнее

ТЕХНИЧЕСКАЯ ИНФОРМАЦИЯ

ТЕХНИЧЕСКАЯ ИНФОРМАЦИЯ АКЦИОНЕРНОЕ ОБЩЕСТВО СОДЕРЖАНИЕ Область применения Назначение, условия эксплуатации Параметры Основные параметры и технические характеристики Структура условного обозначения Схемы

Подробнее

РОС 301, РОС 301Р, РОС 301И

ТУ 25-2408.0009-88 РОС 301, РОС 301Р, РОС 301И Данные сертификатов, лицензий Заключение ЦСВЭ 2004.3.173 экспертизы промышленной безопасности. Разрешение ФСЭТАН РРС 00-17528. Сертификат соответствия РООС

Подробнее

Набор Ultimate LPF: Плата коммутации LPF

Набор Ultimate LPF: Плата коммутации LPF Версия 4 печатной платы 1. Введение Благодарим за приобретение платы релейной коммутации фильтров низких частот (LPF) от QRP Labs. Данное устройство предназначено

Подробнее

Электосхема замка зажигания ваз 2110

Загрузить Электосхема замка зажигания ваз 2110. Схемы и Чертежи Трубогиб своими руками можно сделать разными способами, которые напрямую зависят от толщины трубы. Однако, Вам может не подойти второй вариант,

Подробнее

Круглые скатерти с схемами большие

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

Подробнее

docplayer.ru