Mikrokontrolcü ile Motor Nasıl Sürülür?
Hayatımızın her alanında karşılaştığımız mikrokontrolcüler güç sistemlerinden robotik alanına kadar geniş bir yelpazede kullanılan bir elektronik bir elemandır. Mikrokontrolcüler sensör verilerinin akışını sağlamak, onları depolamak, motorları kontrol etmek gibi karmaşık işlemler için kullanılır. Bu yazımızda Mikrokontolcü kullanarak bir motor çeşidi olan servo motorları nasıl kontrol ederiz, öğreneceğiz.
Servo motorlar genellikle hassas açısal pozisyon, açısal hız ve ivme kontrollünün yapıldığı motorlardır. Karakteristik özellikleri bakımında markette bir çok çeşiti vardır. hassas kontrollü sayesinde robotik alanda da sıkça kullanılan elektromekanik bir elemandır.
Mikrokontrolcüler ile servo motorları sürmek için darbe genişliği modülasyonu (PWM) dediğimiz sinyalleri kullanırız.
Yukardaki resimde gördüğümüz üç farklı sinyal PWM dediğimiz sinyallerin örnekleridir. Üç farklı sinyalinde periyotları aynı olması rağmen açık olma durumlarının genişlikleri farklıdır. Bu genişliğin farklı olması servo motorlarımızının saftının hangi açıda olması gerektiğini belirtir. Bu sinyalleri üretmek için mikrokontrolcülerimizin bir parçası olan zamanlayıcıları (Timer) kullanırız. Mikrokontrolcünün bir parçası olan zamanlayıcıların 8 bitlik depolama birimleri (Register), o zamanlayının bir periyotta nasıl davranması gerektiğini söyler, biz de bu sinyalleri üretmek için programlama dilleri ile zamanlayıcıların registerlarına belli değerler kaydederiz.
Mikrokontrolcüleri programlamak için en çok kullanılan iki programlama iki vardır: C ve Assembly. Bu yazımızda C programlama dilini kullanarak zamanlayıcıların registerlarını nasıl değiştiririz göreceğiz. Mikrokontrolcüler için C yazarken MikroC Pro kullanıyorum.
void main() { TCNT0 = 255;
OCR0 = 124;
TCCR0 |= (1<<WGM00) || (1<<WGM01) || (1<<COM01);}
Yukardaki yazdığım C kodu, daha demin anlattığım konuların kapsayan ve %50 PWM sinyal oluşturan bir kodtur.
TCNT0: Bir periyodun kaç bit olcağını belirten register
OCR0: Genişliğin kaç bit olacağını belirten register
TCCR0: Zamanlayıcının nasıl davranacağını belirten register
WGM: Zamanlayıcı modu bitleri (2 Bit)
COM: Sinyalin belirttiğimiz genişlikteki durumunu belirten bitler (2 Bit)