encoder

Petr Labaj labaj na volny.cz
Pondělí Květen 15 19:23:44 CEST 2017


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.



Další informace o konferenci Hw-list