Skocz do zawartości

Linefollower z regulatorem PID.


macieknh

Pomocna odpowiedź

Witam

Mam zamiar dołożyć do linefollowera regulator PID. Na razie próbuje zrobić sam człon P. DO tego członu potrzeba mi błąd pomiędzy wartością zadaną i wartością aktualną. I nie wiem czy za wartość aktualną mogę przyjąć aktualną wartość rejestru OCR1A( silnik sterowany jest PWMem ). Póki co założyłem że wartość aktualną odczytuję z rejestru OCR1A.

Teraz jeszcze nie jestem pewien co do kodu. Wiem że wartość dla członu proporcjonalnego jest obliczana ze wzroru czlonP = error*kp.

napisałem to tak:


TCCR1A = _BV(COM1A1)|_BV(COM1A0)|_BV(COM1B1)|_BV(COM1B0)|_BV(WGM10)|_BV(WGM12); // timer 1 fast PWM 8 bit
TCCR1B = _BV(CS10);


OCR1A = 33;
OCR1B = 5;

lcd_init();
//adc_init();
   double kp = 0.5;
   double cel = 153;
   OCR1B = 5;
   double elp = 0;
char wynik[5];
   while(1)
   {
       elp = (cel - (double)OCR1B)*kp;
       if((OCR1B+elp)>255)
           OCR1B = 255;
       else if((OCR1B+elp)<0)
           OCR1B = 0;
       else
           OCR1B += (int)elp;
	dtostrf(OCR1B, 1,0,wynik);
	write_text(wynik);		
       delay_ms(100);
	write_command(0x01); // czyść LCD
	if((PIND& _BV(PD0)))
	{
		cel = 50;
		}
	else
		cel = 153;
	}

I działa to tak dziwnie. Ciągle wartość rejestru dochodzi mi do 255 i silnik staje.

Link do komentarza
Share on other sites

Ja też męczę się z PID-em w moim line followerze, ale coś mi się zdaje, że źle podchodzisz do tematu. W przypadku lf'a PID służy do ustawienia jak najszybciej osi symetrii robota przy linii aby jechał gładko, czyli wartością zadaną jest środkowy czujnik znajdujący się nad linią a wartością aktualną czujnik, który aktualnie znajduje się nad linią. Może bardziej zobrazuje to kawałek kodu:

Kp = 1;
Ki = 1;
Kd = 1;

SP = 0;
MAXPWM = 1023;
MINPWM = 0;


for(;;)//główna pętla programu
{

   switch(PINA) {
       case 0b11111110:        
           PV = -6;
           break;
       case 0b11111100:
           PV = -5;
           break;
       case 0b11111101:
           PV = -4;
           break;
       case 0b11111001:
           PV = -3;
           break;
       case 0b11111011:
           PV = -2;
           break;
       case 0b11110011:
           PV = -1;
           break;
	case 0b01110111:
       case 0b11110111:
           PV = 0;
           break;
       case 0b11100111:        
           PV = 1;
           break;
       case 0b11101111:
           PV = 2;
           break;
       case 0b11001111:
           PV = 3;
           break;
       case 0b11011111:
           PV = 4;
           break;
       case 0b10011111:
           PV = 5;
           break;
       case 0b10111111:
           PV = 6;
           break;

       case 0b11111111:       

       if (PV < 0) {
           PV = -7;
       } else if (PV > 0) {
           PV = 7;
       }
	break;
   }

   error = SP - PV;
   P = Kp * error;
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.