Skocz do zawartości

[Bascom] Prosty program regulatora ESC


IcePower

Pomocna odpowiedź

Witam czy ktoś były w stanie pomóc w napisaniu prostego programu w bascom do sterowania regulatorem esc.

Mikrokontroler to atmega16A, taktowanie 1Mhz ( nie potrafię tego zmieniać ) i wyjście PWM podłączone pod PORTD.1, czyli trzeba to zrobić programowo.

Program ma wyglądać tak: po włączeniu zasilania generowanie impulsu 1ms/ 50hz przez 3 sekundy, po upływie tego czasu już do końca cały czas generuje 2ms. Koniec.

Chodzi mi o to aby automatycznie załączał silnik bezszczotkowy.

Pozdrawiam

Link do komentarza
Share on other sites

Dziękuję Ci bardzo 🙂 Mógłbyś wrzucić kod tak abym sobie go przerobił ( jeśli jest w bascomie), bo jest taka sytuacja, że za krótko jednak czeka, są dwa sygnały dźwiękowe od silnika i cisza, a powinny być trzy sygnały czyli chyba trzeba wydłużyć czas przez jaki generuje 1ms.

Tutaj filmik dla zobrazowania, przez pierwsze 24 sekundy działa na programie, a reszta jak zachowuje się na testerze serw.

Link do komentarza
Share on other sites

Kod jest praktycznie identyczny do tego poprzedniego, niestety wciąż w C:

#define F_CPU					1000000UL

#include <inttypes.h>
#include <stdlib.h>
#include <ctype.h>
#include <avr\io.h>
#include <util\delay.h>

// *****************************************************************************

#define PIN_PPM					0x02

#define PPM_HI					PORTD |= PIN_PPM
#define PPM_LO					PORTD &= ~PIN_PPM

// *****************************************************************************

int main(void)
{
uint8_t
	licznik;

   DDRD  = PIN_PPM;

// Najpierw 100 impulsów o długości 1ms powtarzanych co 20ms. W sumie to 2 sekundy: 

   for (licznik = 0; licznik < 160; licznik++) 
   { 
       _delay_ms(19); 
       PPM_HI; 
       _delay_us(1050); 
       PPM_LO; 
   } 

// A teraz sygnał PPM=2ms aż do wyłączenia zasilania: 

   while(1) 
   { 
       _delay_ms(18); 
       PPM_HI; 
       _delay_us(2000); 
       PPM_LO; 
   } 

   return(0);
}

Tu masz hex czekający 5 sekund.

EDIT: Na Twoim miejscu porządnie zamocowałbym silnik lub przynajmniej trzymał go mocno za podstawę. Ruszające gwałtownie 100W może spokojnie urwać przewody i zrobić niezłą krzywdę elektronice.

ma4_2.zip

  • Lubię! 1
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

Oki to zaraz wgrywam i próbuję 🙂 Chyba zacznę się powoli uczyć C, bo z tego co widzę coraz więcej osób nim operuje, a jak szukam czegoś po necie to nic nie rozumiem.

@edit

Działa jak należy, jeszcze raz wielkie dzięki. Teraz w końcu będę mógł podłączyć jakieś tańsze zamienniki 😉 Troszkę szarpie przy przy wyłączaniu, ale jest dobrze 😉

Link do komentarza
Share on other sites

Mam jeszcze pytanie, czy jeśli zrobię identyczny układ tylko na atmega8 i podepnę wyprowadzenie sygnału pod ten sam pin i wgram tego hexa to będzie śmigać ? ( wcześniej było na atmega16)

Link do komentarza
Share on other sites

Szczerze mówiąc dostałeś kod kompilowany i odpalony na atmega8 🙂 Nie miałem pod ręką działającej 16-ki a nie przypominam sobie jakichś różnic znaczących w tym zastosowaniu. Możesz spokojnie pakować to samo do obu układów.

Link do komentarza
Share on other sites

Weź pod uwagę, że obecnie 98% zasobów mega8 jest marnowanych. Jeśli naprawdę zależy Ci na wielkości a układ nie będzie się w przyszłości rozrastał, to pomyśl o procesorach w obudowach SO8 (np. ATtiny13) lub w jeszcze mniejszych SOT23-6 (tiny4-tiny10). Zrobią to samo a chyba i cena jest ciekawsza.

Może warto zrobić wejście np. z przełącznika, startujące (z uwzględnieniem koniecznego, jednorazowego po włączeniu zasilania opóźnienia) i w miarę płynnie zatrzymujące silnik? To tez załatwi nawet najprostszy procesorek ATtiny-cośtam.

Link do komentarza
Share on other sites

Wiem, że w smd uzyskałbym dużo mniejsze rozmiary, ale muszę zostawić na płytce gniazda edg i wtyk do programatora i użycie wtedy ATtiny13 czy atmega8 nie robi większej różnicy. Teraz płytka wyszło mi coś ok. 4cm na 3 cm także jest już super 😉 Z tym płynnym zatrzymywaniem silnika to dobry pomysł, bo troszkę teraz szarpie jak mu odłączę zasilanie.

Link do komentarza
Share on other sites

Gdy odłączysz zasilanie to już nic nie pomoże, bo nikt silnika wtedy nie kontroluje. No i nie wiem czy to bezpieczne dla ESC, bo rozpędzony silnik to niezła prądnica i cała energia kinetyczna wirnika musi wytracić się w niezasilanych już tranzystorach i diodach regulatora, oczywiście w postaci ciepła 🙁

Jak rozumiem przycisk/przełącznik byłby alternatywą do wyłączania zasilania, czy tak? To znaczy jego włączenie/zwarcie ma powodować start (płynny?) silnika a wyłączenie/rozwarcie ma skutkować płynnym dobiegiem aż do zatrzymania. Jeśli ktoś włączy zasilanie ze zwartym przełącznikiem i tak będzie odczekiwane niezbędne opóźnienie. No to może ktoś na szybko skrobnie Koledze kawałek kodu? Jak nic się nie pojawi, wieczorem coś wrzucę.

Taki sterowniczek ma potencjał rozwojowy ❗😃

Za pomocą dwóch dodatkowych przycisków i dwóch diodek LED można w przyszłości zrobić programowanie kilku rzeczy po to, byś sam mógł u siebie układ dostroić do potrzeb, np:

- czas początkowego opóźnienia,
- szybkość rozpędzania,
- prędkość max,
- szybkość hamowania.

Kiedyś popełniłem modelarski sterownik chowanego podwozia i tam kilkanaście parametrów było ustawianych właśnie w ten sposób. Podobno byli ludzie (oprócz mnie) którzy to opanowali.. Acha, był też tryb "pro" dla hardkorów 🙂

Link do komentarza
Share on other sites

W takim razie może by przerobić to i zrobić wyłączanie zasilania logiki, wtedy wyłączenie również nastąpi, w regulatorze będzie napięcie i nie powinno się już tak dziać, chyba, że się mylę.

Jeśli ktoś już będzie wrzucał jakiś kod to proszę w bascomie, bo tak to nic nie rozumiem z tego 🙂

Programowanie tych kilku rzeczy które wymieniłeś sprawdziłoby się w przypadku gdyby te wartości były zapamiętywane, tak aby codziennie tego nie ustawiać.

Link do komentarza
Share on other sites

Nie wiem co rozumiesz pod pojęciem "wyłączenie zasilania logiki". Jeżeli zanik impulsów PPM (spowodowany np. wyłączeniem procesora) to wtedy będziesz musiał przetestować co robi ten konkretny regulator bez sygnału na wejściu. Niektóre utrzymują obroty jeszcze przez kilka sekund (bo w powietrzu zdarzają się chwilowe zaniki zasięgu), inne zmniejszają łagodnie obroty, a inne z miejsca zatrzymują silnik. Generalnie nie polecam bazować na takich własnościach nieznanych układów, bo kupisz inny regulator ESC i będzie inaczej. Jeżeli już masz procesor to niech on zajmuje się wszystkim. Wyłączanie zasilania to ostateczność.

Tak, oczywiście że procesor może i powinien zapamiętywać te wszystkie ustawienia - inaczej cała zabawa przyciskami i diodkami w takiej aplikacji nie ma sensu.

A może potraktuj to zadanie jak dobre wejście w C? Spróbuj poczytać (nawet gdzieś tutaj) o konfiguracji środowiska korzystającego np. z narzędzi GCC. Teraz to chyba ściągnięcie instalki, parę kliknięć i masz gotowe. To naprawdę żadna filozofia a ten akurat przykład można zrobić na wiele sposobów - od trywialnych (na opóźnieniach) jak ten który pokazałem do fajnych metod opartych na timerach, przerwaniach, procesach, komunikacji między nimi itp. Sam język wcale nie jest jakiś magiczny a gdy zrozumiesz podstawowe konstrukcje, wszystko nagle okazuje się proste. No i możesz wszystko co tylko umie dany procesor 🙂

Link do komentarza
Share on other sites

Tak chodziło mi o zanik sygnału. Jeśli chodzi o różnego rodzaju regulatory to teraz jak już mam do nich sterowanie wybiorę jakiś najbardziej popularny, dostępny i nie drogi, wtedy już wszystko będzie chodziło na jednakowych.

Spróbuję znaleźć czas i się zagłębić trochę w C, chyba, że coś przestanie działać to wtedy od razu znajdę czas, bo póki co... wiadomo hah 🙂

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.