Şimdi Ara

AnalogWrite Hassasiyet Arttırma

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
10
Cevap
0
Favori
1.555
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • İyi günler...

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



    < Bu mesaj bu kişi tarafından değiştirildi multicaglar -- 22 Ağustos 2015; 0:01:40 >



  • 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.



    < Bu mesaj bu kişi tarafından değiştirildi Guest-BF8E9B238 -- 22 Ağustos 2015; 9:18:03 >
  • 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ı.



    < Bu mesaj bu kişi tarafından değiştirildi multicaglar -- 22 Ağustos 2015; 12:38:52 >




  • 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.



    < Bu mesaj bu kişi tarafından değiştirildi Guest-BF8E9B238 -- 22 Ağustos 2015; 13:13:15 >
  • 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.



    < Bu mesaj bu kişi tarafından değiştirildi multicaglar -- 22 Ağustos 2015; 15:14:18 >
    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Yapay Zeka’dan İlgili Konular
    Daha Fazla Göster
  • 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?

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • 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.



    < Bu mesaj bu kişi tarafından değiştirildi CSharpLover -- 7 Şubat 2016; 12:29:14 >




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.