реклама на сайте
подробности

 
 
> Эмуляция энкодера.
Jenya7
сообщение Jul 24 2017, 05:45
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Что бы проверить работу таймера в режиме энкодера я решил эмулировать на двух ножках AB сигналы.
Код
void TIM7_IRQHandler(void)
{
   switch (enc_state)
   {
       case 0:
           GPIOF->BSRR = GPIO_Pin_9;   //1
           GPIOF->BRR = GPIO_Pin_10;   //0
       break;
       case 1:
           GPIOF->BSRR = GPIO_Pin_9;   //1
           GPIOF->BSRR = GPIO_Pin_10;  //1
       break;
       case 2:
           GPIOF->BRR = GPIO_Pin_9;   //0
           GPIOF->BSRR = GPIO_Pin_10; //1
       break;
       case 3:
           GPIOF->BRR = GPIO_Pin_9;   //0
           GPIOF->BRR = GPIO_Pin_10; //0
       break;
   }
  
   if(enc_state == 3)
     enc_state = 0;
   else
     enc_state++;
  
   TIM7->SR = 0;
}

По идее должно работать как на картинке, сигналы сдвинуты на 90 градусов, но на скопе я вижу сигналы в одной фазе. Это скоп так показывает или у меня ошибка?

Сообщение отредактировал Jenya7 - Jul 24 2017, 05:46
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
k155la3
сообщение Jul 24 2017, 06:03
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Задайте состояния выходов для энкодера таблицей.
И прокручивайте ее по кругу - наиболее приближенная к реальному энкодеру эмуляция.
(закрашенные сектора на диске - таже таблица)
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jul 24 2017, 06:10
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(k155la3 @ Jul 24 2017, 11:03) *
Задайте состояния выходов для энкодера таблицей.
И прокручивайте ее по кругу - наиболее приближенная к реальному энкодеру эмуляция.
(закрашенные сектора на диске - таже таблица)

это то что я делаю в коде - прокручиваю состояния каждый тайм слот (1-2-3-4).

снизил частоту и подключил светодиоды на выходы. мигают одновременно. значит скоп тут не виноват.

пробовал выставлять выход через ODR
Код
void TIM7_IRQHandler(void)
{
   switch (enc_state)
   {
       case 0:
           //ENC_PORT->BSRR |= ENC_PIN_A;  //1
           //ENC_PORT->BRR |= ENC_PIN_B;   //0
           ENC_PORT->ODR = 0x200;
       break;
       case 1:
           //ENC_PORT->BSRR |= ENC_PIN_A;  //1
           //ENC_PORT->BSRR |= ENC_PIN_B;  //1
             ENC_PORT->ODR = 0x600;
       break;
       case 2:
           //ENC_PORT->BRR |= ENC_PIN_A;   //0
           //ENC_PORT->BSRR |= ENC_PIN_B;  //1
           ENC_PORT->ODR = 0x400;
       break;
       case 3:
           //ENC_PORT->BRR |= ENC_PIN_A;   //0
           //ENC_PORT->BRR |= ENC_PIN_B;   //0
         ENC_PORT->ODR = 0x000;
          
       break;
   }
  
   if(enc_state == 3)
     enc_state = 0;
   else
     enc_state++;
  
   TIM7->SR = 0;
}

тот же результат

если я ставлю 4 брекпойнта - в каждом кейсе - то я вижу что состояния выходов меняются по таблице (10 11 01 00). но когда код бежит они мигают одновременно.

Сообщение отредактировал Jenya7 - Jul 24 2017, 07:06
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Jenya7   Эмуляция энкодера.   Jul 24 2017, 05:45
- - k155la3   скорее всего глючек не в приведенном коде, а ...   Jul 24 2017, 07:13
|- - Jenya7   Цитата(k155la3 @ Jul 24 2017, 12:13) скор...   Jul 24 2017, 07:21
- - Эдди   А таймер случайно в ту же ногу не выдает импульсы?   Jul 24 2017, 07:38
|- - Jenya7   Цитата(Эдди @ Jul 24 2017, 12:38) А тайме...   Jul 24 2017, 07:43
- - esaulenka   Тут прерывание срабатывает два раза. После команды...   Jul 24 2017, 07:57
|- - Jenya7   Цитата(esaulenka @ Jul 24 2017, 12:57) Ту...   Jul 24 2017, 08:23
- - esaulenka   Никогда _достаточно_ глубоко не разбирался, но сут...   Jul 24 2017, 08:47
|- - Jenya7   Цитата(esaulenka @ Jul 24 2017, 13:47) Ни...   Jul 24 2017, 09:17
- - Эдди   А частота какая? Странно, что такой небольшой кусо...   Jul 24 2017, 10:25
|- - Jenya7   Цитата(Эдди @ Jul 24 2017, 15:25) А часто...   Jul 24 2017, 10:53
|- - k155la3   Цитата(Jenya7 @ Jul 24 2017, 13:53) . . ....   Jul 24 2017, 11:46
|- - Jenya7   Цитата(k155la3 @ Jul 24 2017, 16:46) я по...   Jul 24 2017, 12:17
- - Эдди   Заведите отдельный счетчик, и в прерывании UE инкр...   Jul 24 2017, 13:33
|- - Jenya7   Цитата(Эдди @ Jul 24 2017, 18:33) Заведит...   Jul 24 2017, 15:03
- - Эдди   Можно почитать ST'шный RM по поводу связывания...   Jul 24 2017, 19:05
- - uriy   Для генерации такого сигнала не нужны никакие прер...   Jul 25 2017, 04:56
- - Александр1986   Всем привет. Ребята помогите разобраться с маркиро...   Aug 15 2017, 10:40
- - XVR   Цитата(Александр1986 @ Aug 15 2017, 13:40...   Aug 15 2017, 13:35


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 00:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01397 секунд с 7
ELECTRONIX ©2004-2016