Skocz do zawartości

Dziwne "skoki" silników sterowanych z PWM


pi1er

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 do komentarza
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 do komentarza
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 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

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • 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.