• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
za niskie napięcie na pinie cyfrowym ok 1v:(
#1
Witam
Mam problem z arduino i wyjściami cyfrowymi.
Chciałbym zbudować układ sterujący szybko zmianą tranzystorów.
Wg schematu na zdjęciu. Wszystko ok do czasu aż przełączanie jest opóźnione o większą wartość - np 0,5s.

Gdy przęłączanie ma być szybkie arduino daje 1v zamiast 5 i tranzystor nie może sie przełączyć w pełni dając na wyjściu 4V z zasilacza 12V. 
Zmienna "przerwa" regulowana jest potencjometrem w zakresie 18000, 25000, a przynajmniej tak bym chciał, ale żeby dawało przynajmniej 3,3v a nie 1-1,5vSad

Kod:
digitalWrite (A,HIGH);
delayMicroseconds(przerwa);
digitalWrite (A,LOW);
delayMicroseconds(przerwa);
digitalWrite (A,HIGH);
delayMicroseconds(przerwa);
digitalWrite (A,LOW);
delayMicroseconds(przerwa);
Układ pochodzi z tutoriala
https://www.baldengineer.com/pwm-3-pin-p...duino.html

Czym to może być spowodowane i jak to naprawić??


Załączone pliki Miniatury
   
 
Odpowiedź
#2
A czym mierzyłeś?
Może to wartość skuteczna?
Dla sygnału PWM, to będzie napięcie maksymalne pomnożone przez pierwiastek wypełnienia, więc lepiej to wrzuć na oscyloskop.
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#3
(25-06-2018, 06:51)Robson Kerman napisał(a): A czym mierzyłeś?
Może to wartość skuteczna?
Dla sygnału PWM, to będzie napięcie maksymalne pomnożone przez pierwiastek wypełnienia, więc lepiej to wrzuć na oscyloskop.

Oscyloskopu niestety nie posiadam, ani dostępu do niego. 
Nie jest to sygnał PWM, chociaz go w sumie przypomina, podłączone jest to pod piny nie będące PWM.

Zapytam w takim razie trochę z innej strony.
Jeśli podłącze do tranzystora 5v, a nawet 3v, to na wyjściu układu otrzymuję trochę ponad 11, a więc jest ok.

Czy taki układ działający z częstotliwością delay=2 da mi na wyjściu 11v? Tylko multimetr jest za wolny żeby to odczytać i daje błędny wynik? Tak że faktycznie tam może być 11v, mimo że multimetr pokazuje inaczej?
Wiem ze przy PWM tak się zachowuje ale czy w tym przypadku tez tak jest?


Aaaaaa  i jeszcze jedno dla mnie istotne pytanie w tej sytuacji.
Jak szybko arduino zmienia stan pinów wysoki/niski?? albo ogólnie atmega8/16/32?? jaki jest minimalny czas żeby zmieniło o 5v.
 
Odpowiedź
#4
Popularne multimetry (nie masz oscyloskopu więc pewnie masz najtańszy multimetr) wykonują ok 3 pomiarów na sekundę. Zastanów się, co zobaczysz, gdy sygnał który mierzysz zmienia się kilka/kilkanaście razy na sekundę? Tu pomocny jest bargraph. na nim wyniki sa aktualizowane 10..20 razy na sekundę. Przy większych częstotliwościach można ustawic miernik na AC. Tanie mierzą do ok 400Hz ale sinus. Na prostokąt trzeba brać poprawkę. Lepsze do 10kHz. Tu przeważnie sa przetworniki TruRMS.

AVR taktowany 16MHz, który jest najczęściej w Arduino, może przełączać GPIO z częstotliwością 8Mhz gdy użyjesz do tego timera. Jeśli "wachlujesz" pinem, będzie to zależało od programu. Zwykła pętla
Kod:
LOOP:
SET GPIO
CLR GPIO
JMP LOOP
będzie przełączać z częstotliwością ok 4MHz. Jak chcesz to policz dokładnie. Rozkazy SBI i CBI wykonują się w jednym takcie zegara. RJMP zdaje się w dwóch (sprawdź w nocie katalogowej). Niestety, przerwania spowolnią działanie programu głównego.
 
Odpowiedź
#5
Arduino wydala kilkadziesiąt kHz i to nieregularnie, bo ma swoje rzeczy do zrobienia. Jak chcesz uzyskać więcej to już programowanie C/głębsze zajrzenie w procka z notą katalogową w ręce, lub zajrzyj jak testuje to Great Scott: https://www.youtube.com/watch?v=EVm0qVJ56II .
Co do mierzenia, typowy multimetr nie służy do mierzenia sygnałów szybkozmiennych. Najtaniej możesz to zobaczyć analizatorem stanów logicznych, Salae lub klonem, aczkolwiek tam zobaczysz tylko 0 i 1. Szybkie sterowanie tranzystorem wymaga dużej wydajności prądowej, w przypadku zwykłego tranzystora jest oczywiste, że się go steruje prądem. W przypadku mosfeta nie, a jednak czasami jest wymagane by driver miał kilka A do dyspozycji, a Arduino daje max 0,04A. Wszystko ma też swoją rezystancję, bez obciążenia może będziesz miał te kHz, pod obciążeniem to już niekoniecznie. Im większa częstotliwość tym bliżej tego maksimum wydajności musisz dobrać rezystor, 1k jest zdecydowanie za duży.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#6
I tak reasumując słowa Kaczakata;
To coś generowane Twoim programem, to jest sygnał PWM z wypełnieniem 50%.
Wychodzi, że na pinie Ardu, powinno być Vrms 3.5V

[Obrazek: G9R2lyf.png]

Dla kodu:
Kod:
void setup() {
 pinMode(8, OUTPUT);
}

void loop() {
 digitalWrite(8, HIGH);
 digitalWrite(8, LOW);
 }

wycisnąłem około 145kHz, okres 7µS, czyli zmienna "przerwa" może wynieść minimalnie 4µS.

Gdy pobawię się na szybko w rejestrach:

Kod:
void setup() {
    DDRB = 0xFF;
}

void loop() {
    PORTB = 0xFF;
    PORTB= 0x00;
    
}

to wyciskam czas przełączenia w okolicach 185nS, więc udało mi się wygenerować sygnał 2.7MHz.
To się oczywiście do Twojego programu nie nadaje, bo przestawia cały port.

A tak na marginesie- zainteresuj się przerwaniami od licznika, bo tak się to powinno robić.
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#7
(25-06-2018, 19:24)kaczakat napisał(a): Arduino wydala kilkadziesiąt kHz i to  nieregularnie
Ciekawe jak to w moim i nie tylko generatorze DDS uzyskuje sie regularny sygnał prostokątny 50%  8(10)MHz? Cud?

(25-06-2018, 19:24)kaczakat napisał(a): Szybkie sterowanie tranzystorem wymaga dużej wydajności prądowej
Tranzystora bipolarnego małej mocy? Pierwsze słyszę.

(25-06-2018, 19:24)kaczakat napisał(a): W przypadku mosfeta nie, a jednak czasami jest wymagane by driver miał kilka A do dyspozycji, a Arduino daje max 0,04A.
Kolejne nowości, kilka amper dla mosfeta. Jakiś konkretny przykład?
Niejednokrotnie sterowałem BUZ11 z AVR czy STM32Fxxx i problemu nie było. Znów cud?
 
Odpowiedź
#8
(25-06-2018, 19:24)kaczakat napisał(a): Szybkie sterowanie tranzystorem wymaga dużej wydajności prądowej

Tranzystora bipolarnego małej mocy? Pierwsze słyszę.
 
Odpowiedź
#9
Dziekuję za zainteresowanie tematem,
Multimetr służył do pomiarów z oczywistych względów, tylko tym dysponuję. Wiem że to nie jest dobre rozwiązanie ale jedyne które mam.

Ale ok skupmy sie na rozwiązaniu problemuSmile
Macie może jakiś schemat który by się sprawdził w tej sytuacji?
Jak sprawić żeby za pomocą arduino bądź samej atmegi, przełączać z opóźnieniem 1-2 milisekund, napięcie 12v przy prądzie 1-2A?? i uzyskać pełną moc??

Tak na szybko pomyślałem czy może pomóc np konwerter stanów logicznych? Albo wzmacniacz np na lm 358? czy to ślepa uliczka?
 
Odpowiedź
#10
(25-06-2018, 21:34)jack1987 napisał(a): Dziekuję za zainteresowanie tematem,
Multimetr służył do pomiarów z oczywistych względów, tylko tym dysponuję.
Masz oscyloskop i generator. Marny ale masz.

(25-06-2018, 21:34)jack1987 napisał(a): przełączać z opóźnieniem 1-2 milisekund
Jeśli to nie pomyłka i chodzi o ms a nie us to czasy sa ogromne, więc można użyc najprostszych rozwiązań.

(25-06-2018, 21:34)jack1987 napisał(a): Tak na szybko pomyślałem czy może pomóc np konwerter stanów logicznych? Albo wzmacniacz np na lm 358? czy to ślepa uliczka?
Najpierw określ czy chcesz użyć tranzystorów bipolarnych czy mos. Od tego zależy sposób sterowania. Kolejna sprawa czy musisz kluczować napięcie od zasilania? Nie można od masy? Od masy jest znacznie łatwiej.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości