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

Zon
arisov77:

Zon, ждём результатов. Я тоже хочу попробовать как нибудь при возможности на dsPIC30F2010.

В dsPIC30F2010 точно не влезет.Слишком мало памяти.
В dsPIC30F3010 осталось свободно байт 20 и то только
после сокращения всех подсказок которые выводятся на экран.
Ну и еще следующий проект который +/- 10в. Вот тут уже можно
поставить любой двигатель нацепив на него енкодер

arisov77

Честно говоря на объём не смотрел. Я хотел, что-то своё написать (но это далёкие планы, которые возможно и некогда не осуществляться), без лишних наворотов, к тому же тот проект на Си написан, а ним как известно, памяти МК немного больше затрачивается.

arisov77
arisov77:

Посмотрим, какую скорость Масh «выдать» …
зависимость не прямо пропорциональная (например, для 300имп/мм макс.скорость уже будет = 9000мм/мин), я формулы расчета не знаю, поэтому лучше всего проверять в самом Mach. При этом скорость не зависит от количества подключенных осей и скорости ядра (Kernel Speed в закладке Config / Port Setup and Axis Selection).

Тут я оказался не прав, скорость зависит от Kernel Speed (скорость ядра), надо после смены частоты «перезагружать» сам Mach, что я при проверке не сделал. (Т.к. я проверял с версией Mach3_1.83.027 и там нет (в подписи) такого указания. В новых версиях Machа уже «подписали».)
И зависимость скорости и дискретности прямопропорциональная (или Mach «глючил» или я, что скорее всего 😃 – время было позднее).

Формула для расчёта максимальной скорости имеет следующий вид:
Velocity = (1 500 000 / steps per) х (N / 25),
где [Velocity] = мм/мин, [steps per] = шаг/мм, N = значению Kernel Speed в кГц

Если установить 100кГц, то максимальная скорость при «steps per» = 400 может составить 15 000мм/мин.

Максимальная частота одной оси = указанной частоте в Kernel Speed (25, 35, 45 – в «старых» версиях Mach и в новых дополнительно можно установить 60, 65, 75, 100кГц), поэтому если предполагается, что сервоконтроллер будет работать с Mach и учесть, то что в «любительских» станках энкодеры выше 2000имп/об и двигатели выше 3000об/мин очень редко применяются (судя по моему анализу cnczone.com), то «гнаться» за быстродействием выше 100-150кГц думаю не имеет смысла.

Кстати, может кто-то на этом форуме знает как измеряется максимальная входная частота сервоконтроллера? Я здесь electronix.ru/forum/index.php?showtopic=59827 задавал этот вопрос, но ответа не получил.

STEPMOTOR

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

mura

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

arisov77

Всем спасибо.
Совет STEPMOTOR мне понятен, только у меня нет пока энкодера с высоким разрешением (возможно, скоро появиться с 2 400имп/об), но тогда и двигатель надо чтобы мог до 5000 об/мин «разгоняться», которого тоже нет (хочется чтобы было не хуже чем UHU и Gecko320, 340, выше, как уже писал - не надо + небольшой запас). Кстати, энкодер, я думаю не обязательно независимый, можно «брать» с основного и сравнивать со Step.
Совет mura, мне немного не понятен, наверное Вы неточно написали. Прерывания «идут» по А и В энкодера? Если одно прерывание по энкодеру, а другое по Step, то тогда всё «становится на свои места». Опять же надо механическую систему, которая может ограничить результат.
Как нибудь “электронным” способом нельзя?

mura
arisov77:

Совет mura, мне немного не понятен, наверное Вы неточно написали. Прерывания «идут» по А и В энкодера? Если одно прерывание по энкодеру, а другое по Step, то тогда всё «становится на свои места». Опять же надо механическую систему, которая может ограничить результат.

A на INT0 и одновременно на INT1, B по вкусу.
прерывание по INT0 обрабатывает энкодер и результат накапливает в перевенной
прерывание по INT1 обрабатывает энкодер и результат накапливает в той же перевенной, но с вычитанием . На каждый импульс от энкодера 0-прерывание даст +1, а 1-е даст -1, и мы получим 0 в итоге, на малых скоростях так и выходит, а вот при увеличении скорости начинает накапливатся ошибка.

arisov77

Получается INT0 и INT1 запараллелены? Если это так, то одновременно «выставляются» 2 флага, в порядке очередности (у AVR) первым обработается INT0 (Poz+), затем INT1 (Poz-). И что это даёт? Допустим прибавляем постепенно частоту на входах, достигаем порога, когда импульсы не смогут считаться, но они не будут считываться одновременно по обоим входам-прерываниям. Что-то я не «догоняю».
Также нужно в сервоконтроллере ещё Step опросить и учесть, что в промежутках между прерываниями от Step и энкодера МК должен успеть рассчитать значения ПИД.

Может это всё просто элементарно подсчитывается: время на обработку INT0 + INT1 + время расчёта ПИД + небольшой запас? Но тут опять «грабли» - во время расчета ПИД МК «отвлекается» на прерывания и если прерывания слишком частые, то время на расчёт может не остаться. Как найти, измерить или высчитать эту грань? И чтобы все импульсы с входов «захватить» и чтобы время на расчёт (реакция на изменения) осталось?

Механический способ, наверное всё-таки самый надёжный, но очень не удобный и не всегда выполнимый.

Вот для примера сравнительные характеристики некоторых сервоконтроллеров
У некоторых “Max step rate” до МГц доходит. Как они этот параметр определили?

arisov77

Сделал видеоуроки (попросили на cnczone.com) как с помощью PonyProg и CodeVision со схемой программатора STK200 avr123.nm.ru/img/07_avrprog.png (можно на свой «страх и риск» попробовать и с адаптером “5-проводков” avr123.nm.ru/07.htm ) “прошить” микроконтроллер.
Fuse-биты «прошиваются» только один раз. В последствии, если нужно будет изменить прошивку, то надо «заливать» только файлы (с разшерением .hex и .eep).

Prog_CodeVision_ServoMega88.zipProg_PonyProg_ServoMega88.zip

КСВ

Примерно лет восемь назад, мне с группой коллег, в связи с производственной необходимостью, пришлось состыковывать промышленную стойку ЧПУ, работающую по принципу шаг-направление с аналоговым сервоприводом (привод ,который управляется аналоговым напряжением ± 10В). В то время мы делали блок согласования на дискретных элементах. Основу этого блока составлял реверсивный счётчик, ( по- моему, четыре корпуса 155ИЕ7 ) к выходам которого подключался ЦАП К572ПА1.На вход счётчика +1 подавались импульсы со стойки, а на -1 импульсы с энкодера . Энкодер на 1000 имп. ( ВЕ178).Двигатель , известный Вам – СЛ. При работе, на выходе счетчика появлялся код рассогласования, который ЦАП преобразовывал в напряжение, оно поступало на ОУ, затем суммировалось с напряжением, которое вырабатывал скоростной канал ( преобразователь частота – напряжение) , фильтровалось и шло на управление приводом. Допустимое рассогласование, при котором срабатывала защита – 500 дискрет, на машине – 0.5 мм. Всего у нас тогда ушло корпусов 20 155 логики. Думаю, для того, чтобы определить быстродействие сервопривода на МК, можно собрать реверсивный счётчик на той же 555 серии (или на МК , если это проще для ВАС) к выходу подключить дешифратор с АЛС. Вход счётчика +1 подключаем параллельно входу степ сервопривода, вход -1 счетчика – к любому каналу энкодера ( А или В), подаём импульсы с генератора на вход сервопривода, двигатель вращается, счётчик показывает нам разность между количеством поданных на сервопривод импульсов и отработанных двигателем . Это рассогласование должно быть минимальным. При какой- то частоте рассогласование начнёт расти, т.е. быстродействия привода будет не хватать. Но, ИМХО, быстродействие привода надо рассматривать для системы сервопривод – конкретный двигатель. Если двигатель на 110v, и такое напряжение на нём получается, при подаче на привод частоты , например, 10 Кгц, то это и будет максимальная частота для этой системы. Но, чем выше частота, при которой напряжение на двигателе достигает номинального – тем лучше ( особенно для приводов подач ).

arisov77

Спасибо, мысль понял – параллельно сервоконтроллеру подключить независимый аппаратный реверсивный счётчик показывающий рассогласование. Идея интересная, т.к. при этом можно точнее измерить частоту, чем если использовать «внутренние» ресурсы МК. Но опять всё «упирается» в быстродействие механической системы.
Сегодня мне пришла идейка, как измерить быстродействие сервоконтроллера без механической системы. Я здесь electronix.ru/forum/index.php?s=&showtopic=59827&v… уже поделился с профессионалами, пока жду отзывов.
Поделюсь её и здесь, может кто-то выскажется на счёт этого способа.
Вместо двигателя на выходе сервоконтроллера установливается генератор управляемый напряжением (ГУН). Сглаживающей RC-цепочкой («сглаживает» ШИМ) по входу ГУН можно в небольших пределах имитировать инерцию системы. «Крутизной» ГУНа - разрешение энкодера. Светодиод горит когда нет рассогласования, при превышении +/-1 Step – гаснет, но можно и наоборот (это рассогласование определяю программно).
Прибавляя постепенно частоту на входе Step находим максимум.

12 days later
Sacha56

Здравствуйте!

Прочитав всю тему здесь и на cnczone.com, очень заинтересовался. Так как делал приводы только на шаговых, возникли вопросы.

Для чего нужна прога ServoTuning, без нее драйвер сразу работать будет или нет? Я понял, что она нужна чтобы узнать предельные параметры драйвера или это не так. В архиве ServoCode_AtMega88, три папки с прошивками - Servo_int_AtMega88, ServoFinishInt_AM88, ServoUART_AM88, для чего какие нужны?

arisov77

Без ServoTuning (дословный перевод - серво настройка) работать не будет. Вернее драйвер работать будет, но не так как надо. ServoTuning нужен пару раз для настройки привода, впослествии ServoTuning и соотвественно внешний преобразователь RS232/UART (Rx-Tx) будут не нужны.
Лучше всего использовать конструктив pájač (Jozefp) rcopen.com/forum/f110/topic40981/211 (сообщение №198) и внизу там есть прошивочка в архиве Servo_AtMega88_CompInt_Modif.zip.

Sacha56
arisov77:

Без ServoTuning (дословный перевод - серво настройка) работать не будет. Вернее драйвер работать будет, но не так как надо. ServoTuning нужен пару раз для настройки привода, впослествии ServoTuning и соотвественно внешний преобразователь RS232/UART (Rx-Tx) будут не нужны.

Так я и предполагал.

Скажите, а где подробней почитать о настройке привода с прогой ServoTuning, в какой последовательности что делать и чего добиваться.

Я хочу попробовать применить серво вместо шаговика.

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

arisov77
Sacha56:

Скажите, а где подробней почитать о настройке привода с прогой ServoTuning, в какой последовательности что делать и чего добиваться.

Начиная с сообщения №96 rcopen.com/forum/f110/topic40981/109 этой ветки форума.
Вообще, конечно, надо бы снять видеоурок, но как обычно “руки не доходят”. Ничего сложного в настройке нет. “Не боги горшки обжигают” 😃

Sacha56

Да, видеоурок, это было бы идеально.

Спасибо.

maxvovk
arisov77:


Прибавляя постепенно частоту на входе Step находим максимум.

Чуть не в тему.
Я сначала сделал так: поставил 2313 чисто как счетчики как енкодера, так и степа. Основная мега имеет сервоцикл 10кГц, опрашивает счетчики, вычисляет рассогласование, считает ПИД и вычисляет ШИМ.
Потом первую часть размножил и 10 каналов зашил в ФПГА, причем на входе енкодера стоит 8-уровневый фильтр дребезга. Как показала практика, дешевые непромышленные енкодеры им страдают. (Хотя и пара триггеров в россыпи вполне должны справляться…).

ATLab
arisov77:

Вместо двигателя на выходе сервоконтроллера установливается генератор управляемый напряжением (ГУН). Сглаживающей RC-цепочкой («сглаживает» ШИМ) по входу ГУН можно в небольших пределах имитировать инерцию системы.

Imho, с реальным двигателем будет проще:

  1. у ГУН нет частоты = 0, а с энкодера при стоящем двигателе сигнал не идет.
  2. подобрать параметры фильтра ГУН для имитации реакции двигателя будет не проще, чем настроить реальную систему - просто интегратором там не обойтись.
arisov77
maxvovk:

Я сначала сделал так…

Я всё таки не понял, а по какому признаку находиться максимум?

ATLab:

Imho, с реальным двигателем будет проще:

  1. у ГУН нет частоты = 0, а с энкодера при стоящем двигателе сигнал не идет.
  2. подобрать параметры фильтра ГУН для имитации реакции двигателя будет не проще, чем настроить реальную систему - просто интегратором там не обойтись.

Тоже считаю, что проще и достовернее результат, если двигатель и энкодер с повышенным разрешением есть в наличии.
Я планировал, преобразователь (ГУН с формирователем квадратурных сигналов) «запихнуть» в МК. Измерять АЦП и преобразовывать в А и В. Как вариант, с МК можно измерять не напряжение, а ширину импульса ШИМ на выходе сервоконтроллера. «Математикой», если понадобиться, «вывести в ноль».

maxvovk:

Как показала практика, дешевые непромышленные енкодеры им страдают. (Хотя и пара триггеров в россыпи вполне должны справляться…).

Я сейчас в экспериментальном варианте сервоконтроллера применяю такую схему.
Преимущества перед аналогичными схемами, на мой взгляд, заключаются в следующем - на входах установленны для уменьшения дребезга аналоги триггера Шмита (DD1.1 и DD1.2) с возможностью регулирования «ширины окна» и временем фильтрации шумов (RC-цепочками), сигнал прерывания возникает только во время «правильных» переходов (т.к. переходов с энкодера с 00 на 11, с 01 на 10 или наоборот не может быть, то за счёт применения элемента DD1.3 «Иск. ИЛИ» обеспечивается дополнительная защита от «ложных» переходов и повышается быстродействие, т.к. МК лишний раз «не отвлекается» и не надо в п/программе проводить это сравнение) и всё это реализуется на одном корпусе К561ЛП2, да ещё 1 элемент остаётся. И надо только один вход прерывания, настроенного на любое изменение уровня. Следует учитывать, что кодировка при этом меняется.
Если кто захочет применить, то вот исходник подпрограммы обработки прерывания от энкодера.

INT_Encoder.zip

arisov77

Вот ещё некоторые мои размышления.
Сейчас при экспериментах над новым вариантом прихожу к выводу, что предыдущем варианте схемы (сообщение №161) в узле токоограничения (когда отключение тока производиться по входу IN, а не по SD драйверов IR2184), я сам того не желая, получил «подобие» ШИМ контура стабилизации тока.
При «выставлении» подстроечным резистором R33 «Current Limit» момента, когда при реверсе происходит «подмигивание» HL3 “Over Currect” то останов двигателя происходит точно, без «выбега» и настройка привода, такое ощущение, что производиться легче.
При прерывании тока по входу SD «выбег» значительно увеличивается и практически приходиться увеличивать порог срабатывания защиты, чтобы не было «подмигивания» светодиода. При этом ток через двигатель не ограничивается, происходит только ограничение максимального тока через транзисторы.
Получается, что мой вариант токоограничения, в плане улучшения позиционирования – неплох. Но со своим одним большим недостатком, про который я уже писал (в середине 198 сообщения) – нет защиты «нижних» по схеме транзисторов в момент их одновременного открытия от тока самоиндукции двигателя.

Сейчас читаю много «умных» книг по электроприводу и везде написано, что для более точного позиционирования необходим второй контур стабилизации тока двигателя.
На картинке, которую я приводил в сообщении № 282, как я понял, стабилизация тока (контроль вращающего момента - Тorque control) есть не во всех сервоконтроллерах. Также во многих нет защиты от короткого замыкания (Short circuit protection). Надо над этим поработать. 😃

9 days later
КСВ

" …Сейчас читаю много «умных» книг по электроприводу и везде написано, что для более точного позиционирования необходим второй контур стабилизации тока двигателя…"

Arisov 77, двухконтурное регулирование применяется в приводах не всегда.Пример – промышленный, очень даже не плохой, чешский привод " Мезоматик".У нас они стоят на довольно точных обрабатывающих центрах и мы ими, в принципе, довольны," динозаврики", но ещё работают. “Выбега” в приводах подач вообще быть не должно.Если интересно, описание здесь:
depositfiles.com/files/mx233w5vc