Шаговый генератор на STM32 (STEP/DIR/ENBL)

Контроллеры, драйверы, датчики, управляющие устройства.
Аватара пользователя
MX_Master
Мастер
Сообщения: 7488
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3113
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)

Сообщение MX_Master »

solo писал(а):тема очень интересная но я к моему глубокому сожалению мало, что понимаю
но читая аналогичные темы была сказано (не мною), что основная проблема S образной кривой разгона это в текущий момент просчитать конечную точку остановки ...
Мой последний пример с графиком как раз может это просчитать
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11730
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4703
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)

Сообщение michael-yurov »

UAVpilot писал(а):Работа, требуемая для преодоления как сопротивления воздуха при падении, так и сил трения в станке так-же не зависит от времени...
Я и не говорил про силы трения.
Я говорил, про пружинящие свойства перемещаемых деталей станка.
Когда станок абсолютно жесткий - никаких проблем нет, можно применить математику равноускоренного движения сферического килограмма в вакууме.
Но когда мы используем реальные конструкции - все они изгибаются, искривляются, вибрируют, резонируют...

Почему автомобили (пусть это будут электромобили) не движутся равноускорено по трапецеидальному графику? Потому что пассажиров болтает в салоне, нагрузка на механику возрастает и т.п.
По той же причине приличные лифты движутся по графику S-кривой, а не по трапецеидальному. И, зачастую они намного более быстрые, чем дешевые. И даже в дешевых есть демпферы и ступенчатое изменение мощности на старте и остановке.
А трясти груз/людей при скачках ускорения - лишние потери энергии.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)

Сообщение Serg »

spike писал(а):а можно математическое/физическое обоснование, хотя бы и "на пальцах"? только про темные силы инерции не забудь... ;)
Да без проблем: Я уже выше приводил формулу, по которой можно вычислить работу, необходимую на разгон тела со скорости V1 до скорости V2 - она показывает, что это работа не зависит от времени, т.е. не зависит от ускорения. А вот необходимая мощность (привода) зависит от ускорения: мощность - это работа в единицу времени, посему чем быстрее потребуется достичь скорости V2 (больше ускорение), тем больше потребуется для этого мощность. Или обратный вывод: при некоторой постоянной мощности P можно получить некоторую постоянную величину работы в единицу времени (W = P*t), т.е. некоторую постоянную величину ускорения для одной и той-же массы. Отсюда следствие: никакими хитрыми изменениями ускорения превысить максимально возможное ускорение не получится. Это можно сделать только уменьшая массу тела или увеличивая мощность.

Ах, да, про инерцию: работа, затрачиваемая на изменение скорости тела собственно и тратится на преодоление инерции этого тела. :)
michael-yurov писал(а):Я говорил, про пружинящие свойства перемещаемых деталей станка.
Когда станок абсолютно жесткий - никаких проблем нет, можно применить математику равноускоренного движения сферического килограмма в вакууме.
Но когда мы используем реальные конструкции - все они изгибаются, искривляются, вибрируют, резонируют...
Вот и ты про инерцию... :)
michael-yurov писал(а):Почему автомобили (пусть это будут электромобили) не движутся равноускорено по трапецеидальному графику? Потому что пассажиров болтает в салоне, нагрузка на механику возрастает и т.п.
потому и не движутся, что людей болтает. А если и движутся (ибо могут - мощность позволяет), то люди внутри сразу начинают кричать "Поаккуратнее, не дрова везёшь!". :)
michael-yurov писал(а):По той же причине приличные лифты движутся по графику S-кривой, а не по трапецеидальному. И, зачастую они намного более быстрые, чем дешевые. И даже в дешевых есть демпферы и ступенчатое изменение мощности на старте и остановке.
Всё правильно. Только все эти ухищрения не для того, чтобы побыстрей доставить людей с этажа на этаж, а чтоб их не трясти сильно.
michael-yurov писал(а):А трясти груз/людей при скачках ускорения - лишние потери энергии.
Если люди не запрыгивают на ходу в автомобиль, то его масса вместе с людьми не увеличивается, а значит затрачиваемая работа на разгон авто с людьми не меняется, я ж формулу выше приводил.
Потери энергии на что именно? Мне вот сразу вспоминается многим известная формула: E=mc², так вот согласно ей энергия не теряется, а очень даже наоборот: масса разгоняемого тела (авто с людьми) не меняется, а скорость растёт - следовательно и энергия тела увеличивается. Это хорошо заметно на практике, когда едущий авто пытается передать свою энергию какому-нибудь столбу - чем быстрее едет авто, тем больше энергии он пытается передать. :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11730
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4703
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)

Сообщение michael-yurov »

UAVpilot писал(а):Потери энергии на что именно?
Когда людей сильно трясешь - они гнутся и мнутся. Неупругие деформации приводят к преобразованию энергии в тепловую.

Но, применительно к станкам - деформации в большинстве своем упругие, а это приводит к ненужным вибрациям и неравномерному ускорению при постоянном усилии привода,
либо, к непостоянной нагрузке на привод, если он старается обеспечить постоянное ускорение.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)

Сообщение Serg »

michael-yurov писал(а):Когда людей сильно трясешь - они гнутся и мнутся. Неупругие деформации приводят к преобразованию энергии в тепловую.
Перераспределение энергии внутри тела роли не играет - от этого ни масса тела, ни скорость не меняются.
michael-yurov писал(а):Но, применительно к станкам - деформации в большинстве своем упругие, а это приводит к ненужным вибрациям и неравномерному ускорению при постоянном усилии привода,
либо, к непостоянной нагрузке на привод, если он старается обеспечить постоянное ускорение.
Полностью согласен.
Я несогласен только с одним - с тем, что разгон по S-кривой позволит разогнать тело быстрее, чем постоянное максимальное ускорение.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)

Сообщение Сергей Саныч »

UAVpilot писал(а):Мне вот сразу вспоминается многим известная формула: E=mc²
(для просмотра содержимого нажмите на ссылку)
"Площадь круга. Площадь круга. Два пи эр" ©какой-то поэт. :tongue:
Не, я понимаю, что известную формулу Эйнштейна "дезигнеры" рисуют везде, где хотят изобразить что-то относящееся к науке :) https://yandex.ru/images/search?text=e%20mc2
Но она про другое. А для наших приземленных случаев более подходит школьная Ek=(mv²)/2 .
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)

Сообщение Сергей Саныч »

UAVpilot писал(а):Перераспределение энергии внутри тела роли не играет - от этого ни масса тела, ни скорость не меняются.
Энергия, пошедшая на деформацию неупругого тела, поглотится. превратившись в тепловую. А абсолютно твердое тело не нагреется, и вся энергия, сообщенная ему, перейдет в кинетическую. Классическая задачка - как отличить вареное яйцо от сырого, не разбивая.
Как это соотнести с различными кривыми разгона, я спросонок не соображу :) , но как-то, наверно, связано.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
wldev
Мастер
Сообщения: 1650
Зарегистрирован: 24 янв 2012, 16:04
Репутация: 510
Настоящее имя: Сергей Бочаров
Откуда: Новосибирск
Контактная информация:

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)

Сообщение wldev »

UAVpilot писал(а):Я несогласен только с одним - с тем, что разгон по S-кривой позволит разогнать тело быстрее, чем постоянное максимальное ускорение.
Да никто и не говорит что быстрее...

Просто ты отталкиваешься от двигателя что он может. А я отталкиваюсь от оси как её можно.
Вот у нас на работе станок для гибки проволоки. И у него рабочая консоль вращается серводвигателем. и там есть и скрутка вала и консоль с большим весом.
При работе по Tr его скорость не велика... (не потому что двигатель не может разогнать его быстро, может! там есть хор. запас раза в 1,5-2) просто будут вибрации после остановки и в начале движения.
А при S он работает плавно и без вибраций. и может развивать большую скорость. (как на видео со стаканом). + плюс экономия ресурса и э/э.
Новости: https://t.me/wldevruch
Обсуждения: https://t.me/wldevgr
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11730
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4703
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)

Сообщение michael-yurov »

UAVpilot писал(а):Перераспределение энергии внутри тела роли не играет - от этого ни масса тела, ни скорость не меняются.
Ну она же была кинетической, а стала тепловой, т.е. часть кинетической энергии мы потеряли. Ну или не вся работа пошла на изменение кинетической энергии, что говорит о том что приводу пришлось совершить больше работы, чем рассчитывали. Т.е. нагрузка на привод все же была в какие-то моменты немного больше расчетной.
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11730
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4703
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)

Сообщение michael-yurov »

UAVpilot писал(а): Я несогласен только с одним - с тем, что разгон по S-кривой позволит разогнать тело быстрее, чем постоянное максимальное ускорение.
Все же пример с быстрыми и медленными лифтами говорит о том, что "не все так однозначно"©.
Хотя, тоже считаю, что S-кривая и в теории и на практике может привести к ощутимому замедлению работы.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)

Сообщение Serg »

Сергей Саныч писал(а):Но она про другое. А для наших приземленных случаев более подходит школьная Ek=(mv²)/2 .
О да! Это даёт серёзную разницу! В моём случае энергия тела не менятеся, а в твоём она не меняется вдвое меньше. :)
Сергей Саныч писал(а):Энергия, пошедшая на деформацию неупругого тела, поглотится. превратившись в тепловую. А абсолютно твердое тело не нагреется, и вся энергия, сообщенная ему, перейдет в кинетическую.
А можешь взять для примера любой известный станок, подставить его данные в соотв. формулы и посчитать какое именно количество энергии (работы, совершаемой приводом) перейдёт в тепло? Можно в процентах.
Сергей Саныч писал(а):Классическая задачка - как отличить вареное яйцо от сырого, не разбивая.
Если сырое яйцо продолжать крутить, то оно таки раскрутится или сварится?.. :)
Bender писал(а):Да никто и не говорит что быстрее...
В этой теме как минимум трое высказали такую мысль...
Bender писал(а):При работе по Tr его скорость не велика... (не потому что двигатель не может разогнать его быстро, может! там есть хор. запас раза в 1,5-2) просто будут вибрации после остановки и в начале движения.
А при S он работает плавно и без вибраций. и может развивать большую скорость. (как на видео со стаканом). + плюс экономия ресурса и э/э.
Т.е. за счёт увеличения времени разгона и торможения, т.е. уменьшения итогового ускорения.
michael-yurov писал(а):Ну она же была кинетической, а стала тепловой, т.е. часть кинетической энергии мы потеряли. Ну или не вся работа пошла на изменение кинетической энергии, что говорит о том что приводу пришлось совершить больше работы, чем рассчитывали. Т.е. нагрузка на привод все же была в какие-то моменты немного больше расчетной.
Всё правильно - ты говоришь, что при разгоне/торможении привод не может превысить свои максимальные возможности в начале и в конце траектории разгона/торможения, а я говорю, что и в середине траектории тоже не может. :)
michael-yurov писал(а):Все же пример с быстрыми и медленными лифтами говорит о том, что "не все так однозначно"©.
Там всё однозначно: либо везём пассажиров медленно (с небольшим ускорением), либо после каждой поездки отмываем лифт от расплющенных пассажиров. Причём совершенно не важно когда их расплющит - в начале, в конце или в середине разгона/торможения. :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)

Сообщение Сергей Саныч »

UAVpilot писал(а):О да! Это даёт серёзную разницу! В моём случае энергия тела не менятеся, а в твоём она не меняется вдвое меньше. :)
я про то что там у вас с Эйнштейном скорость света стоит :)
UAVpilot писал(а):Если сырое яйцо продолжать крутить, то оно таки раскрутится или сварится?.. :)
Если крутить туда-сюда, то теоретически при должной теплоизоляции может и свариться :)
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)

Сообщение Serg »

Сергей Саныч писал(а):я про то что там у вас с Эйнштейном скорость света стоит :)
Не принципиально. Зато эту формулу больше народа знает. :)
Сергей Саныч писал(а):Если крутить туда-сюда, то теоретически при должной теплоизоляции может и свариться :)
Тогда придётся в резонанс попадать, а это несколько другие принципы. :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
MX_Master
Мастер
Сообщения: 7488
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3113
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)

Сообщение MX_Master »

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

Код: Выделить всё

' --- INIT PARAMETERS ---
freq 			= 5000; 	' steps/s, destination frequency
accel 		= 100000; 	' steps/s^2, max acceleration
S_start_percent	= 10; 	' %, s-curve start percent
S_end_percent	= 50; 	' %, s-curve end percent


' --- CALCULATED PARAMETERS ---
L_t = Floor( freq * 1000000 / accel ) ' microseconds to accelerate from 0 to freq (linear)
	L_t = 50000
S_start_t2 = Floor(L_t * S_start_percent / Floor(Sqrt(100^2 + S_start_percent^2)) )
	S_start_t2 = 5000
S_end_t1 = Floor(L_t * S_end_percent / Floor(Sqrt(100^2 + S_start_percent^2)) )
	S_end_t1 = 25000


' --- BASE FUNCTIONS ---
L_accel_func(t) = Floor(t * accel / 1000000);
L_accel_graph(t) = IIf( t < 0, 0, IIf( t < L_t, L_accel_func(t), freq));


' --- ADDITIONAL FUNCTIONS ---
S_start_t1 = Floor( Sqrt(S_start_t2^2 + L_accel_func(S_start_t2)^2) );
S_start_SIN = Floor( 2^20 * L_accel_func(S_start_t2) / S_start_t1 );
S_start_R = Floor( 2^20 * (S_start_t1 + S_start_t2) / S_start_SIN );
S_start_func(t) = -Floor(Sqrt(S_start_R^2 - t^2)) + S_start_R;

S_middle_func(t) = Floor((t - S_start_t1) * accel / 1000000);

S_end_t2 = Floor( Sqrt(S_end_t1^2 + L_accel_func(S_end_t1)^2) );
S_end_SIN = Floor( 2^20 * L_accel_func(S_end_t2) / S_end_t1 );
S_end_R = Floor( 2^20 * (S_end_t1 + S_end_t2) / S_end_SIN );
S_end_func(t) = Floor(Sqrt(S_end_R^2 - (t - L_t - S_start_t1 - S_end_t2)^2)) - S_end_R + freq;

S_t = S_start_t1 + L_t + S_end_t2 ' microseconds to accelerate from 0 to freq (S-curve)
	S_t = 80148

S_accel_graph(t) = IIf( t < 0, 0, IIf( t < S_start_t1 + S_start_t2, S_start_func(t), IIf( t < L_t + S_start_t1 - S_end_t1, S_middle_func(t), IIf( t < L_t + S_start_t1 + S_end_t2, S_end_func(t), freq ) ) ) );


' --- PLOT ---
' settings
Title 	= frequency acceleration;
LegendPos 	= BottomRight;
xLabel	= time, us;
yLabel	= frequency, steps/s;
' output
Plot( L_accel_graph(t), Legend=Linear    0% : 100% :  0%, Color=RGB(200,200,200), Width=8, xMin=-0.2*L_t,xMax=1.2*(L_t+S_start_t1+S_end_t2),yMin=-0.1*freq,yMax=1.1*freq);
Plot( S_accel_graph(t), Legend=S-curve  10% :  40% : 50%, Color=Blue, Width=2 );
'Plot( S_start_func(t), Legend=S start func, Color=RGB(255,0,0), Width=1 );
'Plot( S_middle_func(t), Legend=S middle func, Color=RGB(0,255,0), Width=1 );
'Plot( S_end_func(t), Legend=S end func, Color=RGB(0,0,255), Width=1 );
10%, 10% (2061 просмотр) <a class='original' href='./download/file.php?id=118176&mode=view' target=_blank>Загрузить оригинал (19.98 КБ)</a>
10%, 10%
60%, 20% (2061 просмотр) <a class='original' href='./download/file.php?id=118175&mode=view' target=_blank>Загрузить оригинал (19.49 КБ)</a>
60%, 20%
20%, 20% (2061 просмотр) <a class='original' href='./download/file.php?id=118177&mode=view' target=_blank>Загрузить оригинал (20.46 КБ)</a>
20%, 20%
10%, 50% (2061 просмотр) <a class='original' href='./download/file.php?id=118174&mode=view' target=_blank>Загрузить оригинал (18.65 КБ)</a>
10%, 50%
Аватара пользователя
Hanter
Мастер
Сообщения: 5414
Зарегистрирован: 27 янв 2012, 14:52
Репутация: 4338
Настоящее имя: Алексей
Откуда: Питер
Контактная информация:

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)

Сообщение Hanter »

Михаил - а есть ли смысл указывать отдельно параметры для начального и конечного участка переходов ??? ведь чисто по логике вещей они ну не должны быть разными..
Опыт - это когда на смену вопросам: "Что? Где? Когда? Как? Почему?" Приходит единственный вопрос: "Нахрена?"
==========================================
фрезерная и токарная обработка на станках с чпу.
Резка, гибка, сварка и порошковая окраса.
Аватара пользователя
MX_Master
Мастер
Сообщения: 7488
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3113
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)

Сообщение MX_Master »

Hanter писал(а):Михаил - а есть ли смысл указывать отдельно параметры для начального и конечного участка переходов ??? ведь чисто по логике вещей они ну не должны быть разными..
Для горизонтальных осей - да. А вот с тяжёлой вертикальной осью не так всё однозначно.

В идеале надо сделать настройки начала и конца для каждой оси и еще для направления каждой оси.
slavik
Кандидат
Сообщения: 51
Зарегистрирован: 13 июл 2017, 15:26
Репутация: 3
Откуда: Благовещенск, Амурская обл.
Контактная информация:

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)

Сообщение slavik »

Тема очень интересная, особенно с ускорением по S кривой. Но вот такой вопрос у меня (возможно я чего то недопонимаю):

Я год назад решил сделать отдельный контролер на STM32F407VET6 и столкнулся с тем, что artcam выгружает рельефы в линейной интерполяции (куча отдельных команд в G кодах с мелким шагом) - получалось так, что станок не успевая разогнаться на одной команде начинал тормозить и следом начиналась новая команда. Таким образом станок двигался на низкой скорости, не успевая разогнаться. Терялась скорость обработки увеличивались станкочасы.

Пришлось внутри реализовать конвейер команд G кода, где анализировалось движение на четыре команды вперед, и станок мог разгонятся до полной скорости планируя ускорение и торможение в будущем. Удалось добиться увеличения обработки скорости в два раза.

И вот я так и не придумал как это можно реализовать, если разделить задачи на несколько контролеров. (только если вводить дополнительные команды G кода)

Недавно пришел мне станок из Китая на PCI плате PCIMC-3D и ncstudio 5.5.6 Там так же нет реализации разгона до полной мощности.
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)

Сообщение Сергей Саныч »

Пользуйтесь программами управления, где есть развитый планировщик траектории (Mach, LinuxCNC...). А если есть огромное желание, можно попробовать разобраться в коде планировщика LinuxCNC (код открытый) и попытаться сделать что-то подобное на ваших МК.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
MX_Master
Мастер
Сообщения: 7488
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3113
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)

Сообщение MX_Master »

slavik писал(а):Я год назад решил сделать отдельный контролер на STM32F407VET6 и столкнулся с тем, что artcam выгружает рельефы в линейной интерполяции (куча отдельных команд в G кодах с мелким шагом) - получалось так, что станок не успевая разогнаться на одной команде начинал тормозить и следом начиналась новая команда. Таким образом станок двигался на низкой скорости, не успевая разогнаться. Терялась скорость обработки увеличивались станкочасы.

Пришлось внутри реализовать конвейер команд G кода, где анализировалось движение на четыре команды вперед, и станок мог разгонятся до полной скорости планируя ускорение и торможение в будущем. Удалось добиться увеличения обработки скорости в два раза.

И вот я так и не придумал как это можно реализовать, если разделить задачи на несколько контролеров. (только если вводить дополнительные команды G кода)
4 кадра предпросмотра траектории для планировщика хоть и достаточно, но мало. А налету парсить мелкозернистый gcode и тут же выполнять его - это ужас.

В идеале gcode файл должен быть на SD карте и, до начала работы УП, этот файл нужно переварить в другой файл с компактным байт кодом. С этим байт кодом и будет работать планировщик во время выполнения УП. Т.к. парсить gcode налету будет не надо, планировщик сможет заглядывать в траекторию дальше чем на 4 кадра. Например, на 100-200 кадров. Соответственно, сможет выполнить УП без лишних задержек.
Сергей Саныч писал(а):Пользуйтесь программами управления, где есть развитый планировщик траектории (Mach, LinuxCNC...). А если есть огромное желание, можно попробовать разобраться в коде планировщика LinuxCNC (код открытый) и попытаться сделать что-то подобное на ваших МК.
Лично я пойду своим путём. Работа с МК напрямую немного отличается от работы программ в операционной системе.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)

Сообщение aftaev »

slavik писал(а):Пришлось внутри реализовать конвейер команд G кода, где анализировалось движение на четыре команды вперед, и станок мог разгонятся до полной скорости планируя ускорение и торможение в будущем.
Называется это Look ahead во всех нормальных ЧПУ есть, некоторые умеют "просматривать" код на заданное кол-во.
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Ответить

Вернуться в «Электроника»