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