Умножитель частоты шагов на STM32

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

Re: Умножитель STEP/DIR на Arduino

Сообщение Serg »

Сергей Саныч писал(а):Чтобы, скажем, один пиксел черно-белой картинки занимал один бит, а не, скажем, целый байт.
В этом случае тоже не надо морочится с битовыми операциями. Прога ж на С пишется - вот пусть он этим и занимается, а вы просто создайте нужный тип данных с помощью структур и объединений.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
raddd
Почётный участник
Почётный участник
Сообщения: 1564
Зарегистрирован: 10 фев 2015, 08:50
Репутация: 539
Настоящее имя: Alexey Rodionov
Откуда: Беларусь Минский р-н
Контактная информация:

Re: Умножитель STEP/DIR на Arduino

Сообщение raddd »

Удвоитель без МК. Еще из детства помню.
http://irls.narod.ru/it/uchi.htm
||||||||||||
||||||||||||
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Умножитель STEP/DIR на Arduino

Сообщение Serg »

Такой удвоитель не годится - равномерность следования импульсов будет зависить от длительности входных импульсов, а она как правило постоянная по всём диапазоне частот. На выходе будут пары импульсов с постоянной длительнотью пауз между ними и разной длительностью пауз между группами в зависимости от частоты.
Чтобы такая схема работала правильно ей на вход нужно всегда подавать строго меандр, а гарантированно его получить можно только поделив входную частоту на 2...:)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2857
Откуда: Тюмень
Контактная информация:

Re: Умножитель STEP/DIR на Arduino

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

UAVpilot писал(а):В этом случае тоже не надо морочится с битовыми операциями.
У STM32 имеется технология Bit Banding, которая резко упрощает и ускоряет работу с битовыми данными.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
raddd
Почётный участник
Почётный участник
Сообщения: 1564
Зарегистрирован: 10 фев 2015, 08:50
Репутация: 539
Настоящее имя: Alexey Rodionov
Откуда: Беларусь Минский р-н
Контактная информация:

Re: Умножитель STEP/DIR на Arduino

Сообщение raddd »

Если не меандр выходит то да... негодится...:(
||||||||||||
||||||||||||
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Умножитель STEP/DIR на Arduino

Сообщение Serg »

Сергей Саныч писал(а):У STM32 имеется технология Bit Banding, которая резко упрощает и ускоряет работу с битовыми данными.
Но зачем делать лишние телодвижения, если можно просто и естественно работать с обычными переменными? :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2857
Откуда: Тюмень
Контактная информация:

Re: Умножитель STEP/DIR на Arduino

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

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

Re: Умножитель STEP/DIR на Arduino

Сообщение Serg »

Я очень сильно подозреваю, что компилятор С для stm32 просто воспользуется этим самым BitBanding'ом. :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2857
Откуда: Тюмень
Контактная информация:

Re: Умножитель STEP/DIR на Arduino

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

UAVpilot писал(а):Я очень сильно подозреваю, что компилятор С для stm32 просто воспользуется этим самым BitBanding'ом. :)
Тогда, скорее всего, у него для этого должен быть предопределенный тип данных.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Умножитель STEP/DIR на Arduino

Сообщение Serg »

В С он есть с момента создания - bit field. :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Олег.
Опытный
Сообщения: 127
Зарегистрирован: 20 ноя 2014, 19:18
Репутация: 13
Контактная информация:

Re: Умножитель STEP/DIR на Arduino

Сообщение Олег. »

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

Re: Умножитель STEP/DIR на Arduino

Сообщение selenur »

UAVpilot писал(а):
selenur писал(а):Я в некоторых проектах использую вот такую http://www.st.com/en/evaluation-tools/3 ... overy.html в ней есть внешняя память на 64 мбит, работать с памятью легко, скорость огромная....
А эта память может отображаться в общее адресное пространство МК, чтоб её можно было использовать под переменные? В доках не нашёл ничего про это...
Вроде-бы нет... :wik:
Мой сайт: http://selenur.ru
Исходники моих программ: https://github.com/selenur
Instagram https://www.instagram.com/zheigurov/
sidor094
Мастер
Сообщения: 826
Зарегистрирован: 20 фев 2014, 09:13
Репутация: 81
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Умножитель STEP/DIR на Arduino

Сообщение sidor094 »

selenur писал(а):Вроде-бы нет..
Запросто.А иначе зачем она нужна.Укажите явный адрес переменной.
Аватара пользователя
selenur
Почётный участник
Почётный участник
Сообщения: 4604
Зарегистрирован: 21 авг 2013, 19:44
Репутация: 1621
Настоящее имя: Сергей
Откуда: Новый Уренгой
Контактная информация:

Re: Умножитель STEP/DIR на Arduino

Сообщение selenur »

sidor094 писал(а):
selenur писал(а):Вроде-бы нет..
Запросто.А иначе зачем она нужна.Укажите явный адрес переменной.
Это как? :shock:
Мой сайт: http://selenur.ru
Исходники моих программ: https://github.com/selenur
Instagram https://www.instagram.com/zheigurov/
sidor094
Мастер
Сообщения: 826
Зарегистрирован: 20 фев 2014, 09:13
Репутация: 81
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Умножитель STEP/DIR на Arduino

Сообщение sidor094 »

как пример использую для памяти экрана
unsigned long * screen_buf=(unsigned long *)(SDRAM_BASE_ADDR+SDRAM_SIZE-640*480);//BUFFER_ADDR;BUFFER_ADDR;;
Также посмотрите как задаются все регистры в системных файлах.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Умножитель STEP/DIR на Arduino

Сообщение Serg »

Это если она таки отображается. А может быть и доступ в виде "на порту PA выставили адрес, в порт PB записали данные".
Чтобы узнать точно нужен файлик .ld (или как там в других IDE), где описана карта памяти.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
sidor094
Мастер
Сообщения: 826
Зарегистрирован: 20 фев 2014, 09:13
Репутация: 81
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Умножитель STEP/DIR на Arduino

Сообщение sidor094 »

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

Re: Умножитель STEP/DIR на Arduino

Сообщение MX_Master »

Олег. писал(а):На скриншоте с протеусом не та скважность выходных импульсов, которые нужны для шаговика.
Вам нужно пачку импульсов на выходе, распределить равномерно между фронтами входных импульсов.
Подсчета периода там пока нет. На счет распределения между фронтами - логично, но тут вопрос - как быть с последним шагом во входной пачке? Зарисуем пример с ускорением и умножением на 2 ..

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


INPUT  ____|""|__________|""|________|""|________________

TIME       |      T1     |     T2    |  T3  |

OUTPUT ____|"|____|"|____|"|___|"|___|"|__|"|_____________

Если период T1 и T2 можно засечь по времени, то как быть с Т3 ? Следующего фронта на входе нет для замера, а умножить и вывести третий шаг надо.
Andrey@KZN
Мастер
Сообщения: 442
Зарегистрирован: 22 авг 2016, 12:21
Репутация: 44
Настоящее имя: Андрей
Контактная информация:

Re: Умножитель STEP/DIR на Arduino

Сообщение Andrey@KZN »

Так на картинке все вторые импульсы выдаются до прихода следующего шага.
Т.е.
Т1 - выдаётся два импульса до того, как получен Т2 и мы знаем, сколько времени между Т1 и Т2.
В данном примере проблема не в Т3, а вообще, некорректный он.
Аватара пользователя
Mamont
Мастер
Сообщения: 1966
Зарегистрирован: 10 дек 2015, 12:21
Репутация: 383
Настоящее имя: Виталий
Откуда: РБ Минск
Контактная информация:

Re: Умножитель STEP/DIR на Arduino

Сообщение Mamont »

MX_Master писал(а): Если период T1 и T2 можно засечь по времени, то как быть с Т3 ? Следующего фронта на входе нет для замера, а умножить и вывести третий шаг надо.
С предыдущего импульса отсчитывается период, делится надвое. После прихода нового импульса, он выдается, а через половинку предыдущего импульса выдается промежуточный.
Т.е. задача для первого импульса

Надо сделать автоопределение длительности первого импульса, определяется прогой, ее стартовой скоростью и ускорением. После включения питания (или длительного простоя без импульсов) длительность между первым и вторым делится надвое и принимается за базовую. Если она меньше чем находится в памяти, она корректируется. Больше - игнорируется

В работе, после первого импульса, который был после длительного простоя, выдается через базовое время этот импульс
Ответить

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