Страница 6 из 11
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Добавлено: 20 авг 2017, 02:01
MX_Master
slavik писал(а):MX_Master писал(а): видел кучу статей по подключению LCD экранчиков с помощью контроллера внешней памяти - FSMC
Тоже когда начинал разбираться теплилась надежда, что FSMC - панацея. FSMC в отличии от SPI позволяет работать с контролером экрана по 16 битной шине и дергать ножки управления. Команды же и данные по каждому пикселю приходится слать одиночно, что сильно уже грузит проц. При этом у большого цветного экрана поток данных в несколько больше.
DMA?
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Добавлено: 20 авг 2017, 02:12
slavik
MX_Master писал(а):DMA?
Тоже задействован. FSMC для работы с памятью. А с экраном можно работать используя только две ячейки (16 бит) памяти, одна для выбора команда/данные, другая для параметра/данные. Записываем ячейки, запускаем поток DMA, информация на экране.
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Добавлено: 20 авг 2017, 02:43
slavik
Возможно еще один поток DMA туда можно прикрутить. Надо попробовать...
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Добавлено: 29 авг 2017, 18:39
MX_Master
Всё-таки, маловато
DMA каналов у
STM32F103C8T6 для подключения дополнительных модулей с
W5500 и
MicroSD. Долго думал и прикидывал разные варианты. Пришёл к выводу, что к генератору ничего лепить не нужно. Единственное средство связи, которое у него будет - это
SPI (slave). Это значит, что подключаться к другим устройствам генератор будет только по
SPI в качестве ведомого устройства. По
SPI генератор будет получать короткие сообщения с настройками и командами движения.
Такой подход позволит подключить генератор к любой ардуине, к любому внешнему МК на выбор, а также к любым одноплатникам типа
Raspberry Pi,
Orange Pi,
BeagleBone и т.д.
Возможные области применения генератора на будущее:
- Собственный (автономный) контроллер ЧПУ на 8-9 осей на базе Orange Pi + 2-3 платки генератора с STM32F103C8T6
- Собственный контроллер ЧПУ на 5-6 осей на базе STM32F407VET6 + генератор в составе прошивки
- Подключение в качестве аппаратного генератор для LinuxCNC (способ подключения в процессе обдумывания)
- Возможно, кто-то захочет прикрутить генератор по SPI к ардуине и GRBL
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Добавлено: 05 сен 2017, 10:36
MX_Master
Набросал общий план. Пока без мелочей.
должны быть как минимум две функции начала движения:
- линейное перемещение, с параметрами:
: массив новых координат для осей
: начальная частота
: конечная частота
- перемещение по дуге, с параметрами:
: массив новых координат для осей
: массив параметров дуги (плоскость, центр, кол-во витков)
: начальная частота
: конечная частота
должны быть такие функции остановки/возобновления движения:
- глобальный ВКЛ/ВЫКЛ всех осей
- глобальный ВКЛ/ВЫКЛ паузы для всех осей
- глобальная остановка всех осей
- локальный ВКЛ/ВЫКЛ указанной оси
- локальный ВКЛ/ВЫКЛ паузы для указанной оси
- локальная остановка указанной оси
для всех осей должны быть общие настройки:
- текущий тип ускорения (линейное, по S-кривой)
- длина начала S-кривой в процентах
- длина конца S-кривой в процентах
у каждой оси должны быть свои настройки:
- текущая позиция в шагах
- максимальное ускорение
- начальная частота вывода шагов
- текущая частота вывода шагов
- максимальная частота вывода шагов
Предыдущий вариант (для просмотра содержимого нажмите на ссылку)минимально должно быть две функции движения:
- линейное (G0/G1) перемещение с параметрами:
- массив новых координат для осей
- начальная частота
- конечная частота
- перемещение по дуге (G1/G3) с параметрами:
- массив новых координат для осей
- массив параметров дуги (плоскость, центр, кол-во витков)
- начальная частота
- конечная частота
для всех осей должны быть общие настройки, которые можно менять:
- текущий тип ускорения (линейное, по S-кривой)
- длина начала S-кривой в процентах
- длина конца S-кривой в процентах
- глобальный выключатель осей
- тип остановки/старта при срабатывании выключателя осей
- глобальная пауза для всех осей
- тип остановки/старта при срабатывании паузы осей
- глобальный выключатель синхронизации осей
у каждой оси должны быть свои настройки, которые можно менять:
- локальный выключатель оси
- локальный выключатель синхронизации с другими осями
- текущая позиция в шагах
- начальная частота
- максимальная частота
- максимальное ускорение
Если у кого-то есть советы - пишите.
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Добавлено: 05 сен 2017, 13:10
selenur
Было-бы неплохо, в процессе запуска движения оси на ходу менять это значение
MX_Master писал(а):текущая позиция в шагах
Тут понадобилось себе упростить одну штуку, и сделал очень по быстрому так:
https://www.youtube.com/watch?v=coPd3Pb9dhc
Т.к. код разгона торможения не мой, и пока не добавил функцию, когда нажимаешь и держишь кнопку например влево, то происходит разгон, и начинается движение пока нажата кнопка, как кнопку отпускаю, так сразу нужно начинать сбрасывать скорость, вот такой функции мне иногда в поделках не хватает.
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Добавлено: 05 сен 2017, 14:06
MX_Master
Я так понял, речь про бесконечное движение по команде и остановка по команде. Не?
Текущая позиция в шагах подсчитывается и меняется с частотой
10 КГц.
Подправил текущий вариант плана.
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Добавлено: 05 сен 2017, 14:31
selenur
MX_Master писал(а):Я так понял, речь про бесконечное движение по команде и остановка по команде. Не?
Текущая позиция в шагах подсчитывается и меняется с частотой 10 КГц.
Да, именно так

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Добавлено: 05 сен 2017, 14:49
MX_Master
selenur писал(а):MX_Master писал(а):Я так понял, речь про бесконечное движение по команде и остановка по команде. Не?
Текущая позиция в шагах подсчитывается и меняется с частотой 10 КГц.
Да, именно так

Понял. Реализуется вроде просто - говорим оси двигаться в максимальную координату. И она пилит туда до посинения пока не скомандуем стоп.
Максимальная координата в шагах = 256^4 / 2 = 2147483648 (число, 32 бита, со знаком). Если, к примеру в предполагаемом контроллере указано 640 шагов на 1 мм, то 2147483648 шагов будет = 3355443 мм (3.35 км). Если не жмякнуть стоп, к вечеру может туда и доберётся

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Добавлено: 05 сен 2017, 14:57
selenur
главное что-бы по команде стоп, плавно остановилось а не резко

А после остановки, уже можно будет получить текущие координаты, и передвинуться на нужное количество шагов, что-бы место остановки было равно либо десяткам миллиметров, либо единицам мм. Как-то пересекался с задачкой, что пользователь примерно оценивая где нужно остановиться отпускал кнопку, а потом подруливал к ближайшей единице миллиметров, правда не знаю зачем

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Добавлено: 05 сен 2017, 15:08
MX_Master
selenur писал(а):главное что-бы по команде стоп, плавно остановилось а не резко
Это можно будет указать в самой команде стоп. Читал недавно мануал к
powerSTEP01, и там было две команды стоп - мягкий и жёсткий стоп

Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Добавлено: 05 сен 2017, 16:37
atomichammer
А я вот чего-то пропустил, выравнивание скоростей осей будет? Чтобы все оси одновременно останавливались.
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Добавлено: 05 сен 2017, 18:02
MX_Master
atomichammer писал(а):А я вот чего-то пропустил, выравнивание скоростей осей будет? Чтобы все оси одновременно останавливались.
Да. В обычном режиме все оси синхронизированы. Разсинхрон и независимые оси - это опция. Неоднократно встречались задачи, где одна или несколько осей должны быть независимыми. И разсинхрон в этих случаях весьма полезен.
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Добавлено: 05 сен 2017, 18:20
atomichammer
MX_Master писал(а):
Да. В обычном режиме все оси синхронизированы. Разсинхрон и независимые оси - это опция. Неоднократно встречались задачи, где одна или несколько осей должны быть независимыми. И разсинхрон в этих случаях весьма полезен.
А можно пример такой задачи, для повышения образованности. В моем пресловутом Pick'n'Place как раз так сделано, т.е. перемещение получается не по прямой, а по ломаной линии, что явно не идет ему на пользу. Интересно, это баг или фича?
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Добавлено: 05 сен 2017, 18:35
MX_Master
atomichammer писал(а):А можно пример такой задачи, для повышения образованности.
Первое, чё пришло на ум - в 3Д принтере шаговики экструдера могут быть независимыми. На станке с поворотной осью, можно включить поворотку независимо, чтобы что-то выточить.
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Добавлено: 06 сен 2017, 15:32
slavik
Такой вопрос: Можно ли обойтись целочисленной арифметикой, реализуя разгон/торможение по S кривой? (морально готовлюсь копать коды...)
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Добавлено: 06 сен 2017, 16:18
Argon-11
slavik писал(а):Можно ли обойтись целочисленной арифметикой
Я не вижу принципиальных причин по которым было бы нельзя. А чем "плавучка" не устраивает?
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Добавлено: 06 сен 2017, 16:26
slavik
Argon-11 писал(а):А чем "плавучка" не устраивает?
"Плавучка" тактов много занимает. Да и с целочисленной код проще, мне кажется. У меня все до кучи на одном контролере (STM32F407VET6).
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Добавлено: 06 сен 2017, 16:32
Argon-11
slavik писал(а):"Плавучка" тактов много занимает. Да и с целочисленной код проще, мне кажется.
Вот не скажите! Я 7 лет разрабатывал измерительные приборы с преимущественно целочисленной арифметикой. Да, она заметно быстрее "плавучки", но никак не проще! Это вам надо мозговать когда сделать правильное округление, где заменить деление сдвигом, как избежать переполнения и т.п.
Так что советую, раз уж имеете достаточно мощный МК, используйте плавучку. А если беспокоят такты, то распределите ресурсы так, чтобы вычисления проводить в моменты простоя МК. А такие однозначно будут. А если не будет - меняйте МК или иначе стройте архитектуру проекта, используйте периферию по-максимуму.
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Добавлено: 06 сен 2017, 16:36
MX_Master
slavik писал(а):Такой вопрос: Можно ли обойтись целочисленной арифметикой, реализуя разгон/торможение по S кривой? (морально готовлюсь копать коды...)
Я ж пару страниц назад давал пример трёхсекционной S-кривой на целочисленной логике. Вот здесь -
http://www.cnc-club.ru/forum/viewtopic. ... 60#p376858