Witam
Na filmie jest LAla z dołączonym urządzeniem do wykazania błędu w programie.
http://www.youtube.com/watch?v=8PQG4zbzdrQUrządzenie to, to ta brązowa rurka przyczepiona do odpowietrznika.
Program powinien utrzymać okręt na stałej głębokości około 1 cm pod powierzchnią wody
przez czas 40 sekund, a potem wynurzyć okręt z maksymalną prędkością.
Niestety wyszły mi z głowy wykłady z teorii regulacji i układ się wzbudza.
Już zmodyfikowałem program tak, abym mógł regulować prędkość obrotową silników zbiorników.
Zmiana prędkości odbywa się za pomocą PWM (Pulse Width Modulation) ( zmiana szerokości impulsu).
żeby nie było, żem z NASA, CASA lub SRASA, to wytłumaczę na palcach co to jest :
Normalnie przy zasilaniu silnika podaje się napięcie stałe na jego zaciski. Wtedy pracuje
on z maksymalną prędkością (dla danego napięcia).
Jeżeli jednak w okresach (tu przyjąłem z niczego czyli z głowy) 0.1 sekundy, napięcie podajemy
przez 0.05 sekundy, a przez pozostałe 0.05 sekundy nie, to silnik będzie się obracał wolniej.
Moc, pewnie i prędkość jest proporcjonalna do stosunku :
czas podawania impulsu/(czas podawania impulsu + czas bez impulsu).
Zmiana prędkości obrotowej ułatwi znacznie proces regulacji.
A oto stosowny kawałek programu, wyjęty z przerwania milisekundowego :
Kod: Zaznacz cały
if ( cZbiornik0Busy )
{
TPWMSlilnika0 = 0;
}
else
{
if ( cStatusSilnika0 & SILNIK_RUN )
{
if ( TPWMSlilnika0 > cMocSilnika0 )
{
PORTA &= ~_BV( Zb1_Silnik ); //Wylacz silnik (napiecie)
}
else
{
PORTA |= _BV( Zb1_Silnik ); //Wlacz silnik (napiecie)
}
if ( ++TPWMSlilnika0 > PELNA_MOC )
{
TPWMSlilnika0 = 0;
}
}
}
Jest tu jescze jeden pomysł : tłoki zbiorników stanowią duże obciążenie dla silnika, a start jeszcze
większe. Dlatego przez pierwsze 40ms silnik dostaje napięcie cały czas niezależnie od ustawionej
wartości w zmiennej cMocSilnika, dopieto po tym włączany jest proces PWM.
Z ukłonami
Andrzej Korycki