Усовершенствованный сервопривод Чена
…
Прибавляя постепенно частоту на входе Step находим максимум.
Чуть не в тему.
Я сначала сделал так: поставил 2313 чисто как счетчики как енкодера, так и степа. Основная мега имеет сервоцикл 10кГц, опрашивает счетчики, вычисляет рассогласование, считает ПИД и вычисляет ШИМ.
Потом первую часть размножил и 10 каналов зашил в ФПГА, причем на входе енкодера стоит 8-уровневый фильтр дребезга. Как показала практика, дешевые непромышленные енкодеры им страдают. (Хотя и пара триггеров в россыпи вполне должны справляться…).
Вместо двигателя на выходе сервоконтроллера установливается генератор управляемый напряжением (ГУН). Сглаживающей RC-цепочкой («сглаживает» ШИМ) по входу ГУН можно в небольших пределах имитировать инерцию системы.
Imho, с реальным двигателем будет проще:
- у ГУН нет частоты = 0, а с энкодера при стоящем двигателе сигнал не идет.
- подобрать параметры фильтра ГУН для имитации реакции двигателя будет не проще, чем настроить реальную систему - просто интегратором там не обойтись.
Я сначала сделал так…
Я всё таки не понял, а по какому признаку находиться максимум?
Imho, с реальным двигателем будет проще:
- у ГУН нет частоты = 0, а с энкодера при стоящем двигателе сигнал не идет.
- подобрать параметры фильтра ГУН для имитации реакции двигателя будет не проще, чем настроить реальную систему - просто интегратором там не обойтись.
Тоже считаю, что проще и достовернее результат, если двигатель и энкодер с повышенным разрешением есть в наличии.
Я планировал, преобразователь (ГУН с формирователем квадратурных сигналов) «запихнуть» в МК. Измерять АЦП и преобразовывать в А и В. Как вариант, с МК можно измерять не напряжение, а ширину импульса ШИМ на выходе сервоконтроллера. «Математикой», если понадобиться, «вывести в ноль».
Как показала практика, дешевые непромышленные енкодеры им страдают. (Хотя и пара триггеров в россыпи вполне должны справляться…).
Я сейчас в экспериментальном варианте сервоконтроллера применяю такую схему.
Преимущества перед аналогичными схемами, на мой взгляд, заключаются в следующем - на входах установленны для уменьшения дребезга аналоги триггера Шмита (DD1.1 и DD1.2) с возможностью регулирования «ширины окна» и временем фильтрации шумов (RC-цепочками), сигнал прерывания возникает только во время «правильных» переходов (т.к. переходов с энкодера с 00 на 11, с 01 на 10 или наоборот не может быть, то за счёт применения элемента DD1.3 «Иск. ИЛИ» обеспечивается дополнительная защита от «ложных» переходов и повышается быстродействие, т.к. МК лишний раз «не отвлекается» и не надо в п/программе проводить это сравнение) и всё это реализуется на одном корпусе К561ЛП2, да ещё 1 элемент остаётся. И надо только один вход прерывания, настроенного на любое изменение уровня. Следует учитывать, что кодировка при этом меняется.
Если кто захочет применить, то вот исходник подпрограммы обработки прерывания от энкодера.
Вот ещё некоторые мои размышления.
Сейчас при экспериментах над новым вариантом прихожу к выводу, что предыдущем варианте схемы (сообщение №161) в узле токоограничения (когда отключение тока производиться по входу IN, а не по SD драйверов IR2184), я сам того не желая, получил «подобие» ШИМ контура стабилизации тока.
При «выставлении» подстроечным резистором R33 «Current Limit» момента, когда при реверсе происходит «подмигивание» HL3 “Over Currect” то останов двигателя происходит точно, без «выбега» и настройка привода, такое ощущение, что производиться легче.
При прерывании тока по входу SD «выбег» значительно увеличивается и практически приходиться увеличивать порог срабатывания защиты, чтобы не было «подмигивания» светодиода. При этом ток через двигатель не ограничивается, происходит только ограничение максимального тока через транзисторы.
Получается, что мой вариант токоограничения, в плане улучшения позиционирования – неплох. Но со своим одним большим недостатком, про который я уже писал (в середине 198 сообщения) – нет защиты «нижних» по схеме транзисторов в момент их одновременного открытия от тока самоиндукции двигателя.
Сейчас читаю много «умных» книг по электроприводу и везде написано, что для более точного позиционирования необходим второй контур стабилизации тока двигателя.
На картинке, которую я приводил в сообщении № 282, как я понял, стабилизация тока (контроль вращающего момента - Тorque control) есть не во всех сервоконтроллерах. Также во многих нет защиты от короткого замыкания (Short circuit protection). Надо над этим поработать. 😃
" …Сейчас читаю много «умных» книг по электроприводу и везде написано, что для более точного позиционирования необходим второй контур стабилизации тока двигателя…"
Arisov 77, двухконтурное регулирование применяется в приводах не всегда.Пример – промышленный, очень даже не плохой, чешский привод " Мезоматик".У нас они стоят на довольно точных обрабатывающих центрах и мы ими, в принципе, довольны," динозаврики", но ещё работают. “Выбега” в приводах подач вообще быть не должно.Если интересно, описание здесь:
depositfiles.com/files/mx233w5vc
Спасибо, за инфу, этой у меня ещё не было.
Я с " Мезоматик" дело не имел. Ремонтировал только «КЕМТОР», «КЕМРОС» и ЭТШР и ещё какие-то «мелкие» тиристорные регуляторы.
На стр. 203, того описания которое Вы дали, написано - ….Это особенно характерно для привода «Мезоматик», имеющего худшие динамические характеристики по сравнению с другими приводами (Кемрон, ЭТУ3601, ЭТ6С).
Это я к тому, что одноконтурные привода тоже имеют право на жизнь и применяются в серьёзных промышленных станках.Динамика особенно необходима там, где нужно чётко согласовывать два движения и очень точно выдерживать скорость подачи, например, при нарезании резьбы на токарном станке с ЧПУ. Там надо чётко попадать в нитку резьбы и очень точно выдерживать шаг, т.е. скорость . " Мезоматики" стоят ещё и на фрезерных станках типа ГФ. Arisov77, вот ВАМ ещё немного информации, может будет интересно. Качество не очень, но разобраться можно. Здесь есть и промышленный транзисторный привод ЭШИР с ШИМ.
depositfiles.com/files/vlibq3f97
Кто понимает по английски, послушайте как работает новый магнитный энкодер от компании CUI. Продается в digikey.com за 30$. Судя по цене доступное и дешевое решение для энкодера двигателя.
boldive,проверьте,пожалуйста ссылку,не рабочий сайт? dkc1.digikey.com/ca/en/tod/CU...TEncoders.html
2Виктор Петрович
ссылка boldive живая и со звуком (просто показана сокращенно), ваша - скопипастенная неправильно (наведите мышку без нажатия на обе - увидите разницу)
А как вам такой сервоконтроллер www.quantumservo.com/English.htm
Правда от Чена здесь ничего нет.
А как вам такой сервоконтроллер www.quantumservo.com/English.htm
Правда от Чена здесь ничего нет.
Что-то цены у них неправильные, интересно, на кого расчитаны?
Вот готовый комплект www.dmm-tech.com/Pricing.html по этому поводу.
Что-то цены у них неправильные, интересно, на кого расчитаны?
Вот готовый комплект www.dmm-tech.com/Pricing.html по этому поводу.
250 баксов просто супер цена мне кажется.
не очень понятно почему более слабый комплект дороже.
Читал с огромным интересом. Я использую DC сервомотор с энкодером 1000 и Геко 320.
Немног о геке. При использовании энкодера он считает фронты с энкодера как нарстающие так и спадающие. То есть реально дает 4000 позиций на оборот. Моя схема управляющая двигателем примерно стакой частотой и дает импульсы для управления двигателем на геку. То есть почти до 200 кГц. (скорость движка до 3000 об/минуту). И в принципе меня почти все устраивает. Но!!!
А вот теперь об этом самом но. Движок поет. То есть когда он стоит он урчит себе. Причем урчит достаточно громко. И это меня добивает. В некоторых системах при останове двигателя на него ничего не подается. В других при остановки на движок подается напряжение то в одну сторону то в другую. Теоретически при этом движок должен стоять, но это не так. На сколько я помню в первой версии чена было раздельное управление шимами для разного направления,и в точке останова движок практически обесточивался. Именно такая система применяется в современных принтерах. То есть движок повернулся и все. Дальше его хоть руками вращай. В этом смысле вариант чена меня устраивал. А вот скорость его работы - категорически нет.
Теперь я так понимаю со скорость все нормально но вот движки опять поют?
А вообще проект пора переносить на ATxmega.
… Теперь я так понимаю со скорость все нормально но вот движки опять поют? А вообще проект пора переносить на ATxmega.
Со скоростью пока “непонятки”, пока измерить максимальную “скорострельность” этого сервоконтроллера “руки не доходят”. Скорость у UHU по «паспорту» достигает 250кГц, но это с кварцем на 24МГц, а этот работает на 16МГц, так что скорость будет ниже. Движки не поют. С прошивкой smc2 (которая сейчас используется) действительно раздельное управление ШИМ для каждого направления. При останове, всё равно полного отключения не происходит. Я ставил светодиоды на направление и видно, что при останове практически всегда один из светодиодов (в зависимости от заданного предыдущего направления) светиться. Руками можно «довести» (+/-1шаг) до полного погашения светодиодов, но вал, как Вы написали «хоть руками вращай» - вращать не получится, т.к. «сработает» основная задача сервоконтроллера – компенсация рассогласования. В момент когда двигатель остановлен и светодиод направления светиться на выходе соответствующего ШИМ присутствуют «короткие» иголки (возможно их когда то stano4nek rcopen.com/forum/f110/topic40981/171 принял за паразитные). Я предполагаю, что это связанно с тем, что этого короткого импульса недостаточно по амплитуде для двигателя, чтобы установиться в нулевое положение и поэтому не происходит полного отключения ШИМ и погашения светодиодов.
С прошивкой smc3 (с которой обычно все и повторяют оригинальный Ченовский вариант) ШИМ формируется, также как в Gecko, UHU и во многих других сервоконтроллерах, т.е. по очереди сначала в одном, потом в другом направлении. В режиме «Стоп» ШИМ 50/50, а при вращении это соотношение меняется в зависимости от направления. Я пробовал и с этой прошивкой, но мой движок при останове и с ней не «поёт», но звук от него при движении другой (более низкий, рокочущий, хотя частота ШИМ с кварцем 16МГц – 31,25кГц). Звук мне больше понравился с smc2 😃. С smc3, на мой взгляд - больше помех, выходные полевики сильнее греются, у двигателя визуально максимальные обороты меньше. Но позиционирование, опять же на мой взгляд, происходит немного «жестче», т.е. то что и надо сервоприводу. Видимо поэтому Чен и применил в smc3 такое формирование, несмотря на все достоинства способа с раздельным ШИМ.
Кстати с этой прошивкой светодиоды индикации направления тоже не гаснут при останове. Более того с прошивкой «как есть» двигатель при останове «дёргается», пытаясь компенсировать это небольшое рассогласование и настроить сервоконтроллер мне не удалось (пока не изменил программу). Возможно поэтому, те кто повторил оригинальный Ченовский сервоконтроллер с прошивкой smc3 и получили разочарование в его работе.
Я здесь (rcopen.com/forum/f110/topic40981/223) и на cnczone.com выкладывал прошивку под AtMega48. Она в реальном сервоконтроллере не работает (а AVRStudio-всё o’k) - ошибся с размером памяти при очистке RAM.😦
Выкладываю проверенные «на столе» 2 версии с кварцами на 16МГц и 20МГц:
- version_v3.4 (for AtMega48 = 16MHz) – в ней ограничил пределы изменения ШИМ до +/-240 усл.ед., для более надёжной работы драйверов с бутстрепными кондесаторами.
- version_v3.5 (for AtMega48 = 20MHz) – дополнительно к предыдущему изменению уменьшил частоту ШИМ до 19,5кГц, чтобы уменьшить потери на переключение (нагрев) полевиков.
Fuse-биты для AtMega 48 с кварцевым (не керамическим!) резонатором под CodeVision и PonyProg в архиве.
По поводу использования ATxmega – сравните цены, доступность, количество ног на неё и на AtMega48. Думаю, для этого варианта сервоконтроллера AtMega48 будет «самое то»!😃
На cnczone.com Миша 😃 (Michael = krazatchu) из Южной Кореи разработал платку под этот вариант сервоконтроллера. Вот фото этой платы, остальное можно скачать c www.cnczone.com/forums/showthread.php?t=69640&page… (у меня на этом форуме уже ограничения по объему закачки). Платка на мой взгляд очень неплохо разведена. Но он переделал немного схему (исключил опторазвязку и защиту от превышения тока) и этот вариант лучше всего подходит для низковольтных «слабеньких» двигателей.
Он планирует эти платы продавать. В переписке с ним я давал ему несколько вариантов прошивки для AtMega8, но все они «пошли» плохо. Так же он заметил, что был «слёт» EEPROM. С AtMega88, как он написал - работает отлично. И у меня с начала этого года в процессе эксплуатации 2 сервоконтроллеров на AtMega88 «слёта» EEPROM ни разу не было.
Получается, что все мои ухищрения направленные на устранение «слёта» EEPROM в AtMega8 были напрасны. 😦. Как писал Художник на одном из форумов и мне в переписке, настоящий автор модернизированного Ченовского сервоконтроллера и программы настройки ServoTunning - Александр Карсакбаев (а не Художник, хотя они и были «связанны») для устранения этой «бяки», с AtMega8, надо установить внешний Brown-out Detection, например MC34064D-5.
Servo_Mg48_16Mhz_v3_4.zipServo_Mg48_20Mhz_v3_5.zipFuse_AtMega48.zip
Я ковырял серво управление На струйном принтере Эпсон 4400. Там раздельное шим формирование на серводвигателях. Для себя я сделал вывод что мне тоже нужно раздельное. Так что прийдется ковырять smc2.
xMega - 6$-8$
Мега88 - 2$
Разница 4-6$ на стоимости конечного устройства особой рояли несыграет. (А в моем случае вообще пофиг ±50баксов).
но зато иксмега не только в почти два раза быстрее, но еще можно завести на прерывания не только по Step но и по энкодеру оба канала.
Но это все лирика.
Если честно, то меньше всего я хотел заниматься разработкой собственного серво контроллера. Но кажись увы прийдется.
Немного о геке. У геки допустимая ошибка ±127 шагов. С точки зрения разработчика есть некоторое предположение что если при управлении двигателем ошибка больше 127 шагов то значит вы неправильно управляете двигателем. То есть пользователь должен правильно настроить характеристики разгона, торможения двигателя и т.д. В чем-то они правы. Мне пришлось немало поработать чтобы настроить свою программу так, что и иметь максимальный разгон/торможение/скорость и при этом ошибка не привышала 127.
А теперь о главном. Откуда взялась эта цифра ±127. Все очень просто. На обычной логике типа нашей 155 серии (ну их соотвественно 74…) сделан вычислитель ошибки с энкодера и сигналов степ/дир. И максимальная частота определяется максимальной частотой этой самой логики. там буквально 3-4 корпуса микросхем. И на выходе имеем ту самую дельту X с которой и проделываем все операции по PID алгоритму. Ну и соотвественно все упирается в то, что эта самая логика 8-ми битная. Хотя ее легко расширить в 16 бит.
То есть. Если мы разгрузим процессор от необходимости общитывать дельта х, и вынесем это на некотурую внешнюю схему, то мы получим за недорого гарантированно высокую скорость обработки сигналов энкодера и сигналов степ. Эту внешнюю схему можно реализовать как на рассыпухи, так и на ПЛИС или отдельном процессоре.
При этом в эту-же схему можно внести возможности по умношению шагов, ну или там передаточного числа. Схемку такого плана я могу сделать за пару дней. Но вот ковырять программу чена я повешусь. То есть идея у меня такова. Выкинуть из программы обсчет энкодера и т.д. и тупо брать значение дельта х из какого-нибудь порта. Напрашивается порт D но там RX/TX мешает. Порт С- слишком мало разрядов. Уже поглядываю на 32 мегу.
arisov77 Если я сделаю внешний счетчик, сможете подправить прошивкой smc2 так, что-бы она использовала внешний счетчик?
Что-то цены у них неправильные, интересно, на кого расчитаны?
Вот готовый комплект www.dmm-tech.com/Pricing.html по этому поводу.
Попробую купить на следующей неделе.
Сижу и думаю. А какого собственно говоря изобретать велосипед.
Надо просто померить реальную скорость текущей версии контроллера.
для этого надо установить предел по ошибке ну например 32 (или 128/256) то есть не очень большую. С внешнего генератора подать частоту STEP. и через схемку с этого же генератора синхронно генерить эмуляцию сигналя A/B с энкодера. Увеличиваем частоту и в какой-то момент (когда проц уже не сможет успевать обрабатывать сигналы) он встанет по ошибке.
А дальше уже думать чо делать.
Попробую на выходных повозиться.
Вот еще мысль. Почемубы не скрестить ужа с ежом. То есть в одну схемку завести и экодер и Step/dir и процессор дергать только по двум прерываниям Увеличение/уменьшение дельта х.
О. Победил Геко. Короче проблема была в том, что стоял высокое (для моего двигателя) значение GAIN/DAMP. Уменьшил примерно до 15-20% (по умолчанию стояло примерно 30%) и движок замолчал.
А на синхронном серводвигателе слабо сделать сервопривод?
…Моя схема управляющая двигателем примерно стакой частотой и дает импульсы для управления двигателем на геку. То есть почти до 200 кГц. (скорость движка до 3000 об/минуту)…
А чем управляете? Какие программы могут управлять несколькими осями через LPT-порт с частотой 200кГц на каждую ось?
arisov77 Если я сделаю внешний счетчик, сможете подправить прошивкой smc2 так, что-бы она использовала внешний счетчик?
Подправить могу, но гарантировать работоспособность не смогу, потому что уже не раз убеждался – не имея под рукой «реального» устройства, «виртуально» очень трудно написать «правильную» программку. А Proteus-ом для визуализации отладки, я ещё не научился пользоваться, да и как то особо не доверяю результатам таких моделирований.
А чем управляете? Какие программы могут управлять несколькими осями через LPT-порт с частотой 200кГц на каждую ось?
У меня не фрезерный станок, а принтер. Управление от своей схемы на AVR-ках. Для получения нужной скорости стоит несколько процессоров, каждый из которых занимается своей задачей. За движение отвечают две меги88.
Принтерный порт тут не причем.
Собственно не стал приставать со схемой, так как геки уже месяц работают без нареканий, и от добра добра не ищут.