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

Контроллеры, драйверы, датчики, управляющие устройства.

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

Сообщение UAVpilot » 06 дек 2016, 12:33

Сергей Саныч писал(а):Чтобы, скажем, один пиксел черно-белой картинки занимал один бит, а не, скажем, целый байт.

В этом случае тоже не надо морочится с битовыми операциями. Прога ж на С пишется - вот пусть он этим и занимается, а вы просто создайте нужный тип данных с помощью структур и объединений.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 16858
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 4149
Медальки:
Настоящее имя: Сергей

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

Сообщение raddd » 06 дек 2016, 12:36

Удвоитель без МК. Еще из детства помню.
http://irls.narod.ru/it/uchi.htm
Аватара пользователя
raddd
Мастер
 
Сообщения: 1394
Зарегистрирован: 10 фев 2015, 08:50
Откуда: Беларусь Минский р-н
Репутация: 486
Медальки:
Настоящее имя: Alexey Rodionov

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

Сообщение UAVpilot » 06 дек 2016, 12:46

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

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

Сообщение Сергей Саныч » 06 дек 2016, 12:48

UAVpilot писал(а):В этом случае тоже не надо морочится с битовыми операциями.
У STM32 имеется технология Bit Banding, которая резко упрощает и ускоряет работу с битовыми данными.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Сергей Саныч
Мастер
 
Сообщения: 7980
Зарегистрирован: 30 май 2012, 14:20
Откуда: Тюмень
Репутация: 2484
Медальки:

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

Сообщение raddd » 06 дек 2016, 12:50

Если не меандр выходит то да... негодится...:(
Аватара пользователя
raddd
Мастер
 
Сообщения: 1394
Зарегистрирован: 10 фев 2015, 08:50
Откуда: Беларусь Минский р-н
Репутация: 486
Медальки:
Настоящее имя: Alexey Rodionov

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

Сообщение UAVpilot » 06 дек 2016, 12:52

Сергей Саныч писал(а):У STM32 имеется технология Bit Banding, которая резко упрощает и ускоряет работу с битовыми данными.

Но зачем делать лишние телодвижения, если можно просто и естественно работать с обычными переменными? :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 16858
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 4149
Медальки:
Настоящее имя: Сергей

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

Сообщение Сергей Саныч » 06 дек 2016, 13:00

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

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

Сообщение UAVpilot » 06 дек 2016, 13:05

Я очень сильно подозреваю, что компилятор С для stm32 просто воспользуется этим самым BitBanding'ом. :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 16858
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 4149
Медальки:
Настоящее имя: Сергей

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

Сообщение Сергей Саныч » 06 дек 2016, 13:17

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

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

Сообщение UAVpilot » 06 дек 2016, 13:38

В С он есть с момента создания - bit field. :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 16858
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 4149
Медальки:
Настоящее имя: Сергей

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

Сообщение Олег. » 06 дек 2016, 19:48

На скриншоте с протеусом не та скважность выходных импульсов, которые нужны для шаговика.
Вам нужно пачку импульсов на выходе, распределить равномерно между фронтами входных импульсов.
Олег.
Опытный
 
Сообщения: 122
Зарегистрирован: 20 ноя 2014, 19:18
Репутация: 13

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

Сообщение selenur » 06 дек 2016, 20:23

UAVpilot писал(а):
selenur писал(а):Я в некоторых проектах использую вот такую http://www.st.com/en/evaluation-tools/3 ... overy.html в ней есть внешняя память на 64 мбит, работать с памятью легко, скорость огромная....

А эта память может отображаться в общее адресное пространство МК, чтоб её можно было использовать под переменные? В доках не нашёл ничего про это...

Вроде-бы нет... :wik:
Мой сайт: http://selenur.ru
Исходники моих программ: https://github.com/selenur
Аватара пользователя
selenur
Почётный участник
Почётный участник
 
Сообщения: 3713
Зарегистрирован: 21 авг 2013, 19:44
Откуда: Новый Уренгой
Репутация: 1301
Медальки:
Настоящее имя: Сергей

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

Сообщение sidor094 » 06 дек 2016, 21:52

selenur писал(а):Вроде-бы нет..

Запросто.А иначе зачем она нужна.Укажите явный адрес переменной.
sidor094
Мастер
 
Сообщения: 300
Зарегистрирован: 20 фев 2014, 09:13
Репутация: 34

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

Сообщение selenur » 06 дек 2016, 21:55

sidor094 писал(а):
selenur писал(а):Вроде-бы нет..

Запросто.А иначе зачем она нужна.Укажите явный адрес переменной.

Это как? :shock:
Мой сайт: http://selenur.ru
Исходники моих программ: https://github.com/selenur
Аватара пользователя
selenur
Почётный участник
Почётный участник
 
Сообщения: 3713
Зарегистрирован: 21 авг 2013, 19:44
Откуда: Новый Уренгой
Репутация: 1301
Медальки:
Настоящее имя: Сергей

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

Сообщение sidor094 » 06 дек 2016, 22:01

как пример использую для памяти экрана
unsigned long * screen_buf=(unsigned long *)(SDRAM_BASE_ADDR+SDRAM_SIZE-640*480);//BUFFER_ADDR;BUFFER_ADDR;;
Также посмотрите как задаются все регистры в системных файлах.
sidor094
Мастер
 
Сообщения: 300
Зарегистрирован: 20 фев 2014, 09:13
Репутация: 34

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

Сообщение UAVpilot » 06 дек 2016, 23:31

Это если она таки отображается. А может быть и доступ в виде "на порту PA выставили адрес, в порт PB записали данные".
Чтобы узнать точно нужен файлик .ld (или как там в других IDE), где описана карта памяти.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 16858
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 4149
Медальки:
Настоящее имя: Сергей

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

Сообщение sidor094 » 07 дек 2016, 08:44

Во всех микросхемах где есть поддержка внешнего озу оно находится в адресном пространстве процессора.Можно конечно подключить озу через порты ввода вывода но это сейчас уже извращение и используется только в крайних случаях.Раньше многие микроконтроллеры не имели возможности подключить внешнее озу или имели крайне ограниченное адресное пространство .Тогда это имело смысл.Сейчас во всех линейках кортекса существуют микросхемы с внешним озу.Так что проще при необходимости использовать их.А адресное пространство у кортекса 4гига.
sidor094
Мастер
 
Сообщения: 300
Зарегистрирован: 20 фев 2014, 09:13
Репутация: 34

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

Сообщение MX_Master » 07 дек 2016, 08:50

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

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

Код: Выделить всёРазвернуть

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

TIME       |      T1     |     T2    |  T3  |

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


Если период T1 и T2 можно засечь по времени, то как быть с Т3 ? Следующего фронта на входе нет для замера, а умножить и вывести третий шаг надо.
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 3305
Зарегистрирован: 27 июн 2015, 19:45
Откуда: KZ
Репутация: 1725
Медальки:
Настоящее имя: Михаил

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

Сообщение Andrey@KZN » 07 дек 2016, 09:08

Так на картинке все вторые импульсы выдаются до прихода следующего шага.
Т.е.
Т1 - выдаётся два импульса до того, как получен Т2 и мы знаем, сколько времени между Т1 и Т2.
В данном примере проблема не в Т3, а вообще, некорректный он.
Andrey@KZN
Мастер
 
Сообщения: 284
Зарегистрирован: 22 авг 2016, 12:21
Репутация: 37
Настоящее имя: Андрей

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

Сообщение Mamont » 07 дек 2016, 09:46

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

С предыдущего импульса отсчитывается период, делится надвое. После прихода нового импульса, он выдается, а через половинку предыдущего импульса выдается промежуточный.
Т.е. задача для первого импульса

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

В работе, после первого импульса, который был после длительного простоя, выдается через базовое время этот импульс
Аватара пользователя
Mamont
Мастер
 
Сообщения: 490
Зарегистрирован: 10 дек 2015, 12:21
Откуда: РБ Минск
Репутация: 60
Настоящее имя: Виталий

Пред.След.

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

Кто сейчас на конференции

Зарегистрированные пользователи: Bing [Bot], Google [Bot], Majestic-12 [Bot], Rom327, selenur, Yandex [bot], Канатекс, ДмитрийП

Поделиться

Reputation System ©'