dc motor sıkışma problemi

Başlatan ertuğrul54, 01 Mayıs 2019, 14:51:00

ertuğrul54

enc = qei_get_count();
        kiyaslama = abs( enc - enc_eski );

        delay_us(100);
        if (kiyaslama<5) {
            if (press_counter >= 9) {
                if (status.flag1) {
                  status.flag1 = OFF;
                        if (current_position) {
                            target_position = current_position ; 
                        }
                }
            }
        } else {
            press_counter = 0;
        }
        enc_eski = enc;

yukardaki kodda bir türlü kıyaslama alamıyorum  kiyaslama herzaman 0 oluyor  encoderdeki kıyaslamayı alıp  sıkışmayı kontrol etmek istiyorum ona göre motora ileri git , dur veya geri git diyeceğim
motorun yükü her zaman göreceli olduğundan  akım ile kontrol etmek istemedim

press_counter 10ms lik timer1 ayarladım  işlemcim 18f4431

yas

delay_us(100);
        if (kiyaslama<5)
ile kiyaslama beşten küçükken press_counter sıfırlanıyor. press_counter 10 ms lik timer ile artıyorsa bir defa bile artmadan
else
den sonra sıfırlanıyor.

ertuğrul54

aradaki fark  5 den küçük olduğu sürece  press_counter her zaman sıfır olması gerek çünkü enc ile enc_eski arasındaki fark  5 den büyük olduğu zaman press_counte 10ms sayacak  ve motor durdurup motor geri  diyeceğim

yani motoru elimle zorlamaya çalıştığım zaman  aradaki (enc ve enc_eski ) farkı bilip ona göre işlem yapmaktı takılıp kaldım kıyaslamada

yas

Paylaştığın kodu tercüme edersek
-Enkoder i okuyorsun.
-Okunan değer ile eski değer arasındaki farkı mutlak değer olarak kiyaslama isimli değişkenine eşitliyorsun.
-Hiç bir işlem yapmadan 100 mikro saniye bekleniyor. (bence anlamı yok)
-kiyaslama isimli değişkenin beşten küçük olması durumunda press_counter isimli değişkenin 9 dan büyük olması koşuluna bakıyorsun.
-Eğer kıyaslama 5 ten büyükse press_counter sıfırlanıyor.
-rutinin sonunda enc_eski isimli değişkeni enc yani enkoder değerine eşitliyorsun.

Buradaki kod parçasından yorumlayarak olabilecek ihtimal press_counter 10 ms bir artarak 9 veya üzeri değeri alamıyor olabilir sebepleri
-timer işlemiyor olabilir
-press_counter 9 değerine ulaşamadan kiyaslama değeri 5 i geçerek press_counter değerini sıfırlıyor olabilir.