Skocz do zawartości

[Bascom AVR] Program do obsługi turbiny LF


soban

Pomocna odpowiedź

"Podłączyłem do PD5 zegar 8MHz" 🤯 Nic nie rozumiem. Przecież to miało być wyjście sygnału PPM do regulatora.

"Aaa kwarc 16 mam jak coś" - Odechciało mi się. Może znajdą się chętni by Ci pomóc, ja wymiękam. Chyba brakuje mi talentu, przepraszam.

Aaa i nie używam GG jak coś.

Aaa kod działa na płytce u mnie na biurku.

Link do komentarza
Share on other sites

"Podłączyłem do PD5 zegar 8MHz" - Przepraszam za brak przecinka miało być że podłączyłem kabel sygnałowy do portu PD5 a Timer ustawiłem na 8MHz

"Aaa kwarc 16 mam jak coś" - Przepraszam późno już i nie myślę. Zapomnij

Może znajdą się chętni by Ci pomóc, ja wymiękam.

Szkoda : ( . Mam nadzieję, że jednak spróbujesz bo masz sporą wiedzę o tym i BARDZO Ci dziękuję za to co już powiedziałeś do tej pory i próbę pomocy.

Link do komentarza
Share on other sites

Fragment kodu, który zamieściłem wcześniej produkuje sygnał PWM na OC1A. Jeśli procesor rzeczywiście napędzasz zegarem 8MHz (wewnętrzny generator RC lub kwarc 8MHz) i nie masz wprogramowanych żadnych "twardych" podzielników, czyli jeśli fusebity CKSEL=0100 (dużo tych jeśli), to parametry przebiegu wyjściowego powinny odpowiadać sygnałowi PPM. Jeżeli podłączyłeś tam regulator, to przynajmniej ten sygnał powinien widzieć. Teraz pytanie, co z nim z robi.

Mój kod to tylko przykład tego, jak możesz wpływać na wypełnienie - zakładałem, że mając takie coś już sam z tym poeksperymentujesz. Moja pętla while{} co sekundę zmienia wypełnienie z 0 na 100% ale to tylko przykład. Normalne serwo łykając to jeździłoby od lewej do prawej i to byłby dobry test prawidłowości generacji tego sygnału. Wtedy powinieneś zajrzeć do instrukcji swojego regulatora by dowiedzieć się, czy jest bardziej skomplikowany niż serwo. Zwykle tak jest i rzadko który regler tak po prostu załącza silnik po dostaniu zasilania i 100% sygnału PPM ale wcale tego nie wykluczam. Koledzy na Forum twierdzą, że mają takie proste regulatory choć mi to się nigdy nie zdarzyło. W każdym razie musisz upewnić się, że sygnał PPM jest i że jest OK. Od biedy możesz podłączyć do OC1A diodkę LED przez opornik 200omów-1k do masy. Przy pracującym moim kodzie powinna słabo świecić (a właściwie szybko mrugać - trochę jak ekran telewizora) i co sekundę zmieniać jasność z małej na trochę większą i odwrotnie. Możesz też użyć multimetru. Ponieważ pokazuje on wartości średnie napięcia, przy 5V zasilania procesora i wypełnieniu 0% PPM masz impulsy 1ms co 20ms co daje średnią 5V*(1/20)=0.25V. Przy 100% PPM dostajesz impulsy 2ms i miernik powinien pokazać 5V*(2/20)=0.5V Niestety ten test nie weryfikuje częstotliwości - jeśli coś pokręciłeś z zegarami, prescalerami itp to w ten sposób tego nie sprawdzisz. Miernik może też "nie zdążyć" pokazać czegoś sensownego w ciągu 1 sekundy więc do tego testu zwiększ opoźnienia które wstawiłem np. z 1 do 5 sekund.

Być może Twój regulator potrzebuje czegoś więcej, np. po załączeniu zasilania oczekuje PPM 0% przez kilka sekund, potem 100% przez sekundę-dwie a potem znów 0% przez jakiś czas i dopiero wtedy zapiszczy silnikiem i jest gotowy do pracy - modelarze mówią, że się "zaloguje". Liczyłem na to, że to już gdzieś wyczytałeś (instrukcja obsługi?) i masz problem jedynie z samym PPMem. Kązdy model regulatora jest inny i nie ma uniwersalnego przepisu. Wiedząc jakiej sekwencji "rozbiegowej" Twój sprzęt potrzebuje i mając możliwość ustawiania wypełnienia PPM przez wpisy do OCR1A sam napiszesz prostą funkcję startującą regulator korzystając choćby tak jak ja, z funkcji opóźnień _delay_ms().

  • Lubię! 1
Link do komentarza
Share on other sites

Ponieważ pokazuje on wartości średnie napięcia, przy 5V zasilania procesora i wypełnieniu 0% PPM masz impulsy 1ms co 20ms co daje średnią 5V*(1/20)=0.25V. Przy 100% PPM dostajesz impulsy 2ms i miernik powinien pokazać 5V*(2/20)=0.5V

Dokładnie tak jak napisałeś raz pokazuje około 0.25V a raz około 0.5V niestety na turbince nie robi to zbytnio wrażenia - piszczy (niby to dobrze) po 5x co 5sec i koniec.

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

Właśnie tymi piskami regulator informuje Cię o swoim stanie lub o problemach. Po prostu traktuje silnik jak głośniczek i wypuszcza taki prąd, by nie kręcić wałkiem ale tylko piszczeć. W zależności od tego jakie wypełnienie widzi regulator, wchodzi w różne tryby pracy. Może to być np. ustawianie skali, hamulca, szybkości startu, timingu silnika, kierunku obrotów itp. Niektóre regulatory mają tak skomplikowane tryby programowania, że "muzyczki" odgrywane przez silnik mają po kilka tonów różnej długości i wysokości - horror. Najczęściej opisy tego wszystkiego są na stronach sprzedawców. Tuż obok opisu przedmiotu i ceny jest do ściągnięcia plik pdf z instrukcją. Jeśli silnik nie startuje od razu, raczej bez opisu nie zgadniesz czego chce Twój regulator. 5 pisków to nie jest normalne - zapewne coś chce Ci przekazać a zmieniane co sekundę w moim kodzie PPM z 0 na 100% pewnie mu nie pasuje.

Najbardziej prawdopodobną sekwencją jest takie coś:

- PPM 0%

- podłączasz zasilanie do regulatora i jednocześnie (lub sekundę później) zapodajesz mu ten PPM

- czekasz aż zapiszczy silnikiem

- PPM 100%

- czekasz aż zapiszczy silnikiem

- PPM 0%

- czekasz aż zapiszczy lub po prostu odczekujesz kilka sekund

- teraz regulator jest gotowy do pracy i zmiany PPM będą zmieniały obroty silnika

Oczywiście Twój procesor nie wie kiedy regulator piszczy, bo ten dźwięk przeznaczony jest dla modelarza stojącego obok samolotu z nadajnikiem RC w ręku. Musisz to załatwić opóźnieniami. Dobierz je tak, by powyższa sekwencja była zachowana i miej nadzieję, że Twój sprzęt jest typowy. W przeciwnym razie.. szukaj instrukcji.

  • Lubię! 1
Link do komentarza
Share on other sites

Treker Możesz powiedzieć jak masz dokładnie ustawione odpalanie turbinki (żeby ruszyła)?? Bo masz ten sam układ.

marek1707

Treker napisał/a:

Uprzedzając wydarzenia - nie rób teraz przypadkiem jakiś pętli for z _delay_ms, żeby tym sterować 🙂

Regulatorem steruje sie jak serwem. Trzeba podać impuls o długość z przedziału od 1 do 2ms (odpowiednio do żądanego prądu) z częstotliwością co 20ms - dowiedziałem się tak wcześniej od forumowiczów.

marek1707 Nie wiem skąd masz taką wiedzę ale jesteś zajebis*y w te klocki : ) Fajnie byłoby gdybyś wytłumaczył w - formie komentarzy ten kod : ) Ale jeśli nie masz czasu itp nie ma problemu pomęczę się z książką i tak wielkie piwo dla Ciebie.

Link do komentarza
Share on other sites

Regulatorem steruje sie jak serwem. Trzeba podać impuls o długość z przedziału od 1 do 2ms (odpowiednio do żądanego prądu) z częstotliwością co 20ms - dowiedziałem się tak wcześniej od forumowiczów.

Skoro steruje się jak serwem nie prościej odpalić w Bascom kilka linijek kodu z Config Servo i Servo(1)? Tak, żeby sprawdzić w ogóle, czy zadziała? Dopiero potem bawić się skomplikowanym C.

Link do komentarza
Share on other sites

Ten regulator nie potrzebuje aż tak skomplikowanej sekwencji programowania. Po odpaleniu zasilana sygnał do niego musi być tak jak dla 0% ,a po około 5 s można sobie uruchamiać silnik.

  • Lubię! 1
Link do komentarza
Share on other sites

Ma wyglądać tak jak mówiłeś wcześniej . Też niedawno taki regulator włożyłem do swojego robota i działa ( Bascom).

Chodzi o to ,że na początku powinna być procedura startowa gdzie zadajesz minimalną wartość a potem po tych 5s dajesz wartość z zakresu 1,5 - 2 ms .

Link do komentarza
Share on other sites

Tu nie ma żadnych sprzeczności. Zrób jak Treker pisze - właśnie przepis na procedurę startyową był potrzebny i po niezbędnych inicjalizacjach timera1 wpisz:

OCR1A=1000; // PPM 0%

_delay_ms(5000); // Czekaj 5sec

OCR1A=2000; // PPM 100% i jazda..

i masz sprawę z głowy.

Link do komentarza
Share on other sites

Rozumiem że tak?

#include<avr/io.h>
#include <util/delay.h>

int main(void)
{
//Ustawienie wyjsc
DDRD = 0x20;

TCCR1B = 0;
TCNT1 = 0;
ICR1 = 20000;
OCR1A = 1000;
TCCR1A = 0x82;
TCCR1B = 0x1A;

while(1)
{
	OCR1A=1000; // PPM 0%
	_delay_ms(5000); // Czekaj 5sec
	OCR1A=2000; // PPM 100% i jazda..

}
}

Link do komentarza
Share on other sites

Nie, wywal to while. Pętla nie jest potrzebna bo teraz będziesz robił PWM 0%, czekał 5 sekund, robił PWM 100% i zaraz pętla się zawinie, ustawi PWM na 0% i.. kicha.

Raczej tak:

OCR1A=1000; // PPM 0%

_delay_ms(5000); // Czekaj 5sec

OCR1A=2000; // PPM 100% i jazda..

while(1)

{

// cała reszta programu

}

Odpalenie turbinki musisz zrobić tylko raz a potem "cała reszta programu" 🙂

W dodatku przez te 5 sekund nie musisz czekać bezproduktywnie. Procesor może sprawdzać czujniki, kalibrować je, testować silniki, mostki, enkodery i co tam jeszcze podoczepiasz...

Link do komentarza
Share on other sites

while(1)

{

// cała reszta programu

}

tzn. co? W sensie co ma robić bo mi chodzi tylko żeby się kręciło na max prędkości a z tego co opisałeś wyżej wynika że juz powinno to robić a przynajmniej na mój chłopski rozum.

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.