Skocz do zawartości

[C][ATtiny2313] Problem z ustawieniem FastPWM


g.voodoo16

Pomocna odpowiedź

Witam,

postanowiłem wygenerować sygnał PWM o częstotliwości 50Hz, do sterowania turbiną. Korzystając z artykułu Trekkera, wiem na czym to polega, natomiast nie udaje mi się takiego sygnału uzyskać. Oto mój kawałek kodu, który według mnie powinien chodzić:

//---------------------------------------------------------------
// OBSLUGA TURBINY (WYPELNIENIA
//---------------------------------------------------------------
void turbina(uint speed){
 if(speed < 1000) speed = 1000;
 else if(speed > 2000) speed = 2000;

 OCR1A = speed;
}

//--------------------------------------------------------------
// KONFIGURACJA PWM DLA TURBINY
//--------------------------------------------------------------
void init_turbina(){

   TCCR1A |= (1<<COM1A1);
   TCCR1A |= (0<<COM1B1);

          TCCR1B |= (1<<WGM13);
   TCCR1B |= (1<<WGM12);

   TCCR1A |= (1<<WGM11);
   TCCR1A |= (0<<WGM10);

   TCCR1B |= (1<<CS11); // preskaler na 8

   ICR1 = 20000 ;
}

Całość odpalam w main():

 // PB3 jako wyjscie turbiny
 DDRB |= (1<<PB3);

 // uruchamia PWN dla turbiny
init_turbina();

turbina(1000);
 _delay_ms(4000);
 turbina(1300);

Schematu nie daję, bo jest to złożony na płytce stykowej ATtiny2313 zasilany z programatora(5V), a do Vcc podlączony jest kondensator 100nF. Fusy ustawione na 8MHz [-Ulfuse:w:0x64:m -Uhfuse:w:0xdf:m ]

Częstotliwość jaka jest generowana waha się od ~49-50,9HZ, ale nie przypomina to nawet przebiegu prostokątnego ;c

Proszę o pomoc.

Pozdrawiam,
g.voodoo16.

Link do komentarza
Share on other sites

Po pierwsze zmień :

_delay_ms(4000)

na:

for(i=0;i<400;i++)
{_delay_ms(10);}

Miałem podobny problem (sygnał był bardzo nierówny i "skakał")

Winą było to że wartość OCRx była za mała, po zmianie jej na większą sygnał zaczął wyglądać jak powinien. Był to mój 1 projekt i podłączyłem turbinę pod timer 8-bitowy więc musiałem ustawić go w tryb CTC, zwiekszyc czestotliwosc, zliczać ilość przerwań i po przekroczeniu zadanej liczby włączać albo wyłączać dany pin.

Link do komentarza
Share on other sites

Korzystam w domowych warunkach z oscyloskopu z komputera [soundcard Oscilloscope] i sondy z dzielnikiem napięcia 10:1. Masa z sondy do masy z plytki, i plus z sondy do wyjścia PB3.

Żeby wprowadzić więcej zamętu udało mi się coś bardziej kwadratowego otrzymać, za każdym razem oscyloskop pokazuje coś innego, raz ładując wsad z Eclipse jest coś takiego jak niżej na screenie, a raz jest chaotyczna wybuchy (screen2) bym to opisał, takie dziwne cudo. Nie rozumiem tego... Ustawiłem też na ICR1A = 2500, udało mi się dostać ładny prostokątny sygnał, lecz o częstotliwości 49Hz, wiec zmieniłem trochę, i znów jest generowany poszarpany sygnał bez ładu i składu, próbuje znów wpisać 2500, i też nic.

Przepraszam jeżeli coś nie składnie, godzinę pisałem tego posta, bo ciągle inaczej pokazuje ;c

1#

2#

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

Cóż, pewnie już sam przeczuwasz co napiszę. Szkoda Twojego czasu na to badziewie. Tak, niektórzy być może używają kart audio zamiast oscyloskopów i niektórym z nich pewnie nawet czasem udaje się zauważyć przebieg, jakiego się spodziewali. Zapewne istnieją także nieliczni, którzy rozwiązali przy pomocy takiego narzędzia jakiś swój problem ale ja widzę, że próbujesz wybrać się w długą drogę z kompasem w którym czasem nawet obraca się strzałka ale północ(?) pokazuje dopiero po dobrym przywaleniu w pieniek. I to nie zawsze.

Jeśli możesz, to zweryfikuj działanie swojego ee.. (słowo oscyloskop jakoś nie chce mi się napisać) sprzętu na przebiegach wzorcowych. Nie wiem, zrób sobie generator na 555, może złap sygnał MOSI lub SCK z programatora w czasie ładowania kodu. Po prostu musisz mieć pewność, że sprzęt pomiarowy jest OK. Bez tego pobłądzisz jeszcze bardziej.

Sygnał z portu jest na pewno protokątny chyba, że Twoja sonda robi mu jakąś krzywdę (daj jej schemat) ale wtedy robiłaby to zawsze a tu wygląda mi na jakąś losowość. Może zamiast dodatkowej niepewności związanej z PWM (choć wydaje mi się, że to jest w porządku) wygeneruj programowo falę prostokątną za pomocą zapisów do portu i opóźnień. Takie coś rzadko kiedy nie działa i może być jakimś wzorcem. Jak widzisz musisz najpierw "uruchomić" system pomiarowy i upewnić się, że możesz polegać na ich wynikach albo.. zostawić to w diabły i pomyśleć o normalnym oscyloskopie. Nawet najprostszy cyfrowy (ostatnio bardzo, bardzo staniały) będzie jak przejście ze wspomnianego kompasu i (niezbędnego) pieńka na odbiornik GPS z wbudowaną mapą.

Tymczasem możesz zrobić następujący eksperyment: wygeneruj PWM o żadanej częstotliwości, niech będzie 50Hz, a do nieobciążonego niczym wyjścia procesora podłącz zwykły miernik ustawiony na pomiar napięcia DC. Zmieniaj wypełnienie (np co 2 sekundy jeden krok) w cyklu 0-25-50-75-100% i obserwuj wskazania. Napięcie powinno zmieniać się zgodnie ze zmianami wypełnienia i powinno wynosić (dla zasilania 5V) odpowiednio 0-1.25-2.5-3.75-5V oczywiście z pewnymi możłiwymi odchyłkami ale nie więcej jak 100mV. To oznacza, że wypełnienie zmienia się prawidłowo, Ty panujesz nad jego ustawianiem a przebieg jest raczej prostokątny.

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.