Skocz do zawartości

Dziwne "skoki" silników sterowanych z PWM


Pomocna odpowiedź

Zacznę od najważniejszego:

a) Schemat

b) Program

$regfile = "m8def.DAT"                                      'deklaracja procesora, w ty wypadku Atmega8
$crystal = 8000000                                          'deklaracja taktowania

Dim Adres As Byte , Command As Byte                         'deklaracje zmiennych
Dim Speed As Integer

Enable Interrupts                                           'włączenie przerwań

Config Portc = Output                                       'port c  jako wyjścia
      Portc = &B00000000                                   'wszędzie stan spoczynkowy-0

'-------konfiguracja timera do generowania sygnału PWM warunkującego prędkość pojazdu
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1


Speed = 255                                                 'prędkośc na maksa



Do 

Waitms 50

     Speed = 250
     Gosub Przod
 Loop 

End 

Przod:
Do


   Waitms 50
   ' gasienica prawa
   Pwm1a = Speed
   Set Portc.5
   Reset Portc.4
   ' gasienica lewa
   Pwm1b = Speed
   Set Portc.3
   Reset Portc.2


Loop
End

c) Filmik w dennej jakości, ale chyba widać obrazujący o co mi chodzi

Jak widać silniki zamiast płynnie chodzić po prostu drgają w jakiś dziwnych odstępach czasowych. Po kilku sekundach takiego drgania zaczynają wchodzić w płynne, normalne obroty i jest ok.

Korzystam z PWM, gdzieś wyczytałem, że musi być minimum 10MHz aby to działało poprawnie - jednak w przykładach Bascoma kod PWM "działa" na 4MHz. Mój uC chodzi na wewnętrznym 8MHz (fusebity ustawione na wew. 8MHz przy użyciu SinaProg).

Początkowo myślałem, że to silniki - podłączałem różne silniczki i zawsze jest to samo.

Czym to może być spowodowane? Dodam, że całość zasilam z 4 aku i 4 baterii alkalicznych połączonych + do -.

Link to post
Share on other sites
Wg mnie coś z taktowaniem... Napewno dobrze fusy ustawiłes?

Dałem w SinaProg "Int. 8 MHz" -> Program. Zawsze tak robiłem. Chyba architektura fuse-bitów się nie zmieniła między ATmega8 i ATmega8L?

Link to post
Share on other sites
Korzystam z PWM, gdzieś wyczytałem, że musi być minimum 10MHz aby to działało poprawnie

Chciałbym widzieć tego co takie głupoty pisze. PWM działa nawet na wewnętrznym 1MHz.

Ja bym wywalił to opóźnienie w "Przod" i dał je przed skokiem. Po drugie, w porprogramie "Przod" najpierw ustawiłbym prędkość silników, a potem dał tylko pętlę Do:loop, wyjdzie na to samo tylko mniej operacji:

Przod:

   ' gasienica prawa
   Pwm1a = Speed
   Set Portc.5
   Reset Portc.4
   ' gasienica lewa
   Pwm1b = Speed
   Set Portc.3
   Reset Portc.2

Do
Loop 

[ Dodano: 09-01-2011, 13:21 ]

PS. Co do 10MHz to powinno być minimum tyle do sterowania serw, może się komuś coś pomieszało.

  • Pomogłeś! 1
Link to post
Share on other sites

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.