encoder

Fanda hudaklan na volny.cz
Pondělí Květen 15 19:57:21 CEST 2017


Ano, je to mechanický, ale jak je vidět na CNT, tak to čítá správně po 
jedničce.
Problém je, že přerušení proběhne několikrát, i když CNT funguje OK.

HUDA


------ Původní zpráva ------
Od: "Petr Labaj" <labaj na volny.cz>
Komu: "HW-news" <hw-list na list.hw.cz>
Odesláno: 15.5.2017 19:23:44
Předmět: Re: encoder

>To máte mechanický enkodér? A díval jste se, jak vypadá jeho výstup?
>
>PL
>
>***********************
>
>Dne 15.5.2017 v 18:24 Fanda napsal(a):
>>Dobrý den,
>>na STM32F051 zkouším číst otáčkový snímač pro ovládání menu.
>>Používám TIMER1 v "Encoder interface mode" a pomocí registru ARR
>>nastavuji cyklus 0 - 8. Toto funguje dobře.
>>Teď jsem chtěl využít přerušení při přechodu čítače z 8 do 0 a z 0 do 
>>8.
>>Což také funguje, jen přerušení proběhne vždycky několikrát a já nevím 
>>proč.
>>
>>void InputSetup(void)
>>{
>>// nastaveni portu
>>  RCC->AHBENR |= ITOC_CLK;
>>
>>  SetPinPort(ITOC_PORT, ITOCA, GPIO_Speed_2MHz, GPIO_OType_OD, 
>>GPIO_Mode_AF, GPIO_PuPd_UP);
>>  SetPinPort(ITOC_PORT, ITOCB, GPIO_Speed_2MHz, GPIO_OType_OD, 
>>GPIO_Mode_AF, GPIO_PuPd_UP);
>>
>>  SetPinAF(ITOC_PORT, ITOCA, ITOC_AF);
>>  SetPinAF(ITOC_PORT, ITOCB, ITOC_AF);
>>// nastaveni timeru
>>  RCC->APB2ENR |= ITOC_TIM_CLK;
>>
>>  ITOC_TIM->CCMR1 = TIM_CCMR1_CC1S_0 | TIM_CCMR1_CC2S_0;
>>  ITOC_TIM->CCER = 0;
>>  ITOC_TIM->SMCR = TIM_SMCR_SMS_0 | TIM_SMCR_SMS_1;
>>  ITOC_TIM->ARR = 0x0008;
>>  ITOC_TIM->DIER = TIM_DIER_UIE;
>>  ITOC_TIM->CR1 = TIM_CR1_URS;
>>  ITOC_TIM->CR1 |= TIM_CR1_CEN;
>>
>>  NVIC_SetPriority(TIM1_BRK_UP_TRG_COM_IRQn, 0x00); //! nastavi 
>>prioritu Tim1
>>  NVIC_EnableIRQ(TIM1_BRK_UP_TRG_COM_IRQn); //! povoli preruseni od 
>>Tim1 v NVIC systemu
>>}
>>
>>void TIM1_BRK_UP_TRG_COM_IRQHandler(void)
>>{
>>  pokus2 = ITOC_TIM->SR;
>>  if (pokus2 & TIM_FLAG_Update)
>>    pokus1++;
>>  ITOC_TIM->SR &= (uint16_t)~(pokus2);
>>}
>>
>>Vypisuji si, přes sériovou linku, hodnoty registrů CNT a SR a proměnou 
>>pokus1. Například:
>>CNT SR pokus1
>>0000 0000 0000
>>0001 0000 0000
>>0002 0000 0000
>>0003 0000 0000
>>0004 0000 0000
>>0005 0000 0000
>>0006 0000 0000
>>0007 0000 0000
>>0008 0000 0000
>>0000 0019 0012
>>0001 0000 0000
>>0002 0000 0000
>>0003 0000 0000
>>0004 0000 0000
>>0005 0000 0000
>>0006 0000 0000
>>0007 0000 0000
>>0008 0000 0000
>>0000 0019 000E
>>
>>Mohl by mě někdo, prosím, říct jestli to takto jde, nebo kde dělám 
>>chybu.
>
>_______________________________________________
>HW-list mailing list  -  sponsored by www.HW.cz
>Hw-list na list.hw.cz
>http://list.hw.cz/mailman/listinfo/hw-list
>



Další informace o konferenci Hw-list