STM32F108 enkoder kullanımı hakkında

Başlatan kaftaraco, 22 Şubat 2018, 20:33:51

kaftaraco

Arkadaşlar merhaba size bir sorum olacak STM32F103 microcontroler de TTL enkoder kullanıyorum işlemcinin hazır enkoder modülünü kullanıyorum enkoder modülü 15 bit ilk olduğundan dolayı 15 biti geçtikten sonra pulse değerlim sıfırlanıyor ben double integer olarak okumak istiyorum bu işlemi nasıl yapabilirim. Daha önceki projemde Atmel ile hartware interrupt kullanarak yapmıştım ama STM de bu işlemi yaptığımda ise girişteki filtreden dolayı pas kaçırıp yanlış ölçüm yapıyorum. STM nin enkoder modülünü kullandığımda ise sayıcı kendini sofırlıyor. Bu konuda başka bir önerisi olan var mı?

kaftaraco

Arkadaşlar bir fikri olan yok mu?
TIM1->CNT ile maksimum 32768 okuyorum. 32768 değerinden sonra sayma eksi yöne geçiyor. Bu konuda yardım edebilecek veya fikir verebilecek bir arkadaş yok mu?

Zoroaster

Kullandigin degiskeni unsigned int yapmayi dene.

Max 32768 degil de 32767 olmasin?
Seytan deliginden kacti.

magnetron

TIM'in update interruptı içinde


16 bitlik bir değişkene eğer timer yukarı saymışsa +1
aşağı saymışsa -1 toplayıp


TIM->CNT ve bu değişkeni 32 bitlik bir başka değişkene kaydet
TIM->CNT low word, bu ilk bahsettiğim değişken high word olucak
( pointer lerle yapabilirsin )


böylece 32 bitlik bir enkoder pozisyon bilgisi elde edersin

kaftaraco

Sayın megraton arkadaşım Timer up veya Timer down interupları varmı? var ise nasıl yapabilirim?

magnetron

tabi var

TIM'i  init ederken bu satırı yazıcaksın

TIM_ITConfig(TIM2,TIM_IT_Update , ENABLE);

aşağı veya yukarı taştığı zaman

void TIM2_IRQHandler(void){ // ENCODER ICIN 
 TIM_ClearFlag(TIM2, TIM_FLAG_Update);
 TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
   uint16_t current = TIM2->CNT;
      if ( current < 0x7FFF ) counterhi += 1; // Roll over in upwards direction
      else counterhi -= 1; // Roll over in downwards direction
    }


sonra programın döngüsünde
int32_t encoder;
uint16_t *RAMptr=&enkoder;

    *RAMptr=TIM2->CNT; RAMptr++;
    *RAMptr=counterhi;

kaftaraco

Sevgili magnetron arkadaşım cevabınız i.in çok teşekkür ederim. Problemi çözdüm