Stm32f407vg -MB997C İvme olcer sorunu

Başlatan aliugur35, 06 Kasım 2014, 23:10:41

aliugur35

Merhaba arkadaslar https://www.picproje.org/index.php/topic,35896.msg262643.html#msg262643 linkindeki
Kit üzerindeki LIS302DL çipini (3 axis accelerometer) SPI modülü üzerinden kullanmak adlı uygulamasını keil ile basarılı bir sekilde derleyip kartın icerisinde .hex dosyasını aktardım fakat kartı hareket ettirdigimde led ler yanmadı sebebine olabilir.Uzerindeki ivme sensor LIS302DL den farklı olabilir mi?

Gökhan BEKEN

Sizin verdiğiniz linkteki yazıda "Kit üzerindeki LIS302DL çipini (3 axis accelerometer) SPI modülü üzerinden kullanmak"
yazıyor
şu linkteki yazıda "Kartın eğimiyle orantılı olarak ledleri yakmak" yazıyor :
https://www.picproje.org/index.php/topic,35896.msg269160.html#msg269160
Ben denemiştim çalışıyordu.
Test çalışmamı inceleyebilirsiniz: http://gokhanbeken.com/unity-accelerometer-stm32-ile-3dbox-simule
Özel mesaj okumuyorum, lütfen göndermeyin.

kageja

MB-997C yanılmıyorsam STM şirketin son çıkarmış olduğu PCB basımıdır. Bu kartın üzerinden eski lis302dl den farklı olarak yanılmıyorsam lis302dlh bulunmakta bunuda tek farkı 100 hz değilde 400 hz data çıkışı alıyor olmasıydı user's manuel den yanlış hatırlamıyorsam. Bu sebepten belki çalışmayabilir ?

aliugur35

@meftun
https://www.picproje.org/index.php/topic,35896.msg269160.html#msg269160
bu linkteki kodlarıda yukledım bu sefer uzerindeki 4 led belli sure aralıklarla yanıp yanıp sonuyor.
bu sorunu
@kageja bahsettigin hatayı nasıl duzeltebilirim

kageja

https://www.picproje.org/index.php/topic,35896.msg269160.html#msg269160 burdaki kodları denediysen aşağıdaki kod satırını silebilirsin o zaman çalışıcaktır

if(Read(0x0F)==0x3B)

aliugur35

@kageja o kısmı sildigimde sensor calıyor fakat lambalar kartın konumuna gore cok farklı yanıyor

kageja

sebebi mb-997c kartına sahip olman dikkat edersin sağ veya sola yatırdğına istediğin ledler değil diğerleri yancaktır yukarı veya aşağı yatırdğında tam tesi yanacaktır yazılımsal pwm üretilen timer 7 içindeki pwm sinyali oluşturulan kısmın işaretlerini tam tersi yap

kageja

Eğer sorunu hala halledemessen ben senin için yarın bakarım

aliugur35

@kageja halledemedim bi kac gundur bunun uzerine ugrasıyorum ama bir turlu olmuyor yardımcı olursan sevinirim

kageja

 if (a>=0) { PWM[0]=a; PWM[2]=0; }
                  else      { PWM[0]=0; PWM[2]=-a;}

şu koda ait satırını aşağıdaki kod satırı ile  değiştireceksin
f (a>=0) { PWM[3]=a; PWM[1]=0; }         //pwm3 soldaki led pwm1 sagdaki led
                  else      { PWM[3]=0; PWM[1]=-a;}


if (a>=0) { PWM[1]=a; PWM[3]=0; }
                  else      { PWM[1]=0; PWM[3]=-a;}
bu koda ait satırıda aşağıdaki kod satırı ile değiştireceksin

if (a>=0) { PWM[0]=a; PWM[2]=0; }         //pwm0 uzak olan led pmw2 yak1n olan led
                  else      { PWM[0]=0; PWM[2]=-a;}

Bu sayede ledlerinde doğru yönde flash etmiş olacak. kusura bi kaç gündür giremiyordum nete bende kendi projem ile uğraşıyordum.


aliugur35

bende biraz yogunum kardesim ilgilendigin icin tesekkur ederim en kısa zamanda deneyip sonucu hakkında bilgi veririm.

kageja

Ne demek kardeşim dene çok büyük ihtimal ile bu kod ile düzgün sonuç alacaksındır

kapadokyali5042

@kageja aynı soruna bende sahiptim düzeltmeleri yapınca sensorler calıstı.Fakat benim bi kac tane daha sorum olacaktı.
1-Ben sensor ile farklı bir uygulama yapıcam.Sensorun konumuna gore servo motor calıstırıcam. Sensorun konumuna gore yaptırmak istedigim komutu yukarıdaki sensor kodlarının hangi kısmına koymalıyım.Yardımcı olursanız sevinirim.
2-Sensorun cok hassas olmasını istemiyorum hassasiyetini nerden ayaryabilirim.

Gökhan BEKEN

İvme sensörü ivme ölçmek içindir, açı ölçmek için kullanırsanız, açıyı sabit tutsanız bile sağa sola(yere paralel bir şekiled) oynatırsanız yanlış açı verecektir. Bu yüzden yaptığınız proje bir işe yaramayacak.
Bu iş için gyro kullanmalısınız. Gyro'nun matematiksel hesapları ise hiç kolay bir iş değil.

Yinede illa accelerometer ile yapacağım derseniz, ham verileri almak için şu kısma bakın:
if (who&1) x=Read(0x29);
if (who&2) y=Read(0x2B);
if (who&4) z=Read(0x2D);

bu verileri açıya çevirmeniz lazım, bu değerler 0-255 arasında değişiyor.
360/255=1,411
x,y,z değerlerini 1.411 ile çarparsanız o eksenin açısını öğrenmiş olursunuz. Normalde euler açılarına çevirmirmek için bazı trigonometrik formüller kullanmak gerekiyor, şurda konuşmuştuk, ama dediğim gibi yapsanız da öğrenebilirsiz açıyı.

Bu açıları pwm'e çevirmek için şu projemi inceleyebilirsiniz: http://gokhanbeken.com/stm32f407-ile-servo-motor-kontrol
Özel mesaj okumuyorum, lütfen göndermeyin.

kapadokyali5042

Alıntı yapılan: meftun - 09 Aralık 2014, 03:51:13
İvme sensörü ivme ölçmek içindir, açı ölçmek için kullanırsanız, açıyı sabit tutsanız bile sağa sola(yere paralel bir şekiled) oynatırsanız yanlış açı verecektir. Bu yüzden yaptığınız proje bir işe yaramayacak.
Bu iş için gyro kullanmalısınız. Gyro'nun matematiksel hesapları ise hiç kolay bir iş değil.

Yinede illa accelerometer ile yapacağım derseniz, ham verileri almak için şu kısma bakın:
if (who&1) x=Read(0x29);
if (who&2) y=Read(0x2B);
if (who&4) z=Read(0x2D);

bu verileri açıya çevirmeniz lazım, bu değerler 0-255 arasında değişiyor.
360/255=1,411
x,y,z değerlerini 1.411 ile çarparsanız o eksenin açısını öğrenmiş olursunuz. Normalde euler açılarına çevirmirmek için bazı trigonometrik formüller kullanmak gerekiyor, şurda konuşmuştuk, ama dediğim gibi yapsanız da öğrenebilirsiz açıyı.

Bu açıları pwm'e çevirmek için şu projemi inceleyebilirsiniz: http://gokhanbeken.com/stm32f407-ile-servo-motor-kontrol

cok profesyonel bir sey yapmak istemiyorum benim istegim kart saga oynattıgımda bir motoru calıstırmak sola oynattıgımda ise diger ikinci bir motoru calıstırmak istiyorum aceba bu nasıl yapabilirim ykarıdaki kodlar isime yarar mı eger yarar ise bu kodları nasıl kullanabilirim.yardım ederseniz sevinirim