Bogusław Kempny

Serwomechanizm SG90

Autor adres
Początek HC-SR04 LCD Kamera fork() sms strfry() GPIO impulsy Klawiatura Brama GPIO PWM SG90 ....











Rozwiązaniem problemów wiązanych z niedokładnościami opisanymi na poprzedniej stronie jest użycie sprzętowego generatora PWM, w który uzbrojony jest nasz komputerek Raspberry.

Użyjemy testowego programu servp.c (skrypt do kompilacji csp).

Program ten steruje serwomechanizmem pokazanym na filmiku na pierwszej stronie tego opisu.

Jeśli pominąć niuanse związane z samym pwm, jest bardzo prosty.

Programujemy kanał pwm, zegar 0,1 ms, okres 20 ms:

  pinMode(1, PWM_OUTPUT);
  pwmSetMode(PWM_MODE_MS);
  pwmSetClock(1920);
  pwmSetRange(200);
Dwukrotnie poruszamy wałkiem od jednego skrajnego położenia do drugiego, zatrzymując się pośrodku:
  for(i=0;i<2;i++)
    {
     pwmWrite(1,6);
     sleep(1);
     pwmWrite(1,15);
     sleep(1);
     pwmWrite(1,25);
     sleep(1);
     pwmWrite(1,15);
     sleep(1);
    }
Teraz obracamy wał serwomechanizmu od jednego skrajnego położenia do drugiego zwiększając czas trwania jedynki logicznej skokowo co 0,1 ms (9°). Po każdym przeprogramowaniu generatora (pwmWrite(1,i);) w prostej pętli odliczamy niewielkie opóźnienie, żeby serwomechanizm zdążył obrócić wałek:
    for(i=6;i<26;i++)
      {
       pwmWrite(1,i);
       for (j=0;j<30000000;j++);
      }