roboforum.ru

Технический форум по робототехнике.
Текущее время: 30 ноя 2024, 06:28

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 127 ]  На страницу Пред.  1 ... 4, 5, 6, 7, 8, 9  След.
Автор Сообщение
 Заголовок сообщения: Re: Контроллер ЧПУ/3Д принтера на STM32
СообщениеДобавлено: 07 авг 2012, 02:40 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
ААааа, это надо наверное как-то хитро коммитить :-) Только как.

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

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

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

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

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Контроллер ЧПУ/3Д принтера на STM32
СообщениеДобавлено: 09 авг 2012, 11:58 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
В общем вчера добрался до движения. Погонял туда-сюда серву. Предположительно все сделать можно и на сервах и на сервомоторах Получается классический треугольник: получаемая точность - частота вызова управляющих алгоритмов (т.е. контроллер) - скорость подачи. Выбирай любые два, третьим платишь :-)

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

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

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Контроллер ЧПУ/3Д принтера на STM32
СообщениеДобавлено: 09 авг 2012, 12:10 
Не в сети

Зарегистрирован: 24 апр 2010, 14:47
Сообщения: 736
Откуда: Уфа
прог. языки: avr asm
Ошибку не обнулять, а учитывать при расчете движения для следующей команды?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Контроллер ЧПУ/3Д принтера на STM32
СообщениеДобавлено: 09 авг 2012, 13:12 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
legion писал(а):
Ошибку не обнулять, а учитывать при расчете движения для следующей команды?

тоже да

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

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

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Контроллер ЧПУ/3Д принтера на STM32
СообщениеДобавлено: 09 авг 2012, 13:43 
Не в сети

Зарегистрирован: 27 авг 2008, 10:45
Сообщения: 1981
Откуда: Харьков
прог. языки: С/С++
Вообще если я хоть че-то понимаю в сервоприводах, работать должно так. У тебя есть интерпретатор 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
СообщениеДобавлено: 09 авг 2012, 13:58 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
А я вот пришел к тому, что надо не по позиции работать ПИД-ом, а по скорости перемещения.

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

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

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

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Контроллер ЧПУ/3Д принтера на STM32
СообщениеДобавлено: 09 авг 2012, 15:53 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 04 окт 2004, 12:58
Сообщения: 10989
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко
немного ковырял прошивку марлин, там управляющие G коды принимаются только начало и конец координаты, а сама прошивка решает как максимально быстро (при этом пропорционально скоростям подачи по экструдеру) прийти к заданой кординате.
В идеале нужно учитывать закон регулирования инерционной системы, нужно знать перемещаемую массу или иметь обратную связь по акселерометру или датчику вибрации


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Контроллер ЧПУ/3Д принтера на STM32
СообщениеДобавлено: 09 авг 2012, 15:58 
Не в сети
скрытый хозяин вселенной :)
Аватара пользователя

Зарегистрирован: 18 сен 2006, 12:26
Сообщения: 18018
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич
boez писал(а):
А в ПИДе позиционирования просто защита - если рассогласование выше 0.01 мм (к примеру) - авария, стоп и красная лампочка. И сидим настраиваем ПИДы позиционирования чтобы такого не происходило.
ненене никаких аварий, просто остальные оси притормаживаем до устранения, а потом продолжаем дальше.
нафик надо чтоб в конце 3х часового цикла фрезеровки какой-то фиговины был сбой
подумаешь зазубрина в одну сотку на детали получится. пропустили и поехали дальше.

_________________
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Контроллер ЧПУ/3Д принтера на STM32
СообщениеДобавлено: 09 авг 2012, 16:24 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
setar писал(а):
немного ковырял прошивку марлин, там управляющие G коды принимаются только начало и конец координаты, а сама прошивка решает как максимально быстро (при этом пропорционально скоростям подачи по экструдеру) прийти к заданой кординате.
В идеале нужно учитывать закон регулирования инерционной системы, нужно знать перемещаемую массу или иметь обратную связь по акселерометру или датчику вибрации

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

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Контроллер ЧПУ/3Д принтера на STM32
СообщениеДобавлено: 15 авг 2012, 21:30 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
Я тут еще чуть-чуть подумал и допер вот до чего. При управлении сервоприводом, скорее всего, нет смысла делать фиксированный тайм-бейз (т.е. вызывать ПИД каждые, скажем, 10мсек). Скорее имея требуемую точность и скорость подачи, надо звать ПИД не каждые 10мс, а каждые 0,001мм для обеспечения точности в 0,1мм. Подача нам известна, значит мы знаем время перемещения инструмента с заданной подачей. И мы можем рассчитать в соте за какое время инструмент с заданной подачей пройдет 0,001 мм. И вот через эти временные отрезки и звать ПИД. Критика?


Вложения:
FRcalc.JPG
FRcalc.JPG [ 59.58 КиБ | Просмотров: 3812 ]

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Контроллер ЧПУ/3Д принтера на STM32
СообщениеДобавлено: 15 авг 2012, 22:54 
Не в сети

Зарегистрирован: 27 авг 2008, 10:45
Сообщения: 1981
Откуда: Харьков
прог. языки: С/С++
Смысл дискретного ПИДа в том, что он представляет собой приближение непрерывного ПИДа (аналогового, как раньше на операционниках делали, да кое-где и сейчас делают). Поэтому его коэффициенты И и Д завязаны на шаг дискретизации. Если он переменный - коэффициенты тоже должны быть переменными для сохранения динамических характеристик. Увеличил период вдвое - уменьшай Д и увеличивай И вдвое, а то все поломается. И кстати, если сильно шаг по времени увеличить - то и так все поломается :)

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Контроллер ЧПУ/3Д принтера на STM32
СообщениеДобавлено: 15 авг 2012, 23:34 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
Ок, понял, принимается. Заход был не на "давайте сэкономим времени процессорного", а на достаточно простую реализацию контроля ускорения... Ладно, продолжаем пилить фиксированный таймбейс.

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Контроллер ЧПУ/3Д принтера на STM32
СообщениеДобавлено: 16 авг 2012, 05:04 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
Вроде как настроил ПИД, подачу держит с ошибкой на 2-4 микрона на 1 тик таймбейса (с последующей коррекцией). Максимальная подача, которую дает моя серва с винтом 6мм (шаг витка 1мм) - 39мм/мин (при этом таймбейс приходится делать 100мс).
Из-за того, что в серве сидит свой (какой=то странный) ПИД, получается борьба двух ПИД-ов. Забава.
Теперь буду думать как тормозить серву правильно и вовремя...

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Контроллер ЧПУ/3Д принтера на STM32
СообщениеДобавлено: 16 авг 2012, 12:40 
Не в сети
Аватара пользователя

Зарегистрирован: 15 сен 2007, 13:03
Сообщения: 6338
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович
в сервах вроде вообще П регуль просто..

_________________
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Контроллер ЧПУ/3Д принтера на STM32
СообщениеДобавлено: 16 авг 2012, 15:29 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
Duhas писал(а):
в сервах вроде вообще П регуль просто..

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

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 127 ]  На страницу Пред.  1 ... 4, 5, 6, 7, 8, 9  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO