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

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

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

Сообщение michael-yurov »

На данный момент (01.01.2014) алгоритм работы устройства заметно отличается от начального, и графики из первого сообщения уже не отражают действительность.
Гораздо ближе к конечному варианту - графики из сообщения #133 http://cnc-club.ru/forum/viewtopic.php? ... 120#p70266

Внешний вид устройства на данный момент:
3.jpg (10554 просмотра) <a class='original' href='./download/file.php?id=23075&sid=27155d0795411c8ea309293d0774041f&mode=view' target=_blank>Загрузить оригинал (827.59 КБ)</a>
Документация: http://stepm.ru/SM4x5i2r.pdf
Давно придумал хитрое устройство на микроконтроллере, которое получает сигналы Step / Dir от контроллера или от LPT порта компьютера, и обрабатывает их так, чтобы сгладить неравномерность импульсов.

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

Пару дней назад решил повторить проект, но уже более продвинутую версию с более мягкой и точной обработкой сигнала, и с учетом того, что частота Step может быть более 50 кГц.
Сутки потратил на расчеты, и получил оптимальную формулу фильтра. Получилось, что фильтр с легкостью проглотит провалы в несколько импульсов, сгладит всплески скорости и ускорения.
При этом из за умягчения траектории произойдет некоторое сглаживание углов, но отклонение от вершины не превысит 0.03 мм, что вполне допустимо для большинства станков, работающих от LPT.
Измерение скорости до и после сглаживания (11769 просмотров) <a class='original' href='./download/file.php?id=12237&sid=27155d0795411c8ea309293d0774041f&mode=view' target=_blank>Загрузить оригинал (128.88 КБ)</a>
Измерение скорости до и после сглаживания
Графики ускорения до и после обработки, включая всплеск неравномерности (11769 просмотров) <a class='original' href='./download/file.php?id=12239&sid=27155d0795411c8ea309293d0774041f&mode=view' target=_blank>Загрузить оригинал (80.46 КБ)</a>
Графики ускорения до и после обработки, включая всплеск неравномерности
Отклонение абсолютное и реальное (11769 просмотров) <a class='original' href='./download/file.php?id=12236&sid=27155d0795411c8ea309293d0774041f&mode=view' target=_blank>Загрузить оригинал (117.36 КБ)</a>
Отклонение абсолютное и реальное
Траектория движения под прямым углом после сглаживания (11769 просмотров) <a class='original' href='./download/file.php?id=12240&sid=27155d0795411c8ea309293d0774041f&mode=view' target=_blank>Загрузить оригинал (87.43 КБ)</a>
Траектория движения под прямым углом после сглаживания
Задумался над устройством по той причине, что Ncstudio тоже не идеально генерирует сигнал. Она не может плавно менять частоту, а чередует в нужной пропорции допустимые ближайшие частоты. Вследствие этого заметна (на слух) неравномерность движения станка. И я полагаю, это способствует меньшей стабильности движения на высоких скоростях.

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

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

Вот, хотел бы услышать мнения других участников форума на эту тему.
Последний раз редактировалось michael-yurov 26 май 2014, 11:10, всего редактировалось 4 раза.
Аватара пользователя
PKM
Почётный участник
Почётный участник
Сообщения: 4263
Зарегистрирован: 31 мар 2011, 18:11
Репутация: 705
Настоящее имя: Андрей
Откуда: Украина
Контактная информация:

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

Сообщение PKM »

крутая штука!
для LPT актуальна, для MESA/KFLOP не нужна
это ведь можно и удваивать частоту, если LPT не тянет?
дорого такую сделать?
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2857
Откуда: Тюмень
Контактная информация:

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

Сообщение Сергей Саныч »

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

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

Сообщение Сергей Саныч »

PKM писал(а):это ведь можно и удваивать частоту, если LPT не тянет?
Очевидно, можно. И это позволит использовать бОльшие коэффициенты дробления шага, что повысит плавность движения.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11624
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4634
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

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

Сообщение michael-yurov »

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

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

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

Сообщение michael-yurov »

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

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

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

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

Сообщение aftaev »

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

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

Сообщение Сергей Саныч »

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

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

Сообщение michael-yurov »

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

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

Так вопрос то остается открытым - Стоит ли доводить до ума и выкладывать в общий доступ данный агрегат, учитывая, что придется использовать по микропроцессору на каждую ось?
На данный момент прошивка написана, расчеты сделаны. Осталось запрограммировать контроллер, припаять и проверить.
Сейчас сглаживание работает на частотах до 80 кГц, а при больших частотах микроконтроллер перестает производить тяжелые вычисления и эффект с ростом частоты плавно "уходит на нет".
Допустимые частоты - до 200 кГц. Умножение реализовать можно, но тогда (при умножении в 2 раза) эффект сглаживания начнет уменьшаться уже после 35 кГц.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6191
Откуда: Казахстан.
Контактная информация:

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

Сообщение aftaev »

Serg-tmn писал(а):Самый элегантный вариант - отслеживать противо-ЭДС ШД или форму тока в обмотках и сравнивать с ожидаемой.
а если сервы стоят :)
michael-yurov писал(а):Опять же идея реализована в топовых шаговых драйверах leadshine.
для Яскавоподобных серв не подходит :)
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11624
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4634
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

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

Сообщение michael-yurov »

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

Посмотрел сейчас - у нас в Екатеринбурге Atmega8535 стоит 83 рубля, дешевле только Atmega88PA и Attiny, но Attiny умножать не умеют, так что не вариант.
Еще плату делать, еще запрогаммировать. Так что для открытого проекта для любителей LPT - дороговато и сложновато.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6191
Откуда: Казахстан.
Контактная информация:

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

Сообщение aftaev »

michael-yurov писал(а):Так и по частотам никак не проходит.
а нефиг так шустро крутить :)
Нужно шаг пропустил, коЁбочка дошогала.
michael-yurov писал(а):Так что для открытого проекта для любителей LPT - дороговато и сложновато.
не отмазывайся :)
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

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

Сообщение Serg »

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

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

Да и зачем делать фильтр? Лучше на том-же МК сделать устройсво, на входе которого можно указать период и количество импульсов, а оно пусть их и сгенерит ровно. И Меса разориться :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Darxton
Мастер
Сообщения: 2113
Зарегистрирован: 17 янв 2013, 08:19
Репутация: 622
Контактная информация:

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

Сообщение Darxton »

UAVpilot писал(а):Получается, что если с компа очепедной импульс запоздал, то фильтр сгенерит его вовремя? А откуда он знает, что этот импульс именно запоздал, а не просто что его и не должно быть?
У механических систем одно из неотъемлемых свойств - инерция. Благодаря ей можно быть уверенным, что если импульса нет, а по расчетам быть должен, и ENABLE не пропал - можно шагать "авансом".
UAVpilot писал(а):Самый простой способ генерации равномерного периода - это генерация импульсов с частотой в несколько раз больше требуемой с последующим делением с-триггерами.
Задача не получить равномерный период, а получить равномерное, а точнее - плавное, изменение периода.
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11624
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4634
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

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

Сообщение michael-yurov »

Я смотрю - все подтянулись )))
Никому не надо, но всем интересно. :hehehe:
Скоро все узнаем, программка написана, симуляция показывает, что на частоте микроконтроллера 8 МГц получается работать с частотой импульсов до 250 кГц.
Щас спаяю, подключу и посмотрю, что получится. :controller:
Если заработает и будет видимый результат - сниму видео.
UAVpilot писал(а):Ничё не понял.
Получается, что если с компа очепедной импульс запоздал, то фильтр сгенерит его вовремя? А откуда он знает, что этот импульс именно запоздал, а не просто что его и не должно быть?
Фильтр сгенерит вовремя. А знает он оттуда, что выдает импульсы с небольшим отставанием по времени (в конкретном случае - 14 мс).
Отставание на 14 мс (11696 просмотров) <a class='original' href='./download/file.php?id=12255&sid=27155d0795411c8ea309293d0774041f&mode=view' target=_blank>Загрузить оригинал (117.22 КБ)</a>
Отставание на 14 мс
И если имульсы были, скорость высокая, и вдруг импульсов нет - такого быть не должно, это мгновенная остановка с бесконечно большим отрицательным ускорением.
К сожалению, фильтр не смотрит далеко вперед, поэтому он тоже начнет быстро сбрасывать скорость, но все же не мгновенно, а с некоторым замедлением.
UAVpilot писал(а):Самый простой способ генерации равномерного периода - это генерация импульсов с частотой в несколько раз больше требуемой с последующим делением с-триггерами.
К сожалению, в случае с LPT и моей NCStudio - это не возможно. Более того, в случае с LPT провалы по времени не зависят от частоты ядра и от генерируемой частоты шагов.
UAVpilot писал(а):Да и зачем делать фильтр? Лучше на том-же МК сделать устройсво, на входе которого можно указать период и количество импульсов, а оно пусть их и сгенерит ровно. И Меса разориться
Это слишком сложно, дорого, и таких устройств сейчас очень много. Нет смысла.
Последний раз редактировалось michael-yurov 25 фев 2013, 16:41, всего редактировалось 1 раз.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6191
Откуда: Казахстан.
Контактная информация:

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

Сообщение aftaev »

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

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

Сообщение michael-yurov »

aftaev писал(а):если бы дошагивало по линейкам или по энкодерам интересно было бы. Китайцы продают подобное за дорого.
И китайцы продают с энкодером, и у тебя KFlop есть, который дошагивать по линейкам умеет. Чтобы дошагивало нужно сложную быстродействующую систему, учитывающую кучу параметров. И это еще все как-то настраивать нужно, соответственно подключение к компьютеру потребуется, отдельная сервисная программа и т.п.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

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

Сообщение Serg »

Darxton писал(а):У механических систем одно из неотъемлемых свойств - инерция. Благодаря ей можно быть уверенным, что если импульса нет, а по расчетам быть должен, и ENABLE не пропал - можно шагать "авансом".
Извините на подобное даже коментировать бессмысленно.
Darxton писал(а):Задача не получить равномерный период, а получить равномерное, а точнее - плавное, изменение периода.
Не суть: одно - производная 1 порядка от другого и в данном случае подчиняется тем-же условиям.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

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

Сообщение Serg »

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

Мне почемуто кажется, что это попытка изобрести микрошаг. :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11624
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4634
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

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

Сообщение michael-yurov »

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

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

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

С датчиками ничего не случится страшного, немого сместятся -не смертельно.
Закрыто

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