Arduino'da PWM çıkışının frekansı nedir


22

AnalogWrite () kullandığınızda Arduinos normal PWM için hangi frekansı kullanır?

Ve farklı Arduino modeli için farklı mı? Özellikle Mega 2560 ile ilgileniyorum, ancak modeller arasında tutarlı olup olmadığını da bilmek istiyorum.

Arduino'ya 500 Hz kullanan ve çok yavaş görünen referanslar gördüm.


Bu, kullandığınız pime de bağlıdır.
Gerben

Yanıtlar:


31

PWM sinyali AVR yongalarındaki zamanlayıcılar tarafından üretilir. Her zamanlayıcı, iki veya üç farklı pin üzerinde bir PWM sinyali üretebilir. Her pin kendi görev döngüsüne sahip olabilir, ancak PWM frekansını paylaşırlar. Zamanlayıcılar için saat kaynağını değiştirerek PWM'nin frekansını değiştirebilirsiniz. Varsayılan olarak CPU saatini 64'e bölünmüş, yani. Arduino ilklendirme kodu ile kendi ön ayarları 64'e ayarlanmış durumda. Her şeyi daha fazla karıştırmak için iki farklı PWM modu vardır: hızlı PWM ve faz doğru PWM. Hızlı PWM'de zamanlayıcı 255'e kadar sayılır, sonra taşar ve 0'dan (256 farklı durum) başlar. Doğru fazda PWM'de zamanlayıcı 255'e kadar sayılır, sonra yön değiştirir ve sıfıra doğru sayılır, yön değiştirir vb. (510 farklı durum).

Arduino Mega'da 5 zamanlayıcı, zamanlayıcı0 - zamanlayıcı4 bulunur. Zamanlayıcı 0, milis ve mikros fonksiyonları için de kullanıldığından hızlı PWM kullanır, diğer zamanlayıcılar faz doğru PWM için yapılandırılır. Bu, farklı pinlerde farklı frekanslara neden olur:

  • Pim 4 ve 13, zamanlayıcı tarafından kontrol edilen0:
    16 Mhz / 64/256 = 976.56 Hz

  • Zamanlayıcı1-4:
    16 Mhz / 64/510 = 490.20 Hz tarafından kontrol edilen diğer PWM pimleri

Hesaplama: Clock / Prescaler / PWM durum sayısı

Durum, bildiğim diğer tüm Arduino panoları için aynıdır, ancak farklı pinlere bağlanan daha az zamanlayıcıları vardır.

Zamanlayıcı ön ölçekleyicisini değiştirerek PWM frekansını değiştirebilirsiniz. Bu sayfaya bakın: http://playground.arduino.cc/Main/TimerPWMCheatsheet

Zamanlayıcıların 255'ten farklı bir değere sayılması da mümkündür. 8 bit zamanlayıcılarda bir çıkış pimini kaybedersiniz, ancak 16 bit zamanlayıcılarda bir TOP değeri tanımlamak için Giriş Yakalama Kaydı'nı kullanabilirsiniz. Giriş yakalama işlevi, Arduino topluluğunda nadiren kullanılan bir özelliktir, bu nedenle büyük olasılıkla kaçırmazsınız.

Arduino kütüphaneleri, 16 bit zamanlayıcılarda bile, yalnızca 8 bit çözünürlük kullanmanıza izin verir. Daha yüksek çözünürlüğü istiyorsanız, kendi analog yazınızı yazmanız veya amaç için yapılmış bir kitaplık kullanmanız gerekir. Arduino Mega zamanlayıcı0 ve zamanlayıcı2 8 bit, geri kalanı 16 bit.

Tam çözünürlükten faydalanmak için 16 bit zamanlayıcı modunu değiştirerek, önceden ölçeklendiriciyi ve TOP değerini değiştirmekle birlikte, çok çeşitli PWM frekansları elde edebilirsiniz.

Hızlı PWM modunda önceden ayarlayıcıyı 1'e ve TOP'u 3'e ayarlayarak elde edebileceğiniz maksimum frekans saat / 4'tür - daha düşük bir değere izin verilmez. Bu size 2 bit çözünürlükte 4 MHz PWM verecektir. Zamanın% 0'ı,% 25'i,% 50'si veya% 75'i olabilir. Daha yüksek bir TOP değeri daha düşük bir frekansta daha yüksek bir çözünürlük verir.

Daha uzun bir açıklama için bu makaleyi okuyun veya veri sayfasına bakın .

Timer0 irade bulaşmak için ön derecelendirici, PWM modunu veya TOP değerinin değiştirilmesi millis()ve micros().


1
Öyleyse, PWM için alabileceğiniz en hızlı frekansın 16Mhz / 256 (prescaler = 1) veya 62.5Khz olduğunu toplarım.
Duncan C

Dahası, PWM frekansının 62.5KHz'lik eşit bir faktör olması gerekiyor mu? Başka bir iş parçacığındaki biri, 4 pinli bir PC fanının fan hızını kontrol etmek istedi. Görünüşe göre 25KHz'lik bir PWM kontrol sinyali istiyor. 62.5 / 25, bir tam sayı olmayan 2.5 değerindedir.
Duncan C

Belirli frekansları yakalama olasılıkları hakkında daha ayrıntılı bilgi vermek için cevabı güncelledik,
user2973

Düşük frekans ucunda, 16e6 / 1024/2 ^ 16/2 = 0.119Hz veya 7.1 devir / dakika elde etmek için 1024 ön ölçekleyici tarafından faz-doğru modda bir 16 bit zamanlayıcı önceden ayarlayabilirsiniz. Bundan daha düşük olması için, millis () gibi bir şeye dayanarak bitleri değiştirmek gerekir. Veya harici giriş pimi T? 'Deki sayacı tetikleyebilir.
Dave X
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.