Skocz do zawartości
Zaloguj się, aby obserwować  
pi1er

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 -.

Udostępnij ten post


Link to post
Share on other sites

Wg mnie coś z taktowaniem... Napewno dobrze fusy ustawiłes?

Udostępnij ten post


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?

Udostępnij ten post


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

Udostępnij ten post


Link to post
Share on other sites

Jaki głupi błąd 😃

Że ja tego wcześniej nie zauważyłem... Kod od KD93 załatwił sprawę 🙂

Dzięki wszystkim 😃

Udostępnij ten post


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!

Gość
Napisz odpowiedź...

×   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.

Zaloguj się, aby obserwować  

×
×
  • Utwórz nowe...