Nasıl Bir Yol izleyebilirim? - Arduino/STM32

Başlatan E-x8, 03 Kasım 2018, 11:32:17

E-x8

Merhaba

Elimde oyuncak iş makinesi var. Kepçesini yöneten 4 servo motoru var. Normal şartlarda kumandadan gönderilen komutlar alıcı tarafına düştükten sonra servo motorlar kontrol ediliyor. Benim yapmak istediğim araya Arduino veya stm32c8t6 koyarak bilgisayardan yönetmek belli başlı hareketler tanımlayarak tek tuşta yaptırmak istiyorum.

Sorun yaşadığım kısım kumandadan gelen dataları okuma kısmı. Alıcıya düşen data PWM'e dönüştürülüp servolara gönderiliyor ve bu PWM sinyali 200mV seviyesinde 50kHz ve doluluk oranı %4-8%'tür. İlk başta Arduino uno'nun analog kısımları ile okuma yapmayı denedim fakat Voltaj düşük olduğundan okuduğum değerler sapıtıyor ve olması gibi çalışmıyordu.

Daha sonra şunu denedim, Arduino 'pulseIn' metodu ile okuyarak gönderilen frekansı buluyorum bu frekansı direkt kullanabildiğim için 'Servo' kütüphanesi ile ilgili pin e sinyal gönderip iş makinesinin kepçesini çalıştırabiliyordum. Fakat burada da şöyle bir sorun var, Arduino alıcıdan gelen 4 farklı pindeki 'pulseIn' ile okuyor sonrasında bu dataları işledikten sonra 'Servo' kütüphanesine bağlı ayrı PWM pininden servolara gönderiyor(Toplamda 8 iş yükü tek Timer'a bağlı). Bu metotlar aynı timer'i kullandığı için bir gecikme sorunu var. Bariz bir gecikme olmasada hissediliyor.

Alıcıdaki değerleri kartı yormadan nasıl okuyabilirim? Aklımda stm32c8t6 kullanmak var. Keil'de programlayacağım, Timer'ı kullanabilmek için. Fakat burada da çok fazla timer olduğu için nasıl bir yol izlemeliyim bilemedim. 7 Timer var, 4 tanesinin interrupti ile alıcıdan okuma yapsam geri kalan 1'inden de 4 farklı servoyu sürerim diye düşündüm ama dediğim gibi kafama tam oturmadı.

Arduino'daki alıcıdan okuma sorununu nasıl çözebilirim? veya STM32'de Timer'ları daha etkili nasıl kullanabilirim?

Yorumlarınızı bekliyorum ve teşekkür ediyorum.

E-x8

Güncelleme:

Projede STM32F103C8T6 denetleyicisi kullanıyorum, üretilen PWM'in doluluğunu GPIO kesmesi ile bulmayı denedim sadece frekansı buluyorum bulduğum frekans üzerinden türlü formüller türeterek doluluğu hesaplamaya çalıştım +-4% oranında sapma var. Kesinlikle bu işimi görmez.

Araştırdığım kadarıyla Input Capture kesmesi kullanılıyormuş ama halen emin değilim. Doluluk oranını nasıl ölçerim yardımcı olacak birileri var mı?


E-x8

@selimkoc yorumunuz için teşekkür ederim.

Güncelleme:

200mv'u analog olarak okumak(0-5V arasına kaydırma) için ne yapmam gerek? Basit bir transistör iş görür mü? Görürse çok iyi olur.

selimkoc

Opamplı non inverting yükselteç işini görür.

berkay_91

Dijital bir osiloskop bu konudaki sorunlarınızı çözer