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

Creolka

У меня тоже будет, правда не знаю пока 1:2 или 1:3.
Шаг винта 4мм. Возможно что и не понадобится.

arisov77
chkmatulla:

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

Ток ограничения надо выставлять чуть меньше максимального. Иначе никакой динамики. В данном контроллере, в отличии от UHU (если не ошибаюсь), ток через двигатель и транзисторы при покое прекращается совсем. И следовательно, они в этот момент не греют атмосферу. При этом нижние транзисторы открыты - как бы происходит притормаживание через них. Если не трудно посмотрите в UHU контроллере, какое напряжение на 16 выводе (PB4) микроконтроллера в покое. Если около 0В, то драйвер включен и тогда действительно ШИМ 50/50.
Путём эксперементов выяснил, что если в Mach выставляешь максимальное ускорение и максимальную скорость, то даже при малейшем прикосновении к валу двигателю (при нагрузке) контроллер переходит в состояние Error (при установке 1/4 от числа имп/об и с алгоритмом, который я описывал ранее). И если поставить ещё меньшее значение, то уже при старте (при разгоне) происходил сбой. При увеличении числа шагов до равного числа имп/об. контроллер переставал отключаться, но тогда защита становилась “грубее”.
Поэтому изменил алгоритм: если нет импульсов по Step, а выход ШИМ включен и рассогласование превышает 3 шага, то запускается таймер и если в течении 12 сек. импульсы со Step не поступят или двигатель не достигнет нужной позиции, то в Error. Если рассогласование достигнет 20 000 шагов раньше 12 сек, то в Errorr – сразу, без задержки. Пока оставлю эти значения, думаю, что для большинства применений они сгодятся.

chkmatulla

В контроллере UHU на 16 ножке 4,88 вольта. ШИМ включен. Об этом написано и на схеме 1= Endstufe ein.

arisov77
chkmatulla:

В контроллере UHU на 16 ножке 4,88 вольта. ШИМ включен. Об этом написано и на схеме 1= Endstufe ein.

Да я ошибся, при лог.1 разрешена работа вых. ключей.

Zon:

Андрей как человек разбирающийся в программировании что можно сказать вот по этому контроллеру собран на dspic30f4012 usinages.com/carte-servos-a-dspic-t648-165.html

Я с немецким, французским и Си не особо силён. Иногда, быстрее получается свою программку написать, чем разбираться с другой и гадать, что автор хотел «изобразить». Я с Чено-Художнивской только недавно разобрался, так что ничего Вам сказать не могу. Теоретически должна лучше, т.к. МК «заточен» под управление двигателями и имеет «на борту» квадратурный кодер. Если не трудно переведите в картинку и выложите здесь схему этого сервоконтроллера.

stano4nek

уважаемый arisov77!

Подскажите пожалуйста по своей прошивке. Наблюдается такая картина.

  1. Прошиваю вашей прошивкой - в режиме ШИМ, как я уже писал, скорость двигателя меняется наоборот. Если смотреть осциллографом - то на одном плече Н моста импульсы пропорционально меняют скважность - а на другом откудато появляется паразитный прямоугольный импульс с скважностью 0.5 - хотя там должен быть 0 (плечо на земле).

  2. Прошиваю прошивкой Художника - все прекрасно работает.

  3. После прошивки Художника, прошиваю вашей (без выключения питания) - ваша тоже отлично работает! Но стоит включить и выключить питание - ваша прошивка перестает работать.

Ситуация какаято абсурдная. Толи прошивка Художника чтото выставляет в памяти и ваша подхватывает, а когда выключается питание - эти настройки пропадают. Никак не пойму. Хотя я пробывал дописывать код который чистит все память - не влияет.
Может у меня чтото аппаратное не так работает, подскажите пож варианты поиска, или может вы сами сталкивались с этим.

arisov77

Наводящие вопросы:
Прошивка:

  1. С UART - ?

  2. с WatcDog - ?

  3. В режимах “Крутящий момент” и “Скорость” ползунок также влияет, или только всё таки в режиме “ШИМ” -?

У меня отличается инициализация портов. У Вас в схеме ничего к другим выводам не подключенно? Непосредсвенно на выходе МК тоже паразитный импульс? И это в обоих направлениях?

stano4nek
arisov77:

Наводящие вопросы:
Прошивка:

  1. С UART - ?

  2. с WatcDog - ?

  3. В режимах “Крутящий момент” и “Скорость” ползунок также влияет, или только всё таки в режиме “ШИМ” -?

У меня отличается инициализация портов. У Вас в схеме ничего к другим выводам не подключенно? Непосредсвенно на выходе МК тоже паразитный импульс? И это в обоих направлениях?

Смотрите.

  1. Отлично работает оригинальная Художника прошивка. Но есть подвох. Если я начинаю ее ковырять - пусть просто меняю таблицу его прерываний на стандартную (у него не очень красиво сделано, нет компенсации если случайно будет прыжок на неверный адрес) - то после этого прогрмма начинает некорректно работать в режиме скорость - дрожит вал, хотя праметры пида теже самые. В ШИм работает нормально. Это странно, наводит на мысль о том что гдето стоит защита кода по длинне или прочее. Вы с этим не сталкивались когда ее переделывали?
    Эта прошивка работает всегда, не зависимо от выключения питания.

  2. Записываю ваши прошивки из последнего архива с ватчдогом.

  3. Из этого архива прошивка Servo_mega8_int (это от Художника но исправлена таблица прерываний и порчее) - работает как при моих исправления п.1 т.е. ШИМ работает нормально а в режиме скорость - дрожит вал. Работает одинаково и не зависит от питания. не зависит от п.6

  4. Из этого архива прошивка ServoUART - как раз выдает странный лишний импульс ШИМ. зависит от п.6

  5. ServoFinishArtistInt - тоже не работает. зависит от п.6

  6. Но все ваши прошивки запускаются нормально если залить оригинальную Художника (или вашу первую Servo_mega8_int ) и не выключать питаание, а потом ваши ServoUART или ServoFinishArtistInt. При выключении питания они перестают работать.

Железная схема - как у вас, нет разницы. есть светодиоды на ножках 15 16 17. Ножка для INT1 подтянута к + (прерывание это отключено в программе, не используется ли нигде эта ножка случайно???). Потому что INT1 ножка это единственная разница.

Паразитный импульс переходит с плеча на плечо при изменении направления - т.е. это что то программное.
Раз прошивка художника работает можно сделать вывод что железо рабочее или я ошибаюсь?
Да, и к тому же уарт и все регулирование работает. Значит МК не глючит, и проблемы именно гдето в серво части программы.

паразитный импульс я смотрю прямо на ножке микроконтроллера

arisov77

У меня такого никогда не было. Попробуйте «кусками» заменять части программ (константы, инициализация,…). Очень интересно «докопаться» до истины. Защиты кода никакой нет. Попробуйте новый вариант прошивки…

Нет предела совершенствованию…и исправлению ошибок, но надо на чём-то останавливаться.
-----------------------------------------------------------------------------------------------------------------------
Предлагаю к рассмотрению модернизированный вариант усовершенствованного сервоконтроллера.
По схеме и плате:
Оптопару по Step/Dir наверное всё таки лучше использовать сдвоенную HCPL-2631, т.к. по сравнению с двумя H11L1 она займёт немного меньше места на плате, а разница в 20р. здесь уже роли не играет. А за одну только HCPL-2231 мне, например, жалко платить половину стоимости всех комплектующих.
Диоды и резисторы перед входами IN IR2184, которые я раньше ставил для защиты AtMegи от возможного пробоя выходных транзисторов и их драйверов, можно исключить, т.к. у меня при трёх пробоях полевиков «вылетали» только они сами и стабилитроны.
Не помешает установка диода параллельно питанию для защиты от неправильной полярности питающего напряжения - может сберечь кучу дорогих деталей.
Иногда, (на плате с IRFP260) при максимальной нагрузке (удержании вала и увеличенным током защиты) происходил «срыв» движка. Как выяснилось из-за «просадки» напряжения питания драйверов (+12В) до 7-8В. Импульсный трансформатор входил в насыщение. Если кто будет повторять мой вариант конструкции и такое произойдёт, то надо ввести небольшой зазор между половинками ферритового кольца или увеличить площадь сердечника. Я использовал два сложенных вместе кольца (разломленных и склеенных).
Пока проводил «экскременты» - «спалил» единственный COM-порт на компе. Видимо из-за частых «дёрганий» СОМ-шнурка при включенных сервоконтроллере и компе. Пришлось соединяться через преобразователь USB/UART (я использовал переделанный («подтяжка» до 5В) программатор для мобильников UniBOX – с «родными» драйверами). Как говориться, не было бы счастья, да несчастье помогло. Т.к. обычно делают 2-3 комплекта сервоприводов, то логичнее использовать один преобразователь-шнурок и тем самым освободить дополнительное место на плате. У меня с UniBox работает нестабильно, графики сильно «тормозят», через СОМ-порт было гораздо «веселее», но деваться некуда приходиться с ним работать. Возможно с другим преобразователем USB/UART , будет работать лучше. Осторожнее с преобразователями USB/COM, которые выдают +/-12В для стандарта RS-232 - их напрямую к МК подсоединять нельзя!
Добавил «концевики» ограничения хода (к РВ4 и РВ5). Тип контактной группы «концевиков» (нормально-замкнутые (НЗК) или нормально-разомкнутые (НРК)) выбирается с помощью перемычки (джампера) между РВ3 и общим проводом. Если перемычка установлена (U на РВ3=0В) (у меня устанавливается на разъём для программирования), то – НЗК, если перемычка отсутствует (U на РВ3=5В), то – НРК. Для безопасности в промышленных станках, подобные ограничители чаще используются с НЗК.
Одновременное срабатывание «концевиков эквивалентно нажатию кнопки аварийного стопа (EMERGENCY STOP). Переходит в состояние Error с одновременной индикацией этого состояния. Выход из этого состояния через выкл.-вкл. питания, сброс по Reset или в ServoTuning нажатие кн. Стоп или смена режима.
Если «концевики» не используются, то детали их цепи можно не устанавливать. «Подтягивающие» резисторы к РВ3, РВ4 и РВ5 установлены программно в МК.
Выбор типа контактов можно было бы, как вариант, сделать программно в ServoTuning, если бы её код был открыт, но…
С PC4 (pin27) и РС5 (pin28) выводится направление движения. Можно использовать с другим драйвером или «подцепить» светодиодики для индикации. Или через диоды с них можно попробовать использовать сигнал Brake (тормоз). Но иногда выключение одного из этих выходов не происходит, в ситуации когда двигатель останавливается +/- 1шаг контроллер выдаёт слишком малую амплитуду сигнала рассогласования на двигатель и он не «осиляет» крутануть вал до нужной позиции. При этом один из выводов направления активен.
Опрос состояния энкодера (для повышения быстродействия) теперь осуществляется по прерываниям от компаратора (с соответсвующей прошивкой). Т.к. с энкодера не может быть сигналов перехода с 00 на 11 и с 11 на 00, то на элементах VD2,VD3, R23-R25, R29 и внутреннем компараторе собран эквивалент логического элемента «исключающие ИЛИ». Что делается у UHU с компаратором я так и не узнал (я задавал вопрос выше на этой ветке форума).
----------------------------------------------------
Изменения в «прошивке» (отличия от первоначальной от Художника):

  • при первоначальном включении производиться мажоритирование данный в EEPROM. Считываются данные одного параметра расположенного в трёх разных областях, затем их сравнение между собой и если один из них не равен двум другим, то производиться перезапись этой «битой» ячейки. Если все три ячейки не равны между собою, что очень маловероятно, то во все три ячейки записывается значение ячейки из второй (в середине) области EEPROM, предположительно - как наиболее «целой» части (будем надеяться). Этот процесс производиться для всех параметров, хранящих в EEPROM
  • При сохранении ПИД-настроек в EEPROM из ServoTuning запись каждого параметра производится во все ячейки расположенные в трёх разных областях
  • При загрузке параметров из EEPROM в ServoTuning считываются данные только из одной области (без проверки на равенство)
  • После сохранения и загрузки параметров адрес EEPROM меняется на адрес не содержащих данных.
    Выше указанные изменения направлены на увеличение надёжности хранения ПИД-настроек. У меня пока «слёта» не происходило, надеюсь что и не будет.
  • Активирован WatchDog (период 38мс)
  • Добавлена работа аварийных ограничителей движения (Limit_L и Limit_R) и выбор типа их контакной группы. Опрос их состояния через 20мс (для устранения «дребезга»).
  • Вход E-Stop и выход “Error” (описание работы было немного выше)
  • «Слежение» за рассогласованием между заданным и фактическим положением сервопривода и формирование состояния Errror при большом рассогласование. Алгоритм я описывал в ранних постах.
  • удаленна подпрограмма обработки прерывания от Int1, т.к. у Художника даже не активировано разрешение на это прерывание (от вывода PD3 (Int1) – по схеме от Художника на этот вывод идёт сигнал Reserved c энкодера) и у меня нет такого энкодера с 3 выходами. Также исключено прерывание от Timer2, т.к. в прошивке от Художника он тоже роли не играет. Поэтому разницы в работе сервоконтроллера между прошивками от Художника с прерываниями (servo_mega8_int.asm) и без них (servo_mega8.asm) – нет. Это заметил ещё в начале этой ветки maxvovk (1стр., сообщение №4).
    С новым вариантом схемы лучше использовать прошивку с опросом состояния энкодера прерываниями от компаратора. Разницы в работе я не заметил, но теоретически она лучше, чем с опросом энкодера по прерыванию от Timer0 (12мкс).
    Я сделал четыре варианта прошивки Servo_AtMega_TimerInt - для AtMega8, по таймеру, Servo_AtMega_CompInt – для AtMega8, по компаратору и такие же для AtMega88 - Servo_AtMega88_TimerInt и Servo_AtMega88_CompInt. Прошивки с прерываниями от Timer0 можно использовать как со схемами, которые я выкладывал ранее, так и новым вариантом. С прерываниями от компаратора, только с новым вариантом схемы. Прошивку с прерываниями от компаратора я проверил только с AtMega88, с AtMega8 только частично (неохота было припаивать дополнительные детальки), но ручаюсь на 95%, что она будет работать.
    Более того, AtM8 я заменил на AtM88, т.к. AtM8 у меня всего одна, а 88 около 30шт. К тому же, я её уже столько раз «прошил», что скоро ресурс её (10 000раз) будет исчерпан и где-то я читал, что такие МК уже ненадёжны. Поэтому если, что и появится новое, то протестировать на AtMega8 не смогу. Лучше всего в данных схемах применить AtMega 48, она дешевле всех и её можно разогнать до 24МГц (с изменениями в прошивке) и тогда с прерываниями по компаратору можно будет «потягаться» с UHU. Если надо могу указанны выше прошивки скомпелировать под AtMega48.

При настройке в ServoTuning значения для Вашего двигателя сохраняйте в нулевом банке, т. к. стартует с него.

----------------------------------
Хотелось ещё приспособить исходник smc3a от Чена, но потратив пару вечеров добился только работы в режиме ШИМ. В других режимах предположительно не работает из-за нестыковки с данными из ServoTuning или у меня «мозгов» не хватает. Время поджимает – оставил до лучших времён.
Также можно было бы для «скорострельности» изменить подпрограмму умножения – использовать аппаратное умножение (есть только в AtMegaх), но тоже наверное останется для потомков…

ХУДОЖНИК

… Уход потому что время сервоцикла 200 мкс…

Время сервоцикла у Художника равно 1мс, а не 200мкс. Я пробовал 200мкс, вроде всё работает, но настроить в ServoTuning почему-то оказалось труднее и движок как-то по другому звучит. Замучился подбирать коэффициенты. И также из-за не достатка времени оставил это.

Все изменения в прошивках и в схеме – на плате я проверял «навесным» монтажом. Так что печатки с изменениями нет.

Servo3.rar

arisov77

stano4nek буду рад, если Вы примете “эстафетную” палочку и продолжите усовершенствовать этот сервоконтроллер.

stano4nek
arisov77:

stano4nek буду рад, если Вы примете “эстафетную” палочку и продолжите усовершенствовать этот сервоконтроллер.

Да, конечно. Я так и буду делать и разбираться и усовершенствовать.

По поводу моей проблемы. Может у меня какието проблемы с компилятором в Аврстудии, не сталкивались?

Спасибо!

arisov77

Я пользуюсь AVR Studio ver. 4.14 Build 589. Раньше каким то другим пользовался, там были «глюки». Но если Вы «зашиваете» мой скомпилированный hex, то отладчик тогда не причём.

stano4nek
arisov77:

stano4nek буду рад, если Вы примете “эстафетную” палочку и продолжите усовершенствовать этот сервоконтроллер.

Сейчас зашил чистый ваш HEX файл, работает как и у меня. Значит проблема не в компиляторе.

И еще - по вашей новой схеме с FT232R - рвботать не будет, точнее будет но будет постоянно зависать FT232R и изза наводок от двигателя. Ее надо ставить с опторазвязкой, чтобы отделить земли ПК и серводрайвера. Я на этом собаку съел.

arisov77
stano4nek:

И еще - по вашей новой схеме с FT232R - рвботать не будет, точнее будет но будет постоянно зависать FT232R и изза наводок от двигателя. Ее надо ставить с опторазвязкой, чтобы отделить земли ПК и серводрайвера. Я на этом собаку съел.

Спасибо. Поэтому наверное, у меня UniBox на FT232BM часто зависает, иногда с 10 попытки соединяется. Схемкой с опторазвязкой не поделитесь?

arisov77
stano4nek:

Сейчас зашил чистый ваш HEX файл, работает как и у меня. Значит проблема не в компиляторе.

Fuse-биты правильно установлены? Сравните с ScreenShot, которые в архиве выше. Может из за них что-нибудь?

stano4nek
arisov77:

Спасибо. Поэтому наверное, у меня UniBox на FT232BM часто зависает, иногда с 10 попытки соединяется. Схемкой с опторазвязкой не поделитесь?

Конечно с удовольствием!

Но все равно это тоже не 100% вариант, будут глюки. Чтобы совсем было нормально - надо делать опторазвязанный интерфейс на RS485 - не зря его в промышленности используют.

ft232_opto.zip

arisov77
stano4nek:

Но все равно это тоже не 100% вариант, будут глюки. Чтобы совсем было нормально - надо делать опторазвязанный интерфейс на RS485 - не зря его в промышленности используют.

Да, конечно 485 лучше, у меня на работе один частотник от компа по нему управляется. Провод проходит около движка - помех много, но связь устойчивая.
Но для того, чтобы один раз настроить сервопривод, преобразователя USB/RS485 - RS485/UART наверное для этого контроллера уже лишнее.
Спасибо за схему, сам я уже собирать не буду, нет ADUM в наличии, “помучаюсь” без опторазвязки. В будующем, буду учитывать это.

arisov77
stano4nek:

И еще - по вашей новой схеме с FT232R - рвботать не будет, точнее будет но будет постоянно зависать FT232R и изза наводок от двигателя. Ее надо ставить с опторазвязкой, чтобы отделить земли ПК и серводрайвера. Я на этом собаку съел.

А если настраивать от ноутбука при его автономном питании?

stano4nek
arisov77:

А если настраивать от ноутбука при его автономном питании?

Глючит все время стоит стартануть двигатель. Пока двигатель не работает все хорошо, чтот запусть сразу ошибки. Особенно хорошо видно когда в режиме ШИм крутите движок влево вправо - на больших скоростях тут же вылезает ошибка связи.
FTDI даже оталивается стоит только массу станка соединить с землей ПК.

По поводу прошивки. После заливки ПО, на ножке 13(OC1A) появляется этот импульс паразитный, причем в зависимсоти от того сколько раз пощелкаеш питанием его скважность разная. Не могу понят что это.

arisov77
stano4nek:

По поводу прошивки. После заливки ПО, на ножке 13(OC1A) появляется этот импульс паразитный, причем в зависимсоти от того сколько раз пощелкаеш питанием его скважность разная. Не могу понят что это.

Попробуйте вставить подпрограмму LoadHardParamEEPROM; Загрузка параметров аппаратуры от Художника может там проблема - в разных инициализациях работы Timer1. Но в AVR STudio я смотрел после неё ничего не меняется. Пробуйте “кусками”.
Вы программатор отключаете от платы при тестировании? Если нет, попробуйте отключить.
А с новой прошивкой Servo_AtMega_TimerInt также?