Сервопривод..
Мужики, вы опять полезли не в те дебри, надо сначала разрвботать грамотный алгоритм управления сервом, а потом уже задумываться над его реализацией…
Повторяю свой вопрос - что должен сделать контроллер когда на него пришел сигнал сделать шаг?
на сколько нужно регулировать шим?, от куда контроллер возьмет нужную скважность, если это первый шаг(начало разгона), как контроллер должен понять собираемся ли мы рвануть с места или разгоняться плавно или вообще не разгоняться а сделать один шаг(опять же непонятно с какой скоростью надо шагнуть(шим то любую позволит))…
Короче я пришел к выводу что нужен либо особый интерфейс(где будет передаваться целая куча параметров, а не просто степ/дир), либо командный буфер и фиксированная задержка относительно софта(но это увеличивает погрешность, если контроллер не рулит сразу всеми движками в станке), либо мы получим тотже самый шаговик с небольшими приимуществами…
Совершенно согласен.
Давайте уже наконец отделим мух от котлет.
Как я уже писал и никто это не опроверг каждый шаг увеличивает позицию - соответственно и ошибку текушей позиции - вот это и увеличивает ШИМ. Для шага назад - та же цепочка.
Что произойдет при достижении позиции зависит от коэффициентов - их можно установить так что мы и не доедем даже 😃 (читайте здеся ww1.microchip.com/downloads/en/…/00964A.pdf)
Вопрос это какие защиты надо делать и на какие максимальные частоты импульсов из LPT расчитывать (мне кажется 100к максимум) ?
Как удобнее всего сделать установку параметров? как отобразить процессы? Дабы человек без осциллографа имел возможность понять что происходит в системе.
Совершенно согласен.
Давайте уже наконец отделим мух от котлет.
Как я уже писал и никто это не опроверг каждый шаг увеличивает позицию - соответственно и ошибку текушей позиции - вот это и увеличивает ШИМ. Для шага назад - та же цепочка.
Что произойдет при достижении позиции зависит от коэффициентов - их можно установить так что мы и не доедем даже 😃 (читайте здеся ww1.microchip.com/downloads/en/…/00964A.pdf)
Вопрос это какие защиты надо делать и на какие максимальные частоты импульсов из LPT расчитывать (мне кажется 100к максимум) ?
Как удобнее всего сделать установку параметров? как отобразить процессы? Дабы человек без осциллографа имел возможность понять что происходит в системе.
Была ветка про серводвигатели rcopen.com/forum/f110/topic36760
там STEPMOTOR давал статью rcopen.com/files/000000000000000000000000
см. page 20.
AZi,
Повторяю свой вопрос - что должен сделать контроллер когда на него пришел сигнал сделать шаг?
на сколько нужно регулировать шим?, от куда контроллер возьмет нужную скважность, если это первый шаг(начало разгона), как контроллер должен понять собираемся ли мы рвануть с места или разгоняться плавно или вообще не разгоняться а сделать один шаг(опять же непонятно с какой скоростью надо шагнуть(шим то любую позволит))…
Когда на контроллер пришла команда сделать шаг, он должен сделать шаг 😃
И дальше тоже его забота.
мы получим тот же самый шаговик с небольшими приимуществами…
Ну конечно 😃
buslik,
Как удобнее всего сделать установку параметров? как отобразить процессы? Дабы человек без осциллографа имел возможность понять что происходит в системе.
Я зря что ли скрин шот своей программы прикладывал.
>>Когда на контроллер пришла команда сделать шаг, он должен сделать шаг
Как именно?
Если на ужержании шим 50/50, то при команде шагнуть какое питалово должен контроллер к движку приложить - постоянку?
и держать ее до достижения нужной отметки на енкодере?
или плавно увеличивать ширину импульсов с заранее откудато взятой скоростью увеличения ширины?
получается что без задания дополнительных параметров он будет работать хуже шаговика, ну или также по крайней мере - в чем тогда смысл то?
>>Когда на контроллер пришла команда сделать шаг, он должен сделать шаг
Как именно?Если на ужержании шим 50/50, то при команде шагнуть какое питалово должен контроллер к движку приложить - постоянку?
и держать ее до достижения нужной отметки на енкодере?
или плавно увеличивать ширину импульсов с заранее откудато взятой скоростью увеличения ширины?получается что без задания дополнительных параметров он будет работать хуже шаговика, ну или также по крайней мере - в чем тогда смысл то?
Почитайте теорию ПИД-регулирования.
Понятно, я так и думал 😃
Понятно, я так и думал 😃
не расстраивайся - книг по этому делу как грязи.
И тем не менее практика - критерий истины. Буду собирать все на макетке и смотреть что получается.
Ну не укладывается у меня в голове как это все можно сделать не задавая профиля в PID контроллере а давая ему шаги на входе.
Ну ладно, нет времени у меня на микроконтроллеры, и программатора пока нет.
Нет возможности пока врубаться в тонкости программирования AVR.
Но если совместить простоту управления ШД, шаг – направления, а для увеличения момента применить усилитель, постоянник, управляемый шаговиком.
На валу ШД диск, с двумя радиально расположенными рядами меток или отверстий на 1/2 шага. На подающем валу такой же диск и шестерня для постоянника. ШД крепиться соосно к валу через упругий элемент, обеспечивающий небольшой угловой поворот между дисками при появлении вращательного момента. Ставим оптопары на каждый ряд меток дисков для управления шимом вперёд- назад, рассогласования и всё. Любой постоянник вплоть до стартера благо полевики позволяют себя параллелить, будет дрожать как в лихорадке при каждом шаге вместе с шаговиком. Остаётся перейти на микрошаг для сохранения винтовой пары от убивания.
Не панацея но всё же какой то шаг в сторону сервопривода.
Вот
error = genPos - currPos; // error is desired-current position
pwmSet = pGain * error + // standard PID equation
iGain * eInteg +
dGain * (error - ePrev); // derivative is current-previous
eInteg += error; // integral is simply a summation over time
ePrev = error; // save previous for derivative
на pic18f2331 занимает 118 циклов
все по два байта со знаком pwmSet - четыре
ну так что 30000 раз в секунду можно PID вычислить
AZi,
от куда контроллер возьмет нужную скважность, если это первый шаг(начало разгона), как контроллер должен понять собираемся ли мы рвануть с места или разгоняться плавно или вообще не разгоняться
Вообще вопрос правильный, при цифровом частотном управлении всегда такая проблемка имеет место быть. Ещё кстати борьба с возбуждением системы. Поэтому в более совершенных системах, естественно более дорогих, как правило не хоббийных, используют вход с аналоговым сигналом. Промышленный стандарт + - 10V. ЧПУ подаёт 1 вольт - едем со скоростью 10% от максимальной. Плавненько увеличиваем напряжение - разгоняемся. Выдаём напряжение по закону синуса на две координаты - режем круг. И все дела 😃
Hellen,
Не панацея но всё же какой то шаг
Голову не морочте 😃
>>Вообще вопрос правильный, при цифровом частотном управлении всегда такая проблемка имеет место быть. Ещё кстати борьба с возбуждением системы. Поэтому в более совершенных системах, естественно более дорогих, как правило не хоббийных, используют вход с аналоговым сигналом.
О!!! Наконецто меня поняли. 😃
А этот промышленный стандарт какнибудь называется? Где про него можно почитать? Есть ли доступный софт который его поддерживает?
А этот промышленный стандарт какнибудь называется? Где про него можно почитать? Есть ли доступный софт который его поддерживает?
Даже не задумывался, как называется. + - 10V Используется во всех промышленных приводах и стойках ЧПУ. Не совсем понятен вопрос про софт. К софту железо нужно соответствующее. Например демо софта, российской стойки ЧПУ FMS-3000, фирма Модмашсофт (Нижний Новгород): можете здесь посмотреть: www.modmash.nnov.ru/download/download.html
Нужная скорость берётся от виличины рассогласования через АЦП, то есть количества не выполнненных шагов.
То есть чем их больше пришло к количеству снятых энкодером тем больше скорость задаваемая ШИМом через АЦП.
Регулирование шима идет от скорости, скорость макс. и мин. задаётся при настройке. И один шаг это совсем не значит,
результат. Для минимальных скоростей мы и хотим бесконечность импульсов с энкодера, всё зависит от разрядности.
Почему они и стоят так.
Что касается импульсов с энкодера PIC18fxx31 переваривает 625000 импульсов энкодера в секунду. Боюсь это максимум для LPT и MACH.
Так что умное управление пока оставим в покое. (Я подозреваю что выход энкодера при ±10В уходит в стойку а не в драйвер)
Скоро нарисую схему - положу на рассмотрение.
Что касается импульсов с энкодера PIC18fxx31 переваривает 625000 импульсов энкодера в секунду. Боюсь это максимум для LPT и MACH.
Так что умное управление пока оставим в покое. (Я подозреваю что выход энкодера при ±10В уходит в стойку а не в драйвер)
Скоро нарисую схему - положу на рассмотрение.
Практически любой современный МК переварит довольно высокую частоту входа с енкодеров. Но есть ньюансы, например дребезг и некоторые тонкости при смене направления. Оптимально и абсолютно правильно на выходе енкодеров ставить фильтр из кучки D-триггеров, чем длиннее, тем лучше.
Вот пример для цепочки из 8-и триггеров:
SUBDESIGN NS_FILT
(
IN, СLK, CLR :INPUT;
Q :OUTPUT;
)
VARIABLE
T[8…1],
OUT 😁FF;
BEGIN
T[].clk = CLK;
T[].clrn = !CLR;
T[1].D = IN;
FOR i IN 2 TO 8 GENERATE
T[i].D = T[i-1].Q;
END GENERATE;
OUT.clk = GND;
OUT.D = GND;
OUT.prn = !(T[1] & T[2] & T[3] & T[4] & T[5] & T[6] & T[7] & T[8]);
OUT.clrn = T[1] # T[2] # T[3] # T[4] # T[5] # T[6] # T[7] # T[8];
Q = OUT.Q;
END;
Или более понятно на картинке для 3-х триггеров: (схема и VHDL код совершенно разные, но принцип один).
buslik,
Что касается импульсов с энкодера PIC18fxx31 переваривает 625000 импульсов энкодера в секунду. Боюсь это максимум для LPT и MACH.
В каком смысле переваривает? Если простая программка квадратурного энкодера на один канал, тогда так. Если чего посложнее, тогда не так. Обратную связь на LPT, да ещё под виндой, это не серьёзно. Уже повторять устал. Но если хотите, пробуйте грабли на прочность.
Гораздо проще, и приемлемей для хобби, это цифровой импульсный привод, удерживающий координату. Типа контроллер Чена или драйвер, сиречь привод UHU. Управлять им точно так же, как и приводом ШД. Со своими нюансами естественно. В частности, требования к стабильности частоты возрастают. Если тот же Мачь2 выдаёт 35 КГц, это неплохие скорости.
Если вам не будет хватать скорости и точности этих приводов и Мача, тогда придётся переходить на более совершенные и дорогие системы.
Я подозреваю что выход энкодера при ±10В уходит в стойку а не в драйвер
Это зависит от схемы сервосистемы. Бывают разомкнутые по управлению (координату удерживает привод), бывают замкнутые (координату удерживает ЧПУ, данные с датчика обратной связи (ДОС) заводятся в ЧПУ).
По классической схеме, замкнутая сервосистема станка ЧПУ организуется следующим образом:
Данные с ДОС заводятся в стойку ЧПУ, обрабатываются, на их основании рассчитываются скорости, цифровые данные преобразуются блоком ЦАП в аналоговый сигнал, передаваемый электроприводу, который удерживает скорость в заданном диапазоне независимо от момента на валу.
Сервопривод получает аналоговый сигнал + - 10V. Привод может быть аналоговый или цифровой. Рассматриваем цифровые электропривода. Привод состоит из АЦП, центрального процессора, использующего какой либо алгоритм удержания скорости (PID, PIV, PDFF, PI+ регулирование) если требует силовая часть, то в составе ещё и ЦАП.
Как правило, электропривод использует в качестве ДОС тахогенератор. С тахогенератора снимается аналоговый сигнал + - 10V, прямо пропорциональный скорости движения.
В последнее время всё чаще в качестве ДОС привода используются современные энкодеры.
Например, в сервоприводах Митсубиси серий MR-J2(S)-A/В. количество импульсов на оборот от 8192 до 131072 имп./об. (17-битный энкодер).
Также наметилась тенденция сращивания ЧПУ и привода. Это системы с прямым ШИМ управлением силовыми ключами.
Практически любой современный МК переварит довольно высокую частоту входа с енкодеров. Но есть ньюансы, например дребезг и некоторые тонкости при смене направления. Оптимально и абсолютно правильно на выходе енкодеров ставить фильтр из кучки D-триггеров, чем длиннее, тем лучше.
Эх, что такое довольно высокая частота? Давайте уже поконкретней.
PIC: 625 kHz это 18750 rpm при 2000 отсчетов на оборот. это по контроллеру. (контроллер имеет спец модуль энкодера с фильтрацией см. datasheet)
По LPT прозвучала цифра 35k степов в секунду. Это 1050 rpm.
PID укладывается в 20 uSec начну эксперименты с 5000 PID в секунду.
PWM 10 bit - думаю всего это достаточно.
Я работал с CPLD и с FPGA и с DSP – но считаю что для хобби станка должен быть другой подход.
Корпуса DIP, доставабельные микрухи и прочее, тогда их будут повторять и совершенствовать.
Мало того, мне проще так делать прототипы, думаю другим то-же.
Итого step/dir интерфейс и последовательный порт для установки параметров. Думаю даже отдельная плата с USB и далее I2C на остальные контроллеры.
Согласные могут отойти от стены 😃
PS не надо про BGA на коленке.
Всем доброго времени суток!
Достались мне тут по случаю 4 енкодера б/у:
Stegmann
DG 60 ELB-S
1024 puls/rev
Vdc 4,75-5,25v
И возник у меня такой вопрос:
Они совсем бесполезны для наших целей или как? Всетаки 1024 импульса?
P.S.
Просьба замену дисков не предлагать.
Nick34,
Нормальный энкодер.
где подешевле сервомоторы можно взять
с параметрами до 20A 80VDC ? штуки 3-ри.
450$ одного это нормальная цена ?