Skocz do zawartości

PWM,obsługa serwomechanizmu


cris

Pomocna odpowiedź

Witam. Wiem ,że było już wiele tematów tego typu ,ale w żadnym nie znalazłem odp na moje pytanie. Oto program :

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
int main( void )
{
  _delay_ms(1000);
  DDRB = 0xFF;    
  TCCR1A |=(1<<COM1A1);
  TCCR1A |=|(1<<WGM11); // pwm korekcja fazy 9-bit 
  TCCR1B |=(1<<WGM12)|(1<<WGM13)|(1<<CS11); // tryb CTC ,TOP=ICR1,preskaler 8
  ICR1 = 2500;  
  sei();
  while(1){
  OCR1A=80;
   _delay_ms(700);
  OCR1A=240;
}}

Teraz moje pytanie 🙂 .Musze ciągle ustawiać serwo raz w pozycji niemalże skrajnej lewej ,raz w prawej. Gdy w programie nie występuje while(1) ,wszystko jest ok ,jeśli jednak go dodaje serwo obraca się tylko w lewo potem stoi 😕 W czym tkwi problem ??Z góry dzięki za pomoc 😅

__________

Komentarz dodany przez: Treker

Link do komentarza
Share on other sites

Daj jeszcze jeden delay po OCR1A - 240. Bez tego nie zauważysz zmiany wypełnienia z 80 na 240, bo program automatycznie przeskoczy do pierwszej instrukcji.

Link do komentarza
Share on other sites

dzięki , duże przeoczenie z mojej strony ....

Mam jeszcze takie pytanie ,serwo ma straszne drgania można je jakoś usunąć ,czy tak po prostu ma być ??

Link do komentarza
Share on other sites

dzięki , duże przeoczenie z mojej strony ....

Mam jeszcze takie pytanie ,serwo ma straszne drgania można je jakoś usunąć ,czy tak po prostu ma być ??

Może ma drgania bo przekroczyłeś zakres ruchu serwa. Zmniejsz wychylenie serwa i sprawdź czy dalej drga.

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

Witam kolejny raz. Nie chciałem zakładać nowego tematu więc tu zamieszczę kolejne pytanie.Program pisany na atmega 8.

Działają mi tylko pwmy 9 bitowe , nie działają 8 i 10 bitowe. Sprawdzałem dla fast pwm i phase corect .Program ten sam co w pierwszym poście ,zmieniam oczywiście tryb pwm na 8 lub 10 bitowy 🙂 . Serwo jednak ani drgnie ? Czy ktoś mógłby mi powiedzieć w czym tkwi problem ?? Szukałem w nocie katalogowej ,ale jakoś nie znalazłem rozwiązania. 😕

Dzięki

Link do komentarza
Share on other sites

A wartości rejestrów odpowiedzialnych za wypełnienie zmieniasz?

Tak,zmieniam. Dawałem max,min pośrednie nic się nie dzieje 😕

edit : załączam program do fast pwm 8 bit ,atmega 8

#include

#include

#include

int main( void )

{

DDRB=0xFF;

_delay_ms(2000);

TCCR1A|=(1<

TCCR1B|=(1<

ICR1=2500;

sei();

while(1){

OCR1A=40;

_delay_ms(650);

OCR1A=220;

_delay_ms(220);

}

}

Tak ,jak wspomniałem w poprzednim poście działa mi tylko 9 bitowy pwm.Powyżej mój program dal 8 -bitowego.Może problem leży w kodzie ??

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