Не могу считать фронты оптического энкодера Omron e6b2-cwz6c на микроконтроллере Миландр 1986ВЕ91Т

kordmetal

✩✩✩✩✩✩✩
2 Июн 2023
4
0
Оформи код соответствующим тэгом
Добрый день.
Не могу считать фронты фазы А энкодера. В чём может быть проблема?
Энкодер рабочий, на ардуино без проблем всё работает.
Т.к. энкодер 5В, его выход А к пину 0 Миландра подключил через делитель(схему прилагаю). Между выходом энкодера и gnd намерил сопротивление 30 Ом(в даташите почему-то указано 3.3 Ома).
Schematic_Expansion board for debugging board Milandr_2023-05-14.png

Код:
int main(void){
    Init_HSE_PLL(); //80 МГц
    Init_SysTick(); //системный таймер 1 мс

    //PORTD Pin 0 - вход фазы А энкодера

    //PORTD Pin 10 - светодиод

    MDR_RST_CLK->PER_CLOCK |= (1 << 24); //тактирование PORTD

    MDR_PORTD->ANALOG |= (1 << 0);    //пин 0 - цифровой
    MDR_PORTD->OE         |= (0 << 0);    //пин 0 - вход
    MDR_PORTD->ANALOG |= (1 << 10);    //пин 10 - цифровой
    MDR_PORTD->OE         |= (1 << 10);    //пин 10 - выход
    MDR_PORTD->PWR        |= (2 << 10*2);    // 0 - off, 1 - 100 ns front, 2 - 20 ns front, 3 - 10 ns front

    while(1){
        if(MDR_PORTD->RXTX & (1 << 0)) //если высокий уровень на пине 0, тогда загорается светодиод
            MDR_PORTD->RXTX     |= (1 << 10);
    }
}
Соответственно светодиод не загорается. Пытался также реализовать на Таймере в режиме захвата фронтов - аналогично ничего не приходит.
 
Изменено:

Геннадий П

★★★★★★✩
14 Апр 2021
1,975
635
45
Как говорится, если что то не знаешь - читай даташит.

У Omron e6b2-cwz6c используется открытый коллектор на выходе. Это означает, что его нужно подтянуть к 3.3 или 5 В, в зависимости от того какой уровень используется в контроллере, либо использовать внутреннюю подтяжку если контроллер это поддерживает.

1685792393840.png 1685792459884.png
 

kordmetal

✩✩✩✩✩✩✩
2 Июн 2023
4
0
@Геннадий П, Здравствуйте, не работает. Возможно код неверный. Логика МК 3.3 В.

Код:
    MDR_RST_CLK->PER_CLOCK |= (1 << 24); //тактирование PORTD
    MDR_PORTD->ANALOG |= (1 << 0);    //пин 0 - цифровой
    MDR_PORTD->OE         |= (0 << 0);    //пин 0 - вход
    MDR_PORTD->PULL     = 0xFFFF0000; //подтяжка в питание
Снимок экрана 2023-06-03 192422.png
 
Изменено:

Геннадий П

★★★★★★✩
14 Апр 2021
1,975
635
45
@kordmetal, тестером/осциллографом замеряйте, работает ли подтяжки и сигнал доходит ли до контроллера
 

kordmetal

✩✩✩✩✩✩✩
2 Июн 2023
4
0
@Геннадий П, К сожалению осциллографа не имею. Подтяжки вроде работают(на этом порту висят 5 светодиодов(схему прилагаю), когда подтяжки выставил, они тускло загорелись).
Снимок экрана 2023-06-03 201733.png
Если это имеет значение, то работаю с отладочной платой 1986EvBoard_Rev5:
photo_2023-02-09_05-08-43.jpg
Может номиналы делителя неправильно подобрал.
 

Геннадий П

★★★★★★✩
14 Апр 2021
1,975
635
45
@kordmetal, Соберите отдельный стенд, в котором только энкодер, его питание и подтяжка на выходы, и проверьте, работает ли он. Делитель из первого сообщения не нужен.

И в итоге, схема подключения должна быть примерно такой, если использовать внешнюю подтяжку:

1685800580232.png
 
  • Лойс +1
Реакции: kordmetal