Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 17.02.2016, 20:02  
raptor376
Частый гость
 
Регистрация: 15.01.2008
Сообщений: 34
Сказал спасибо: 16
Сказали Спасибо 1 раз в 1 сообщении
raptor376 на пути к лучшему
По умолчанию Нелинейное перемещение шагового двигателя

Здравствуйте.
Есть привод от матричного принтера с шаговым двигателем.
Приладил к шаговому двигателю драйвер из четырёх кт815. Ключами управляет Atmega.
Алгоритм движения такой:
Шаг 1 (подаём питание на обмотку А), пауза, питание на обмотке А выключается.
Шаг 2 (подаём питание на обмотку В), пауза, питание на обмотке В выключается.
Шаг 3 (подаём питание на обмотку С), пауза, питание на обмотке С выключается.
Шаг 4 (подаём питание на обмотку Д), пауза, питание на обмотке Д выключается.
и дальше опять шаг 1.
Т.е. всё понятно - прямолинейное движение в одну сторону.
Стало скучно и захотелось это движение (а точнее скорость движения) сделать нелинейным, а именно если требуется скажем 100 шагов сделать то у первого шага (а также у последнего) пауза самая большая, у следующего шага чуть меньше, у 50-го шага пауза самая минимальная и потом снова на увеличение.
Что то типа "экспоненциального" закона изменения - или даже что-то типа "параболического" движения.
Т.е. нужна функция, в которую бы мы заходили, передавали 2 параметра это полное количество шагов при перемещении, и номер шага.
Не знаю правильно и понятно ли объясняюсь но хочу чтобы двигатель стартовал с минимальной скоростью (максимальная пауза), и ускорялся, посредине движения скорость была максимальная (минимальная пауза),а потом пауза вновь бы увеличивалась.
Т.е. можем заведомо задать минимальную скорость (максимальную паузу шага - 4000 uS), и максимальную скорость (минимальную паузу - 2000 uS).
Как такую функцию сделать и нужно учесть что количество шагов может быть как чётным так и нечётным.
Есть какие-либо мысли? Сам в программировании не очень силён sad.gif
Спасибо!
Реклама:
raptor376 вне форума  
Непрочитано 17.02.2016, 20:21  
NewWriter
Почётный гражданин KAZUS.RU
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,508
Сказал спасибо: 401
Сказали Спасибо 2,218 раз(а) в 1,316 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: Нелинейное перемещение шагового двигателя.

Сообщение от raptor376 Посмотреть сообщение
Есть какие-либо мысли?
Нужно изменять частоту сигналов коммутации обмоток.

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

Последний раз редактировалось NewWriter; 17.02.2016 в 21:59.
NewWriter вне форума  
Непрочитано 18.02.2016, 13:09  
raptor376
Частый гость
 
Регистрация: 15.01.2008
Сообщений: 34
Сказал спасибо: 16
Сказали Спасибо 1 раз в 1 сообщении
raptor376 на пути к лучшему
По умолчанию Re: Нелинейное перемещение шагового двигателя.

Сообщение от NewWriter Посмотреть сообщение
Нужно изменять частоту сигналов коммутации обмоток.
Логично, но я об этом и пишу... частота и время обратно зависимые величины (частота и период), я же писал:
___
Алгоритм движения такой:
Шаг 1 (подаём питание на обмотку А), пауза, питание на обмотке А выключается.
Шаг 2 (подаём питание на обмотку В), пауза, питание на обмотке В выключается.
Шаг 3 (подаём питание на обмотку С), пауза, питание на обмотке С выключается.
Шаг 4 (подаём питание на обмотку Д), пауза, питание на обмотке Д выключается.
и дальше опять шаг 1.
___
Сообщение от NewWriter Посмотреть сообщение
это делается например на основе какого-нибудь таймера, изменяя период его счета. Значения, самое простое, брать из таблицы с заранее просчитанными цифрами.
Собственно пришли к тому же самому...
Дак вот я и поставил вопрос о том, как сделать такую подпрограмку, в которую я захожу с двумя параметрами (полное количество шагов в конкретном перемещении, и номер шага). Минимальная скорость, и максимальная - уже определена, это время 4 мс (минимальная) и 2 мс (максимальная).
Нужно чтобы из подпрограммки я выходил с одним числом в этом диапазоне, согласно "экспоненциальному/ или параболлическому закону.
Про шаговый двигатель можно просто опустить а вопрос лишь в такой подпрограммке.
Из таблицы? Хм... представьте что шагов в перемещении может быть и 10 и 1000, и неужели для каждого делать таблицу... и для каждого шага.
raptor376 вне форума  
Непрочитано 18.02.2016, 13:33  
Alex9797
Почётный гражданин KAZUS.RU
 
Аватар для Alex9797
 
Регистрация: 20.08.2010
Адрес: Днепр
Сообщений: 8,568
Сказал спасибо: 5,042
Сказали Спасибо 10,611 раз(а) в 3,604 сообщении(ях)
Alex9797 на пути к лучшему
По умолчанию Re: Нелинейное перемещение шагового двигателя.

Сообщение от raptor376 Посмотреть сообщение
Стало скучно и захотелось это движение (а точнее скорость движения) сделать нелинейным
Сообщение от raptor376 Посмотреть сообщение
Минимальная скорость, и максимальная - уже определена, это время 4 мс (минимальная) и 2 мс (максимальная).
Однако, довольно своеобразная у вас скука! Вместо размытого полета фантазии - довольно конкретизированная постановка задачи. Похоже, что скука была не у вас, а у вашего заказчика.

Сообщение от raptor376 Посмотреть сообщение
2 параметра это полное количество шагов при перемещении, и номер шага.
Сообщение от raptor376 Посмотреть сообщение
с двумя параметрами (полное количество шагов в конкретном перемещении, и номер шага)
Вы уже второй раз употребляете термин "номер шага". Что это означает, применительно к данной задаче?

Сообщение от raptor376 Посмотреть сообщение
Что то типа "экспоненциального" закона изменения - или даже что-то типа "параболического" движения
Это довольно сложная задача, требующая большого количества вычислений. При этом на некоторой скорости может оказаться, что для вычисления длительности следующего шага процессору не хватает времени. И надо будет или применять суперскоростной процессор, или вернуться к рассмотрению варианта с таблицами.
Есть достаточно много современных процессоров, у которых объем ОЗУ позволяет легко разместить таблицу такого объема. И даже процессор со средней производительностью легко сможет сначала рассчитать всю таблицу по заданному количеству шагов. А потом ему останется лишь брать готовые числа из таблицы, и играючись управлять шаговиком.
Alex9797 вне форума  
Непрочитано 18.02.2016, 14:07  
NewWriter
Почётный гражданин KAZUS.RU
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,508
Сказал спасибо: 401
Сказали Спасибо 2,218 раз(а) в 1,316 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: Нелинейное перемещение шагового двигателя.

Так в том и фишка, что вычисления провести на калькуляторе и подставить в таблицу уже вычисление значения периода на этапе изменения скорости. Известно же, что самый быстрый способ - табличный. Много значений не потребуется. Вернее, зависит от многих факторов - нагрузка на валу двигателя, его мощности и момента, ускорения разгона...
У топикстартера неправильное понимание логики процесса.
В работе ШД есть 3 фазы - разгон, постоянная скорость и торможение.
На постоянной скорости период переключения сигналов постоянно и не зависит от числа шагов.
Во время разгона и торможения период сигналов будет меняться. Вот эти значения и берутся из таблицы, ну чтобы не вычислять их аппаратно.
Допустим, поступила команда повернуть ШД на 300 шагов. Делим эти 300 шагов на 3 этапа - разгон, пост.скорость и торможение. Например, 30 шагов занимает разгон, период переключенияберём из таблицы. Затем крутим с постоянной скоростью до (270-30) шагов и переходим снова к той же таблице, только наоборот.

Цитата:
вопрос о том, как сделать такую подпрограмку, в
Я думаю, навряд ли кто будет писать эту программку за топикстартера. Если он "от скуки" страдает, то всё должен сам осуществить

Последний раз редактировалось NewWriter; 18.02.2016 в 14:15.
NewWriter вне форума  
Сказали "Спасибо" NewWriter
raptor376 (20.02.2016)
Непрочитано 18.02.2016, 14:16  
Pajatel
Прописка
 
Аватар для Pajatel
 
Регистрация: 04.12.2010
Сообщений: 243
Сказал спасибо: 9
Сказали Спасибо 51 раз(а) в 32 сообщении(ях)
Pajatel на пути к лучшему
По умолчанию Re: Нелинейное перемещение шагового двигателя.

Даа, скука может превратится в головняк
...вот здесь https://yadi.sk/d/UkTGNpTgp3pxb с 18 страницы Вашу скуку быстро разгонит
Pajatel вне форума  
Эти 2 пользователя(ей) сказали Спасибо Pajatel за это сообщение:
kgg_ussr (24.04.2016), raptor376 (19.02.2016)
Непрочитано 18.02.2016, 21:02  
МВА
Гражданин KAZUS.RU
 
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
МВА на пути к лучшему
По умолчанию Re: Нелинейное перемещение шагового двигателя

Сообщение от raptor376 Посмотреть сообщение
Собственно пришли к тому же самому...
Дак вот я и поставил вопрос о том, как сделать такую подпрограмку, в которую я захожу с двумя параметрами (полное количество шагов в конкретном перемещении, и номер шага). Минимальная скорость, и максимальная - уже определена, это время 4 мс (минимальная) и 2 мс (максимальная).
Всем привет.
Я думаю, что это можно реализовать не очень сложно.
Просто опрашиваем таблицу по прерыванию таймера, а для управления частотой просто записывать начальное значение таймера при выходе из прерывания (а может быть и при входе, мне кажется, что так не будет влиять на длительность между прерываниями величина программы прерывания).
И чем чаще вызывается прерывание, тем выше будет частота.
МВА вне форума  
Непрочитано 19.02.2016, 00:03  
Харрисон
Временная регистрация
 
Регистрация: 17.01.2010
Сообщений: 60
Сказал спасибо: 3
Сказали Спасибо 31 раз(а) в 19 сообщении(ях)
Харрисон на пути к лучшему
По умолчанию Re: Нелинейное перемещение шагового двигателя

Непонятная задача. Зачем иметь максимальную скорость только посередине? Первые несколько шагов (2,5,75 - от механики зависти) - разгон, потом постоянно (хоть один шаг, хоть тысяча) максимальная скорость, за несколько шагов до конца - обратная картина. А в исходной постановке задача скорее академический интерес представляет, как сделать ненужное...
Харрисон вне форума  
Сказали "Спасибо" Харрисон
raptor376 (19.02.2016)
Непрочитано 19.02.2016, 00:38  
makakus
Почётный гражданин KAZUS.RU
 
Регистрация: 08.10.2007
Сообщений: 2,760
Сказал спасибо: 1,106
Сказали Спасибо 1,037 раз(а) в 569 сообщении(ях)
makakus на пути к лучшему
По умолчанию Re: Нелинейное перемещение шагового двигателя

Шаговик может разгоняться мгновенно (как на матричном принтере), с постоянным ускорением (скорость нарастает линейно; при включении ускорения/замедления возникают рывки), с линейно изменяемым ускорением (нет рывков: можно таскать налитый до краёв стакан, сложная математика). Практически широко применяется т.н. S-кривая разгна: постоянное ускорение с фиксированным участком линейного нарастания). Ещё важно, не изменится ли конечная точка в процессе движения? Тогда траектория сначала рассчитывается, потом исполняется. Если не так, то нужно считать в процессе движения и может не хватить времени.

Для начала можно реализовать алгоритм движения с постоянным ускорением.
Когда станете переходить от скорости двигателя к времени таймера, придёте к функции 1/(корень из координаты=номер шага). Физика простая: ускорение постоянно, скорость изменяется линейно, координата - квадратично. И увидите, что двухбайтовый таймер не очень-то обеспечивает диапазон частот при нужной точности.
Я запоминал таблицу разгона (время таймера от номера шага), сделанную в Excel'e, в памяти программы. Поскольку параметр изменяется сначала очень быстро, а потом всё медленнее, экспоненциально приближаясь к максимальной скорости, таблица хранилась в свёрнутом виде парами {время шага : количество шагов с таким временем}, 900 шагов укладывалось в несколько десятков пар с точностью 0,5%.
Дальше разгон - движение на максимальной скорости - торможение, пробегая по таблице вперёд-назад. Но у меня в любой момент движения может поменяться целевая точка, как "убежать" вперёд, так и приблизиться, вплоть до изменения направления. Контроллер Atmega32.

Последний раз редактировалось makakus; 19.02.2016 в 00:44.
makakus вне форума  
Эти 2 пользователя(ей) сказали Спасибо makakus за это сообщение:
Alex9797 (19.02.2016), lisergin (06.03.2016)
Непрочитано 19.02.2016, 00:50  
makakus
Почётный гражданин KAZUS.RU
 
Регистрация: 08.10.2007
Сообщений: 2,760
Сказал спасибо: 1,106
Сказали Спасибо 1,037 раз(а) в 569 сообщении(ях)
makakus на пути к лучшему
По умолчанию Re: Нелинейное перемещение шагового двигателя

Сообщение от Харрисон Посмотреть сообщение
Зачем иметь максимальную скорость только посередине? Первые несколько шагов (2,5,75 - от механики зависти) - разгон, потом постоянно (хоть один шаг, хоть тысяча) максимальная скорость, за несколько шагов до конца - обратная картина.
Именно. Потому что максимальная скорость диктуется шаговиком и присобаченной к нему механикой. Ну и правильным драйвером, конечно.
makakus вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Драйвер шагового двигателя trampampusha Электроника - это просто 5 09.10.2015 19:55
Драйвер шагового двигателя backlan Электроника - это просто 108 17.04.2015 19:17
Драйвер биполярного шагового двигателя Segriv Поиск схем. Делимся схемами 3 24.05.2012 16:17
[Решено] Контроллер шагового двигателя vspishkin Поиск схем. Делимся схемами 13 07.01.2011 09:17
Посоветуйте в выборе шагового двигателя и МК для него 210702 Автоматика и аппаратура связи 5 10.10.2008 11:30


Часовой пояс GMT +4, время: 11:52.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot