1. sayfa
Fade içeriğindeki gibi 0 - 255 arası ölçüm yaparak istediğin voltajı yakalayabilirsiniz |
Amacım istediğim voltajı vermek değil. 0-255 arası her tamsayı 0-5 volt arasındaki bir voltajı orantılı olarak temsil ediyor. Benim istediğim bunu daha da hassaslaştırmak mesela 2.5 volt değilde 2.53 volt verebilmek. |
16 bit hassasiyetinde çıkış alabilirsin ama arduino çok şeyi gizlediği gibi bunu da gizlemiş kolay olsun diye. İstersen registerlar ile yapabiliriz. |
Teşekkürler void setup() { // Set PB5/6 as outputs. [**Digital pin 11,12 on Arduino Mega!**] DDRB |= (1 << DDB5) | (1 << DDB6); TCCR1A = (1 << COM1A1) | (1 << COM1B1) | // Fast PWM mode. (1 << WGM11); TCCR1B = // Fast PWM mode. (1 << WGM12) | (1 << WGM13) | // No clock prescaling (fastest possible // freq). (1 << CS10); OCR1A = 0; // Set the counter value that corresponds to // full duty cycle. For 15-bit PWM use // 0x7fff, etc. A lower value for ICR1 will // allow a faster PWM frequency. ICR1 = 0xffff; } void loop() { // Use OCR1A and OCR1B to control the PWM // duty cycle. Duty cycle = OCR1A / ICR1. // OCR1A controls PWM on pin 9 (PORTB1). // OCR1B controls PWM on pin 10 (PORTB2). OCR1A = 0x0000; delay(500); OCR1A = 0x8000; delay(500); OCR1A = 0xffff; delay(500); } Bu kod ile 11. ve 12. pinleri 16 bit pwmye çevirmeyi başardım sanırım. Fakat kodda 3 kez delay komutu verilmiş bu da yapacağım işlemi yavaşlatıyor. Bu komutların verilmesinin sebebi nedir? Silersem herhangi bir zararı olur mu? Edit = Pin 9 ve 10 yazmasının nedeni unodan uyarlanması. |
Onlar denemek için, yani çıktıyı görebilmek için koymuş. Sen loop fonksiyonundakileri silip kendi kodunu yazacaksın. OCR1A-B yazmaçlarına vereceğin değer pin voltajını ayarlar. Fakat şöyle birşey var. Alacağın çıkış gerçekte analog değil sadece pwm. Çözünürlüğü ne kadar yükseltirsen pwm frekansı o kadar düşer. Eğer mcu 16mhz ile çalışıyorsa yukarıdaki kod ile sadece 250 hz sinyal alabilirsin. Bu da kirli bir sinyal demek. Frekansı yükseltmek için çözünürlüğü düşürmek zorundasın. ICR1 = 0xffff; <- 16 bit Örneğin bunu ICR1 = 0x0fff; yaparsan çözünürlük 12 bit, frekans yaklaşık 4 Khz olur. |
Düşük frekansın ne gibi dezavantajları olur? 16 bit zaten proje için çok fazla düşürebilirim yani. Benim elimde bir devre var bu devrede pot var. Ben pot yerine arduinoya bağlayacağım. Arduino pot görevi görecek. Bana 12 bit bile fazlasıyla yeter. Amacım istediğim voltajı üretebilmek. |
Diyelim ki çözünürlük 8 bit. 128 verdiğin zaman pinden 2.5V çıkmaz. 0V ve 5V peşpeşe çıkar. İşte frekans bu değişimlerin sıklığı. Mesela frekans 1 hz olursa yarım sn 0V yarım sn 5V alırsın. Yani frekans düşükse parazit etkisi yapar. Duruma göre çıkışı filtrelemen de gerekebilir düzgün gerilim almak için. |
Peki 12 bit yaparsam dc akıma yakın mı olur? |
Arduino PWM ile analog(!) sinyal üreten bir kart. Kısacası ürettiği sinyal aslında analog değil dijital. Görev süresi ile bir pini çok hızlı bir şekilde açıp kapayarak o şey kısılmış, açılmış yani farklı voltaj değerleri etkisinde hissi veriyor. Siz potansiyometre gibi gerçek bir analog çıkış istiyorsanız DAC modülü almalısınız. Bu modül dijital sinyali analog sinyale çeviriyor. Genellikle SPI üzerinden programlandığından sadece 4 pin kullanıyor. Ya da sadece direnç kullanarak ucuza bir DAC yapmak için Arduino üzerindeki tüm pinleri kullanarak R2R köprüsü yapabilirsiniz. 12-bit ve üzeri DAC yapmak için yeterli. R2R DAC dönüştürücüsünde kullandığınız her pin hassaslığı bir bit arttırır. 8 pin kullanarak 8 bit DAC, 12 pin kullanarak 12 bit dac, 32 pin kullanarak 32 bit DAC yapabilirsiniz mesela. R2R DAC yazdığınızda örnekler çıkar. |
1. sayfa
Bir proje için analog pininden çıkan voltajı hassaslaştırmam gerekiyor. Ne kadar hassas olursa o kadar iyi. 4-5 pin de kullanabilirim. 0.27 ile 4.10 arasında voltaj vermem gerekiyor. 8 bit hassasiyeti yetmiyor. Bunun için ne yapmalıyım? Transistörle bir devre kursam olur mu?
Şimdiden teşekkürler...
DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.
Üye Ol Şimdi DeğilÜye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.
< Bu mesaj bu kişi tarafından değiştirildi multicaglar -- 22 Ağustos 2015; 0:01:40 >