Цифровой фильтр для коррекции неравномерности импульсов Step

Контроллеры, драйверы, датчики, управляющие устройства.

Цифровой фильтр для коррекции неравномерности импульсов Step

Сообщение michael-yurov » 25 фев 2013, 01:23

На данный момент (01.01.2014) алгоритм работы устройства заметно отличается от начального, и графики из первого сообщения уже не отражают действительность.
Гораздо ближе к конечному варианту - графики из сообщения #133 viewtopic.php?f=41&t=2725&start=120#p70266

Внешний вид устройства на данный момент:
Цифровой фильтр для коррекции неравномерности импульсов Step 3.jpg

Документация: http://stepm.ru/SM4x5i2r.pdf

Давно придумал хитрое устройство на микроконтроллере, которое получает сигналы Step / Dir от контроллера или от LPT порта компьютера, и обрабатывает их так, чтобы сгладить неравномерность импульсов.

Более того - я его много лет назад собрал и использовал на своем первом станке в связке с TurboCNC (про Mach я тогда еще ничего не знал). Частоты Step были небольшие - в пределах 10 кГц.

Пару дней назад решил повторить проект, но уже более продвинутую версию с более мягкой и точной обработкой сигнала, и с учетом того, что частота Step может быть более 50 кГц.
Сутки потратил на расчеты, и получил оптимальную формулу фильтра. Получилось, что фильтр с легкостью проглотит провалы в несколько импульсов, сгладит всплески скорости и ускорения.
При этом из за умягчения траектории произойдет некоторое сглаживание углов, но отклонение от вершины не превысит 0.03 мм, что вполне допустимо для большинства станков, работающих от LPT.
Цифровой фильтр для коррекции неравномерности импульсов Step 2.png
Измерение скорости до и после сглаживания
Цифровой фильтр для коррекции неравномерности импульсов Step 4.png
Графики ускорения до и после обработки, включая всплеск неравномерности
Цифровой фильтр для коррекции неравномерности импульсов Step 1.png
Отклонение абсолютное и реальное
Цифровой фильтр для коррекции неравномерности импульсов Step 5.png
Траектория движения под прямым углом после сглаживания


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

Но! когда дело дошло до написания прошивки микроконтроллера оказалось, что требуется слишком большой объем расчетов, и реализовать на одном 8-битном микроконтроллере алгоритм сглаживания для 3 осей не удается. Еще выяснилось, что ATtiny2313, на которой я хотел это реализовать не умеет умножать :wik:
А для расчетов вообще нужно делить два 16 битных числа. Я смог обойти данную проблему, но все же производительности контролера с трудом хватает для обработки движения только одной оси станка, и потому, придется использовать 3 микросхемы для трехосевого станка.

В общем, столкнувшись с этими проблемами я как-то у же не уверен, что такое устройство будет кому-то нужно.
Мне самому от него большой радости не будет, т.к. через несколько дней я уже дождусь посылку с платой KFlop.
А сделать устройство я хотел в помощь энтузиастам станкостроения. :beer_blow:

Вот, хотел бы услышать мнения других участников форума на эту тему.
Последний раз редактировалось michael-yurov 26 май 2014, 11:10, всего редактировалось 4 раз(а).
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
 
Сообщения: 9437
Зарегистрирован: 26 июл 2012, 00:10
Откуда: Новоуральск, Свердловская область.
Репутация: 3301
Медальки:
Настоящее имя: Михаил

Re: Фильтр для сглаживания неравномерности импульсов Step

Сообщение PKM » 25 фев 2013, 02:04

крутая штука!
для LPT актуальна, для MESA/KFLOP не нужна
это ведь можно и удваивать частоту, если LPT не тянет?
дорого такую сделать?
Аватара пользователя
PKM
Почётный участник
Почётный участник
 
Сообщения: 3832
Зарегистрирован: 31 мар 2011, 18:11
Откуда: Украина
Репутация: 544
Медальки:
Настоящее имя: Андрей

Re: Фильтр для сглаживания неравномерности импульсов Step

Сообщение Сергей Саныч » 25 фев 2013, 03:14

michael-yurov, Идеи носятся в воздухе :) Тоже собирался сделать подобное устройство, и тоже для TurboCNC (происходили срывы движения на некоторых скоростях, я думал, что это из-за неравномерности шагов), но до практической реализации не дошло. Алгоритм планировался тупой - осреднение периода нескольких последних шагов.
У вас, так понял, более "продвинутый" принцип сглаживания. Не могли бы поделиться алгоритмом?
PS: на графиках по горизонтальной оси - время в секундах?
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Сергей Саныч
Мастер
 
Сообщения: 6758
Зарегистрирован: 30 май 2012, 14:20
Откуда: Тюмень
Репутация: 1984
Медальки:

Re: Фильтр для сглаживания неравномерности импульсов Step

Сообщение Сергей Саныч » 25 фев 2013, 03:22

PKM писал(а):это ведь можно и удваивать частоту, если LPT не тянет?
Очевидно, можно. И это позволит использовать бОльшие коэффициенты дробления шага, что повысит плавность движения.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Сергей Саныч
Мастер
 
Сообщения: 6758
Зарегистрирован: 30 май 2012, 14:20
Откуда: Тюмень
Репутация: 1984
Медальки:

Re: Фильтр для сглаживания неравномерности импульсов Step

Сообщение michael-yurov » 25 фев 2013, 04:13

PKM писал(а):это ведь можно и удваивать частоту, если LPT не тянет?
дорого такую сделать?

Можно удваивать, утраивать, и учетверять, это действительно так. Я не стал об этом писать, т.к. вычислительной мощности может не хватить.
У меня только на умножение двух 16-битных чисел (вместо операции деления) уходит 80 тактов, а это нужно делать перед каждым импульсом.
Оптимизировать алгоритм можно, но в ущерб точности и равномерности. Уже мозг вскипел, не могу оптимальный алгоритм вычислений придумать.
Пока что удается сделать фильтр на один канал на одном 8-ми битном микроконтроллере ATMega. Но нужно обязательно установить фильтры на каждый канал, т.к. фильтр создает небольшую временную задержку, и нужно, чтобы она для всех осей была одинаковой.

По цене получается - один микроконтроллер на канал, плюс цепи питания.
Последний раз редактировалось michael-yurov 25 фев 2013, 04:41, всего редактировалось 3 раз(а).
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
 
Сообщения: 9437
Зарегистрирован: 26 июл 2012, 00:10
Откуда: Новоуральск, Свердловская область.
Репутация: 3301
Медальки:
Настоящее имя: Михаил

Re: Фильтр для сглаживания неравномерности импульсов Step

Сообщение michael-yurov » 25 фев 2013, 04:18

Serg-tmn писал(а):на графиках по горизонтальной оси - время в секундах?

Да, в секундах.
На графиках ускорение 400 мм/сек2 (до 1000 мм/сек2 картина почти не меняется, лишь отклонение от угла увеличивается пропорционально увеличению ускорения), количество шагов на миллиметр на результат не влияет.

Serg-tmn писал(а):У вас, так понял, более "продвинутый" принцип сглаживания. Не могли бы поделиться алгоритмом?

Нет, не продвинутый, а наоборот - сильно оптимизированный.
Контроллер считает поступивышие импульсы step (с учетом направления) и считает, сколько импульсов отправил станку. Делит 16 (с большим трудом подобранный коэффициент) на разницу (между принятыми и отправленными шагами) и получает интервал (в миллисекундах).
Для упрощения вычислений я сделал наоборот - постоянно вычисляю произведение отставания (в импульсах) и времени прошедшего с момента последнего импульса. Если это произведение больше определенного значения (у меня - 128000, если время считать в тактах микропроцессора на частоте 8 мГц), то посылается импульс Step (учитывая Dir) и "отставание" уменьшается на единицу.

Могу объяснить более подробно, но это не приносит положительного результата, кроме перегрева мозга.

В идеале - было бы круто просматривать траекторию вперед "заглядывая в будущее", и делать симметричное сглаживание, но, это слишком сложно и создаст большие проблемы.
Мой алгоритм завязан именно на постоянную времени, а не на количество импульсов, это позволяет сохранить синхронность движения осей без отставания и опережения на несколько шагов.
Алгоритм производит вычисления в области 16 битных чисел, что позволяет приводить вычисления с достаточной точные и плавностью.
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
 
Сообщения: 9437
Зарегистрирован: 26 июл 2012, 00:10
Откуда: Новоуральск, Свердловская область.
Репутация: 3301
Медальки:
Настоящее имя: Михаил

Re: Фильтр для сглаживания неравномерности импульсов Step

Сообщение aftaev » 25 фев 2013, 09:36

michael-yurov, еще к этому девайсу прикрутить обратную связь. Считывает линейку или энкодер и если есть расхождение досылает импульсы. При большом расхождении останавливает.
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
aftaev
Зачётный участник
Зачётный участник
 
Сообщения: 24962
Зарегистрирован: 04 апр 2010, 19:22
Откуда: Казахстан. Шымкент
Репутация: 3591
Медальки:

Re: Фильтр для сглаживания неравномерности импульсов Step

Сообщение Сергей Саныч » 25 фев 2013, 09:44

aftaev писал(а):michael-yurov, еще к этому девайсу прикрутить обратную связь. Считывает линейку или энкодер и если есть расхождение досылает импульсы. При большом расхождении останавливает.
Самый элегантный вариант - отслеживать противо-ЭДС ШД или форму тока в обмотках и сравнивать с ожидаемой. Так можно поймать срыв движения и вовремя остановиться. Без дополнительных энкодеров.
Но это уже для другого устройства.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Сергей Саныч
Мастер
 
Сообщения: 6758
Зарегистрирован: 30 май 2012, 14:20
Откуда: Тюмень
Репутация: 1984
Медальки:

Re: Фильтр для сглаживания неравномерности импульсов Step

Сообщение michael-yurov » 25 фев 2013, 10:02

Serg-tmn писал(а):Самый элегантный вариант - отслеживать противо-ЭДС ШД или форму тока в обмотках и сравнивать с ожидаемой. Так можно поймать срыв движения и вовремя остановиться. Без дополнительных энкодеров.

Так вот приличные драйверы это и так умеют. У меня такие стоят, и сейчас их можно купить совсем недорого у Darxton. Но там нужен большой объем вычислений и высокопроизводительный процессор. Более того - Эти драйверы как-раз так же могут сглаживать импульсы и умножать частоту step, только величина сглаживания у них очень мала (в пределах нескольких шагов), чтобы не было отклонений от траектории, и в случае с платой ncstudio и с подтормаживаниями lpt этого не достаточно
aftaev писал(а):michael-yurov, еще к этому девайсу прикрутить обратную связь. Считывает линейку или энкодер и если есть расхождение досылает импульсы. При большом расхождении останавливает.
Опять же идея реализована в топовых шаговых драйверах leadshine.
Только там не просто импульсы досылает, а еще и ток регулирует и не дает пропустить шаги.

Если мне начать наворачивать - kflop уже получится )))

Так вопрос то остается открытым - Стоит ли доводить до ума и выкладывать в общий доступ данный агрегат, учитывая, что придется использовать по микропроцессору на каждую ось?
На данный момент прошивка написана, расчеты сделаны. Осталось запрограммировать контроллер, припаять и проверить.
Сейчас сглаживание работает на частотах до 80 кГц, а при больших частотах микроконтроллер перестает производить тяжелые вычисления и эффект с ростом частоты плавно "уходит на нет".
Допустимые частоты - до 200 кГц. Умножение реализовать можно, но тогда (при умножении в 2 раза) эффект сглаживания начнет уменьшаться уже после 35 кГц.
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
 
Сообщения: 9437
Зарегистрирован: 26 июл 2012, 00:10
Откуда: Новоуральск, Свердловская область.
Репутация: 3301
Медальки:
Настоящее имя: Михаил

Re: Фильтр для сглаживания неравномерности импульсов Step

Сообщение aftaev » 25 фев 2013, 10:08

Serg-tmn писал(а):Самый элегантный вариант - отслеживать противо-ЭДС ШД или форму тока в обмотках и сравнивать с ожидаемой.

а если сервы стоят :)

michael-yurov писал(а):Опять же идея реализована в топовых шаговых драйверах leadshine.

для Яскавоподобных серв не подходит :)
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
aftaev
Зачётный участник
Зачётный участник
 
Сообщения: 24962
Зарегистрирован: 04 апр 2010, 19:22
Откуда: Казахстан. Шымкент
Репутация: 3591
Медальки:

Re: Фильтр для сглаживания неравномерности импульсов Step

Сообщение michael-yurov » 25 фев 2013, 10:29

aftaev писал(а):для Яскавоподобных серв не подходит

Так и по частотам никак не проходит.

Посмотрел сейчас - у нас в Екатеринбурге Atmega8535 стоит 83 рубля, дешевле только Atmega88PA и Attiny, но Attiny умножать не умеют, так что не вариант.
Еще плату делать, еще запрогаммировать. Так что для открытого проекта для любителей LPT - дороговато и сложновато.
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
 
Сообщения: 9437
Зарегистрирован: 26 июл 2012, 00:10
Откуда: Новоуральск, Свердловская область.
Репутация: 3301
Медальки:
Настоящее имя: Михаил

Re: Фильтр для сглаживания неравномерности импульсов Step

Сообщение aftaev » 25 фев 2013, 10:46

michael-yurov писал(а):Так и по частотам никак не проходит.

а нефиг так шустро крутить :)
Нужно шаг пропустил, коЁбочка дошогала.

michael-yurov писал(а):Так что для открытого проекта для любителей LPT - дороговато и сложновато.

не отмазывайся :)
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
aftaev
Зачётный участник
Зачётный участник
 
Сообщения: 24962
Зарегистрирован: 04 апр 2010, 19:22
Откуда: Казахстан. Шымкент
Репутация: 3591
Медальки:

Re: Фильтр для сглаживания неравномерности импульсов Step

Сообщение UAVpilot » 25 фев 2013, 14:26

Ничё не понял.
Получается, что если с компа очепедной импульс запоздал, то фильтр сгенерит его вовремя? А откуда он знает, что этот импульс именно запоздал, а не просто что его и не должно быть?

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

Да и зачем делать фильтр? Лучше на том-же МК сделать устройсво, на входе которого можно указать период и количество импульсов, а оно пусть их и сгенерит ровно. И Меса разориться :)
1. Робот не может ответить отказом на предложение человека выпить или своим бездействием допустить, чтобы человек напился один.
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 13250
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 3100
Медальки:
Настоящее имя: Сергей

Re: Фильтр для сглаживания неравномерности импульсов Step

Сообщение Darxton » 25 фев 2013, 14:30

UAVpilot писал(а):Получается, что если с компа очепедной импульс запоздал, то фильтр сгенерит его вовремя? А откуда он знает, что этот импульс именно запоздал, а не просто что его и не должно быть?
У механических систем одно из неотъемлемых свойств - инерция. Благодаря ей можно быть уверенным, что если импульса нет, а по расчетам быть должен, и ENABLE не пропал - можно шагать "авансом".

UAVpilot писал(а):Самый простой способ генерации равномерного периода - это генерация импульсов с частотой в несколько раз больше требуемой с последующим делением с-триггерами.

Задача не получить равномерный период, а получить равномерное, а точнее - плавное, изменение периода.
Комплектующие для систем с ЧПУ - Darxton.ru. Класс точности.
Darxton
Мастер
 
Сообщения: 1161
Зарегистрирован: 17 янв 2013, 08:19
Репутация: 266

Re: Фильтр для сглаживания неравномерности импульсов Step

Сообщение michael-yurov » 25 фев 2013, 14:55

Я смотрю - все подтянулись )))
Никому не надо, но всем интересно. :hehehe:
Скоро все узнаем, программка написана, симуляция показывает, что на частоте микроконтроллера 8 МГц получается работать с частотой импульсов до 250 кГц.
Щас спаяю, подключу и посмотрю, что получится. :controller:
Если заработает и будет видимый результат - сниму видео.

UAVpilot писал(а):Ничё не понял.
Получается, что если с компа очепедной импульс запоздал, то фильтр сгенерит его вовремя? А откуда он знает, что этот импульс именно запоздал, а не просто что его и не должно быть?

Фильтр сгенерит вовремя. А знает он оттуда, что выдает импульсы с небольшим отставанием по времени (в конкретном случае - 14 мс).
Цифровой фильтр для коррекции неравномерности импульсов Step 3.png
Отставание на 14 мс

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

UAVpilot писал(а):Самый простой способ генерации равномерного периода - это генерация импульсов с частотой в несколько раз больше требуемой с последующим делением с-триггерами.

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

UAVpilot писал(а):Да и зачем делать фильтр? Лучше на том-же МК сделать устройсво, на входе которого можно указать период и количество импульсов, а оно пусть их и сгенерит ровно. И Меса разориться

Это слишком сложно, дорого, и таких устройств сейчас очень много. Нет смысла.
Последний раз редактировалось michael-yurov 25 фев 2013, 16:41, всего редактировалось 1 раз.
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
 
Сообщения: 9437
Зарегистрирован: 26 июл 2012, 00:10
Откуда: Новоуральск, Свердловская область.
Репутация: 3301
Медальки:
Настоящее имя: Михаил

Re: Фильтр для сглаживания неравномерности импульсов Step

Сообщение aftaev » 25 фев 2013, 15:15

michael-yurov писал(а):Никому не надо, но всем интересно.

если бы дошагивало по линейкам или по энкодерам интересно было бы. Китайцы продают подобное за дорого.
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
aftaev
Зачётный участник
Зачётный участник
 
Сообщения: 24962
Зарегистрирован: 04 апр 2010, 19:22
Откуда: Казахстан. Шымкент
Репутация: 3591
Медальки:

Re: Фильтр для сглаживания неравномерности импульсов Step

Сообщение michael-yurov » 25 фев 2013, 15:19

aftaev писал(а):если бы дошагивало по линейкам или по энкодерам интересно было бы. Китайцы продают подобное за дорого.

И китайцы продают с энкодером, и у тебя KFlop есть, который дошагивать по линейкам умеет. Чтобы дошагивало нужно сложную быстродействующую систему, учитывающую кучу параметров. И это еще все как-то настраивать нужно, соответственно подключение к компьютеру потребуется, отдельная сервисная программа и т.п.
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
 
Сообщения: 9437
Зарегистрирован: 26 июл 2012, 00:10
Откуда: Новоуральск, Свердловская область.
Репутация: 3301
Медальки:
Настоящее имя: Михаил

Re: Фильтр для сглаживания неравномерности импульсов Step

Сообщение UAVpilot » 25 фев 2013, 15:21

Darxton писал(а):У механических систем одно из неотъемлемых свойств - инерция. Благодаря ей можно быть уверенным, что если импульса нет, а по расчетам быть должен, и ENABLE не пропал - можно шагать "авансом".

Извините на подобное даже коментировать бессмысленно.
Darxton писал(а):Задача не получить равномерный период, а получить равномерное, а точнее - плавное, изменение периода.

Не суть: одно - производная 1 порядка от другого и в данном случае подчиняется тем-же условиям.
1. Робот не может ответить отказом на предложение человека выпить или своим бездействием допустить, чтобы человек напился один.
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 13250
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 3100
Медальки:
Настоящее имя: Сергей

Re: Фильтр для сглаживания неравномерности импульсов Step

Сообщение UAVpilot » 25 фев 2013, 15:33

michael-yurov писал(а):выдает импульсы с небольшим отставанием по времени

Вот теперь понятно. Но зато не понятно как быть с хомингом и датчиками.
michael-yurov писал(а):И если имульсы были, скорость высокая,

Откуда фильтр узнаёт, какая для данной оси скорость высокая, а какая не очень?
michael-yurov писал(а):Это слишком сложно, дорого, и таких устройств сейчас очень много. Нет смысла.

С чего вдруг? Возьмите ваш МК, на входе оторвите у него детектор импульсов и замените его на UART и передавайте ему параметры импульсов для генерации. :)

Мне почемуто кажется, что это попытка изобрести микрошаг. :)
1. Робот не может ответить отказом на предложение человека выпить или своим бездействием допустить, чтобы человек напился один.
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 13250
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 3100
Медальки:
Настоящее имя: Сергей

Re: Фильтр для сглаживания неравномерности импульсов Step

Сообщение michael-yurov » 25 фев 2013, 15:52

UAVpilot писал(а):Мне почемуто кажется, что это попытка изобрести микрошаг.

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

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

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

С датчиками ничего не случится страшного, немого сместятся -не смертельно.
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
 
Сообщения: 9437
Зарегистрирован: 26 июл 2012, 00:10
Откуда: Новоуральск, Свердловская область.
Репутация: 3301
Медальки:
Настоящее имя: Михаил

След.

Вернуться в Электроника

Кто сейчас на конференции

Зарегистрированные пользователи: _taras_, a321, besriworld, BIG_TAU, Bing [Bot], Силвер, Erch_84, frezeryga, georg20013, Google [Bot], Google Feedfetcher, jo_key, Kiriller, Majestic-12 [Bot], MGG, michael-yurov, Nikomas, spawoon, vinhest, xvovanx, Yahoo [Bot], Yandex [bot]

Поделиться

Reputation System ©'