Skocz do zawartości

[C] STM32F103 - odczyt sygnału PWM z enkodera as5048a


karol9966

Pomocna odpowiedź

Cześć, zabrałem się właśnie za płytkę z enkoderem as5048a, chcę przy pomocy wyjścia PWM z enkodera ustalić jego obrót. W dokumentacji niby wszystko jest napisane (w załączniku wrzucam opis interfejsu pwm) lecz nie mogę sobie poradzić z tym. Obecnie mam taki kod

void TIMERS_Configuration(void) {
TIM_ICInitTypeDef TIM_ICInitStructure;

TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; // _Falling
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
TIM_ICInitStructure.TIM_ICFilter = 0x0;

TIM_PWMIConfig(TIM3, &TIM_ICInitStructure);
TIM_SelectInputTrigger(TIM3, TIM_TS_TI2FP2);
TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);
TIM_SelectMasterSlaveMode(TIM3, TIM_MasterSlaveMode_Enable);
TIM_Cmd(TIM3, ENABLE);
TIM_ITConfig(TIM3, TIM_IT_CC2, ENABLE);
}

void NVIC_Configuration(void) {
NVIC_InitTypeDef NVIC_InitStructure;

NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}

int IC2Value, DutyCycle, Frequency;

void TIM3_IRQHandler(void) {

TIM_ClearITPendingBit(TIM3, TIM_IT_CC2);

IC2Value = TIM_GetCapture2(TIM3);

if (IC2Value != 0) {

	DutyCycle = (TIM_GetCapture1(TIM3) * 100) / IC2Value;

	Frequency = SystemCoreClock / IC2Value;
} else {
	DutyCycle = 0;
	Frequency = 0;
}
}

Zmienna DutyCycle reaguje na obrót magnesu nad układem, lecz jest to niedokładne, w sensie zmienna nie zatrzymuje się na danej liczbie tylko ma rozrzut ok. 200 jednostek pomiędzy wartością maksymalną, a minimalną. Jak mogę poprawić kod, żeby pozbyć się tego błędu?

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.