Arduino ile PWM sinyalini dijitalle çevirme
PWM nedir?
PWM (Pulse Width Modulation), darbe genişlik modülasyonu anlamına gelir. Temel olarak çıkışta elde edilmek istenilen sinyalin bant genişliğini (frekans düzenlemesi olarak da düşünülebilir) ve dalga biçimini belirlemek amacıyla kullanılan bir yöntemdir. Genellikle SMPS (Switched Mode Power Supply) lerde yüksek akımla düşük voltajlı sinyal elde etmek için güç elektroniği teknolojisinde sıkça kullanılan bir yöntemdir Günümüzde PWM yönteminin en çok duyulduğu yer; dc motorların hızlarının ayarlanması ve güç kaynaklarıdır.
PWM Sinyal Yazma:
Arduino ile PWM sinyali oluşturmak çok basittir. PWM sinyali oluşturmak için “analogWrite( pwm pin ,0-255 arası değer)” komutunu kullanarak istediğim genlikte kare dalga oluşturabiliriz. Kare dalganın mantığı örnek vermek gerekirse bir düğme gibidir “on” konumunda 5V , gönderirken “off” konumunda 0V gönderir. İşte bu “on” kısmının aktif olduğu genişliğe “Pulse Width” yani “Sinyal Genişliği” adı verlilir.
Örnek kod:
[iconbox type=”success” w=”100%” float=”left”]int analogPin = 3; // potentiometer connected to analog pin 3
int val = 0; // variable to store the read valuevoid setup()
{
pinMode(ledPin, OUTPUT); // sets the pin as output
}void loop()
{
val = analogRead(analogPin); // read the input pin
analogWrite(ledPin, val / 4); // analogRead values go from 0 to 1023, analogWrite values from 0 to 255
}
PWM Sinyal Okuma:
PWM okuma işlemini yazmaya göre çok daha az ihtiyarınız olacağını düşünüyorum çünkü okuma işlemini sadece bazı sistemleri amacının dışında kullanırsanız işinize yarar. Örneğin arduino ile çalışan bir RC araç yapmak istiyorsunuz. Fakat siz sadece kontrol kartını yapmak istiyorsun ve alıcı verici ile zaman kaybetmek istemiyorsanız. Ayrıca complex bir şey yapmak istiyorsanız RC kontol kumandalarını kullanmalısınız.
Resimde gördüğünüz ve RC araçlar için yapılmış bir çok kumanın alıcısından sadece PWM sinyali alabilirsiniz. Eğer özel bir kontrol katı yapmak istiyorsanız PWM sinyalini işlmek zorundasınız. Bu işlemi Arduino’da “pulseIn(pin, value, timeout)” komutu ile yapıyoruz.
Örnek bağlanmtı:
Örnek Kod:
[iconbox type=”success” w=”100%” float=”left”]int ch1; // Here's where we'll keep our channel values int ch2; int ch3; void setup() { pinMode(5, INPUT); // Set our input pins as such pinMode(6, INPUT); pinMode(7, INPUT); Serial.begin(9600); // Pour a bowl of Serial } void loop() { ch1 = pulseIn(5, HIGH, 25000); // Read the pulse width of ch2 = pulseIn(6, HIGH, 25000); // each channel ch3 = pulseIn(7, HIGH, 25000); Serial.print("Channel 1:"); // Print the value of Serial.println(ch1); // each channel Serial.print("Channel 2:"); Serial.println(ch2); Serial.print("Channel 3:"); Serial.println(ch3); delay(100); // I put this here just to make the terminal // window happier }
Kaynakça:
- PWM nedir ?, http://pwm.nedir.com/
- RC Hobby Controllers and Arduino, https://www.sparkfun.com/tutorials/348
- analogWrite(), http://www.arduino.cc/en/Reference/AnalogWrite