Bmw-rumyancevo.ru

БМВ Мастер — Автожурнал
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Библиотека для шагового двигателя Arduino

Библиотека для шагового двигателя Arduino v1.15

ОБНОВЛЕНИЯ

  • v1.13 – исправлены мелкие баги, оптимизация
  • v1.14 – исправлены ошибки разгона и торможения в KEEP_SPEED
  • v1.15 – оптимизация, исправлены мелкие баги, stop() больше не сбрасывает maxSpeed

ТЕОРИЯ

Для подключения шаговых моторов к Arduino нужно использовать драйверы. Очень дешёвые и популярные моторы 28byj-48-5v часто продаются вместе со своим драйвером (транзисторная сборка ULN2003), подключить можно к любым 4-м пинам Ардуино и использовать.

Для работы с большими шаговиками (типа Nema 17) нужно использовать специализированные драйверы, ниже вы найдёте описания и схемы подключения для A4988, DRV8825 и TMC2208, драйверы такого формата подключаются и работают практически одинаково, т.к. разработаны для CNC шилдов и взаимозаменяемы. У этих драйверов нужно настроить ток при помощи крутилки на плате. Это можно сделать “на глаз”, заставив мотор вращаться и регулируя крутилку. Мотор должен вращаться, но не вибрировать как перфоратор и сильно не нагреваться. Лучше настроить ток по опорному напряжению Vref, у каждого драйвера оно считается по своей формуле (см. картинки ниже). Берём ток своего мотора из описания, подставляем в формулу вместо current, считаем, и накручиваем полученное напряжение крутилкой. Для измерения опорного напряжения нужно подключить щупы вольтметра к самой крутилке и пину GND.

Главное преимущество дорогущих драйверов TMC – отсутствие шума/свиста/вибраций при работе, так как драйвер своими силами интерполирует сигнал до микрошага 1/256.

БИБЛИОТЕКА

GyverStepper v1.15

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

  • Поддержка 4х пинового (шаг и полушаг) и STEP-DIR драйверов
  • Автоматическое отключение питания при достижении цели
  • Режимы работы:
    • Вращение с заданной скоростью. Плавный разгон и торможение с ускорением
    • Следование к позиции с ускорением и ограничением скорости
    • Следование к позиции с заданной скоростью (без ускорения)
  • Быстрый алгоритм управления шагами
  • Два алгоритма плавного движения
    • Мой планировщик обеспечивает максимальную производительность: скорость до 30’000 шагов/сек с ускорением (активен по умолчанию)
    • Модифицированный планировщик из AccelStepper: максимальную плавность и скорость до 7’000 шагов/сек с ускорением (для активации пропиши дефайн SMOOTH_ALGORITHM)
  • Поддержка “виртуальных” драйверов
Совместимость

Совместима со всеми Arduino платформами (используются Arduino-функции)

Какие электродвигатели лучше: серво или шаговые?

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

Один из первых вопросов, на который нужно ответить при принятии решения: какой тип электродвигателя будет лучшим? Требуется ли для применения высокопроизводительный серводвигатель? Будет ли недорогой шаговый двигатель лучше? Или, может быть, стоит рассмотреть третий, средний вариант?

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

Требования

Сколько рабочих циклов в минуту нужно сделать двигателю? Какой крутящий момент нужен? Какая максимальная скорость требуется?

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

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

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

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

Инерция нагрузки является еще одним фактором, который следует учитывать, прежде чем погрузиться в процесс принятия решения о выборе двигателя. Необходимо рассчитать коэффициент инерции, который представляет собой сравнение инерции нагрузки и инерции двигателя. Одно эмпирическое правило гласит, что если инерция нагрузки в 10 раз превышает инерцию ротора, то настройка электрический машины может быть куда более сложной и производительность производственного механизма может ухудшиться. Но это правило варьируется не только от технологии к технологии, но и от поставщика к поставщику и даже от продукта к продукту. Важность точности позиционирования рабочего органа также повлияет на это решение. Некоторые механизмы поддерживают соотношение 30: 1, в то время как прямые привода работают до 200: 1. Многим инженерам не нравится определять размер двигателя, который превышает соотношение 10 к 1.

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

Как только инженеры ответят на все эти вопросы — скорость, крутящий момент, мощность, инерция нагрузки и массогабаритные показатели, — они смогут сосредоточиться на наиболее эффективном по размеру двигателе. Однако процесс принятия решений на этом не заканчивается. Инженеры также должны выяснить, какой тип электродвигателя лучше всего подходит для применения. В течение многих лет выбор типа сводился к одному из двух вариантов для большинства применений: серводвигатель или шаговый двигатель с разомкнутым контуром управления.

Серводвигатели и шаговые двигатели

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

В традиционных сервоприводах контроллер отправляет команды на привод двигателя через импульс управления или аналоговую команду, связанную с положением, скоростью или крутящим моментом. Некоторые элементы управления могут использовать метод на основе шины данных, который в новейших элементах управления обычно представляет собой метод связи на основе Ethernet. Затем система управления электропривода передает соответствующий ток на каждую фазу двигателя. Обратная связь от двигателя возвращается к системе управления двигателя, при необходимости, к главному контроллеру. Привод полагается на эту информацию для правильной коммутации фаз и для отправки точной информации о динамическом положении вала двигателя. Таким образом, серводвигатели считаются двигателями с замкнутым контуром и содержат встроенные энкодеры, а данные о положении вала часто передаются в контроллер. Эта обратная связь дает контроллеру много информации для управления электрической машиной. Контроллер может в различной степени вносить коррективы в операции, если что-то работает не так, как должно быть. Этот тип важной информации является преимуществом, которое не могут предложить шаговые двигатели без обратной связи.

Читать еще:  406 двигатель газель характеристика карбюратора

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

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

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

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

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

Низкоскоростные приложения — то, где шаговые двигатели «сияют» как лучшее возможное решение. Шаговые двигатели предназначены для работы на низкой скорости при высоком крутящем моменте. По самой природе их конструкции они могут управляться и работать до предела скорости. Ограничение скорости обычных шаговых двигателей обычно составляет менее 1000 об / мин, тогда как серводвигатели могут иметь номинальные скорости до 3000 об / мин и выше, иногда даже свыше 7000 об / мин.

Если «степпер» имеет «правильный» размер, он может быть идеальным выбором. Однако, когда шаговый двигатель работает в конфигурации с разомкнутым контуром и что-то идет не так, операторы могут не получить все данные, необходимые для решения возникшей проблемы.

Решение проблемы отсутствия обратной связи

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

Добавление обратной связи для определения, если двигатель «глохнет» или находится в нерабочем положении — это еще один подход. Инженеры в компаниях по управлению движением создали функции «обнаружения сваливания» и «поддержания положения». Было даже несколько подходов, которые пошли еще дальше, рассматривая шаговые двигатели так же, как сервоприводы, или, по крайней мере, имитируя их с помощью причудливых алгоритмов.

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

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

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

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

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

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

Читать еще:  Шум на холодном двигателе bmw

Шаговый двигатель управление что проще

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

$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»

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

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

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

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

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

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

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

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

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

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

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

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

Loop Until A = N

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

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

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

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

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

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

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

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

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

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

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

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

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

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

При включении контроллер выдаст в COM-порт сообщение о вводе направления движения (+ или -) и количестве шагов. Отправляем необходимую команду и контроллер начнет вращать вал двигателя, после того как совершено необходимое количество шагов, контроллер выдаст команду «OK!» и снова выдаст комманду на ввод данных:

Для связи с COM-портом компьютера использовал свою отладочную плату с мегой32, так как на ней установлен конвертер уровней max232:

Осталось накидать интерпритатор G кода и получится home-made система управления для ЧПУ станка покруче чем на ТМ7 =)

  • 1
  • 2
  • 3
  • 4
  • 5

Приводы 17HS8401 (NEMA17) — это биполярный шаговый двигатель, подключаются так:
Red: A+
Green: A-
Yellow: B+
Blue: B-
Для данной схемы не подойдёт.

В интернете можно найти описание принципа работы биполярного шагового двигателя.
Если я не ошибаюсь в Proteus модель называется Motor-bistepper, поэтому можете попробовать поработать с данным двигателем.

Транзисторы можете заменить на полевые транзисторы (мосфеты). Для одного шагового двигателя нужно 8 штук мосфетов.
Ещё нужен хороший блок питания.

Первый попавшийся сайт, тут можете почитать про двигатели:
http://www.russianelectronics.ru/leader-r/review/40498/doc/47912/

два вопроса:
можно ли переделать прошивку так, чтобы она считывала строчки по UART со значениями через таб, брала, к примеру, данные из третьего столбика и моментально поворачивала стрелку на этот угол (по сути нужен стрелочный указатель к спидометру). какое будет ориентировочное энергопотребление устройства и мотора в таком режиме?

и второе: можно ли к одному источнику UART подключить параллельно два приемника?

Применение микроконтроллеров серии MB89/MB90/MB91 для управления шаговыми двигателями

Введение

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

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

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

Широкоизвестный пример применения шаговых двигателей – автомобильная панель управления. Шаговые двигатели управляют стрелками индикаторов, таких, как спидометр и тахометр. Один или несколько контроллеров шаговых двигателей в Flash-микроконтроллерах Fujitsu могут быть индивидуально запрограммированы для контроля датчика скорости, тахометра, топливного датчика и датчика температуры двигателя.

Эта Application Note описывает управление шаговым двигателем при помощи Flash-микроконтроллера Fujitsu с встроенным драйвером ШД на примере управления стрелкой.

1 Физические основы

В этом разделе даётся объяснение технических основ управления шаговыми двигателями.

1.1 Использование шагового двигателя для управления стрелочным прибором.

Ряд микроконтроллеров Fujitsu имеют встроенный контроллер шагового двигателя. Он с лёгкостью может быть использован для очень плавного вращения ШД, как в данном примере стрелочного индикатора. Чтобы этого добиться, необходимо чётко представлять его физические характеристики и свойства. Поэтому рассмотрим кратко физические основы функционирования ШД.

Читать еще:  Suzuki bandit 400 тюнинг двигателя

В данном описании мы применим простую эквивалентную схему замены шагового двигателя. В этой модели ротор представлен двухполюсным магнитом, а статор – двумя обмотками, расположенными перпендикулярно друг другу (Рис.1).

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

Для создания движения, мы должны последовательно пройти все положения от Старта до Останова. В ШД это осуществляется пошаговым методом (Рис. 3).

Таким образом, при движении сохраняется постоянная скорость. Это, однако, не относится к точке останова, где двигатель прекращает движение моментально.

Чтобы избавиться от этого, используем ФНЧ, который позволяет решить проблему в точке останова (Зона B). Аналогичная проблема присутствует и в точке старта, для её устранения используем ФНЧ второго порядка.

Такой ФНЧ решает проблему в точке старта (Зона A), но накладывает ограничения на максимальную скорость и максимальное ускорение в зависимости от точки траектории.

С другой стороны, максимальная скорость и максимальное ускорение двигателя ограничены конструктивными особенностями. Чтобы быть уверенными, что требуемые параметры не превышают физических возможностей двигателя, мы применили ограничитель ускорения и скорости. Этот ограничитель должен быть встроен в ФНЧ второго порядка, при этом уровни ограничения должны быть симметричными.

ФНЧ второго порядка легко реализуется двухступенчатым применением ФНЧ первого порядка, который, в свою очередь может быть представлен при помощи простой математической формулы вида:

Для повышения скорости вычисления удобно преобразовать её следующим образом:

Таким образом, требуется только две операции сдвига и два вычитания, что позволяет экономить вычислительные ресурсы микроконтроллера.

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

Если значение скорости сохраняется в ячейке памяти, мы можем вычесть текущее значение скорости из предыдущего значения. Результатом данной операции будет ускорение.

Физически это выглядит следующим образом:

Алгоритмически можно записать:

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

В данном примере мы сравниваем значения скорости и ускорения с предустановленными константами и если эти величины превышают пределы, они заменяются на значения из следующей формулы:

Используя вычисление по данной формуле несколько сот раз в секунду (время повторения несколько мс) мы получим полноценное движение стрелки в нашем примере. На практике значение демпфирующего коэффициента n выбирают из диапазона 3-6, основываясь на характеристиках ФНЧ второго порядка.

В данном примере мы использовали табличный метод для управления выходами ШД контроллера.

Ниже приведен пример выходной функции для модуля контроллера ШД, использующий 128 микрошагов на квадрант для каждой из таблиц синуса и косинуса, т.е. предустановленное значение для данной функции ограничено 256-ю микрошагами на квадрант. При этом мы можем легко изменять разрешение в пределах 0…7 бит на квадрант, используя только операции сдвига для приведения к требуемой разрядности и выборки из таблицы синусов/косинусов.

2 Контроллер шагового двигателя

В этом разделе описаны особенности контроллера ШД

2.1 Микроконтроллеры с встроенным контроллером ШД

Fujitsu Microelectronics предлагает ряд микроконтроллеров с встроенным контроллером ШД:

МодельТипЧисло каналов КШД
Серия МК 16LX
MB90F39416-битный6 каналов
MB90F42716-битный4 канала
MB90F42816-битный4 канала
MB90F59116-битный4 канала
MB90F59416-битный4 канала
MB90F59816-битный4 канала
Серия МК 8L
MB899438-битный1 канал
MB899458-битный1 канал
Серия МК FR
MB91F36232-битный4 канала
MB91F36532-битный4 канала
MB91F36632-битный4 канала
MB91F36832-битный4 канала
MB91F37632-битный4 канала

2.2 Блок контроллера шагового двигателя

Вышеупомянутые серии МК будут использованы в качестве примера для объяснения работы встроенного контроллера ШД. Данный контроллер состоит из 4 драйверов, связанной с ними переключающей логики и двух ШИМ-генераторов. Драйвера двигателя имеют повышенный до 30мА ток нагрузки и могут быть подключены непосредственно к четырём выводам обмоток двигателя. Таким образом, маломощные ШД могут управляться напрямую, для более мощных моторов схема легко модернизируется подключением внешнего мостового драйвера.

Комбинация из ШИМ-генераторов и переключающей логики разработана для контроля вращения двигателя. Блок контроллера ШД разделён на 2 канала и имеет возможность подключения четырёх выводов от двух обмоток мотора, как изображено на рисунке:

2.3 Регистры управления контроллером ШД

«n»-ый контроллер ШД имеет следующие 5 типов регистров:

  • Регистр «Управление ШИМ-n» (PWMCn)
  • Регистр «Сравнение ШИМ1-n» (PWC1n)
  • Регистр «Сравнение ШИМ2-n» (PWC2n)
  • Регистр «Выбор ШИМ1-n» (PWS1n)
  • Регистр «Выбор ШИМ2-n» (PWS2n)

2.3.1 Регистр управления ШИМ

Регистр управления ШИМ служит для запуска и остановки контроллера ШД, управления прерываниями и управления выходными выводами. Эти функции одинаковы для всех одноименных модулей контроллера ШД.

Данные биты определяют источник тактирования для генератора ШИМ следующим образом:

Рис. 9 Назначение битов регистра управления ШИМ

2.3.2 Регистр сравнения ШИМ

Регистры сравнения ШИМ1 и ШИМ2 (PWC1n + PWC2n) определяют скважность импульсов ШИМ. Значение «00h» соответствует нулевой длительности импульса ,»FFh» соответствует коэффициенту заполнения 99.6%. Два 8-битных регистра сравнения доступны для чтения и записи в любое время, но изменённое значение вступит в силу только после завершения текущего такта ШИМ, после того, как бит BS регистра выбора PWM2 будет установлен в «1».

2.3.3 Регистр выбора ШИМ
Регистры выбора ШИМ1 и ШИМ2 (PWS1n + PWS2n) могут устанавливать выход контроллера ШД в состояние логического нуля, логической единицы, выхода импульсов ШИМ либо в высокоимпедансное состояние.

Рис. 13 Назначение битов регистра выбора ШИМ

Рис. 15 Назначение битов регистра выбора ШИМ2

3 Примеры программ

В этом разделе приводятся и поясняются программные коды для управления стрелочным индикатором

3.1Таблица для организации микрошагов

3.2 Фильтр низкой частоты

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

Ниже приведен пример программы ФНЧ второго порядка для управления шаговым двигателем.

Данный ФНЧ 2-го порядка работает следующим образом:

Таким образом, нам нужно использовать простые ограничители скорости и ускорения в дополнение к ФНЧ второго порядка.

3.3 Пример подпрограммы обработки прерываний

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

3.4 Ограничение до требуемых физических значений

Ссылка на основную публикацию
Adblock
detector