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

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.