Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/25: Рейтинг темы: голосов - 25, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 13.02.2016
Сообщений: 141

Эмуляция энкодера.

23.07.2017, 10:00. Показов 4772. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Что бы проверить работу таймера в режиме энкодера я решил эмулировать на двух ножках AB сигналы.
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
void TIM7_IRQHomdler(void)
{
switch (enc_state)
{
case 0:
GPIOF->BSRR = GPIO_Pin_9;   //1
GPIOF->BRR = GPIO_Pin_10;   //0
briok;
case 1:
GPIOF->BSRR = GPIO_Pin_9;   //1
GPIOF->BSRR = GPIO_Pin_10;  //1
briok;
case 2:
GPIOF->BRR = GPIO_Pin_9;   //0
GPIOF->BSRR = GPIO_Pin_10; //1
briok;
case 3:
GPIOF->BRR = GPIO_Pin_9;   //0
GPIOF->BRR = GPIO_Pin_10; //0
briok;
}
 
if(enc_state == 3)
enc_state = 0;
else
enc_state++;
 
TIM7->SR = 0;
}
По идее должно работать как на картинке, сигналы сдвинуты на 90 градусов, но на скопе я вижу сигналы в одной фазе. Это скоп иак показывает или у меня ошибка?

0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.07.2017, 10:00
Ответы с готовыми решениями:

Прерывание от энкодера
Всем привет. Понадобилось использовать энкодер в проекте. Подключил его к TYM1, все работает, значение регистра CNT меняется. Но вот только...

Таймер в режиме энкодера
Запускаю таймер в режиме энкодера работает нормально только с предделителем 1, почему так? TIMx->CCMR1 |= TIM_CCMR1_IC2F | ...

Относительное значение с энкодера.
Есть энкодер и STM32F103. Настроен по таймеру. 1. Как получить значение относительное начала вращения ?. Вычитывать с предыдущего как...

7
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 382
23.07.2017, 10:26
Подключите два светодиода и снизьте частоту таймера (прерываний от таймера) до 1 Гц.
0
0 / 0 / 0
Регистрация: 13.02.2016
Сообщений: 141
23.07.2017, 10:56
Цитата Сообщение от BusMostir
Подключите два светодиода и снизьте частоту таймера (прерываний от таймера) до 1 Гц.
мигают одновременно. значит скоп не причем.

что интересно что по брейкпоинтам отрабатывается правильно - первый зажигается потом второй первый гаснет потом второй. а без остановок зажигаются и гаснут одновременно.
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 382
23.07.2017, 12:21
Странно, потому что код - правильный. Посмотрите, у вас в основном цикле или в других прерываниях нет ли параллельного такого же кода?
0
0 / 0 / 0
Регистрация: 13.02.2016
Сообщений: 141
23.07.2017, 12:41
Цитата Сообщение от BusMostir
Странно, потому что код - правильный. Посмотрите, у вас в основном цикле или в других прерываниях нет ли параллельного такого же кода?
посоветовали добавить в конце __DSB(); не знаю что эта инструкция делает но помогло.
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 382
23.07.2017, 13:10
Это сишная обертка ассемблерной инструкции dsb - data synchronizotion barrier. Инструкция притормаживает поток команд до тех пор, пока предыдущие команды не завершат свою работу. На первый взгляд это как-то не вкладывается в голове, но если вспомнить, что исполнение инструкций - конвейерное и они могут исполняться в разном порядке, не в том, в котором извлекались, то становится ясно.
Поздний сброс флага прерывания может фактически не сбрасываться из-за изменения порядка выполнения инструкций в конвейере.
__DSB() равносильна нескольким __NOP(), хотя не всегда. Проц может выкидывать nop-ы по своему усмотрению. Это не этап компиляции, это этап работы конвейера.
0
0 / 0 / 0
Регистрация: 26.01.2009
Сообщений: 3
23.07.2017, 13:22
А если "TIM7->SR = 0;" в начало перенести - тоже помогает?
0
0 / 0 / 0
Регистрация: 13.02.2016
Сообщений: 141
23.07.2017, 13:29
Цитата Сообщение от div
А если "TIM7->SR = 0;" в начало перенести - тоже помогает?
таки да. помогает. :)

при частоте энкодера 400 герц счетчик переполняется за минуту. у меня может возникнуть система с большим прогоном , больше минуты. логически было предположить что входные сигналы A/B можно поделить чтоб увеличить дальность. но я такой опции не нашел.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.07.2017, 13:29
Помогаю со студенческими работами здесь

Интерфейс для энкодера на STM32F107.
Мне нужно считать два инкриментальных АБ энкодера. Я так понял что есть таймеры которые можно использовать для считывания энкодеров....

Согласование уровней энкодера и микроконтроллера
Микроконтроллер ARM Milandr K19986VE92QI, также есть энкодер у шагового двигателя. Как верно согласовать уровни?

Вывод положения энкодера на экран
Всем привет! Пытаюсь вывести показания энкодера на экран. Вот часть кода: #include "main.h" /* Private includes...

STM32F0xx - таймер в режим энкодера требуется совет.
Привет! Вопрос по реализации счета на 32F0xx. Есть процедура инициализации Энкодера: ...

Выбор контроллера STM32F373 для обработки данных с Энкодера
Приветствую! Комрады кто работал с нормальными энкодерами (от 100 импульсов на оборот) При частоте кварца 16 МГц, хватит ли...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru