Я не считаю, что есть волшебная команда, но правильный расчет разгонной кривой ничего не даст, когда в самой документации к библиотеке указано, что на 16МГц контроллере скорость больше 4000 шагов в секунду получить невозможно
Вот о чём я и написал - вы не понимаете что до вас пытаются донести.
Набейте своих шишек, раз так.
Экономия лишней не бывает. К тому же всегда нужно стремится по максимуму использовать аппаратные средства,и быстрей и код проще.
Ежели нет чипселекта на ацп…хз,наверно внешний мультиплексор.
Вообще Вы правы,сначала ШД надо реализовать,а дальше видно будет. Может и не придётся экономить.
Вы правы, я действительно не могу понять, почему я не прав в своих суждениях о том, что аксельстеппер (как и любые другие попытки использовать ардуино, видимо), мне не помогут, учитывая то, что у меня уже (не)получилось
Ну, ШД на производстве от меня уже не зависят, там они работают, а мне сейчас они нужны на несколько раз для записи данных к фильтрации. Если говорить про мою зону ответственности, скорость работы по одному каналу уже довольно неплохая, в дальнейшем при отладке 4 каналов могут появиться бутылочные горлышки, но в масштабе всего проекта даже возможная 0.1мс выигрыша со всех четырех каналов не будет стоить того времени, что на реализацию этого выигрыша нужно будет потратить
https://github.com/swissbyte/AccelStepper/blob/master/src/AccelStepper.cpp
Эта библиотека? Для конкретной задачи там много чего можно вырезать,упростить. Но это довольно трудозатратно и требует хороших знаний. Зато запросто увеличить скорость раза в два.
Вот кому нужны эти потолочные оценки и гадания на кофейной гуще, когда можно все это измерить вполне разумной точностью (хотя бы до единиц)?
Может слишком быстро разгоняете? Двигатель без нагрузки? Но даже без нагрузки там масса больше килограмма, значит и ротор отнюдь не пушинка.
Может что то типа такого будет лучше:
void loop() {
int32_t i;
int32_t half_period=10000;
while (1){
i = 0;
while (i < 10000){
bitClear(PORTC, 0);
delayMicroseconds(half_period);
bitSet(PORTC, 0);
delayMicroseconds(half_period);
i++;
};
if(half_period >=25){ half_period--; }
}
}
потому как сама программа может работать гораздо быстрее чем с периодом 150 мкс. И драйвер может до 200 кГц. Значит проблема в разгоне видимо.
Про резисторы 2кОм между контроллером и драйвером не забыли?
https://www.embedded.com/generate-stepper-motor-speed-profiles-in-real-time/
Тринамик, если помню правильно, вовсе стремится генерировать S-образную рампу.
Ну если срочно и нет времени разбираться, то советую глянуть в сторону grbl - там ваши задачи уже решены, можете поставить, покрутить переменные и если все устроит, то взять код управления ШД оттуда - он уже готов, только нужно будет под ваши реалии адаптировать.
и сам жеж отвечу, что то протупил или выпало, что в лазерном принтере на лазере ведь тоже шаговик и крутит аж до 12 тыщ оборотов
Во-первых это bldc, во вторых, 13000 импульсов с выхода, а не оборотов.
у меня гугл забанили, на драйвер даташит не найду - TB6514F
Нехорошая функция разгона:
Согласен, нехорошая, но там после каждого уменьшения полупериода идет задержка ( while (i < 10000){ …) , типа даем возможность двигателю ускориться. К сожалению сейчас нет возможности проверить на сколько это работать будет. Может туфта.
У автора темы даже такой задержки нет, на каждом шаге уменьшение периода.
Если подумать, то там еще резонансы наверняка будут при разгоне и это вообще зависит от нагрузки на валу, а там дозатор какой- то. Так что проблем вне стенда только добавится.
Можно попробовать компенсировать увеличение скорости разгона из за обратной зависимости период/частота.
void loop() {
int32_t i;
int32_t half_period=10000;
int step = 10;
int time_d = 1000;
while (1){
i = 0;
while (i < time_d){
bitClear(PORTC, 0);
delayMicroseconds(half_period);
bitSet(PORTC, 0);
delayMicroseconds(half_period);
i++;
};
if(half_period >=25){ half_period--; time_d += step; }
}
}
В целом все эти опыты годны только на “попробовать” до какой частоты можно догнать ШД, в реальной проге надо через таймеры делать, иначе все будет рассыпаться при малейших попытках добавить в прогу функционал ( ну это уже писали).
Конечно, если найти графики кривых старта/разгона ШД, то можно вообще более менее оптимальный( быстрый) разгон попробовать сделать, но что то я таких графиков для указанного ШД не увидел в сети вообще
В моем понимании вообще дурь от китайского шаговика ожидать чего то свыше 2000шаг/с
В первую очередь нужно посмотреть что за оборудование используется в оригинале.
Возможно там специализированные шаговики.
Или же тупо не 200 шагов на оборот, а 67 или ещё меньше.
Вот тут есть калькулятор, можно примерно представить на что способен мотор.
https://www.duxe.ru/blog/raschyet-maksimalnoy-rabochey-skorosti-shagovogo-motora/
У Гайвера, библиотечка GPlanner2. Сам не углублялся,но описание обнадёживает:
Многоосевой планировщик траекторий для шаговых моторов и создания станка с ЧПУ
1.ПЛАНИРОВАНИЕ СКОРОСТИ НА МАРШРУТЕ. НАСТРАИВАЕМЫЙ БУФЕР
2.Макс. скорость: 37000 шаг/с на полной, 14000 шаг/с на разгоне
3.Трапецеидальный профиль скорости (планировщик 2-го порядка)
4.Настройка скорости и ускорения
5.Любое количество осей. Будут двигаться синхронно к заданным целям
6.Быстрая целочисленная модель планирования траектории и скорости
7.Режим постоянного вращения для одной оси (для движения к концевику например)
8.Тормоз/плавная остановка/пауза на траектории планировщика
9.Оптимизировано для работы по прерыванию таймера
10.Быстрый контроль пинов шаговика для Arduino AVR
Чушь полная. Что это за разгон такой, если он даже до половины полной скорости не дотягивает.
Ну вот такие анженеры сейчас пошли. Даже не знают, что силовое железа для трансформаторов и моторов делается металлургами в расчете на 50 гц. Для авиации и вояк делают на 400 гц.
Ну для маломощных применений можно закрутить моторчик и от 2000гц, Но на 20000 гц от него только писк будет
Я хз, о каких вы 40000ш/с говорите, у меня мои шаговики, честно купленные в Китае задешево с аналогичными драйверами (tb6600), ни при каких условиях шагать свыше 2400ш/с отказываются.
И то при этом мощность никакая.
Думаю, что нужно ток снижать по мере нарастания скорости но драйвера на это не способны, а курочить рабочие железки не в моих правилах.
Возможно стоит попробовать повышать напряжение с моих 32В(БП больше не даёт) до 48В, но пока нет такого БП.
Я читал, что есть системы двигатель-драйвер способные выдавать до 2000об/мин, но ценник на них космически-ниебический. Классная наверное штука, раз могут не просто фронты/спады на пинах смотреть, а так же по модбасу работать а-ля “пиздуй вперёд на 3678шагов”, “Ок, Багира, я лезу”.
Кроме того могут детектировать пропуски шагов и прочую лабуду типа, соотношение токов и оборотов, графики-хуяфики.
Последний раз, когда смотрел, ценник на такие был, что то около 30к за комплект. И это было задолго до 24.02.23.
ТС, у тебя такая система ?
Если нет , шел бы ты в жопу того китайца, у которого свои железяки покупал.
Ну, то что выходом можно дрыгать через “быстрый контроль” и по таймеру - сомнений нет.
Но двигателю эти килогерцы мало помогут.
Я тоже могу степ завернуть на 4 МГц и что дальше?