Skocz do zawartości

[Teoria] Mostek H (H-bridge) - kompendium dla robotyka


Treker

Pomocna odpowiedź

W zasadzie dałeś wszystkie potrzebne infa ale nie, jakich próbowałeś użyć MOS-N i indukcyjności silnika. Mały OT, co robisz ? Jakąś platformę, rower elektryczny, wózek inwalidzki ?

Topologia takiego mostka nie nastręczy trudności ale diabeł tkwi w szczegółach. 30A to spory prąd, ew. gotowiec też nie koniecznie zda egzamin gdyż sporo zależy od sposobu połączeń, odkłócania, chłodzenia.

Zacznij od sprawdzenia jak się spisuje tylko jeden ( czy zrównoleglone ale mające robić to samo ) "dolny" tranzystor MOS-N jako zwykły włącznik silnika. Silnik obowiązkowo musi być zbocznikowany diodą a jeszcze lepiej transilem dwukierunkowym ( do 24V i takich prądów np. 1,5KE27 ). Sprawdź, jak grzeją się elementy i czy dobrze znoszą pracę ciągłą. Dysponujesz może oscyloskopem ? Przydałby się w tym momencie by sprawdzić skuteczność eliminacji zakłóceń.

Jak się z tym uporasz, spróbuj dobrać optymalną częstotliwość dla PWM. Do jej wyboru przydałby się Ge z duty ok. 20% przestrajany od Hz do 5kHz ( niech będzie do tej ). Z takim silnikiem będzie problem ale trzeba sprawdzać jego moc przyhamowując jakoś ośkę. Lub, zwiększać f i mierzyć prąd pobierany przez silnik "na luzie".

Następnie przetestuj zrównoleglone 4905 ale bez PWM. Przypuszczam, że MOS-y P będą słabsze niż N więc widziałbym tu układ o topologi w której kluczowany byłby tylko N a P załączane w danym cyklu na stałe. By ich nie podgrzewać niepotrzebnie zboczami PWM.

Wykonanie tych kroków jest niezbędne jeżeli chcesz mieć sterowanie niezawodne i sprawne b.długo.

Link do komentarza
Share on other sites

Hej, chciałem przetestować mostek L293D, ale coś niespecjalnie działa.

W tej chwili testuje wszystko na jednym silniku (więc podpiąłem tylko lewą stronę) - i nie wiem czy to wina programu czy może złego połączenia?

Więc zadaje pytanie: czy jeśli program będzie na czysto (czyli w pętli żadnego kodu nie umieszczę)

to standardowo silnik powinien pracować?

Link do komentarza
Share on other sites

Pokaż kod i schemat.

Więc zadaje pytanie: czy jeśli program będzie na czysto (czyli w pętli żadnego kodu nie umieszczę)

to standardowo silnik powinien pracować?

Jeśli nic nie ustawiłeś na wyjściach to nic się nie stanie 🙂

Link do komentarza
Share on other sites

Może inaczej to rozegramy - pokaże Wam aktualny kod i przetłumaczymy go, ponieważ nie wiem do końca jak mam go interpretować.

Obowiązkowe, tego nie musimy omawiać.

'********************* Atmega32
$regfile = "m32def.dat"
$crystal = 16000000
$baud = 9600

Obowiązkowy kod, zaczerpany z robota umieszczonego tutaj na forum.

'Konfiguracja przetwornika analog-cyfra (ADC)
Config Adc = Single , Prescaler = Auto

Tu zaczynają się schody.

a dokładnie Compare A Pwm, Compare B Pwm - chodzi o definicje "A" oraz "B" co to właściwie jest? Mogę zamiast "A" wstawić Y i później definiować tylko Pwm1y ? - Po prostu w w/w kodach, chodzi o zdefiniowanie "zmiennej", którą później będę ustawiał jako PWM?

Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down

Wszystkie porty B oraz D ustawiam jako wyjścia.

Po co właściwie mam definiować aż 2 porty jako wyjścia, jak będę używał tylko jednego?

(na przykład "D") - kod programu starałem się bazować na kodzie programu z tego tematu

Config Portd = Output
Config Portb = Output

// nie trzeba tego tłumaczyć - chodź tutaj definiujemy tylko port d - więc mamy cały czas zbędne wyjście portów "b"

Silnik_prawy_b Alias Portd.0
Silnik_prawy_a Alias Portd.1
Dim W As Word

Set Silnik_prawy_a
Reset Silnik_prawy_b

Mam ogólnie jeden silniczek podłączony (jutro załączę zdjęcia z podłączenia) - silniczek jest od magnetofonu starego jak świat.

Po prostu chciałem jako pierwszy program testowy po prostu uruchomić silniczki z poziomu mostka H.

Więc w pętli po prostu narzuciłem Pwm1a na 0 i Pwm1b na 255

Tylko tego właściwie nie rozumiem.

Zazwyczaj jak programowałem, aby np. dioda zapaliła się to używałem po prostu

polecenia "Set" a tutaj żadnych takich informacji w kodzie nie ma - w jaki sposób jest ten sygnał podawany? Zdefiniowałem wyżej WYJŚCIA, ale nigdzie z nich nie korzystam.

Do
    Pwm1a = 0
     Pwm1b = 255
Loop
End

Posiadam ATMega32, kwarc 16MHz oraz mostek L293D.

Ogólnie to mikroprocesor mam na takiej płytce click -> a sam mostek na oddzielnej - po prostu za pomocą okablowania podłączyłem jedno z drugim.

update:

a) silniczek na pewno działa, sprawdzałem

b) zasilanie mostka również jest ok sprawdzałem, bardziej obstawiam winę źle napisanego programu w BASCOMie bądź podłączenia PWM1, WEJSCIE1, WEJSCIE2 (według schematu z pierwszej strony tematu)

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

kevin nie ustawiaj wartości PWM w pętli nieskończonej bez żadnego opóźnienia! W pętli zmienia się najwyżej cyklicznie co jakiś czas, a robiąc coś takiego będzie cie przełączał wartość miliony razy w ciągu sekundy.

Link do komentarza
Share on other sites

Zdaje sobie sprawy z działania pętli - po prostu chciałem wymusić jakiekolwiek działanie, aby poruszyć silnik. Wciąż nie wiem, w której linjce definiuje, że np. PORTB.0 ma być sygnał PWM1 a WEJŚCIE1, WEJSCIE2 - to ma być np. PORTB.1, PORTB.2

Link do komentarza
Share on other sites

Raczej nie uda ci się uzyskać sygnału PWM na porcie na którym go nie ma fizycznie dostępnego. Chyba że chcesz go generować programowo Ale nie polecam.

W ATMedze32 masz sygnały PWM na porcie D PD4(OC1B) i PD5(OC1A), oraz na PB3(OC0) i PD7 (OC2).

Link do komentarza
Share on other sites

W życiu nie pisałem w Bascomie więc się nie znam na składni tego języka ale od strony sprzętowej to jest tak jak napisał BlackJack. Nie masz wyboru. Sprzętowe generatory PWM są podłączone "na stałe" do pewnych pinów portów. Już samo użycie frazy:

"Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down"

oznacza niejawnie, że będziesz używał pinów PD4 i PD5 jako wyjść PWM. Nie musisz tego nigdzie więcej definiować, to jest opisane w danych katalogowych procesora i proponuję Ci zacząć je czytać. Załadowanie rejestru OCR liczbą powoduje automatyczną generację odpowiedniego PWMa z zadanym wypełnieniem.

Piotreks-89 - częste przeładowywanie rejestrów OCR niczym nie szkodzi. Tym bardziej, gdy wpisywane są wciąż te same wartości a nawet gdyby nie, rejestry te są buforowane i podczas najbliższej komparacji liczy się ostatnio wpisana wartość.

Link do komentarza
Share on other sites

Chyba że chcesz go generować programowo

Ale nie polecam.

W takim przypadku można przyjąć niską częstotliwość PWM, by mocy obliczeniowej uC nie marnować. To oczywiście nazywa się KOMPROMIS 🙂

Link do komentarza
Share on other sites

Piotreks-89 - częste przeładowywanie rejestrów OCR niczym nie szkodzi. Tym bardziej, gdy wpisywane są wciąż te same wartości a nawet gdyby nie, rejestry te są buforowane i podczas najbliższej komparacji liczy się ostatnio wpisana wartość.

W teorii może tak, natomiast w praktyce (i Bascomie, może to też ma wpływ) jeśli w pętli znajduje się wpisywanie tej samej wartości pwm, to silniki często szarpią. Wiem z własnego doświadczenia i był co najmniej jeden taki post na forum, wpisanie wartości przed pętlą załatwiło sprawę.

Link do komentarza
Share on other sites

To ciekawe. Skoro sprzęt zapewnia, że zapisy do OCR są w trybach PWM synchronizowane do przepełnień timera (i w C to działa bez pudła) to Bascom musi robić coś dziwnego. Czy ktoś podglądał kod asemblerowy tego fragmentu? Czy ten post na forum dotyczył właśnie PWM? Bo w trybie CTC, przy programowym robieniu PWMa rzeczywiście może być kaszanka.

Link do komentarza
Share on other sites

To ciekawe. Skoro sprzęt zapewnia, że zapisy do OCR są w trybach PWM synchronizowane do przepełnień timera

Ale jak dobrze pamiętam to nie w każdym trybie PWM tak jest. W trybie FAST PWM, dane owszem są synchronizowane z zegarem, ale nie z Timerem. Tylko w trybach zaawansowanych wpisywanie danych jest synchronizowane, z cyklem PWM i dokonywane, dopiero na początku nowego cyklu.

Link do komentarza
Share on other sites

W tabelkach Atmela (ATmega32, table 47) jest, że tylko Normal i CTC mają "immediate update". W pozostałych trybach, w tym we wszystkich PWM jest "update on TOP" lub ew. "BOTTOM". O ile pamiętam (teraz ja z kolei 🙂 ) inne timery mają podobnie choć i trybów dużo mniej.

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.