Öncelikle potun tam olarak kaç derece dönebildiğini bilmek lazım.
Diyelimki 270 derece dönebiliyor.
Bu durumda 200 adım/tur motor kullanıyorsan 200*270/360 = 150 adım da motor mili pot kadar yani 270 derece hareket eder.
Devrene göre ADC den okuyacağın değerler 0-1024 arasında olacak. 1024 değeri için 150 adım atmamız gerekecek.
Buna göre de ADCval * 150 / 1024 pota göre atman gereken adım olacak.
Motoru sağa-sola, istenilen sayıda adım ile döndürebildiğini varsayıyorum.
Motorun o anki pozisyonunu ve gitmesi gereken pozisyonu tutan iki adet değişkenin olsun.
Bunlara guncelPos, hedefPos diyelim.
hedefPos = ADCVal * 150 >> 10; şeklinde hesaplanır.
hedefPos-guncelPos farkı bulunulan pozisyondan istenen pozisyona gitmek için atılması gereken adım olur. fark pozitif ise CW negatif ise CWW yönde adım atarsın.
ADC den okumalarda salınımlar olabileceği için de ADC den okunan değerlerin tercihen 2'nin kuvvetleri şeklinde adet ile toplanıp ortalama almak da gerekir.
Dikkat edilecek bir konuda devrene ilk enerji verdiğinde motor milinin pozisyonu konusu. Ya enerji kesilmeden önce milin konumu sıfırlanmalı yada index bilgisi de olan bir enkoder yada resolver cinsi bir şey kullanılmalı.
Birde aynı pottan motor miline bağlanıp Voltajları eşitlemek şeklinde bir çözüm olabilir. RC servoların çalışma mantığı gibi..
Bu konu ne için, merakmı ödevmi?. Bildiğim kadarı ile araç göstergelerinde ibreler bu şekilde hareket ettiriliyor.