Arama butonu
Bu konudaki kullanıcılar: 1 misafir
9
Cevap
1554
Tıklama
0
Öne Çıkarma
AnalogWrite Hassasiyet Arttırma
M
10 yıl
Teğmen
Konu Sahibi

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

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

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

Üye Ol Şimdi Değil





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

B
10 yıl
Teğmen

Fade içeriğindeki gibi 0 - 255 arası ölçüm yaparak istediğin voltajı yakalayabilirsiniz


Bu mesaja 1 cevap geldi.
M
10 yıl
Teğmen
Konu Sahibi

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.


Bu mesaja 1 cevap geldi.
G
10 yıl
Yarbay

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 >

M
10 yıl
Teğmen
Konu Sahibi

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 >


Bu mesajda bahsedilenler: @elektro_gadget
G
10 yıl
Yarbay

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 >

M
10 yıl
Teğmen
Konu Sahibi

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ı >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @elektro_gadget
G
10 yıl
Yarbay

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.


Bu mesaja 1 cevap geldi.
M
10 yıl
Teğmen
Konu Sahibi

Peki 12 bit yaparsam dc akıma yakın mı olur?



< Bu ileti mobil sürüm kullanılarak atıldı >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @elektro_gadget
C
9 yıl
Çavuş

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 >

DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.