roboforum.ru

Технический форум по робототехнике.

Контроллер ЧПУ/3Д принтера на STM32

Re: Контроллер ЧПУ/3Д принтера на STM32

dccharacter » 07 авг 2012, 02:40

ААааа, это надо наверное как-то хитро коммитить :-) Только как.

А пока, вот наш враг:
void dda_step(DDA *dda) {
...
}

Добавлено спустя 4 минуты 51 секунду:
Myp писал(а): требует закомитить build.xml debug.config и ещё что-то там.

link.ld
???
Все, только три этих файла?

Добавлено спустя 3 часа 13 минут 44 секунды:
Ох, блин. Я процентов на 70 разобрался с движением. Если бы был драйвер шаговика нормальный, можно было бы попробовать покрутить его. Вся-вся математика подчистую из Teacup.

Re: Контроллер ЧПУ/3Д принтера на STM32

dccharacter » 09 авг 2012, 11:58

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

Почти полностью портировав Teacup на STM32, развернулся и пошел назад - стал встраивать свои функции сразу на обработчик очереди заданий. Все это выглядит очень убого, но позволило вкрчть еще одну проблему, которую надо решить (кроме контроля подачи и ускорения по нескольким осям одновременно) - очень сложно осуществить и, главное, отловить программно достижение целевой точки. То есть если мы приближаемся к точке и снижаем скорость, в какой-то момент серва остановится при необнуленной до конца ошибке. Не дойдет шагов пять-пятнадцать до точки назначения. Это значит, что алгоритм будет продолжать исполнять этот шаг вечно. Можно очень долго пытаться ПИД-ом вывести значение в ноль, но это долго и сложно сделать равномерно на всех осях. Можно обнулить ошибку, но тогда на каждом шаге будет накапливаться ошибка примерно в сотку миллиметра. И т.д.

Более того, это все сильно зависит от используемого железа - алгоритмы управления придется сильно перестраивать под моторы и нагрузку. Имхо овчинка все-таки не стоит выделки. (хотя на форумах народ на брушлесах делает сервоприводы - но это вполне себе такая инженерная задачка уровня нашего великого учителя).

Re: Контроллер ЧПУ/3Д принтера на STM32

legion » 09 авг 2012, 12:10

Ошибку не обнулять, а учитывать при расчете движения для следующей команды?

Re: Контроллер ЧПУ/3Д принтера на STM32

dccharacter » 09 авг 2012, 13:12

legion писал(а):Ошибку не обнулять, а учитывать при расчете движения для следующей команды?

тоже да

Добавлено спустя 57 минут 56 секунд:
Почему когда я днем думаю об этом контроллере, мне кажется, что это самое элементарное, что можно сделать?

Почему когда я вечером добираюсь до дома мне кажется, что это неподъемный проект?

Re: Контроллер ЧПУ/3Д принтера на STM32

boez » 09 авг 2012, 13:43

Вообще если я хоть че-то понимаю в сервоприводах, работать должно так. У тебя есть интерпретатор G-кода. Он должен синтезировать и выдавать позицию по всем координатам раз в цикл регулирования. Нужно проехать по Х 1 сантиметр, от 5 до 6 - выдаем такое: (это мы тут стоим) 5,5,5,5 (пришло время ехать), 5.05,5.1,5.2,5.4,5.6,5.8,5.9,5.95,6 (приехали),6,6,6,6 - ну это грубо, для понимания. По Y,Z,экструдеру в это время идут константы. Все, эту позицию подаем на ПИДы позиционирования, они выдают скорость на ПИДы ШИМ, или даже сразу ШИМ - это уже как реализовано там. И интерпретатору G-кода реальную позицию знать не нужно вообще - он когда в примере выше выдал позицию 6 - все, можно переходить к следующему шагу. Никаких затыков. А в ПИДе позиционирования просто защита - если рассогласование выше 0.01 мм (к примеру) - авария, стоп и красная лампочка. И сидим настраиваем ПИДы позиционирования чтобы такого не происходило.

Добавлено спустя 2 минуты 1 секунду:
Да, естественно реальный цикл управления должен тикать с частотой в килогерцы, если хочется хоть какой-то точности. Ну благо вроде процессор должен позволять.

Re: Контроллер ЧПУ/3Д принтера на STM32

dccharacter » 09 авг 2012, 13:58

А я вот пришел к тому, что надо не по позиции работать ПИД-ом, а по скорости перемещения.

Т.е. посмотрели дельты по всем осям, нашли максимальную дельту.
Берем эту дельту и нужную подачу - получаем время перемещения.
Время перемещения делим на отрезки - получаем по каждой оси свое значение скорости (тиков энкодера в отрезок времени)
Запускаем ПИДы по всем осям, каждому отдается его текущая скорость и необходимая. Каждый ПИД независимо друг от друга отвечает за поддержание нужной скорости. Получаем равномерное перемещение.

Можно в начале/конце перемещения сделать плавный рост/падение скорости, пока не понял как. Но это позволит избежать перелета. и неравномерности на старте (на все оси нагрузка разная, по идее и результат работы ПИДов должен быть разный)

Добавлено спустя 2 минуты 36 секунд:
почему не по позиции: как я уже писал, сложно вывести сервомотор на четкую позицию. тут мы бьем отрезок на 100, например, частей. почему на 100, почему не на 200? На каждом саб-отрезке получается погрешность в 10-20 тиков, если делать как говорит legion, ошибка будет не накапливаться, а плавать в этих же пределах, но каждый отрезок надо перечитывать. Т.е. управлять каждым подотрезком, как отрезком. Мы бьем задачу, но в результате задача не становится проще. Фрактал.

Re: Контроллер ЧПУ/3Д принтера на STM32

setar » 09 авг 2012, 15:53

немного ковырял прошивку марлин, там управляющие G коды принимаются только начало и конец координаты, а сама прошивка решает как максимально быстро (при этом пропорционально скоростям подачи по экструдеру) прийти к заданой кординате.
В идеале нужно учитывать закон регулирования инерционной системы, нужно знать перемещаемую массу или иметь обратную связь по акселерометру или датчику вибрации

Re: Контроллер ЧПУ/3Д принтера на STM32

Myp » 09 авг 2012, 15:58

boez писал(а): А в ПИДе позиционирования просто защита - если рассогласование выше 0.01 мм (к примеру) - авария, стоп и красная лампочка. И сидим настраиваем ПИДы позиционирования чтобы такого не происходило.
ненене никаких аварий, просто остальные оси притормаживаем до устранения, а потом продолжаем дальше.
нафик надо чтоб в конце 3х часового цикла фрезеровки какой-то фиговины был сбой
подумаешь зазубрина в одну сотку на детали получится. пропустили и поехали дальше.

Re: Контроллер ЧПУ/3Д принтера на STM32

dccharacter » 09 авг 2012, 16:24

setar писал(а):немного ковырял прошивку марлин, там управляющие G коды принимаются только начало и конец координаты, а сама прошивка решает как максимально быстро (при этом пропорционально скоростям подачи по экструдеру) прийти к заданой кординате.
В идеале нужно учитывать закон регулирования инерционной системы, нужно знать перемещаемую массу или иметь обратную связь по акселерометру или датчику вибрации

Да, в Teacup тоже на входе только таргет. Потом работает алгоритм расчета и разброса шагов и потом уже дерганье ногами.

Re: Контроллер ЧПУ/3Д принтера на STM32

dccharacter » 15 авг 2012, 21:30

Я тут еще чуть-чуть подумал и допер вот до чего. При управлении сервоприводом, скорее всего, нет смысла делать фиксированный тайм-бейз (т.е. вызывать ПИД каждые, скажем, 10мсек). Скорее имея требуемую точность и скорость подачи, надо звать ПИД не каждые 10мс, а каждые 0,001мм для обеспечения точности в 0,1мм. Подача нам известна, значит мы знаем время перемещения инструмента с заданной подачей. И мы можем рассчитать в соте за какое время инструмент с заданной подачей пройдет 0,001 мм. И вот через эти временные отрезки и звать ПИД. Критика?
Вложения
FRcalc.JPG

Re: Контроллер ЧПУ/3Д принтера на STM32

boez » 15 авг 2012, 22:54

Смысл дискретного ПИДа в том, что он представляет собой приближение непрерывного ПИДа (аналогового, как раньше на операционниках делали, да кое-где и сейчас делают). Поэтому его коэффициенты И и Д завязаны на шаг дискретизации. Если он переменный - коэффициенты тоже должны быть переменными для сохранения динамических характеристик. Увеличил период вдвое - уменьшай Д и увеличивай И вдвое, а то все поломается. И кстати, если сильно шаг по времени увеличить - то и так все поломается :)

ИМХО: нефиг жадничать! Если процессору хватает времени просчитать ПИД на максимальной скорости с шагом 0.001 мм(плюс другие задачи) - так пусть и считает с такой частотой все время. Смысл его разгружать на малых скоростях? Какие у проца есть вычислительно-сложные задачи, которые можно делать на малой скорости и обойтись без них на большой?

Re: Контроллер ЧПУ/3Д принтера на STM32

dccharacter » 15 авг 2012, 23:34

Ок, понял, принимается. Заход был не на "давайте сэкономим времени процессорного", а на достаточно простую реализацию контроля ускорения... Ладно, продолжаем пилить фиксированный таймбейс.

Re: Контроллер ЧПУ/3Д принтера на STM32

dccharacter » 16 авг 2012, 05:04

Вроде как настроил ПИД, подачу держит с ошибкой на 2-4 микрона на 1 тик таймбейса (с последующей коррекцией). Максимальная подача, которую дает моя серва с винтом 6мм (шаг витка 1мм) - 39мм/мин (при этом таймбейс приходится делать 100мс).
Из-за того, что в серве сидит свой (какой=то странный) ПИД, получается борьба двух ПИД-ов. Забава.
Теперь буду думать как тормозить серву правильно и вовремя...

Re: Контроллер ЧПУ/3Д принтера на STM32

Duhas » 16 авг 2012, 12:40

в сервах вроде вообще П регуль просто..

Re: Контроллер ЧПУ/3Д принтера на STM32

dccharacter » 16 авг 2012, 15:29

Duhas писал(а):в сервах вроде вообще П регуль просто..

сто процентов нет
есть интеграл, причем медленный


Rambler\'s Top100 Mail.ru counter