Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Cortex ARM => Konuyu başlatan: Mucit23 - 05 Temmuz 2022, 14:00:49

Başlık: STM32'de Enkoder ve İnterrupt
Gönderen: Mucit23 - 05 Temmuz 2022, 14:00:49
Selamlar

STM32'de Enkoder'den konum bilgisi alıyorum. Şöyle bir isteğim var. Timer Değeri 0-8192 arasında değişiyor. Timerin Her değişiminde artması veya azalması durumda ADC yi tetikleyip ölçüm almak istiyorum.

Timerin Update eventi dışında sanırım değişim eventi yok. Bunu ancak iki timer ile yaparım diye düşündüm. Enkoder A ve B sinyalleri iki timer'e girer. İkisinde de XOR özelliği aktiftir.

1. Timer Enkoder değerini tutar.
2. Timer ile İstediğim periyotta ADCyi tetiklerim.

Aklıma bir tek bu yöntem geldi. Bunun dışında daha optimize bir yöntem var mıdır?
Başlık: Ynt: STM32'de Enkoder ve İnterrupt
Gönderen: apsis - 05 Temmuz 2022, 14:15:08
Encoder Clock Output ile tetikleme gerçekleştirebilirsin.
Başlık: Ynt: STM32'de Enkoder ve İnterrupt
Gönderen: Mucit23 - 05 Temmuz 2022, 14:36:19
Alıntı yapılan: apsis - 05 Temmuz 2022, 14:15:08Encoder Clock Output ile tetikleme gerçekleştirebilirsin.

Biraz açabilirmisin.
Başlık: Ynt: STM32'de Enkoder ve İnterrupt
Gönderen: apsis - 05 Temmuz 2022, 16:06:18
Encoder'in her bir sayı artışında (senin için 8191) bir çıkış verir. Bu aslında encoder modülünün düşük devirlerde yanlış hız okumasını önlemek için sabit yol değişken zaman mantığını kullanmak için bir timer tetikleyerek iki işaret arasındaki zamanı ölçmen için yerleştirilmiş.

Senin için ise bir timer değil de bir adc tetiklenecek. Encoder timer TRGO çıkışını Encoder Clock Output olarak ayarlarsın. Bunu da adc'ye verirsin. TIMx_CR2->MMS registerin'da bulabilirsin.
Başlık: Ynt: STM32'de Enkoder ve İnterrupt
Gönderen: Mucit23 - 05 Temmuz 2022, 16:32:31
Alıntı yapılan: apsis - 05 Temmuz 2022, 16:06:18Encoder'in her bir sayı artışında (senin için 8191) bir çıkış verir. Bu aslında encoder modülünün düşük devirlerde yanlış hız okumasını önlemek için sabit yol değişken zaman mantığını kullanmak için bir timer tetikleyerek iki işaret arasındaki zamanı ölçmen için yerleştirilmiş.

Senin için ise bir timer değil de bir adc tetiklenecek. Encoder timer TRGO çıkışını Encoder Clock Output olarak ayarlarsın. Bunu da adc'ye verirsin. TIMx_CR2->MMS registerin'da bulabilirsin.

Ama F1 Serisinde böyle bir seçenek yok. Benim hatam belirtmemişim kullandığım MCU'yu. Tim Update, ve Tim OC seçenekleri var
Başlık: Ynt: STM32'de Enkoder ve İnterrupt
Gönderen: apsis - 05 Temmuz 2022, 22:07:17
O zaman ilk söylediğin yöntem mantıklı gibi.