Etiket arşivi: hız kontrol

[1100]: Sabit Rampa ile Hızlanma

Bu alt-göreve atlandığında motor hızı 0’dan rampset değerine sabit bir ivme ile artırılır.
Alt-görev çağrıldığında dir bayrağının durumuna göre hareketin yönü belirlenir. dir = 1 ise REV dir = 0 ise FWD yönünde hareket başlatılacak.
Zorlanma algılanırsa rutinden hemen çıkılır. Zorlanma sonucu alt görevden dönülürse overloaded bayrağı 1 olarak dönülür.
busy ve itemstatus bayrakları bu görevlerden etkilenmez.

// SABIT RAMPALI HIZLANMA: (FWD/REV)
 ////////////////////////////////////////////////////////////////////////////
        case 1100:
          speedref = 50;
          MDC = 50;
          PID.controlcounter = 0;
          PID.restart = 1;
          PID.nocontrol = 0;     // kalkış PID kontrol ile, bu önemli!
          SetDir();                     // sürücü yönünü belirle..
          _PTEN = 1;                    // PWM'i başlat!
          drive.status++;
        break;


        // her 40ms'de bir hizi biraz artirmak:
        case 1101:
            if (PID.controlcounter > 3)
            {
                speedref += 10;
                drive.status++;
                PID.controlcounter = 0;
            }
            // bu esnada aynı zamanda  motor zorlanıyor mu diye de bakıyoruz:
            if (PID.overloaded)
            {
                PID.nocontrol = 1;      // zorlanma durumunda PID devre dışı
                speedref = 0;
                drive.status = drive.subindex;       // ve hemen dönüyoruz..
            }
        break;


        // referans degere ulastik mi sorgulamak:
        case 1102:
            if (speedref < rampset) drive.status = 1101;
            else
            {
                speedref = rampset;
                drive.status = drive.subindex;
            }
        break;
    ////////////////////////////////////////////////////////////////////////////////

[1000] : Sabit Frenleme İle Durma

Bu alt-göreve atlandığında motor frenleme ile durdurulur.
busy flag değiştirilmiyor.
itemstatus flag değiştirilmiyor.

   /// SABIT FRENLEME ILE DURMA :  900ms sürer..
   /////////////////////////////////////////////////////////////////////////////////
        case 1000:
            // kullanici durmak istiyorsa, position breakpoint kesmesi gerekmiyor
            // diye dusunurum:
            _PCLEQIEN = 0;
            _PCHEQIEN = 0;

            // motoru bosa at:
            speedref = 0;
            MDC = 0;
            PID.nocontrol = 1;
            MOTOR_BRK_L;
            PID.controlcounter = 0;
            drive.status++;
        break;

        case 1001:
            if (PID.controlcounter > 19)     // 200ms bosta bekle
            {
                // bosta suresi gectikten sonra biraz fren yap:
                speedref = 1000;
                drive.status++;
                PID.controlcounter = 0;
            }
        break;

        case 1002:
            if (PID.controlcounter > 9)  // 100ms bekle
            {
                speedref = 2000;        // freni artir
                drive.status++;
                PID.controlcounter = 0;
            }
        break;

        case 1003:
            if (PID.controlcounter > 9)    // 100ms bekle
            {
                speedref = 3000;            // freni artir
                drive.status++;
                PID.controlcounter = 0;
            }
         break;

       case 1004:
           if (PID.controlcounter > 9)      // 100ms bekle
           {
               speedref = 0;
               drive.status++;
               PID.controlcounter = 0;
           }
       break;

        case 1005:
            if (PID.controlcounter > 19)     // 200ms bekle
            {
                speedref = 4000;            // freni artir
                drive.status++;
                PID.controlcounter = 0;
            }
        break;

       case 1006:
           if (PID.controlcounter > 19)      // 200ms bekle
           {
               speedref = 0;                // ve islemi sonlandir...
               PID.controlcounter = 0;
               drive.status = drive.subindex;
           }
       break;
//////////////////////////////////////////////////////////////////////////////////