STM32F103 50Hz PWM Sinyalinin Uzunluğunu Nasıl Ölçerim?

Başlatan E-x8, 14 Ocak 2019, 00:31:47

E-x8

Merhaba

72MHz'de çalışan stm32f103 denetleyicim var. Uzaktan kumandalı araçtan gelen pwm sinyalini okuyorum kumandadan 50Hz gönderim yapılıyor. Servo gibi 1000-2000us arası pwm uzunluğu var. Timer2'nin Channel 1'inden okuma yapıyorum. Yükselen kenarda zamanı tutup düşen kenarda çıkartıp uzunluğu bulabiliyorum ancak timer2 nin hızını ayarlayamadım. Çünkü datasheetin içinde kayboldum kaynaklarda da farklı farklı tanımlanmış bu konu hakkında yardımcı olabilir misiniz?

Mucit23

Stm32 timeri bu işi otomatik yapıyor. Kesme ile yapmak verimsiz olabilir. Örnekler içerisinde pwm input örneği var. Onu inceleyin.

E-x8

Öncelikle mesaj yazdığınız için teşekkür ederim.

1.) Timer2'nin hızını düzgün ayarlamış mıyım? Değerler nasıl olmalı? ve Hız hesabı nasıl oluyor?

2.) Örnekler nerede bulunuyor?

Tagli

Konu ve örnek Reference Manual'de. TIM2 için "15.3.5 Imput capture mode" ve "15.3.6 PWM input mode". Aynı başlıklar diğer bazı timer modülü bölümlerinin altında da olabilir.
Gökçe Tağlıoğlu

Mucit23

STSW-STM32054 içerisinde olacaktı. Örnekler içerisinde TIM örneklerine bakın. Doğrudan PWM input örneği var.

Prescaller değeriniz doğru değil gibi. Ölçeceğiniz frekansa göre Timer Çalışma frekansını prescaller ile ayarlamanız gerekir.

Eğer 50Hz PWM frekansını ölçecekseniz Periyodunuz 20ms demektir. Bu durumda Timer prescaller değerini (72-1) yaparsanız Timer tam olarak 1mhz ile çalışır. Buda Her bir tick 1us anlamına gelir. Yani sizin çözünürlüğünüz 1us olduğu anlamına geliyor. 20ms lik periyoda sahip bir pwm sinyalinin puls genişliğğini 1uS çözünürlükte 0-20000 arası ölçebilirsiniz teorik olarak. Timer Prescallerdaki mantık bu şekilde. Sadece ARR için verdiğiniz değeri geçmemesine dikkat edin. Aksi halde taşma olur. ARR değerini 0xFFFF yapmakta fayda var.

E-x8

Prescaler değerimi 71 yaptım ve AutoReload registeri 0xFFFF yaptım çalışıyor. Ancak okuduğum değerler 1100-1890 arası gibi elimde osiloskop vs olmadığı için doğruluğunu kıyaslayamıyorum.

E-x8

Kumandadan gazı fullediğimde Keil'den data olarak 1898us olarak okuma yapıyorum. Durum aynıyken multimetre 8.6% doluluk okumakla birlikte 45.44Hz olarak gösteriyor.

1000ms'de 45.44Hz ise bir periyot 22,00704225352112676056338028169ms yapar.

22,00704225352112676056338028169ms 100% ise 8,6% 1,8926056338028169014084507042254ms yapar.

Bende 1898us olarak ölçmüştüm son sonuçla kıyasladığımda doğru gibi. Sizce doğru mu?

Mucit23

En doğrusu osiloskop ile puls genişliğini ölçüp karşılaştırmak. Ama emin olmak için birkaç farklı duty değeri için ölçüm yapıp karşılaştırabilirsin.