Etiket arşivi: motor kontrol algoritması

[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;
    ////////////////////////////////////////////////////////////////////////////////