Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Konuyu başlatan: kaftaraco - 22 Şubat 2018, 20:33:51

Başlık: STM32F108 enkoder kullanımı hakkında
Gönderen: kaftaraco - 22 Şubat 2018, 20:33:51
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ı?
Başlık: Ynt: STM32F108 enkoder kullanımı hakkında
Gönderen: kaftaraco - 27 Şubat 2018, 21:48:22
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?
Başlık: Ynt: STM32F108 enkoder kullanımı hakkında
Gönderen: Zoroaster - 28 Şubat 2018, 00:54:15
Kullandigin degiskeni unsigned int yapmayi dene.

Max 32768 degil de 32767 olmasin?
Başlık: Ynt: STM32F108 enkoder kullanımı hakkında
Gönderen: magnetron - 28 Şubat 2018, 11:15:45
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
Başlık: Ynt: STM32F108 enkoder kullanımı hakkında
Gönderen: kaftaraco - 01 Mart 2018, 17:11:09
Sayın megraton arkadaşım Timer up veya Timer down interupları varmı? var ise nasıl yapabilirim?
Başlık: Ynt: STM32F108 enkoder kullanımı hakkında
Gönderen: magnetron - 01 Mart 2018, 19:21:05
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;

Başlık: Ynt: STM32F108 enkoder kullanımı hakkında
Gönderen: kaftaraco - 06 Mart 2018, 22:07:41
Sevgili magnetron arkadaşım cevabınız i.in çok teşekkür ederim. Problemi çözdüm