Skocz do zawartości

[AVR] Sterownik silnika elektrycznego oparty na ISOBUS


rafisoltys

Pomocna odpowiedź

Gość es2
To stary tranzystor więc wymaga dużego dodatniego napięcia na bramce.

To duże napięcie to ok 6V. Przy 5V nie będzie w pełni otwarty, będzie miał większą rezystancje niż przy pełnym otwarciu w konsekwencji wydzieli się na nim większa moc. Wystarczy policzyć czy nie przekroczy 1W. Jeśli nie, to tranzystor nie będzie wymagał radiatora.

[ Dodano: 26-06-2018, 09:49 ]

3. R5 do +5V a nie do +12V - procesor raczej tego nie przeżyje.

Przeżyje, pytanie po co R5? Powiedzmy, że R5 jest podłączony do 5V. Co on robi? Czemu służy?

Link do komentarza
Share on other sites

O, mamy kolejnego początkującego słuchacza. Witamy w temacie. Za każdym razem gdy wypływa temat jakiegoś większego prądu i MOSFETa mamy te same pytania, no cóż, widocznie ta wiedza leży gdzieś zakopana w kryptach i nie sposób przeczytać kilku stron porządnego artykułu by wreszcie czegoś się dowiedzieć. Pochylmy się zatem nad Twoimi wątpliwościami.

1. Bardzo trudno policzyć moc w tak "połowicznie" wysterowanym tranzystorze, ponieważ:

- Rezystancja kanału nie jest stała dla danego Vgs, bo zależy od prądu czyli de facto od punktu pracy czyli napięcia zasilania i obciążenia, które w tym przypadku jest skomplikowane bo to silnik a o charakterze jego pracy i algorytmie sterowania nie wiemy nic.

- Producent nie gwarantuje sztuka do sztuki (czy partia do partii) tej samej ch-ki przejściowej tak jak nie może zagwarantować tej samej grubości tlenku czy kanału.

- MOSFET także - z różnych powodów - działa trochę jak źródło prądowe (co widać jak na dłoni na ch-ce wyjściowej) więc musisz zapodać co najmniej tyle Vgs by mógł przepuścić dany prąd. Plus oczywiście niezbędny margines. Nie, MOSFET nie jest regulowanym opornikiem jak zapewne myślisz. A dla silnika 12V/200W potrzebujesz na starcie pewnie ze 30A a potem w czasie pracy także z 10A gdy za bardzo go nie obciążasz. I nawet te skromne 10A nie jest prądem jaki uzyskasz z historycznego BUZa11 podczas załączania go z 5V. Niezależnie od tego ile napięcia przyłożysz.

I nie, nie będzie on "w pełni otwarty" ani przy 6V ani przy 8V. Dopiero coś powyżej 10V zaczyna gwarantować pełny prąd drenu aż do oparcia o hiperbolę mocy strat.

Jeśli projektujesz klucz i tak jak w tym przypadku masz do dyspozycji 12V, które z definicji dobrze tranzystor otwiera (i praktycznie lepiej już nie można), głupotą byłoby z tego nie skorzystać. Czy niniejszym proponujesz oszczędność jednego npn kosztem (moim zdaniem) 100% pewności zjarania MOSFETa? Albo może inaczej, bo pewnie z tego się wyłgasz. Proszę policz dla tego konkretnego przypadku, skoro jak piszesz:

"Wystarczy policzyć czy nie przekroczy 1W".

Dawaj, nie bój się i nie uciekaj. Gdy spojrzałem na ten układ i silnik zrobiłem szybkie szacunki w głowie i wiedziałem jak to trzeba zrobić. Ty musisz policzyć - OK, zrób to, zrób to, zrób to. Wskaz odpowiednie wykresy z datasheet, punkty na nich w których przyjąłeś pracę tranzystora i podaj liczbę albo napisz, że nie umiesz i tylko pleciesz bzdury. Twoje zwyczajowe blablabla uznam za kompromitujący wykręt. Jeśli dla Vgs=5V przy 10A (a może przy pełnej mocy silnika? hoho, to by dopiero było) wyjdzie poniżej 1W - które uważasz za bezpieczne (a niechby nawet i poniżej 10W, mały radiator jeszcze nie boli) - jestem Ci winien czteropak czego tam chcesz albo modną ostatnio (choć chyba niewykorzystaną przez większość) wpłatę na Caritas.

2. Ach to znowu leniuszek wychodzi i nie chciało się od początku czytać? Niestety nie będę się powtarzał i specjalnie dla Ciebie zaciemniał wątek. Jeśli sam tego nie widzisz to wysil się i spojrzyj kilka pięterek wyżej, doczytaj po co R5 jest podpięty do Vcc i miejmy to z głowy. Miłego dnia.

Link do komentarza
Share on other sites

Gość es2
1. Bardzo trudno policzyć moc w tak "połowicznie" wysterowanym tranzystorze, ponieważ (...)

- Producent nie gwarantuje sztuka do sztuki (czy partia do partii) tej samej ch-ki przejściowej tak jak nie może zagwarantować tej samej grubości tlenku czy kanału.

MOSFET nie nadaje się więc do pracy w zakresie liniowym? Dlaczego więc widziałem MOSFETY we wzmacniaczach klasy AB? W źródłach prądowych dużej mocy?

Proszę policz dla tego konkretnego przypadku, skoro jak piszesz:

"Wystarczy policzyć czy nie przekroczy 1W".

Dawaj, nie bój się

Autor tematu nie miałby co robić.

Link do komentarza
Share on other sites

"MOSFET nie nadaje się więc do pracy w zakresie liniowym?"

Oj chłopie, jeszcze zaskakująco wiele przed Tobą. Nadaje się tak samo jak tranzystor bipolarny, ale nikt nie projektuje takich układów bazując na liniowościach charakterystyk przejściowych tranzystorów - no chyba, że jednostopniową wprawkę na klasówce w technikum. Systemy które muszą być liniowe obejmowane są głębokimi sprzężeniami zwrotnymi zapewniającymi małe zniekształcenia sygnału. Przykładowo sam stopnień wyjściowy - niezależnie czy zrobiony na MOSFETach czy na npn/pnp - ma potężne nieliniowości i sam z siebie jest beznadziejnym pod tym względem elementem, ale dzięki sygnałowi pobranemu z wyjścia stopień poprzedni (przedwzmacniacz, driver) wyznacza taki sygnał sterujący byś na wyjściu dostał to co chcesz. Nie wierzę, naprawdę nie rozumiesz takich podstaw? Przecież bez pewnej elementarnej wiedzy trudno w ogóle mówić o byciu projektantem-elektronikiem.. Spróbuj dla własnej ciekawości przejrzeć i zrozumieć schemat pierwszego lepszego wzmacniacza audio, prześledź drogi nie tylko sygnału głównego, ale przede wszystkim ujemnych sprzężeń zwrotnych - może coś Ci się rozjaśni. W sumie jestem zażenowany tłumaczeniem Ci takich banałów.

Reszta Twojej odpowiedzi jest po prostu żałosna 😥 Nie umieć to jedno (w sumie każdy z nas nie umie mnóstwa rzeczy), ale nie umieć się do tego przyznać to w tym wieku już śmieszne (lub straszne). W zasadzie to chyba zaczynam Ci współczuć, jak naszej reprezentacji. Z jednej strony napompowany balon samozadowolenia i eksperckiej "wiedzy" a z drugiej co chwila zimny prysznic odkrywanych na każdym kroku braków. No nic, weź się w garść i zacznij czytać zanim napiszesz kolejną głupotę, jeszcze nie jest za późno.

BTW: Projektując klucz staramy się unikać pracy w zakresie liniowym, prawda? Robimy wszystko by tranzystor znajdował się w tym stanie wyłącznie w czasie przełączania więc Twoje dywagacje o 5 czy 6V na bramce i liczeniu mocy "liniowej" tłumaczę sobie jedynie przemożną chęcią dopisania swojego istnienia do kolejnego tematu. Smutne to.

-----------------------------------

EDIT: Żeby coś z tej naszej dyskusji wynieśli także inni czytający, spróbuję wieczorem mając więcej czasu opisać na przykładzie danych katalogowych BUZa11 dlaczego w tym wypadku nie wystarczy sterowanie bramki sygnałem 5V wprost z procesora.

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 momencie, gdy dotarliśmy do punktu gdzie hardware jako tako jest zaprojektowany pozostaje kwestia kodu:

 // read RPM
#include <MsTimer2.h>

volatile int obroty = 0;
int rpm = 0;
int pwm=0;
unsigned long lastmillis = 0;

void pomiar(){
rpm= obroty*60 ;
obroty=0; // wyzeruj licznik obrotów
}
void rpm_fan(){
obroty++;
}
void setup(){
Serial.begin(9600); // inicjalizacja połączenia szeregowego
attachInterrupt(0, rpm_fan, RISING); // inicjalizacja przerwania  INT0 (PIN2) uruchamiajacej funkcje rpm_fan, reagujacego ba zbocze rosnące
 MsTimer2::set(1000, pomiar); // 500ms period
 MsTimer2::start();}

void loop(){

Serial.print("RPM =\t"); //wyświetl "RPM"
Serial.print(rpm); // wyświetl wartość prędkości obrotowej (RPM)
Serial.print("\t Hz=\t"); //wyświetl "Hz"
Serial.println(obroty); //wyświetl zliczoną wartość impulsów (obrotów) 


pwm = rpm * 0,85 * 0,1 ; // oblicz wartość pwm z funkcji liniowej 

Serial.print("PWM =\t"); // wyświetl dla testu wartość PWM
Serial.println(pwm); // digitalWrite(5,pwm); ustaw PWM o wartości pwm na PIN 5
}
// ta część kodu zostanie wykonana podczas przerwania (zbocze narastające) dla INT0 (PIN 2)

Zastosowałem wspomniane macro.

Program jednak dalej nie wyświetla mi wartości PWM na wyjściu szeregowym.

Link do komentarza
Share on other sites

Nic dziwnego że nie wyświetla bo się nie ma prawa skompilować. A jak się nie kompiluje to się nie załaduje, nie uruchomi i nie wyświetla. Analogcznie do traktora - jak mu zamiast paliwa wody zalejesz to żebyś nie wiem jak biegi mieniał to i tak nie pojedzie.

Poza tym żadnego makra tu nie zastosowałeś. Masz w ATOMIC pobrać dokładnie jeden raz wartość rpm, zapamiętać sobie w jakiejś zmiennej lokalnej i tej używać.

Aha, rpm ma być volatile. Natomiast obroty nie musi (jako samodzielna praca domowa: wyjaśnij dlaczego).

Link do komentarza
Share on other sites

 // read RPM
#include <MsTimer2.h>
#include <util/atomic.h>

volatile int rpm = 0;
int obroty = 0;
int rpmstat = 0;
int pwm=0;
unsigned long lastmillis = 0;

void pomiar(){
ATOMIC_BLOCK(ATOMIC_RESTORESTATE);
{
 rpm= obroty*60;
 rpm=rpmstat;
 obroty=0; // wyzeruj licznik obrotów
}
}
void rpm_fan(){
obroty++;
}
void setup(){

Serial.begin(9600); // inicjalizacja połączenia szeregowego
attachInterrupt(0, rpm_fan, RISING); // inicjalizacja przerwania  INT0 (PIN2) uruchamiajacej funkcje rpm_fan, reagujacego ba zbocze rosnące
 MsTimer2::set(1000, pomiar); // 500ms period
 MsTimer2::start();}

void loop(){ 

Serial.print("RPM =\t"); //wyświetl "RPM"
Serial.print(rpmstat); // wyświetl wartość prędkości obrotowej (RPM)
Serial.print("\t razy=\t"); //wyświetl "Hz"
Serial.println(obroty); //wyświetl zliczoną wartość impulsów (obrotów) 


pwm = rpmstat * 0.85 * 0.1 ; // oblicz wartość pwm z funkcji liniowej (0 PWM dla 0 RPM i 255 PWM dla 541 RPM)

Serial.print("PWM =\t"); // wyświetl dla testu wartość PWM
Serial.println(pwm); // digitalWrite(5,pwm); ustaw PWM o wartości pwm na PIN 5
}
/

Zastanawiam się jeszcze nad odpowiedzią na zadanie domowe ...

Link do komentarza
Share on other sites

Czy Ty w ogóle rozumiesz co ja piszę czy na pałę wstawiasz jakieś instrukcje w ogóle ich nie rozumiejąc? Czy może zadałeś sobie trudu, aby przeczytać dokumentację do ATOMIC_BLOCK?

Tego makra nie stosuje się w przerwaniu, ponieważ przerwanie (w tym przypadku sprzętowe) nie może przerwać innego przerwania (w tym przypadku zegarowego) o ile specjalnie mu na to nie pozwolisz (czego oczywiście nie robisz i co nie byłoby najlepszym pomysłem).

Natomiast musisz zastosować je w loop() (ew. możesz je zamienić na jakąkolwiek konstrukcję pozwalającą na atomowy odczyt zmiennej rpm), bo przerwanie może przyjść w dowolnym momencie (a z prawa Murphy'ego wynika, że najczęściej przychodzi pomiędzy odczytem dwóch bajtów) i wtedy możesz mieć bzdury zamiast obrotów.

Reasumując:

a) rpm_fan() zajmuje się zliczaniem obrotów (jest OK);

b) pomiar() zajmuje się okresowym wpisywaniem obliczonych obrotów do zmiennej rpm (do poprawki)

c) w loop() odczyt zmiennej rpm jest tylko raz, ujęty w blok ATOMIC i zapamiętuje zawartość w jakiejś zmiennej lokalnej, której potem można używać (do zrobienia).

Czyli coś w stylu (w loop) :


int local_rpm;
ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
   local_rpm = rpm;
}

// i dalej zapominamy o istnieniu zmiennej rpm, w jej miejsce używamy local_rpm

Zadanie domowe oczywiście pozostaje 🙂

Link do komentarza
Share on other sites

Gość es2

BTW: Projektując klucz staramy się unikać pracy w zakresie liniowym, prawda?

I aby przełączanie było jak najszybsze a tu zonk w postaci R4. Może zmienić go na 1Mohm?

Link do komentarza
Share on other sites

es2, mógłbyś nieco wyjaśnić jaki wpływ ma R4 na czas przełączania? Zakładam, że wiesz czy się różni kondensator od rezystora oraz że R4 jest rezystorem. Wydaje mi się też że powinieneś wiedzieć jakiego rzędu jest rezystancja tranzystora w stanie przewodzenia. Więc proszę, podaj mi rząd wielkości o jaki się ten czas przełączania zmieni. Albo chociaż przyznaj, że nie wiesz o czym piszesz i po prostu lubisz się dowartościować trolując - jak nie na elektrodzie to tutaj.

Link do komentarza
Share on other sites

b) pomiar() zajmuje się okresowym wpisywaniem obliczonych obrotów do zmiennej rpm (do poprawki)

Funkcja pomiar wykonywana jest co 1000 ms. Czyli rozumiem, że w momencie obliczania rpm żadne nadejście przerwania sprzętowego nie spowoduje dodania 1 do wartości zmiennej obroty (bo przerwanie nie może przerwać przerwania ?)? Czy wystarczy w takim razie zapisanie w zmiennej rpm liczby obrotów (impulsów) pomnożonej razy 60 (dla 1 sek)

 void pomiar(){ 

 rpm= obroty*60; // oblicz obroty na minutę
 obroty=0; // wyzeruj licznik obrotów co 1 sekundę
}
) w loop() odczyt zmiennej rpm jest tylko raz, ujęty w blok ATOMIC i zapamiętuje zawartość w jakiejś zmiennej lokalnej, której potem można używać (do zrobienia).

Czyli w funkcji pętli głównej przenosić będziemy wartość rpm do zmiennej rpmstat z zabezpieczeniem wykonania tej operacji (atomic_block) i następnie do wyświetlenia prędkości obrotowej i obliczenia PWM użyjemy zmiennej rpmstat ?

 void loop(){ 

 ATOMIC_BLOCK(ATOMIC_RESTORESTATE); 
{   rpm=rpmstat; 
} 

Serial.print("RPM =\t"); //wyświetl "RPM" 
Serial.print(rpmstat); // wyświetl wartość prędkości obrotowej (RPM) 
Serial.print("\t razy=\t"); //wyświetl "Hz" 
Serial.println(obroty); //wyświetl zliczoną wartość impulsów (obrotów) 


pwm = rpmstat * 0.85 * 0.1 ; // oblicz wartość pwm z funkcji liniowej (0 PWM dla 0 RPM i 255 PWM dla 541 RPM) 

Serial.print("PWM =\t"); // wyświetl dla testu wartość PWM 
Serial.println(pwm); // digitalWrite(5,pwm); ustaw PWM o wartości pwm na PIN 5 
} 
Link do komentarza
Share on other sites

Z której strony jeszcze by tu ugryźć, prawda es2? Dzięki Tobie robią się dwa równoległe wątki, mam nadzieję że poniższe (czy ktoś to czyta?) rozwieje wątpliwości co do sposobu sterowania.

Tak, oczywiście w ramach zaspokajania dziecięcej ciekawości możesz spróbować zmienić R4 na 1Meg, ale nie radzę. Uważam, że Kolega dobrze wybrał tę rezystancję w pierwszym strzale. Mając tak prosty driver z opornikiem w kolektorze npn-a musiał coś zdecydować. Mały R4 szybciej ładuje bramkę - to lepiej, ale im mniejszy R4 tym większy prąd płynący przez kolektor Q2. Przy zatrzymanym silniku, przewodzącym Q2 i wyłączonym głównym kluczu cały prąd płynący przez R4 to czysta strata na ciepło. Z kolei większy R4 powoduje wolniejsze ładowanie bramki, dłuższy proces załączania MOSFETa i większe straty na przełączaniu. Wybór 1k daje nam 12mA prądu który musimy kluczować małym Q2 i jest to zarazem początkowy prąd ładowania bramki MOSFETa. Moim zdaniem, gdy nie idziemy w jakieś wysokie częstotliwości PWM (a tu nie trzeba, silnikowi wystarczy nawet 1kHz) to wystarczy.

Żeby nie być gołosłownym, sprawdźmy:

Bierzemy datasheet naszego BUZa:

http://www.onsemi.com/pub/Collateral/BUZ11-D.PDF

i szukamy wykresu "FIGURE 13. GATE TO SOURCE VOLTAGE vs GATE CHARGE" - strona 5 u góry.

Rysunek przedstawia napięcie na ładowanej bramce w funkcji ładunku jaki do niej wpakujemy. To bardzo uniwersalny wykres, bo nie ma tu czasu więc każdy może go dopasować do swojego drivera. Silniejszy driver będzie szybciej wypełniał bramkę ładunkiem, słabszy - wolniej. U nas sterownikiem bramki podczas załączania MOSFETa jest zwykły opornik R4=1k podciągnięty do 12V. Pokazana krzywa składa się - typowo w takich przypadkach - z początkowego szybkiego wzrostu, "półki" i dalszej jazdy w górę. Co prawda na osi poziomej mamy ładunek, ale żeby wytłumaczyć ten specyficzny kształt na chwilę załóżmy, że ładujemy bramkę stałym prądem. Wtedy kolejne wielkości ładunku na osi X wykresu Fig.13 będą odpowiadały upływom kolejnych odcinków czasu, bo przecież stały prąd powoduje stałe przyrosty ładunku w czasie. Dzięki temu na potrzeby eksperymentu myślowego możemy ten wykres traktować przez chwilę jak obraz z oscyloskopu. No to załączyliśmy nasz driver (stałoprądowy) i mamy początkowy wzrost napięcia bramki od zera. Podczas tej rampy w zasadzie nic się jeszcze nie dzieje. Napięcie rośnie, ale jest wciąż niższe od pewnego napięcia progowego więc tranzystor w ogóle tego nie widzi. Dopiero po osiągnięciu (akurat w tym tranzystorze) ok. 6-7V coś się rusza: zaczyna rosnąć prąd drenu a napięcie drenu spadać. To jest chwila w której w kanale tranzystora zaczyna wydzielać się ciepło - weszliśmy w obszar pracy liniowej w którym bardzo nie chcemy być. Napięcie na bramce jednak przestało rosnąć - jest to spowodowane istnieniem m.in. wewnętrznej pojemności łączącej dren z bramką. Opadające napięcie drenu "wymusza zasypywanie tej pojemności" prądem bramki i dopóki proces załączania MOSFETa trwa, napięcie bramki nie posuwa się w górę prawie wcale mimo pompowania w nią prądu. No i dopiero w okolicach wrzuconych 30nC ładunku mamy w pełni załączony tranzystor, minimalne napięcie drenu i tym samym maksymalny prąd w obciążeniu (silniku?). Właśnie wyszliśmy z niebezpiecznego obszaru liniowego. Dalej napięcie bramki może już sobie rosnąć, nic nas to już nie obchodzi, bo to niczego już nie zmienia. Krytyczny jest więc czas trwania półki.

A teraz wracamy do naszego prymitywnego drivera-opornika. Żeby wyznaczyć ile mocy będziemy tracić na przełączanie musimy wiedzieć ile jej wydzielimy w czasie jednego okresu PWM. Żeby znaleźć tę moc trzeba wiedzieć co dzieje w obwodzie źródło-dren bo tamtędy płynie prąd który nas grzeje. Zakładając, że mocno obciążony silnik pobiera 16A i mamy wypełnienie np. 99%, podczas załączania tranzystor musi ten prąd zmienić z 0A do 16A w czasie trwania półki na bramce - ani wcześniej ani później nie grzejemy się bo albo nie płynie prąd albo napięcie na drenie jest malutkie i mamy "tylko" moc wynikającą ze strat na rezystancji kanału. Cała półka wymaga wpompowania ok. 20nC (na wykresie: start przy 10nC, koniec przy 30nC). W czasie półki napięcie na bramce będzie w miarę stabilne, przyjmijmy 7V, co bardzo ułatwia obliczenia. Skoro w tym momencie opornik 1k jest rozpięty między +12V zasilania a +7V na bramce, to płynie przez niego 5V/1k=5mA. Taki prąd przepchnie ładunek 20nC w czasie (20nC/5mA)=4us i to jest długość naszej półki. Przyjęliśmy ciągły prąd 16A, ale w czasie narastania jego średnia wartość to tylko połowa, co z napięcia 12V daje 96W. Ponieważ jednak proces załączania trwa 4us, wygląda to jak 0.38mW. Co więcej, ta moc rozłoży się po połowie na tranzystor i na silnik (są szeregowo) więc naszemu MOSFETowi przypadnie jedynie 0.19mW. Niestety nasz PWM nie robi jednego załączenia na sekundę tylko przyjęty 1kHz a to oznacza, że naprawdę z załączania dostaniemy 0.19W.

Proces wyłączania - gdyby driver był symetryczny byłby podobny (i dodałby swoje 0.19W), ale tutaj bramkę rozładowujemy przez dobrze wysterowany Q2 więc możemy przyjąć, że jest to proces z 10 razy szybszy niż ładowanie przez opornik. Dodaje to do naszej mocy powiedzmy kolejne 20mW i dostajemy wynik ok. 0.21W.

Teraz każdy może policzyć jakie straty dostałby przy innych wartościach R4. Moim zdaniem nie ma co go zmniejszać bo sumaryczny zysk nie będzie duży (o ile w ogóle, rosną przecież straty na samym R4), a zwiększanie powyżej kilku kΩ zacznie być groźne, szczególnie przy podjechaniu PWM do kilku kHz.

Żeby mieć pełny obraz (bo naprawdę nie jest tak różowo): w stanie ustalonym przez tranzystor płynie prąd obciążenia. Powtarzając te same warunki (PWM=99%, prąd 16A) szukamy wykresu "FIGURE 5. OUTPUT CHARACTERISTICS" gdzie jak na dłoni widać, że dla sterowania bramki z 12V możemy spokojnie korzystać z tej najbardziej nachylonej do pionu krzywej. Dla prądu 16A mamy tam ok. 0.4V napięcia na tranzystorze co daje moc strat 16A*0.4V=6.4W. Wypełnienie 99% już niewiele poprawia: 6.4W*0.99=6.3W. Wygląda, że w tych warunkach, przy pełnym obciążeniu silnika BUZ11 w obudowie TO220 będzie wymagał kawałka radiatora a moc na przełączanie związana ze słabym driverem opornikowo-tranzystorowym (te ciężko wypocone 0.21W) będzie jedynie niewielkim ułamkiem tego co dostaniemy z rezystancji kanału. Być może w tych warunkach warto podnieść trochę częstotliwość PWM - nie zmieni to wiele całkowitych strat a przynajmniej przesunie wyżej paskudne piszczenie silnika.

Na szczęście to wszystko można rozważyć wcześniej, stosując proste obliczenia z zakresu podstaw elektryki 🙂

es2 - próbowałeś kiedyś? To nie boli.

-------------------------

EDIT: Wiem, że temat sprzętu wygląda na ogarnięty i przepraszam za zaśmiecanie wątku spamem o opornikach i prądach.

Link do komentarza
Share on other sites

 // read RPM
#include <MsTimer2.h>
#include <util/atomic.h>

volatile int rpm = 0;
int obroty = 0;
int rpmstat = 0;
int pwm=0;

void pomiar(){
rpm= obroty*60 ;
obroty=0; // wyzeruj licznik obrotów
}
void rpm_fan(){
obroty++;
}
void setup(){

Serial.begin(9600); // inicjalizacja połączenia szeregowego
attachInterrupt(0, rpm_fan, RISING); // inicjalizacja przerwania  INT0 (PIN2) uruchamiajacej funkcje rpm_fan, reagujacego ba zbocze rosnące
 MsTimer2::set(1000, pomiar); // 500ms period
 MsTimer2::start();}

void loop(){
  ATOMIC_BLOCK(ATOMIC_RESTORESTATE)  
{  
rpm=rpmstat;
}  

Serial.print("RPM =\t"); //wyświetl "RPM"
Serial.print(rpm); // wyświetl wartość prędkości obrotowej (RPM)
Serial.print("\t Hz=\t"); //wyświetl "Hz"
Serial.println(obroty); //wyświetl zliczoną wartość impulsów (obrotów) 


pwm = (rpmstat * 85)/1000 ; // oblicz wartość pwm z funkcji liniowej (0 PWM dla 0 RPM i 255 PWM dla 541 RPM)

Serial.print("PWM =\t"); // wyświetl dla testu wartość PWM
Serial.println(pwm); // digitalWrite(5,pwm); ustaw PWM o wartości pwm na PIN 5
}
// ta część kodu zostanie wykonana podczas przerwania (zbocze narastające) dla INT0 (PIN 2)

Daje taki efekt:

Obliczenie zmiennej wykonywane jest co sekundę. W przedstawiony screenie monitora portu nie ma żadnego wyniku, jednak jak przewinę ekran to kilka pomiarów jednak się wykonało.

Wartości zmiennej pwm dalej się nie wyświetla.

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.