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()
.