Усовершенствованный сервопривод Чена
Морду после будим бить ЧПУ хочу
Народ, лучший способ борьбы с этими “болтами”(а как вам жаргонное:“А болт тебе!”?) так это полный игнор. Как модератор форума, о котором упоминал valmish, подтверждаю, доболтился парень. Забанили. Как осенняя муха - ну спасу прям нет…
ЧПУ хочу
приезжай смотри
bolt:“…Управляя от step-dir вы разгоняете и тормозите сервопривод на каждом шаге, т.е. постоянно дергаете конструкцию, как и при использовании ШД…”😂😂😂
Извините, господа, не выдержал.Указанная выше цитата говорит о вопиющем незнании принципа работы следящих сервоприводов, управляемых по step,dir.То, что сервопривод тормозит и разгоняет двигатель на каждом шаге это полнейший бред.
Arisov77,не обращайте внимание на таких людей.Это некомпетентность плюс,возможно, зависть.Лично я восхищён проделанной Вами работой и той информацией, которой Вы поделились с народом, и машину, на которую Вы установили изготовленный Вами сервопривод,хорошо знаю.Это далеко не любительский станок, поэтому и характеристики у привода должны быть не хилые.Удачи Вам!
На мой взгляд, в этом проекте схемотехника не отработанна. Развитие этого проекта здесь www.cnczone.com/forums/showthread.php?t=40940 . Но опять же нет опторазвязки и рассчитана на низковольтные двигатели.
Вот его и решил повторить.Dspic30f4012 не нашел.Пришлось переделать
на Dspic30f3010.Вместо оптотранзисторов поставил Hcpl2601.Ncp5106
заменил Ir2101.На первый взгляд вроде работает.Собрал только вчера
так что подробнее если кому интересно немного позже.
Спасибо, всем за поддержку. 😃
Тогда в продолжении темы «выкладываю»:
Возможные неисправности и способы их устранения, рекомендации:
-
Если при позиционировании положение вала всегда неточное, а иногда после старта совсем не останавливается, то неисправность может быть из-за наводок на цепи энкодера.
Самый простой способ устранения – это соединить корпус двигателя с минусом источника питания (у меня так сделано). Можно также использовать экранированный провод, витую пару (в экране и без него), провода пропущенные несколько раз через ферритовое кольцо, ферритовые бусинки на каждый провод.
При использовании экранированного провода – экран припаивается к «земле» (общему проводу) только с одной стороны, лучше со стороны сервоконтроллера. При монтаже надо стараться как можно дальше располагать друг от друга провода от двигателя и энкодера.
Возможные схемы согласования можно посмотреть здесь www.skbis.ru/index.php?p=20 .
Хорошо должны помочь в борьбе с помехами – дифференциальные пары приемник/передатчик сигналов линий связи www.chipfind.ru/datasheet/ldrv/1.htm .
www.gaw.ru/html.cgi/txt/interface/lvds/lvds.htm (небольшое описание принципа работы).
Так, например, сделано в модификации UHU www.c-n-c.cz/download.php?id=1957
Но в этих случаях желательно использовать энкодер с дифференциальном выходом.
Все выше описанные рекомендации в основном рассчитаны на «высоковольтные» (110В) двигатели, т.к. помех от ШИМ с ними гораздо больше. -
Если в одну сторону позиционирование точное, а в другую – с большой, всегда непостоянной погрешностью и в программе ServoTuning при считывании текущей позиции величина перемещения совпадает с заданной, то неисправность может оказаться в энкодере. У меня такое было с самодельным энкодером, в качестве датчиков в котором я использовал 2 щелевые оптопары оптопары PRI-246 www.rtcs.ru/hwsubtype.asp?id=195 (подобные оптопары можно найти в 3,5” дисководах). Я случайно немного изменил расстояние между оптопарами и произошел сдвиг фаз между каналами.
Для настройки расстояния между оптопарами я использовал индикатор на 2 светодиодах (с буферным «усилителем» на CD4093 или К561ТЛ1) и при вращении диска энкодера добивался «стандартной» комбинации: 00 <-> 01 <-> 11 <-> 10 и так «по кругу» (0 – не «горит», 1 – «горит»). -
Если при позиционировании в одну сторону точно, в другую переход (или недоход – уже точно не помню куда) на 1 шаг при управлении по Step/Dir, а при задании через ServoTuning всё нормально, то неисправность может оказаться в импульсном блоке питания. У меня такое произошло в одной плате после увеличения площади сердечника (два кольца М2500НМС1 К16х8х6). В другой плате после такой же переделки всё работало нормально. При подключении обычного внешнего БП точность позиционирования восстанавливалась. Отмотал 2 витка от вторички импульсного транса и тоже всё стало O’k. В чём была причина, так и не понял, напряжение на выходе ИИП было 16В, от внешнего БП подавал 17В и всё работало. Возможно «глюк» был из-за большего уровня ЭМИ.
-
При использовании «мощного» двигателя силовые дорожки на печатной, по которым протекает ток двигателя желательно «усилить» - с помощью припаивания по всей длине дорожки медного одножильного провода.
-
Для уменьшения вероятности выхода «из строя» СОМ-порта во время наладки, надо общий провод сервоконтроллера соединить с корпусом компьютера.
Подключать сначала провод к корпусу, а затем разъём к сервоконтроллеру. Соответственно отключать сначала разъём от платы сервоконтроллера и потом провод от корпуса.
И не забывать отключать питание от сервоконтроллера и разряжать входной конденсатор через низкоомный резистор (при высоковольтном питании) во время всех коммутаций. -
После окончательной настройки, желательно «крупные» детали, например электролитические конденсаторы зафиксировать с помощью термоклея и покрыть плату лаком. Т.к. сервоконтроллер обычно расположен рядом с двигателем и в этом месте повышенная вибрация и возможно попадание мелкой металлической пыли, например в фрезерном или плазменной резки станках. При покрытие лаком надо постараться «не залить» разъёмы и клемники.
Надеюсь, приведённые советы помогут от лишней «нервотрёпки» которую я испытывал, когда иногда по нескольку дней выискивал эти неисправности.
Если, что ещё вспомню – напишу.
Zon, ждём результатов. Я тоже хочу попробовать как нибудь при возможности на dsPIC30F2010.
А вот здесь dsPIC Servo пример ременной передачи, про которую «говорил» boldive.
Я думаю можно применить ремешок и шестерёнки от стиральных машинок, в какой-то видел похожее. Можно такие поспрашивать у ремонтников стиралок.
Zon, ждём результатов. Я тоже хочу попробовать как нибудь при возможности на dsPIC30F2010.
В dsPIC30F2010 точно не влезет.Слишком мало памяти.
В dsPIC30F3010 осталось свободно байт 20 и то только
после сокращения всех подсказок которые выводятся на экран.
Ну и еще следующий проект который +/- 10в. Вот тут уже можно
поставить любой двигатель нацепив на него енкодер
Честно говоря на объём не смотрел. Я хотел, что-то своё написать (но это далёкие планы, которые возможно и некогда не осуществляться), без лишних наворотов, к тому же тот проект на Си написан, а ним как известно, памяти МК немного больше затрачивается.
Посмотрим, какую скорость Мас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 задавал этот вопрос, но ответа не получил.
я бы повесил бы на вал мотора независимый энкодер и снимал бы с него показания считая например счетчиком. задавал ровное колличество импульсов на севоусилитель с увеличением частоты до достижения несовпадения показаний.
Я для подобных измерений собрал простую схему, на входы 2-х прерываний завел энкодер, прога орабатывает прерывания, одно с плюсом другое с минусом, результат на порт со светодиодами (использовал AVREASY), движок раскручивал до появления ошибок - результат очень наглядный.
Всем спасибо.
Совет STEPMOTOR мне понятен, только у меня нет пока энкодера с высоким разрешением (возможно, скоро появиться с 2 400имп/об), но тогда и двигатель надо чтобы мог до 5000 об/мин «разгоняться», которого тоже нет (хочется чтобы было не хуже чем UHU и Gecko320, 340, выше, как уже писал - не надо + небольшой запас). Кстати, энкодер, я думаю не обязательно независимый, можно «брать» с основного и сравнивать со Step.
Совет mura, мне немного не понятен, наверное Вы неточно написали. Прерывания «идут» по А и В энкодера? Если одно прерывание по энкодеру, а другое по Step, то тогда всё «становится на свои места». Опять же надо механическую систему, которая может ограничить результат.
Как нибудь “электронным” способом нельзя?
Совет mura, мне немного не понятен, наверное Вы неточно написали. Прерывания «идут» по А и В энкодера? Если одно прерывание по энкодеру, а другое по Step, то тогда всё «становится на свои места». Опять же надо механическую систему, которая может ограничить результат.
A на INT0 и одновременно на INT1, B по вкусу.
прерывание по INT0 обрабатывает энкодер и результат накапливает в перевенной
прерывание по INT1 обрабатывает энкодер и результат накапливает в той же перевенной, но с вычитанием . На каждый импульс от энкодера 0-прерывание даст +1, а 1-е даст -1, и мы получим 0 в итоге, на малых скоростях так и выходит, а вот при увеличении скорости начинает накапливатся ошибка.
Получается INT0 и INT1 запараллелены? Если это так, то одновременно «выставляются» 2 флага, в порядке очередности (у AVR) первым обработается INT0 (Poz+), затем INT1 (Poz-). И что это даёт? Допустим прибавляем постепенно частоту на входах, достигаем порога, когда импульсы не смогут считаться, но они не будут считываться одновременно по обоим входам-прерываниям. Что-то я не «догоняю».
Также нужно в сервоконтроллере ещё Step опросить и учесть, что в промежутках между прерываниями от Step и энкодера МК должен успеть рассчитать значения ПИД.
Может это всё просто элементарно подсчитывается: время на обработку INT0 + INT1 + время расчёта ПИД + небольшой запас? Но тут опять «грабли» - во время расчета ПИД МК «отвлекается» на прерывания и если прерывания слишком частые, то время на расчёт может не остаться. Как найти, измерить или высчитать эту грань? И чтобы все импульсы с входов «захватить» и чтобы время на расчёт (реакция на изменения) осталось?
Механический способ, наверное всё-таки самый надёжный, но очень не удобный и не всегда выполнимый.
Вот для примера сравнительные характеристики некоторых сервоконтроллеров
У некоторых “Max step rate” до МГц доходит. Как они этот параметр определили?
Сделал видеоуроки (попросили на 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 Кгц, то это и будет максимальная частота для этой системы. Но, чем выше частота, при которой напряжение на двигателе достигает номинального – тем лучше ( особенно для приводов подач ).
Спасибо, мысль понял – параллельно сервоконтроллеру подключить независимый аппаратный реверсивный счётчик показывающий рассогласование. Идея интересная, т.к. при этом можно точнее измерить частоту, чем если использовать «внутренние» ресурсы МК. Но опять всё «упирается» в быстродействие механической системы.
Сегодня мне пришла идейка, как измерить быстродействие сервоконтроллера без механической системы. Я здесь electronix.ru/forum/index.php?s=&showtopic=59827&v… уже поделился с профессионалами, пока жду отзывов.
Поделюсь её и здесь, может кто-то выскажется на счёт этого способа.
Вместо двигателя на выходе сервоконтроллера установливается генератор управляемый напряжением (ГУН). Сглаживающей RC-цепочкой («сглаживает» ШИМ) по входу ГУН можно в небольших пределах имитировать инерцию системы. «Крутизной» ГУНа - разрешение энкодера. Светодиод горит когда нет рассогласования, при превышении +/-1 Step – гаснет, но можно и наоборот (это рассогласование определяю программно).
Прибавляя постепенно частоту на входе Step находим максимум.
Здравствуйте!
Прочитав всю тему здесь и на cnczone.com, очень заинтересовался. Так как делал приводы только на шаговых, возникли вопросы.
Для чего нужна прога ServoTuning, без нее драйвер сразу работать будет или нет? Я понял, что она нужна чтобы узнать предельные параметры драйвера или это не так. В архиве ServoCode_AtMega88, три папки с прошивками - Servo_int_AtMega88, ServoFinishInt_AM88, ServoUART_AM88, для чего какие нужны?
Без ServoTuning (дословный перевод - серво настройка) работать не будет. Вернее драйвер работать будет, но не так как надо. ServoTuning нужен пару раз для настройки привода, впослествии ServoTuning и соотвественно внешний преобразователь RS232/UART (Rx-Tx) будут не нужны.
Лучше всего использовать конструктив pájač (Jozefp) rcopen.com/forum/f110/topic40981/211 (сообщение №198) и внизу там есть прошивочка в архиве Servo_AtMega88_CompInt_Modif.zip.
Без ServoTuning (дословный перевод - серво настройка) работать не будет. Вернее драйвер работать будет, но не так как надо. ServoTuning нужен пару раз для настройки привода, впослествии ServoTuning и соотвественно внешний преобразователь RS232/UART (Rx-Tx) будут не нужны.
Так я и предполагал.
Скажите, а где подробней почитать о настройке привода с прогой ServoTuning, в какой последовательности что делать и чего добиваться.
Я хочу попробовать применить серво вместо шаговика.
А вы не хотели, бы подробно описать как с этой прогой работать, хорошо у вас получается. Конечно, времени катастрофически не хватает всем, но какая польза, для тех кто впервые сталкивается с этой прогой.
Скажите, а где подробней почитать о настройке привода с прогой ServoTuning, в какой последовательности что делать и чего добиваться.
Начиная с сообщения №96 rcopen.com/forum/f110/topic40981/109 этой ветки форума.
Вообще, конечно, надо бы снять видеоурок, но как обычно “руки не доходят”. Ничего сложного в настройке нет. “Не боги горшки обжигают” 😃