DMA?slavik писал(а):Тоже когда начинал разбираться теплилась надежда, что FSMC - панацея. FSMC в отличии от SPI позволяет работать с контролером экрана по 16 битной шине и дергать ножки управления. Команды же и данные по каждому пикселю приходится слать одиночно, что сильно уже грузит проц. При этом у большого цветного экрана поток данных в несколько больше.MX_Master писал(а): видел кучу статей по подключению LCD экранчиков с помощью контроллера внешней памяти - FSMC
Шаговый генератор на STM32 (STEP/DIR/ENBL)
- MX_Master
- Мастер
- Сообщения: 7488
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3113
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
-
slavik
- Кандидат
- Сообщения: 51
- Зарегистрирован: 13 июл 2017, 15:26
- Репутация: 3
- Откуда: Благовещенск, Амурская обл.
- Контактная информация:
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Тоже задействован. FSMC для работы с памятью. А с экраном можно работать используя только две ячейки (16 бит) памяти, одна для выбора команда/данные, другая для параметра/данные. Записываем ячейки, запускаем поток DMA, информация на экране.MX_Master писал(а):DMA?
-
slavik
- Кандидат
- Сообщения: 51
- Зарегистрирован: 13 июл 2017, 15:26
- Репутация: 3
- Откуда: Благовещенск, Амурская обл.
- Контактная информация:
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Возможно еще один поток DMA туда можно прикрутить. Надо попробовать...
- MX_Master
- Мастер
- Сообщения: 7488
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3113
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Всё-таки, маловато DMA каналов у STM32F103C8T6 для подключения дополнительных модулей с W5500 и MicroSD. Долго думал и прикидывал разные варианты. Пришёл к выводу, что к генератору ничего лепить не нужно. Единственное средство связи, которое у него будет - это SPI (slave). Это значит, что подключаться к другим устройствам генератор будет только по SPI в качестве ведомого устройства. По SPI генератор будет получать короткие сообщения с настройками и командами движения.
Такой подход позволит подключить генератор к любой ардуине, к любому внешнему МК на выбор, а также к любым одноплатникам типа Raspberry Pi, Orange Pi, BeagleBone и т.д.
Возможные области применения генератора на будущее:
Такой подход позволит подключить генератор к любой ардуине, к любому внешнему МК на выбор, а также к любым одноплатникам типа 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)
Набросал общий план. Пока без мелочей.
должны быть как минимум две функции начала движения:
должны быть как минимум две функции начала движения:
- линейное перемещение, с параметрами:
: массив новых координат для осей
: начальная частота
: конечная частота - перемещение по дуге, с параметрами:
: массив новых координат для осей
: массив параметров дуги (плоскость, центр, кол-во витков)
: начальная частота
: конечная частота
- глобальный ВКЛ/ВЫКЛ всех осей
- глобальный ВКЛ/ВЫКЛ паузы для всех осей
- глобальная остановка всех осей
- локальный ВКЛ/ВЫКЛ указанной оси
- локальный ВКЛ/ВЫКЛ паузы для указанной оси
- локальная остановка указанной оси
- текущий тип ускорения (линейное, по S-кривой)
- длина начала S-кривой в процентах
- длина конца S-кривой в процентах
- текущая позиция в шагах
- максимальное ускорение
- начальная частота вывода шагов
- текущая частота вывода шагов
- максимальная частота вывода шагов
Последний раз редактировалось MX_Master 05 сен 2017, 14:31, всего редактировалось 2 раза.
- selenur
- Почётный участник

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

- Сообщения: 4605
- Зарегистрирован: 21 авг 2013, 19:44
- Репутация: 1622
- Настоящее имя: Сергей
- Откуда: Новый Уренгой
- Контактная информация:
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Да, именно такMX_Master писал(а):Я так понял, речь про бесконечное движение по команде и остановка по команде. Не?
Текущая позиция в шагах подсчитывается и меняется с частотой 10 КГц.
Мой сайт: http://selenur.ru
Исходники моих программ: https://github.com/selenur
Instagram https://www.instagram.com/zheigurov/
Исходники моих программ: https://github.com/selenur
Instagram https://www.instagram.com/zheigurov/
- MX_Master
- Мастер
- Сообщения: 7488
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3113
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Понял. Реализуется вроде просто - говорим оси двигаться в максимальную координату. И она пилит туда до посинения пока не скомандуем стоп.selenur писал(а):Да, именно такMX_Master писал(а):Я так понял, речь про бесконечное движение по команде и остановка по команде. Не?
Текущая позиция в шагах подсчитывается и меняется с частотой 10 КГц.
Максимальная координата в шагах = 256^4 / 2 = 2147483648 (число, 32 бита, со знаком). Если, к примеру в предполагаемом контроллере указано 640 шагов на 1 мм, то 2147483648 шагов будет = 3355443 мм (3.35 км). Если не жмякнуть стоп, к вечеру может туда и доберётся
- selenur
- Почётный участник

- Сообщения: 4605
- Зарегистрирован: 21 авг 2013, 19:44
- Репутация: 1622
- Настоящее имя: Сергей
- Откуда: Новый Уренгой
- Контактная информация:
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
главное что-бы по команде стоп, плавно остановилось а не резко 
А после остановки, уже можно будет получить текущие координаты, и передвинуться на нужное количество шагов, что-бы место остановки было равно либо десяткам миллиметров, либо единицам мм. Как-то пересекался с задачкой, что пользователь примерно оценивая где нужно остановиться отпускал кнопку, а потом подруливал к ближайшей единице миллиметров, правда не знаю зачем
А после остановки, уже можно будет получить текущие координаты, и передвинуться на нужное количество шагов, что-бы место остановки было равно либо десяткам миллиметров, либо единицам мм. Как-то пересекался с задачкой, что пользователь примерно оценивая где нужно остановиться отпускал кнопку, а потом подруливал к ближайшей единице миллиметров, правда не знаю зачем
Мой сайт: http://selenur.ru
Исходники моих программ: https://github.com/selenur
Instagram https://www.instagram.com/zheigurov/
Исходники моих программ: https://github.com/selenur
Instagram https://www.instagram.com/zheigurov/
- MX_Master
- Мастер
- Сообщения: 7488
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3113
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Это можно будет указать в самой команде стоп. Читал недавно мануал к powerSTEP01, и там было две команды стоп - мягкий и жёсткий стопselenur писал(а):главное что-бы по команде стоп, плавно остановилось а не резко
-
atomichammer
- Опытный
- Сообщения: 136
- Зарегистрирован: 20 янв 2017, 13:10
- Репутация: 7
- Настоящее имя: Anton
- Откуда: Алматы
- Контактная информация:
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
А я вот чего-то пропустил, выравнивание скоростей осей будет? Чтобы все оси одновременно останавливались.
- MX_Master
- Мастер
- Сообщения: 7488
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3113
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Да. В обычном режиме все оси синхронизированы. Разсинхрон и независимые оси - это опция. Неоднократно встречались задачи, где одна или несколько осей должны быть независимыми. И разсинхрон в этих случаях весьма полезен.atomichammer писал(а):А я вот чего-то пропустил, выравнивание скоростей осей будет? Чтобы все оси одновременно останавливались.
-
atomichammer
- Опытный
- Сообщения: 136
- Зарегистрирован: 20 янв 2017, 13:10
- Репутация: 7
- Настоящее имя: Anton
- Откуда: Алматы
- Контактная информация:
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
А можно пример такой задачи, для повышения образованности. В моем пресловутом Pick'n'Place как раз так сделано, т.е. перемещение получается не по прямой, а по ломаной линии, что явно не идет ему на пользу. Интересно, это баг или фича?MX_Master писал(а): Да. В обычном режиме все оси синхронизированы. Разсинхрон и независимые оси - это опция. Неоднократно встречались задачи, где одна или несколько осей должны быть независимыми. И разсинхрон в этих случаях весьма полезен.
- MX_Master
- Мастер
- Сообщения: 7488
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3113
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Первое, чё пришло на ум - в 3Д принтере шаговики экструдера могут быть независимыми. На станке с поворотной осью, можно включить поворотку независимо, чтобы что-то выточить.atomichammer писал(а):А можно пример такой задачи, для повышения образованности.
-
slavik
- Кандидат
- Сообщения: 51
- Зарегистрирован: 13 июл 2017, 15:26
- Репутация: 3
- Откуда: Благовещенск, Амурская обл.
- Контактная информация:
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Такой вопрос: Можно ли обойтись целочисленной арифметикой, реализуя разгон/торможение по S кривой? (морально готовлюсь копать коды...)
- Argon-11
- Мастер
- Сообщения: 2068
- Зарегистрирован: 07 июн 2017, 17:48
- Репутация: 461
- Контактная информация:
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Я не вижу принципиальных причин по которым было бы нельзя. А чем "плавучка" не устраивает?slavik писал(а):Можно ли обойтись целочисленной арифметикой
-
slavik
- Кандидат
- Сообщения: 51
- Зарегистрирован: 13 июл 2017, 15:26
- Репутация: 3
- Откуда: Благовещенск, Амурская обл.
- Контактная информация:
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
"Плавучка" тактов много занимает. Да и с целочисленной код проще, мне кажется. У меня все до кучи на одном контролере (STM32F407VET6).Argon-11 писал(а):А чем "плавучка" не устраивает?
- Argon-11
- Мастер
- Сообщения: 2068
- Зарегистрирован: 07 июн 2017, 17:48
- Репутация: 461
- Контактная информация:
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Вот не скажите! Я 7 лет разрабатывал измерительные приборы с преимущественно целочисленной арифметикой. Да, она заметно быстрее "плавучки", но никак не проще! Это вам надо мозговать когда сделать правильное округление, где заменить деление сдвигом, как избежать переполнения и т.п.slavik писал(а):"Плавучка" тактов много занимает. Да и с целочисленной код проще, мне кажется.
Так что советую, раз уж имеете достаточно мощный МК, используйте плавучку. А если беспокоят такты, то распределите ресурсы так, чтобы вычисления проводить в моменты простоя МК. А такие однозначно будут. А если не будет - меняйте МК или иначе стройте архитектуру проекта, используйте периферию по-максимуму.
- MX_Master
- Мастер
- Сообщения: 7488
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3113
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Шаговый генератор на STM32 (STEP/DIR/ENBL)
Я ж пару страниц назад давал пример трёхсекционной S-кривой на целочисленной логике. Вот здесь - http://www.cnc-club.ru/forum/viewtopic. ... 60#p376858slavik писал(а):Такой вопрос: Можно ли обойтись целочисленной арифметикой, реализуя разгон/торможение по S кривой? (морально готовлюсь копать коды...)