Etiket arşivi: DC motor sürücü

[10] : Sabit Hızla KAPATMA

Bu komut, Vemg hızı ile kapının kapatılmasını sağlar. Kapı boyu + aralık toleransı kadar bir mesafe sonra engel algılanmasa bile motor duracaktır.
Bu işlemde hata üretilmez. İşlem bittikten sonra sürücü durumu DRIVE_CLOSED olacak ve busy = 0 yapılacaktır.

      // SABIT HIZLA KAPATMA:  Vemg hizi ile kapi kapatma komutu
      //////////////////////////////////////////////////////////////////////////
        case 10:
            drive.command = 0;

            rampset = Vemg;             // set degeri Vemg olacak!
            current_threshold = Tmc;    // durma zorlanma degeri: kapanma limit algılama yükü
                                        // burada engel algılama yapmıyorum..
            PID.overloaded = 0;         // zorlanma algilama sayacını da
            OCcounter = 0;              // sifirla

            /* Position Breakpoint Ayari:
             *  Kapi boyu + olcum toleransi kadar bir mesafe hareket hakki var.
             *  Tetiklenen encodertick flag hareketi sonlandıracak
             *  Bu kadar mesafe boyunca donus olmussa kapı sonuna gelinmiş olmalı
             *  motor duracak, hata da verilebilirdi..
             */
            ClearEncoderCounter();
            bppos.ul = dt.ul + APERTURE_TOLERANCE;
            bppos.l = (signed long *) ( -1 * bppos.l);
            SetREVBreakpoint();

            // sabit rampali kalkis gorevini baslat:
            dir = 1;                    // yon: REV
            drive.subindex = 11;
            drive.status = 1100;        // sabit rampa adimi alt gorevi
        break;


        // Hareket sonu mesafesine erişim ya da zorlanma limiti bekleme adımı
        case 11:

            // ZORLANMA ALGILANDI:
            if (PID.overloaded)
            {
                PID.nocontrol = 1;      // PID kontrol kapalı olmalı!

                // Demek zorlanma oldu.. Bayrağı sıfırla...
                PID.overloaded = 0;
                OCcounter = 0;
                drive.status = 12;
            }

            // kapı boyu kadar hareket edildiyse motor durmalı:
            if (encodertick)
            {
                // TODO: burada bir hata kodu uretebilirim ama
                // onu handle edecek mekanizma da olmali...
                // bunun yerine "bu kadar hareket ettiysem kapı kapanmıştır artık"
                // deyip bitiriyorum..
                drive.status = 1000;
                drive.subindex = 12;
            }


            // bu esnada kullanıcı durdurma komutu verdiyse:
            if (drive.command == 1000)
            {
                drive.command = 0;
                drive.status = 1000;
                drive.subindex = 12;
            }
        break;


        // kapı sonu, hareket bitti:
        case 12:
            // 90ms. daha kapiyi kapama yonunde zorla ve bitir:
            if (PID.controlcounter > 8)
            {
                PID.controlcounter = 0;
                speedref = 0;
                MDC = 0;
                MOTOR_BRK_L;
                drive.itemstatus = DRIVE_CLOSED;           // kapi KAPALI
                drive.status = 0;
                drive.busy = 0;
                // position sayaçlarini sifirla:
                ClearEncoderCounter();
                position.ul = 0;
            }
        break;



L6207

Küçük bir step motoru sürmek için yaptığımız küçücük bir kartta L6227 kullanıp, onun başarısını görünce, daha büyük bir DC motor sürücü işinde de kullanmayı tercih ettiğim DMOS çiftli H köprüsü çipi.

Ben bir hataya düştüm, başkaları düşmesin: L6206’nın datasheet’ine bakıp, onun iki H köprüsünün paralel yapılabildiğini görüp, bu L6207 ile aynı deyip bu paralelleme işini L6207’de de uygularsanız tuzağa düşmüş olursunuz. Çünkü esasında bu iki çip birbirinden farklı. L6207’de her köprünün ayrı PWM sürücüsü var. Ayrıca aşırı akım koruması yapıları da farklı.

Benimkisi gibi işlerde L6206 daha uygun: Bize ayrıntılı bir PWM kontrol gerekmiyor, bu işi EN piniyle kendimiz hallediyoruz. Aşırı akımda otomatik kapanma da bize bağlı olsa iyi olur, OCD pinleri ayrı uçlara çıkıyor. Akım eşiği ayarlanabilir, üstelik bir pine bağlanan bir direncin değeriyle, bunu kullanırız. Paralel bağlama da basitçe mümkün. A ve B köprülerini paralel çalıştırabiliyoruz. Ayrıca, aşırı akım denetimi için şönt direnç de gerekli değil. Bu tasarımı basitleştiriyor.