Усовершенствованный сервопривод Чена

Художник

Уважаемые хоббисты, хочу поделиться разработкой. Это сервоконтроллер на AVR, с удобной программой настройки. За основу брал прошивку Чена - elm-chan.org Его проект открытый, я тоже публикую свои изыскания. Использовал этот контроллер в одном из гравировальных станков ЧПУ для экспериментов. Силовые ключи штатные.

Для улучшения характеристик применил более скоростной микроконтроллер АТmega8, поднял частоту ШИМ до 25КГц. Для удобства настройки и снятия характеристик была разработана программа под Windows, работа с контроллером по RS-232.

F2 - Предыдущий серво-режим (во время измерений недоступно)
F3 - Следующий серво-режим (во время измерений недоступно)
F8 - СТАРТ (переместиться в заданное относительное положение)
F9 - ИЗМЕРЕНИЕ
F11 - СТОП
F12 - СБРОС (всех координат в 0 + стоп)

Лево - Управление - уменьшить
Право - Управление – увеличить
Вверх – «0» стоп
Ctrl + Лево - Управление крайнее левое положение
Ctrl + Право - Управление крайнее правое положение

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

Клик правой кнопкой мыши на график - выпадающее меню “Сохранить график”, можно сохранять в BMP и векторный WMF.

В банки данных заносятся коэффициенты PID. По умолчанию используется нулевой.
Значения полей “Имп/мм”, “История измерений”, “Период измерений” сохраняются после выхода в INI файл, который будет находиться в той-же папке, откуда была запущена программа.

Это проверенная схема и прошивка. Можно ли на ней работать? Для хобби возможно подойдёт, но скорости без отклонений от координат довольно низкие. При рабочем перемещении на скорости 2 м/мин ловил при плохом разгоне отклонение на диагонали до 0,2 мм. Импульсов энкодера – 200 имп/мм. На свободном перемещении при скорости 2 м/мин идёт очень неплохо, в случае отклонения, вгоняет машину в координату, машина всегда выходит в “ноль“. Пользуйтесь.

В приложенных файлах схема, трассировка, сборочный чертёж, прошивка, программа ServoTuning для настройки контроллера. Трассировка не очень удачная, по быстрому сделана, но всё функционирует. Просто обратите внимание при подключении, чтобы экран провода не задел шину +5V. Прошивку контроллера можно осуществлять непосредственно на плате. Светодиоды для индикации процесса прошивки. Типичный график поведения машины приложен. Старт с нуля, без разгона-торможения.

Если нужно будет фото контроллера в сборе, или коэффициенты настройки для моего станка, размещу. Интересно будет узнать коэффициенты PID регулятора для вашей серво системы.

Буду признателен за рабочие проверенные схемы силовых ключей для сервомоторов, 110 В, 20А.

Servo2.rarServoTuning.rar

technik

Что-то прошивки нету в приложенных файлах.
А почему получается уход по координате на 0.2 мм,из-за схемы или может дело в двигателе или энкодере. И кстати, схема так и работает без прерываний?

Художник

Программа Сервотюнинг.

Позиция “назначение” относительная.

Настройка “История” - число измерений, после которых старые данные будут удаляться из графика.

Для серво - режима “скорость”, возможно строить графики скорости/рассогласования по скорости в килоимпульсах в секунду, или отклонение скорости от выбранной в процентах (зависит от второго параметра Kf).

Настройка “период измерений”, значения в мс.

Прошивка см. приложение. Две версии, вторая вроде как стабильнее, попробуете, пишите отзывы.

Успехов в творчестве!

technik,

А почему получается уход по координате на 0.2 мм, из-за схемы или может дело в двигателе или энкодере. И кстати, схема так и работает без прерываний?

При чём здесь схема? Уход потому что время сервоцикла 200 мкс. 😃 Конечно без прерываний. С прерываниями теоретически лучше. Я же писал, и прошивку Microchip выкладывал.

________.rar

maxvovk

Ничего не изменилось, кроме вывода отклонения.
Главная ошибка - чистый ПИД без учета реакций мотора, параметров нагрузки. Также привод должен ругаться на превышение своих возможностей, он главный в системе.
Исходник Чена я изучил и выбросил, свой писал с чистого листа. Уперся только в скорость МК, АВР не способен с нужной скоростью обработать все входные параметры. Есть большое подозрение, что и АРМа может не хватить…
И в исходнике обнаружены непонятки. Это или ляпсусы, или фьючи.

Кто-то упоминал (не помню кто и где), что параметры мотора, например момент инерции ротора, слабо влияет на динамику по отдельно взятой координате (в сборе). Это совсем не так. Поставив на тестовую координату специализированный серво-мотор (картинка снизу) с енкодером 1000cpr, убедился, что на высоких (> 1000) оборотах мотор с малый моментом инерции, но с шустрой динамикой даёт в разы меньшую погрешность позиционирования.

Мой вывод простой: на небыстром МК серва способна нормально управлять мотором до 800-1000 оборотов. Дальше - уже совсем другой уровень вычислений, и примитивный ПИД тут не катит.

technik

А можно сразу hex или bin выложить.И ещё, чем исходник компилировать?

Galant1
maxvovk:

Мой вывод простой: на небыстром МК серва способна нормально управлять мотором до 800-1000 оборотов. Дальше - уже совсем другой уровень вычислений, и примитивный ПИД тут не катит.

А что катит для другого уровня вычислений?

maxvovk
Galant1:

А что катит для другого уровня вычислений?

По математике - тот же ПИД, но с учетом массы параметров, от момента инерции мотора до момента трогания с места портала.
По железу - МК на АРМ-архитектуре или ДСП.

В идеале сервоцикл на каждом импульсе енкодера, при 3000об/мин для енкодера 2000cpr это 100кГц или 10мксек.

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

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

Художник

В идеале сервоцикл … это 100кГц или 10мксек.

Всё правильно. Для серьёзных приложений это даже минимум. Я сейчас делаю систему ЧПУ со временем обработки цикла 5 мксек. А привод должен быть шустрее ЧПУ, в идеале, на порядок. Но тут уже сказывется инерционность системы, поэтому в реале в наносекунды уходить не трэба. А самые лучшие характеристики обеспечивает аналог. Что и используется в приводах локаторов. Сейчас появились новые микрухи, типа ПЛИсок, только аналоговые, с крутейшими операционниками, до 46 штук на корпус, и строй, как хочешь.

Вот на них то и можно обалденный привод построить!

А стенды не каждый может сделать, поэтому я программу Сервотюнинг сделал. Это реально работает на любом быстром компьютере. Даже на 166 пентюхе, в принципе работает.

Художник

А можно сразу hex или bin выложить.

Пожалуйста. См. в приложении. V0.2 с прерыванием, но что то мне не нравится. Через недельку, как тесты закончу, выложу вариант с сигналом торможения.

hex_servo.rar

14 days later
Художник

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

Так что думаю, для хобби подходит.

Попробую более жёсткие режимы и нагрузки, сообщу.

P.S. Похоже ни у кого проверенной схемы ключей нет…

1 month later
ZanozM

Уважаемый чем исходники компелить?

STEPMOTOR
ZanozM:

Уважаемый чем исходники компелить?

Ассемблером для Atmel миктроконтроллеров !

ZanozM

Уважаемый чем исходники компелить?

Ассемблером для Atmel миктроконтроллеров ![quote]
Да по ночам мозги отключаются, не в том архиве искал.
С AStudiO я маленько знаком даже на Асме писал для AT90S2313 примитивный девайс для управления LB1847 типа там микростеп. В графической среде писал для ATmega8535 девайс по SPI управляет DAC.
Я это все к тому что с исходниками я могу разобратся в плане где какое прерывание, может даже смогу на ATmega16 перевести, под рукой ATMEGA8 нет.
Только как всегда хочется большего, интересует как эта адская машина работает.
Книги читал читал ну нех-ра непонял, вопрос зачем нам переводить дискрету в аналог, чтобы потом аналогово управлять сервой, которая построена на дискретном принципе.
Может проще можно сделать, типа стойка выдает по паралельной шине в серву значение этого самого DACA.
MACH2 и тому подобное, выдают шаг направление, а что там серва делает его мало беспокоит как я понял у сервы есть какой то предел ошибки положения, после чего он выдает стоп машина.
Я сделал вывод что принцип построения сервы понятен далеко не всем.
Давайте общатся на эту тему, и многое станет ясным.
Разберемся что к чему.
Завтра намерен выложить основательно свои мысли. тем более пришла отладочная плата ARM7 с простеньким Филипком,короче реализация ждет своего проджекта.

ZanozM

Нашел в нете диссертацию на тему КВАЗИРЕЗОНАНСНЫЕ ИМПУЛЬСНЫЕ ПРЕОБРАЗОВАТЕЛИ ДЛЯ СИСТЕМ ТОЧНОГО ЭЛЕКТРОПРИВОДА автор Ревко Анатолий Сергеевич.
Задача оптимизации точного привода(быстродействие, возможность за минимальное время и с минимальной ошибкой отработать заданную команду или скомпенсировать возмущающее воздействие) решается по принципу максимума Понтрягина.
В эти расчеты закладывается очень много параметров инертность якоря, магнитный поток, ток якоря, индуктивность цепи, угол поворота, если это не начало движения то угловую скорость , и так далее.
При задании повернуть якорь на определенный угол, выдается примерно такое воздействие на двигатель 1) в нулевой момент времени подать +24вольта 2) во время t1 подать -24 вольта 3) в момент времени t2 снять напряжение с якоря.
Также можно рассчитать воздействия на якорь для ускорения до определенной скорости, на мой взгляд можно много еще чего сделать.
Да только алгоритм математически громоздкий и разобраться в нем, тем более реализовать в железо у меня точно не выйдет.
Это была так сказать реплика по поводу, чего только нет на свете, мысли же мои гораздо скромнее.
Хочу на пальцах прикинуть как работает сервопривод, у которого есть только два входа Степ и Дир.
Для начала хочу вспомнить как работает классическая серва , в моем понимании у классики рулит задание значения скорости в аналоговой величине, приходит такая величина с ЧПУ на серву , и привод обнаруживает что на одной ножке есть напряжение а на другой с тахогенератора его нету. Разность напряжения и есть величина рассогласования которое, привод спешит компенсировать подав на классический ШИМ напряжение.
Сигнал рассогласования приходит на ПИД регулятор, а из него выходит сигнал управления ключами, еще есть обратные связи по скорости, здесь мне кое что понятно.
Но как работает импульсная серва , что в ней является сигналом рассогласования ?
Осмелюсь предположить, что по приходу импульса управления на контроллер он подает напряжение на якорь, якорь поворачивается на заданный угол, а время между приходом импульса с ЧПУ и выдачей энкодером импульса о благополучной отработке, и есть рассогласование которое контроллер должен стремится компенсировать.
По логике, для того чтобы быстро скомпенсировать рассогласование, привод должен знать последует за первым импульсом второй, а следом третий или первый импульс будет одиночный. Ведь контроллер должен знать оставлять ему угловую скорость, или тормозить до нуля в случае одиночного импульса, а может надо по заложенной динамике разгона все больше и больше выдавать управляющее воздействие на якорь, для компенсации растущего рассогласования.
Короче надо плавно разгонятся потом маленько зафиксировать скорость а далее так же медленно тормозить, иначе можно вылететь на больший угол якоря , потом компенсировать это противодействием, по моему это называется перерегулированием?
Скорей я просто много не знаю, может быть контроллер замеряет длину импульса, к примеру первый импульс очень короткий в смысле конкретно по времени, и контроллер понимает что он одиночный, другой первый импульс имеет из расчета максимальной частоты максимальную длину и серва понимает что сейчас будет крутой разгон, и так далее. Сам думаю что это не так.
Потому как видел руководстве к MACH2 как обычную серву приспособить, дак там стоит обычный кондер в который сливаются импульсы и на нем поддерживается уровень напряжения естественно там и сопротивление стоит, это говорит о том что длинна импульса прямо пропорциональна скважности.
Как устроен аналоговый ШИМ я представляю, как он работает в цифровых приводах понятия не имею, то что я находил в литературе написано заумно.
Объясните мне пожалуйста как можно проще , на примерах как он работает.
Вот к примеру Модуль Захвата в Microchip PIC16F684 написано с помощью его можно измерить период между положительными фронтами двух импульсов, в чем он измеряется,
Для начала наверное в количестве импульсов тактового генератора микроконтроллера, произошедших за период между двумя импульсами.
Если первый импульс будет от ЧПУ а второй с датчика положения тогда это будет величина рассогласования, к чему это количество отсчитанных импульсов надо привести, в смысле надо посчитать период в секундах, или что еще?
В аналоговых приводах значение рассогласования есть напряжение, а здесь может так и оставить в количестве импульсов? А как с ними дальше работать и самое главное что прейдет на ШИМ ?
А самое главное надо еще контур скорости сделать который всю эту систему стабилизирует, потому как если оставить одно рассогласование по положению, то ерунда получится .
Может надо длительность импульса ЧПУ замерять, и от этой величины для начала через прямо пропорциональный контур подавать на ШИМ, естественно ввести обратную связь , измерять длительность импульса с энкодера. А дальше к этому значению добавлять значение рассогласования положения в аналоговой технике это делает сумматор.
Да кстати, значение рассогласования нужно пропускать через ПИД регулятор.
Короче одни вопросы.
Всем кто прочитал эту бредятину, за любой ответ спасибо.

AZi

Все прочитал… когда дочитал до конца - забыл че в начале было… 😊

Короче как я себе представляю сервопривод(любительский, не сверх прецезионный…) :
Стоит ЦАП и задает напряжение пропорциональное току в обмотке, ШИМ подгоняет ток под это напряжение, движок крутится, энкодер считает, контроллер думает… Когда надо сделать одиночный шаг - комп сам должен знать какое значение загнать в ЦАП чтобы движок не улетел слишком далеко от намеченной точки… Таблица значений подгоняется вручную под условия работы - обрабатываемый материал, скорость, погрешность позиционирования…

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

Еще более навороченный вариант:
Смысл тот же, только надо добавить буфер обмена чтобы контроллер знал будет ли это одиночный импульс или нет…

По поводу вычисления нужного тока - в случае одиночного импульса - тот компаратор (описанный выше) должен выдавать не только направление куда крутиться, но и величину рассогласования - напряжение пропорциональное нужному току которое при подходе к нужной координате соответственно будет уменьшаться и обеспечет тем самым плавный подход к нужной точке…

ZanozM

Хорошо я понял, то что вы говорите, о системе ЧПУ с обратной связью которое следит за сервой и корректирует её .
Я же говорю о системе типа МЯЧ2 у которой выход импульсный DIR направление STEP шаг.
С такой системой серва сама должна о всем думать.
И потом как вы себе представляете буфер обмена может есть какой то стандарт.
Насчет ЦАП какой он из себя, если он выдает аналог на выходе а потом это все идет на класический ШИМ, то на кой он нужен, если есть дискретный ШИМ на который подаешь комбинацию нулей и единиц а на выходе получаешь Широтно Импульсный Модулированный сигнал, мне бы разжевал как он работает.
Кстати в серве Художника Цапа нет, дак как он работает?
Нужно составить Блок Схему Алгоритма тогда жить станет проще!
Да вот еще что, ответа от автора на этом форуме нам точно недождаться, я это знаю.

AZi

По поводу аналогового шима - а как цифорвой шим будет ограничивать ток в обмотках?
В случае аналогового - получается - нагрузка возрасла ток добавился - движок координату держит, а в цифровом - нагрузка возросла(на чуть-чуть) ток надо поднять на 0.1младшего бита ц.шима и че он будет делать - а ничего - он просто сдвинется от нагрузки и будет уже там висеть или начнет болтаться между указанной точкой и следующей…

Подобные мысли навеянны прочтением инструкций на СM600 где применяются линейные движки и индуктосины - тоесть разрядность обратной связи (в пределах ПИ-регулятора) практически бесконечна…

Под буфером я имею ввиду програмно реализованную задержку в контроллере - он накапливает допустим десять команд, а потом начинает их выполнять - уже зная что будет впереди…

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

я имею ввиду не для удержания координаты а просто если питание подать и затормозить его…