gyro stabilizatör projesi ve sorunlar

czorgormez

Temporary user
Katılım
27 Ekim 2022
Mesajlar
614
üzerinde çalıştığım projede tam mekatroniklik bazı sorunlar var.

kısaca projeden bahsedeyim. azimuth ve elevation (veya yaw - pitch ) eksenlerinde bir platform var. bu platformu bir kamera gibi düşünebiliriz. gökyüzünde sabit bir noktaya bakıyor. her eksen için 200 adımlı bir step motor ve bu motorları 16-32 mikrostepte süren step motor sürücülerim var.

kod epey hızlı 200mhz bir stm32 içinde koşuyor. step motor sürücü kodlarım 3 adet timer ile kontrol ediliyor. 2 adet timer motorlar için gerekli sabit 2.5us step pulse üretirken diğer timer her 100usde bir gerekli hesapları yaparak motorların ivmelenme ve yavaşlama profillerini çıkarıyor. kod motorları rahatlıkla 100hz - 30 khz arasında sürebiliyor. bu kısma kadar sorun yok. yani motorlara şu kadar adım şu hızda git dediğimde rampa hesapları yapılmış şekilde trapezoidal formda hedefe gidiyor.

stabilizasyon kısmında 1 adet 9 eksen MPU9250 accelerometer-gyroscope-magnetometer chip var.

sorun burada başlıyor. ben gyroskoptan gelen feedback verisini alır basit bir pid yapar ve motorları sürerek müthiş olmasa da iş görecek bir hareket takip sistemi yaparım zannetmiştim ama yanılmışım. bir türlü istediğim kadar iyi olmadı.

bilindiği üzere accelerometer verileri çok gürültülüdür ve gyroscoper verileri de zaman içinde ufau ufak drift eder bu yüzden çeşitli filtreler ve yöntemler kullanılır. MPU9250 hareket sensöründen gelen veriyi 3 şekilde temizleyip stabil hale getirebilirim.

1- raw gyro verisini alıp drift ettiği kısmı görmezden gelerek sonuç üzerinden ilerlemek
2- gyro ve accel. verisini stm32 içinde complementary filtreden geçirerek açı veya euler datasını işlemek
3- gyro ve accel datasını kalman veya extended kalman filtresinden geçirerek euler datasını (veya quaternion) işlemek
4- MPU9250 içindeki invensense Motion engine kullarak bunun ürettiği euler (veya quaternion)datasını işlemek

burada 3 hariç diğer yöntemleri denedim ve çalıştırdım. basitçe terminalde çok düşük sapma ile tüm eksenlerde akıcı ve tutarlı veriler elde ettim.
ilk yöntemde doğal olarak bir açı veya eksen bilgisi yok sadece anlık tepkiler var elimde. complementary filter dahili motion engine kıyasla biraz daha yavaş ama
tutarlı görünüyor. en temiz ve en çok datayı üreten aynı zamanda işlemciyi de meşgul etmeyen internal invensense motion engine.

devamında birkaç pid kodu denedim. Brett Beauregard yönteminden türetilmiş ve sağlam çıktı ürettiği iddia edilen birkaç tane C kodunu stm32 uyarladım ve çalıştırdım.
grafik ekranda da aslında tutarlı görünüyor ama tepki sürelerini tam çözemedim.

mesela benim elimdeki pid kodunda kP kI kD değerleri 2,3,5 gibi set edilmiş başka kodlarda 0.020 - 0.15 - 0.0018 gibi çok farklı parametreler mevcut.

şimdi sorularım burada başlıyor:

- yukarıdaki gyro verilerini filtreleme yöntemlerinden hangisi benim amacıma en uygundur ?
- pid kodlarında hareket kontrol algoritmalarına uygun al bunu kullan diyeceğiniz test edilmiş bir örnek var mıdır
- pid çıktısını motora aktarırken çıktıyı motor hızı verisi olarak değerlendiriyorum. yani hedefe ne kadar uzaksan o kadar hızlı ve sürekli adım at zaten hedefe geldiğinde pid hızını düşürerek bir noktada sıfırı hata üretecek diye yaklaşıyorum. bu yaklaşım hatalı mıdır ?

son aşamada gyro ile stabilizatör yaparken trapezoidal formda motor sürmenin hatalı olduğunu fark ettim. çünkü bu sistem motorları hep bir adım aralığında mesela 100 adım gitmeye zorluyor. bunun yerine motora git ve ben değiştirene kadar şu hızda-şu yönde git demenin daha doğru olduğunu buldum.

işin özü sistem temellerine tam öğrenmeden parçaları birleştirerek bir altyapı yapmaya çalıştım ama anlamadığım yerler olunca sistem stabil olmadı.

şunu ekle, şunu çıkar, böyle olmaz, şunu oku, şu kodu incele vs. gibi fikirlerinizi bekliyorum.
 
Son düzenleme:
Bence bu kontrol sisteminin daha C kodu aşamasına geçmeden konsept olarak MATLAB de çalışır hale getirilmesi lazım. Böylece, kodda herhangi bir bug çıkma riski olmadan değişik varyasyonlar denenebilir.

Yalnız merak ettim, gyro zamanla drift ettiğine göre, bir süre sonra sistem nasıl kendisini kalibre ediyor? Bir şekilde su terazisi gibi çalışan ve yerküre merkezini referans alan bir sensör ile kendisini kalibre mi ediyor?
 
Bence bu kontrol sisteminin daha C kodu aşamasına geçmeden konsept olarak MATLAB de çalışır hale getirilmesi lazım. Böylece, kodda herhangi bir bug çıkma riski olmadan değişik varyasyonlar denenebilir.

Yalnız merak ettim, gyro zamanla drift ettiğine göre, bir süre sonra sistem nasıl kendisini kalibre ediyor? Bir şekilde su terazisi gibi çalışan ve yerküre merkezini referans alan bir sensör ile kendisini kalibre mi ediyor?
doğru normalde kapsamlı projelerde işin mühendislik temelini kavrayıp, modelleyip devam etmek gerekir. ben biraz direkt davrandım.

bütün IMU (inertial measurement unit) ya da AHRS (attituda and heading reference system) cihazlar sensor füzyon yaparak çalışıyor. yani tek başına accelerometre veya gyro ile düzgün stabil data alınamıyor. sensor füzyonda ya chiplerin içinde gömülü bir state machine var complementery filter veya daha gelişmiş uygulamalarda extented kalman filter kullanılıyor.

kalman zaten çok daha gelişmiş bir fonksiyon bir nevi ileriye dönük tahminleme yapıyor ve buna göre gelen datayı yorumluyor. ama basit sistemlerde (complementary filter) aslında akselerometreyi low pass filtreden geçirip gürültüleri yoke diyor gyroda ise high pass filtreden geçirerek drifti yok ediyor.

nereden referans alıyor derseniz yerçekimi. akselerometre her zaman 3 eksende de yerçekimine göre veri üretiyor. ama mesela sadece yerçekimine bakarak Z ekseninde dönüşü tespit edemezdik burada da gyro verisi devreye giriyor. gerçek hatyatta hiçbir zaman sensor 0.00 derece yere dik durmadığı için çaprazlıklardan dolayı Z ekseninde bile accelerometre verisi dönüşlerde işe yarıyor.

tabi ben bu işin uzmanı değilim kısa sürede kendi anladığım kadarıyla aktardım.
 
Kalman filtre konusuna biraz baktım da, benim de birkaç yıl öncesinden kalma bir projem var (bir sürü proje var, vakit yok, ama neyse). Belli ölçüde bahçemiz var. Ortasında da direk üzerinde bir drone var, sürekli kendini şarjda tutuyor. Drone üzerinde de 360 derece dome kamera var. Kuş tespit ettiği anda kuşu takip edecek ve böylece bahçeden uzaklaştıracak. Drone'un kendi pozisyonunu bilmesi için bir çeşit lokal pozisyon belirleme sistemi oluşturulabilir. Kuş algılama için de görüntü işleme ve yapay zeka kullanılabilir. Ama kuşu takip etme işi kafamda net değildi. Herhalde bu tam da kalman filtre uygulaması. Kuşun geçmiş hareketlerinden yakın gelecekteki konumunun belirleme. Neyse, konuyu dağıtmayayım, ama bu mesajla ufkum genişlemiş oldu teşekkürler!

 
sınırları belirli bir alanda lokasyon aslında kolay gps ile 50cm kadar, uwb tracker ile 5cm kadar lokasyon verisi elde edilebilir. drone otopilotu da zaten hazır proje arducopter veya openpilot gibi projeler var gayet iyi çalışıyor. kuş tespiti ancak kamera ile yapılır ama ondan sonraki otonom sürüş işi biraz karışık. kalman burada kuşun hareketlerini tespit konusunda pek faydalı olmayabilir ama trajectory tespiti için işe yarayabilir.
 
@czorgormez kolay gelsin guzel konular.
Ilk olarak gimballari ornek alirsak orada ozel esc'ler ile brushless motorlar uzerinden yapilan gimballar akici hareket saglayabiliyor. RC Servo yada Step ile olanlarda akici bir hareket saglanamiyor gordugum kadariyla.
Ben ilk asamada 9250 icindeki fusion datasini kullanmayi mantikli goruyorum. Bu asamda 100 hz civarinda cikti alinabiliyor. Bence sistemi kurana kadar bunu kullanmak mantikli sonrasinda performans arttirmak icin farkli algoritmalar denenebilir.
PID look icin bazen yuksek hizda dongulerin olmasi sorun olabiliyor. Bu sefer cikti olan hareket kesikli gibi olabiliyor.
Emin olmamakla birlikte eger 100hz veri geliyor ve PID'den cikti aliniyorsa bence PID 'tune uzerine calisilabilir. Sistem uzerinde encoder var ise PID grafigi cizilebilir bunun uzerine onvershooting mi var , steadystate error mu var onu anlayabiliriz. Encoder yok ise o zaman biraz deneyim biraz zorlama ile mumkun olabilir ( encoder yok ise 9250'den gelen euler'i kullanabiliriz )
Hazir kod olarak benzer algoritmalar betaflight benzeri sistemler icinde var.

 
@czorgormez kolay gelsin guzel konular.
Ilk olarak gimballari ornek alirsak orada ozel esc'ler ile brushless motorlar uzerinden yapilan gimballar akici hareket saglayabiliyor. RC Servo yada Step ile olanlarda akici bir hareket saglanamiyor gordugum kadariyla.
Ben ilk asamada 9250 icindeki fusion datasini kullanmayi mantikli goruyorum. Bu asamda 100 hz civarinda cikti alinabiliyor. Bence sistemi kurana kadar bunu kullanmak mantikli sonrasinda performans arttirmak icin farkli algoritmalar denenebilir.
PID look icin bazen yuksek hizda dongulerin olmasi sorun olabiliyor. Bu sefer cikti olan hareket kesikli gibi olabiliyor.
Emin olmamakla birlikte eger 100hz veri geliyor ve PID'den cikti aliniyorsa bence PID 'tune uzerine calisilabilir. Sistem uzerinde encoder var ise PID grafigi cizilebilir bunun uzerine onvershooting mi var , steadystate error mu var onu anlayabiliriz. Encoder yok ise o zaman biraz deneyim biraz zorlama ile mumkun olabilir ( encoder yok ise 9250'den gelen euler'i kullanabiliriz )
Hazir kod olarak benzer algoritmalar betaflight benzeri sistemler icinde var.

sistemde encoder yok ama 9250 üzerinden aldığım datayı çizdiriyorum ayrıca pid outputunu da çizdirebilirim.

işin garibi bu sistemin daha ilkel bir versiyonu eski kartlarda var. ben projeyi güncelliyorum. elimde eski kodlar da var ve akıcı çalışıyor. eski kartlarda analog bir gyro var çıktısını 10 bit örneklemişler orta noktası 511 demiş. buradan +-20 limit vermiş gyro drift için. sonra çıktısını çok çok basit bir pidden geçirmiş ve motor hız olarak kullanmış.

şimdi ben bu eski kodu neden ciddiye almadım üzerinden gitmedim derseniz. kod meslek lisesi öğrencisi seviyesinde. öyle ki .h header dosyaların içine kod yazılmış öyle macro falan değil ana rutinlerin bazıları headerlar içinde. derleyici nasıl derliyor derseniz pic işlemcilerdeki ccs biraz garip kodu nerde bulsa derliyor. ben böyle düzensiz ve amatörce yazılmış kod görünce üstüne gitmedim.

bu işler artık çözülmüştür hem elimde 9250 gibi çok daha iyi bir chip var. yapmışken standartlara uygun. ileride kullanılabilir bir yazılım/donanım modulü gibi olsun istedim. demek önyargılı olmamak gerekiyormuş. eski çalışan koda bir dalıp onu port edip deniycem bakalım.
 
Projenin tam maksadını anlamasam da güzel bir proje olduğu belli. Çünkü içinde hem fizik, hem matematik hem de elektronik var.
Projede size tavsiye verebilecek kadar bilgi/deneyimim yok ama nacizane bir tavsiyede bulunmak isterim.
Bu kadar uğraştığınız bir projede MPU9250 yerine BNO055 gibi daha kalite bir çip ile devam etmek ve çipin desteklediği bazı özellik/işlemleri kod yerine çipe yaptırmak belki işinizi kolaylaştırır. Gerçi mantığını tam anlamadan işe ortadan daldım (hepimizin en sevdiği işe başlama şekli- ben bunu havada karada yaparım diyip başlamak) dediniz ama yine de uğraş verdiğiniz bir projede kaliteli elemanlarla çalışmak sonucu etkileyecektir.


 
Projenin tam maksadını anlamasam da güzel bir proje olduğu belli. Çünkü içinde hem fizik, hem matematik hem de elektronik var.
Projede size tavsiye verebilecek kadar bilgi/deneyimim yok ama nacizane bir tavsiyede bulunmak isterim.
Bu kadar uğraştığınız bir projede MPU9250 yerine BNO055 gibi daha kalite bir çip ile devam etmek ve çipin desteklediği bazı özellik/işlemleri kod yerine çipe yaptırmak belki işinizi kolaylaştırır. Gerçi mantığını tam anlamadan işe ortadan daldım (hepimizin en sevdiği işe başlama şekli- ben bunu havada karada yaparım diyip başlamak) dediniz ama yine de uğraş verdiğiniz bir projede kaliteli elemanlarla çalışmak sonucu etkileyecektir.


ticari bir projenin parçası olduğu için bazı detayları veremedim.

BNO055'i biliyorum ancak aşırı pahalı mpu9250 veya benzer performansta bir chip 5-6 usd bosch BNO serisi ise 20 doların üzerinde. sensorün kendi içerisindeki füzyonu hem stm32de hem de mpu içinde zaten yapabiliyoruz. bu sebeplerden mpu9250 chipe göre bizim için büyük bir avantaj sağlamıyor.

yapılan testlere de baktım 6 eksen imu olarak 9250 veya BNO arasında minimal farklar var.

aslında anlattığım sorun sensorden bağımsız bir konu. orada önemli olan kontrol algoritmasının matematiğini oluşturmak. yoksa herhangi bir gyro ile bu sistem çalıştırılır.

 
Bende ortadan dalmış ve büyük ihtimalle size katkı sağlayamamış olacağım ancak bu konuda oldukça faydalı anlatımlar yapan birinin yine konu ile alakalı bir videosunu aşağıya bırakıyorum.


Kalman artık bu uygulamalar için biraz standartlaşmış gibi ama yine de bazı pahalı imuların kendi içerisinde tamamen bu işi çözebildiğini görmüştüm(dışarıda yazılımda hiç bir filtre koşmuyordu, içerisinde büyük ihtimalle çok güzel filtreleniyordu). Ayrıca bu tip çiplerin daha önceden kendi içerisinde ürettiği dataları kullanarak belli işleri iyi kötü yapabilmiştim, ama pek test etmediğim şeylerdi. Bu arada attığım linkteki kanalın çok güzek bir discrete time PID C uygulaması videosu var, hem teorik hem de pratik açıdan yaklaşım var.
 
Bende konuya sondan dalarak değişik bir fikir vermeye çalışayım. Belki işinize yarar...

Yakın zamanda bir dc motor projesi yaptım. Bir çeşit servo sürücü gibi bir şey oldu. Pwm ile motor sürüp encoder ile hareketi kontrol ettim.
İlk başta hangi pwm değerine motor yaklaşık kaç devirde dönüyor onu tespit ettim. Sonra devri encoderden ölçerek hız kontrolü yaptım. İlk başta mantık çok basit görünüyordu. Hızı ölç istenenden düşük ise pwm i arttır... Pratikte durum böyle olmadı. Pid kodlarına baktım benimde çok işime yaramadılar. Sonra sorunu çözdüm. Bendeki sorun şöyleydi, Örneğin devir 1500 ama olması gereken devir 2000 ise. pwm i artır devri tekrar ölç devir 1600 hala eksik yine arttır... Buradaki sorun şu. Program döngüsü çok hızlı ama mekanik sistemin verdiği tepkiler görece yavaş. Pwm i artırınca bir süre beklediğinde zaten devir istenen seviyeye yükseliyor. Ama işlemci pwm i artırdıktan sonra hemen devri okuğunda hala hedeften eksik olduğunu görünce pwm tekrar gereksiz yere arttırıyor. Overshoot ortaya çıkıyor. Bu sefer devir düşürmek içinde aynı kontrolsüz durum ve undershot oluşuyordu. Dolayısı ile sabit hız yerine salınımlı bir kontrol elde ediyordum. Motorun tepki süresini kodlamaya ekleyince sorun çözüldü. Biraz karışık bir anlatım oldu ama belki değişik bir fikir yakalarsınız.
 
Bende konuya sondan dalarak değişik bir fikir vermeye çalışayım. Belki işinize yarar...

Yakın zamanda bir dc motor projesi yaptım. Bir çeşit servo sürücü gibi bir şey oldu. Pwm ile motor sürüp encoder ile hareketi kontrol ettim.
İlk başta hangi pwm değerine motor yaklaşık kaç devirde dönüyor onu tespit ettim. Sonra devri encoderden ölçerek hız kontrolü yaptım. İlk başta mantık çok basit görünüyordu. Hızı ölç istenenden düşük ise pwm i arttır... Pratikte durum böyle olmadı. Pid kodlarına baktım benimde çok işime yaramadılar. Sonra sorunu çözdüm. Bendeki sorun şöyleydi, Örneğin devir 1500 ama olması gereken devir 2000 ise. pwm i artır devri tekrar ölç devir 1600 hala eksik yine arttır... Buradaki sorun şu. Program döngüsü çok hızlı ama mekanik sistemin verdiği tepkiler görece yavaş. Pwm i artırınca bir süre beklediğinde zaten devir istenen seviyeye yükseliyor. Ama işlemci pwm i artırdıktan sonra hemen devri okuğunda hala hedeften eksik olduğunu görünce pwm tekrar gereksiz yere arttırıyor. Overshoot ortaya çıkıyor. Bu sefer devir düşürmek içinde aynı kontrolsüz durum ve undershot oluşuyordu. Dolayısı ile sabit hız yerine salınımlı bir kontrol elde ediyordum. Motorun tepki süresini kodlamaya ekleyince sorun çözüldü. Biraz karışık bir anlatım oldu ama belki değişik bir fikir yakalarsınız.
Bu yaptığınız kontrol I kontrole benziyor ve yaşadığınız olay da integral windup gibi doğru anladıysam. PI ya da PID kullansanız biraz daha iyi ayar yapabilirdiniz bence
 
Bu yaptığınız kontrol I kontrole benziyor ve yaşadığınız olay da integral windup gibi doğru anladıysam. PI ya da PID kullansanız biraz daha iyi ayar yapabilirdiniz bence
Aslında PID denedim ama temelde aynı sorun oldu. Bendeki mekanik geç tepki verdiği için alogritmalar ile (değişik bir sürü PID katsayısı ile) birşey yakalayamadım. Birde bende fren yok. Motorun eylemsizliği ve sürtünme arasındaki ilişki ile sistem yavaşlıyor. Böyle olunca baya bir tırmalattı ama iyi bir noktaya geldi.
 
Bende ortadan dalmış ve büyük ihtimalle size katkı sağlayamamış olacağım ancak bu konuda oldukça faydalı anlatımlar yapan birinin yine konu ile alakalı bir videosunu aşağıya bırakıyorum.


Kalman artık bu uygulamalar için biraz standartlaşmış gibi ama yine de bazı pahalı imuların kendi içerisinde tamamen bu işi çözebildiğini görmüştüm(dışarıda yazılımda hiç bir filtre koşmuyordu, içerisinde büyük ihtimalle çok güzel filtreleniyordu). Ayrıca bu tip çiplerin daha önceden kendi içerisinde ürettiği dataları kullanarak belli işleri iyi kötü yapabilmiştim, ama pek test etmediğim şeylerdi. Bu arada attığım linkteki kanalın çok güzek bir discrete time PID C uygulaması videosu var, hem teorik hem de pratik açıdan yaklaşım var.
benim sistem buradaki gibi zaten chipin içindeki imuyu kullanıyor. chip boot ettiğinde içine ufak bir hex file atıyor herhalde ayrı bir işlemci daha var ve bu kod orada koşuyor imu datalarını üretiyor.
 
Bu yaptığınız kontrol I kontrole benziyor ve yaşadığınız olay da integral windup gibi doğru anladıysam. PI ya da PID kullansanız biraz daha iyi ayar yapabilirdiniz bence
pid parametrelerini değiştirerek sistem tepki hızını ayarlamak mümkün. sizdekinde sistem çok hızlı tepki veriyor. ayrıca pid error toplamına baktığı için örnekleme hızı da sonucu etkiliyor. yani 100hz örnekleme ile 200 hz örnekleme arasında mutlaka parametre farkı olması gerekir.
 
Öte yandan, çok yüksek örnekleme hızları, diferansiyel değerlerin kayan nokta hatalarını artırıyor. Bence burada bir "sweet spot" olabilir.
 
pid parametrelerini değiştirerek sistem tepki hızını ayarlamak mümkün. sizdekinde sistem çok hızlı tepki veriyor. ayrıca pid error toplamına baktığı için örnekleme hızı da sonucu etkiliyor. yani 100hz örnekleme ile 200 hz örnekleme arasında mutlaka parametre farkı olması gerekir.

Bu cok normal.

Kd ve Ki turev ve integral carpanlari olsun.

Aslinda

Kd=KD*DT
Ki=KI/DT

dir.

DT ornekleme suresi yada 1/DT=ornekleme frekansi

Eger Kd ve Ki yi dogrudan katsayi olarak gorup bunu degistiriyorsaniz cok sey degisir.
Mesela ornekleme frekansini iki kat artirirsaniz Turev katsayisini yariya dusurmus, integral katsayisini da iki katina cikartmis olursunuz.

Kd yerine KD, Ki yerine de KI katsayisi kullanirsaniz bu durumda zaten ornekleme suresi otomatik olarak islemlere yansir.
 
Son düzenleme:
Bende konuya sondan dalarak değişik bir fikir vermeye çalışayım. Belki işinize yarar...

Yakın zamanda bir dc motor projesi yaptım. Bir çeşit servo sürücü gibi bir şey oldu. Pwm ile motor sürüp encoder ile hareketi kontrol ettim.
İlk başta hangi pwm değerine motor yaklaşık kaç devirde dönüyor onu tespit ettim. Sonra devri encoderden ölçerek hız kontrolü yaptım. İlk başta mantık çok basit görünüyordu. Hızı ölç istenenden düşük ise pwm i arttır... Pratikte durum böyle olmadı. Pid kodlarına baktım benimde çok işime yaramadılar. Sonra sorunu çözdüm. Bendeki sorun şöyleydi, Örneğin devir 1500 ama olması gereken devir 2000 ise. pwm i artır devri tekrar ölç devir 1600 hala eksik yine arttır... Buradaki sorun şu. Program döngüsü çok hızlı ama mekanik sistemin verdiği tepkiler görece yavaş. Pwm i artırınca bir süre beklediğinde zaten devir istenen seviyeye yükseliyor. Ama işlemci pwm i artırdıktan sonra hemen devri okuğunda hala hedeften eksik olduğunu görünce pwm tekrar gereksiz yere arttırıyor. Overshoot ortaya çıkıyor. Bu sefer devir düşürmek içinde aynı kontrolsüz durum ve undershot oluşuyordu. Dolayısı ile sabit hız yerine salınımlı bir kontrol elde ediyordum. Motorun tepki süresini kodlamaya ekleyince sorun çözüldü. Biraz karışık bir anlatım oldu ama belki değişik bir fikir yakalarsınız.

Cikisi artir bir sure bekle girisi oku cikisi duruma gore 1 artir yada eksilt bir sure bekle islemi integral isleminin ilkel bir hali.
Tek basina integral kontrol, osilasyona hatta kararsizliga neden olur.

Normalde integral alsaydin ve cikisin artmasi gerekse idi cikisi 1 birim artirmak yerine katsayilara bagli olarak cikisi 0.001 artirir. Bir sonraki cevrimde 0.001 daha sonra 0.001 daha artiracaktin. Ancak 0.001 artim cikis voltajinda artisa neden olamayacak ancak 1000 olcum sonrasinda 1000*0.001 cikis bir birim artardi.

Sen ne yapiyorsun cikisi 1 artir bekle de bekle. Bekleme suresini iyi ayarlarsan integral kontroldaki islemle ayni sonucu elde edersin.

Senin yaptigin aslinda su islem.

Sample alma suren diyelim ki 1 ms.

Eger her aldigin her 1000 sample dan sadece 1 tanesini kullanirsan aslinda senin gercek sample alma suren 1 sn olur.

1 sn uzerinden integral alirken hata=hata+err*Ki islemini yapinca Ki>1 ise cikisi degistir 1 sn bekle cikisi degistir 1sn bekle islemi yapmis olursun.

Fakat dedigim gibi integrator ile tek basina kontrolor tasarlanmaz.
 
Motor hareket ettiği zaman oluşan pikler motorun adım pikleri , gyro ölçüm max min verisini geçiyor hatta ölçüm zamanı için yeterli olmuyor olabilir, bu durumda integral dönüş açısıyla eşit olmaz.

Bunun için tavsiyem gyroyu bir lastik veya yaya bağla bu hemde pid için de faydalı olabilir , yada motor adımlarının etkisini inceleyeip bir şekilde toplamdan çıkar yazılım yoluyla.
 

Çevrimiçi üyeler

Forum istatistikleri

Konular
5,839
Mesajlar
99,583
Üyeler
2,479
Son üye
yiyehuoxing32

Son kaynaklar

Son profil mesajları

gruptaki arkadaşlara selamlar. sıteyi bu gün fark ettim. Asansör için 2x7 segment LCD gösterge üretmek istiyorum. acaba bu sayfadaki arkadaşlardan destek alabilirmiyim. LCD nin mantık açılımı ektedir.
deneyci wrote on TA3UIS's profile.
Selam.
Amatör telsiz lisansı nasıl alınıyor?
Lisansı olmayanı forumlarına almıyorlar. :)
Bilgi alamıyoruz.
cemalettin keçeci wrote on HaydarBaris's profile.
barış kardeşim bende bu sene akıllı denizaltı projesine girdim ve sensörleri arastırıyorum tam olarak hangi sensör ve markaları kullandınız yardımcı olabilir misin?
m.white wrote on Altair's profile.
İyi akşamlar.Arabanız ne marka ve sorunu nedir.Ben araba tamircisi değilim ama tamirden anlarım.
* En mühim ve feyizli vazifelerimiz millî eğitim işleridir. Millî eğitim işlerinde mutlaka muzaffer olmak lâzımdır. Bir milletin hakikî kurtuluşu ancak bu suretle olur. (1922)
Back
Top