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

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

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

Сообщение MX_Master »

slavik писал(а):
MX_Master писал(а): видел кучу статей по подключению LCD экранчиков с помощью контроллера внешней памяти - FSMC
Тоже когда начинал разбираться теплилась надежда, что FSMC - панацея. FSMC в отличии от SPI позволяет работать с контролером экрана по 16 битной шине и дергать ножки управления. Команды же и данные по каждому пикселю приходится слать одиночно, что сильно уже грузит проц. При этом у большого цветного экрана поток данных в несколько больше.
DMA?
slavik
Кандидат
Сообщения: 51
Зарегистрирован: 13 июл 2017, 15:26
Репутация: 3
Откуда: Благовещенск, Амурская обл.
Контактная информация:

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

Сообщение slavik »

MX_Master писал(а):DMA?
Тоже задействован. FSMC для работы с памятью. А с экраном можно работать используя только две ячейки (16 бит) памяти, одна для выбора команда/данные, другая для параметра/данные. Записываем ячейки, запускаем поток DMA, информация на экране.
slavik
Кандидат
Сообщения: 51
Зарегистрирован: 13 июл 2017, 15:26
Репутация: 3
Откуда: Благовещенск, Амурская обл.
Контактная информация:

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

Сообщение slavik »

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

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

Сообщение 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
Аватара пользователя
MX_Master
Мастер
Сообщения: 7488
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3113
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

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

Сообщение MX_Master »

Набросал общий план. Пока без мелочей.

должны быть как минимум две функции начала движения:
  • линейное перемещение, с параметрами:
    : массив новых координат для осей
    : начальная частота
    : конечная частота
  • перемещение по дуге, с параметрами:
    : массив новых координат для осей
    : массив параметров дуги (плоскость, центр, кол-во витков)
    : начальная частота
    : конечная частота
должны быть такие функции остановки/возобновления движения:
  • глобальный ВКЛ/ВЫКЛ всех осей
  • глобальный ВКЛ/ВЫКЛ паузы для всех осей
  • глобальная остановка всех осей
  • локальный ВКЛ/ВЫКЛ указанной оси
  • локальный ВКЛ/ВЫКЛ паузы для указанной оси
  • локальная остановка указанной оси
для всех осей должны быть общие настройки:
  • текущий тип ускорения (линейное, по S-кривой)
  • длина начала S-кривой в процентах
  • длина конца S-кривой в процентах
у каждой оси должны быть свои настройки:
  • текущая позиция в шагах
  • максимальное ускорение
  • начальная частота вывода шагов
  • текущая частота вывода шагов
  • максимальная частота вывода шагов
Предыдущий вариант (для просмотра содержимого нажмите на ссылку)
минимально должно быть две функции движения:
  1. линейное (G0/G1) перемещение с параметрами:
    - массив новых координат для осей
    - начальная частота
    - конечная частота
  2. перемещение по дуге (G1/G3) с параметрами:
    - массив новых координат для осей
    - массив параметров дуги (плоскость, центр, кол-во витков)
    - начальная частота
    - конечная частота
для всех осей должны быть общие настройки, которые можно менять:
  • текущий тип ускорения (линейное, по S-кривой)
  • длина начала S-кривой в процентах
  • длина конца S-кривой в процентах
  • глобальный выключатель осей
  • тип остановки/старта при срабатывании выключателя осей
  • глобальная пауза для всех осей
  • тип остановки/старта при срабатывании паузы осей
  • глобальный выключатель синхронизации осей

у каждой оси должны быть свои настройки, которые можно менять:
  • локальный выключатель оси
  • локальный выключатель синхронизации с другими осями
  • текущая позиция в шагах
  • начальная частота
  • максимальная частота
  • максимальное ускорение
Если у кого-то есть советы - пишите.
Последний раз редактировалось MX_Master 05 сен 2017, 14:31, всего редактировалось 2 раза.
Аватара пользователя
selenur
Почётный участник
Почётный участник
Сообщения: 4605
Зарегистрирован: 21 авг 2013, 19:44
Репутация: 1622
Настоящее имя: Сергей
Откуда: Новый Уренгой
Контактная информация:

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

Сообщение selenur »

Было-бы неплохо, в процессе запуска движения оси на ходу менять это значение
MX_Master писал(а):текущая позиция в шагах
Тут понадобилось себе упростить одну штуку, и сделал очень по быстрому так:
https://www.youtube.com/watch?v=coPd3Pb9dhc
Т.к. код разгона торможения не мой, и пока не добавил функцию, когда нажимаешь и держишь кнопку например влево, то происходит разгон, и начинается движение пока нажата кнопка, как кнопку отпускаю, так сразу нужно начинать сбрасывать скорость, вот такой функции мне иногда в поделках не хватает.
Мой сайт: http://selenur.ru
Исходники моих программ: https://github.com/selenur
Instagram https://www.instagram.com/zheigurov/
Аватара пользователя
MX_Master
Мастер
Сообщения: 7488
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3113
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

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

Сообщение MX_Master »

Я так понял, речь про бесконечное движение по команде и остановка по команде. Не?
Текущая позиция в шагах подсчитывается и меняется с частотой 10 КГц.
Подправил текущий вариант плана.
Аватара пользователя
selenur
Почётный участник
Почётный участник
Сообщения: 4605
Зарегистрирован: 21 авг 2013, 19:44
Репутация: 1622
Настоящее имя: Сергей
Откуда: Новый Уренгой
Контактная информация:

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

Сообщение selenur »

MX_Master писал(а):Я так понял, речь про бесконечное движение по команде и остановка по команде. Не?
Текущая позиция в шагах подсчитывается и меняется с частотой 10 КГц.
Да, именно так ;-)
Мой сайт: http://selenur.ru
Исходники моих программ: https://github.com/selenur
Instagram https://www.instagram.com/zheigurov/
Аватара пользователя
MX_Master
Мастер
Сообщения: 7488
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3113
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

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

Сообщение MX_Master »

selenur писал(а):
MX_Master писал(а):Я так понял, речь про бесконечное движение по команде и остановка по команде. Не?
Текущая позиция в шагах подсчитывается и меняется с частотой 10 КГц.
Да, именно так ;-)
Понял. Реализуется вроде просто - говорим оси двигаться в максимальную координату. И она пилит туда до посинения пока не скомандуем стоп.

Максимальная координата в шагах = 256^4 / 2 = 2147483648 (число, 32 бита, со знаком). Если, к примеру в предполагаемом контроллере указано 640 шагов на 1 мм, то 2147483648 шагов будет = 3355443 мм (3.35 км). Если не жмякнуть стоп, к вечеру может туда и доберётся :hehehe:
Аватара пользователя
selenur
Почётный участник
Почётный участник
Сообщения: 4605
Зарегистрирован: 21 авг 2013, 19:44
Репутация: 1622
Настоящее имя: Сергей
Откуда: Новый Уренгой
Контактная информация:

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

Сообщение selenur »

главное что-бы по команде стоп, плавно остановилось а не резко :-)
А после остановки, уже можно будет получить текущие координаты, и передвинуться на нужное количество шагов, что-бы место остановки было равно либо десяткам миллиметров, либо единицам мм. Как-то пересекался с задачкой, что пользователь примерно оценивая где нужно остановиться отпускал кнопку, а потом подруливал к ближайшей единице миллиметров, правда не знаю зачем :wik:
Мой сайт: http://selenur.ru
Исходники моих программ: https://github.com/selenur
Instagram https://www.instagram.com/zheigurov/
Аватара пользователя
MX_Master
Мастер
Сообщения: 7488
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3113
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

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

Сообщение MX_Master »

selenur писал(а):главное что-бы по команде стоп, плавно остановилось а не резко
Это можно будет указать в самой команде стоп. Читал недавно мануал к powerSTEP01, и там было две команды стоп - мягкий и жёсткий стоп :hehehe:
atomichammer
Опытный
Сообщения: 136
Зарегистрирован: 20 янв 2017, 13:10
Репутация: 7
Настоящее имя: Anton
Откуда: Алматы
Контактная информация:

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

Сообщение atomichammer »

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

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

Сообщение MX_Master »

atomichammer писал(а):А я вот чего-то пропустил, выравнивание скоростей осей будет? Чтобы все оси одновременно останавливались.
Да. В обычном режиме все оси синхронизированы. Разсинхрон и независимые оси - это опция. Неоднократно встречались задачи, где одна или несколько осей должны быть независимыми. И разсинхрон в этих случаях весьма полезен.
atomichammer
Опытный
Сообщения: 136
Зарегистрирован: 20 янв 2017, 13:10
Репутация: 7
Настоящее имя: Anton
Откуда: Алматы
Контактная информация:

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

Сообщение atomichammer »

MX_Master писал(а): Да. В обычном режиме все оси синхронизированы. Разсинхрон и независимые оси - это опция. Неоднократно встречались задачи, где одна или несколько осей должны быть независимыми. И разсинхрон в этих случаях весьма полезен.
А можно пример такой задачи, для повышения образованности. В моем пресловутом Pick'n'Place как раз так сделано, т.е. перемещение получается не по прямой, а по ломаной линии, что явно не идет ему на пользу. Интересно, это баг или фича?
Аватара пользователя
MX_Master
Мастер
Сообщения: 7488
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3113
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

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

Сообщение MX_Master »

atomichammer писал(а):А можно пример такой задачи, для повышения образованности.
Первое, чё пришло на ум - в 3Д принтере шаговики экструдера могут быть независимыми. На станке с поворотной осью, можно включить поворотку независимо, чтобы что-то выточить.
slavik
Кандидат
Сообщения: 51
Зарегистрирован: 13 июл 2017, 15:26
Репутация: 3
Откуда: Благовещенск, Амурская обл.
Контактная информация:

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

Сообщение slavik »

Такой вопрос: Можно ли обойтись целочисленной арифметикой, реализуя разгон/торможение по S кривой? (морально готовлюсь копать коды...)
Аватара пользователя
Argon-11
Мастер
Сообщения: 2068
Зарегистрирован: 07 июн 2017, 17:48
Репутация: 461
Контактная информация:

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

Сообщение Argon-11 »

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

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

Сообщение slavik »

Argon-11 писал(а):А чем "плавучка" не устраивает?
"Плавучка" тактов много занимает. Да и с целочисленной код проще, мне кажется. У меня все до кучи на одном контролере (STM32F407VET6).
Аватара пользователя
Argon-11
Мастер
Сообщения: 2068
Зарегистрирован: 07 июн 2017, 17:48
Репутация: 461
Контактная информация:

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

Сообщение Argon-11 »

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

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

Сообщение MX_Master »

slavik писал(а):Такой вопрос: Можно ли обойтись целочисленной арифметикой, реализуя разгон/торможение по S кривой? (морально готовлюсь копать коды...)
Я ж пару страниц назад давал пример трёхсекционной S-кривой на целочисленной логике. Вот здесь - http://www.cnc-club.ru/forum/viewtopic. ... 60#p376858
Ответить

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