Skocz do zawartości

Arduino napięcie wyjściowe


adkuba

Pomocna odpowiedź

Cześć

Mam pytanie odnośnie arduino.

Czy mogę tak zaprogramować mikrokontroler, aby na pinach wyjściowych pojawiło się napięcie 0,01 V, jeżeli nie to jakie może być najniższe napięcie?

Czy mogę to zrobić ustawiając odpowiednią wartość pwm?

Pozdrawiam

Kuba

Link do komentarza
Share on other sites

Nie możesz programować napięć wyjściowych na zwykłych pinach portów cyfrowych. Jeżeli potrzebujesz do czegoś bardzo małego napięcia w stanie niskim (0) to możesz dać od wyjścia opornik do masy, np. kilka kΩ. Ten opornik pochłonie wszelkie prądy ew. upływności tranzystorów wyjściowych portu i na woltomierzu pokaże się 0.00V. To niestety obniży także napięcie w stanie wysokim (1) i zamiast prawie 5V zobaczysz wtedy pewnie ze 4.5V.

Napisz lepiej do czego jest Ci to potrzebne, bo czasami można coś dziwnie sobie założyć a potem próbować to niepotrzebnie realizować.

Link do komentarza
Share on other sites

Przepraszam, ale nastąpiła mała zmiana 🙂. Na wyjściu muszę mieć 0,170 V i później napięcie ma wzrastać najlepiej o około 0,005 V, jeżeli się nie da to wystarczy 0,01 V.

Potrzebuję to do sterownia regulatorami silników bezszczotkowych. Wzrost o ok 0,005 V powoduje podwyższenie obrotów silnika.

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

To byłoby bardzo głupie rozwiązanie, gdyby sterowanie silnikiem wymagało napięć sterujących rzędu 5mV. W zależności od tego gdzie i jak podłączysz zasilanie, na samej masie możesz mieć błędy rzędu setek mV. Na gołym drucie, łączącym masę procesora z masą regulatora. Coś pokręciłeś. Wskaż ten konkretny regulator i opisz dokładniej co chcesz zrobić bo wygląda na to, że coś źle zrozumiałeś i wyciągasz z tego dziwne wnioski.

Oczywiście da się zrobić układ o prawie dowolnym zakresie napięcia wyjściowego - również takim jak podałeś, ale jakoś nie pasuje mi to do sterowania silnikami.

Link do komentarza
Share on other sites

Mechano, tak dokładnie o to chodzi.

Poczytałem trochę i teraz już wiem że muszę mieć sygnał o częstotliwości 50Hz.

Na początku daje wypełnienie 1ms, czekam 4s i dalej w zależności od tego jakie dam wypełnienie silnik będzie się odpowiednio szybko obracał (wypełnienie od 1ms do 2ms).

Mam jednak problem w zaprogramowaniu. Chciałbym to zrobić za pomocą arduino. Nie wiem jak zaprogramować aby sygnał miał częstotliwość 50 Hz, czy za pomocą biblioteki serwo i komendy

writeMicroseconds (500);

Znalazłem również coś takiego:

#define LED_PIN 13

// Zmienna z wartością licznika
byte pwmCounter = 0;
// Zmienna z wartością rejestru wypełnienia
byte pwmValue = 10;

void setup()
{
 // Ustawienie pinu diody na wyjście
 pinMode(LED_PIN, OUTPUT);
 // Ustawienie pinu diody na stan niski
 digitalWrite(LED_PIN, LOW);
}

void loop()
{
 // Jeśli stan licznika się przekręci to ustaw pin w stan wysoki
 if (pwmCounter == 0)
 {
   digitalWrite(LED_PIN, HIGH);
 }

 // Jeśli stan licznika jest równy stanu rejestru to ustaw pin w stan niski
 if (pwmCounter == pwmValue)
 {
   digitalWrite(LED_PIN, LOW);
 }

 // Zwiększanie wartości licznika o 1
 pwmCounter++;
}

Czy raczej mam przerobić ten kod?

Bardzo proszę o pomoc w zaprogramowaniu.

Link do komentarza
Share on other sites

Na szczęście już udało mi się rozwiązać problem 😃.

Do arduino dołączę moduł http://nettigo.pl/products/380 , za pomocą którego łatwo ustawię częstotliwość PWM (od 50 Hz do 400 Hz - te częstotliwości obsługuje mój regulator).

Powiedzmy, że chciałbym sygnał o częstotliwości 250 Hz. Czas całej fali PWM (włączony/wyłączony) trwa 1/250 = 0,004s.

Aby czas impulsu wynosił 0,001 s to wypełnienie musi wynosić 25% (0,004 * 0,25 = 0,001) na tej samej zasadzie aby impuls wynosił 2ms wypełnienie musi być 50%. Jeżeli w arduino regulator jest 8 bitowy to aby uzyskać 25% wypełnienia muszę tutaj wpisać 64 (255 * 0,25 = 63,75 około 64)

void servoWrite(byte servo, byte angle)
{
 pwm.setPWM(servo, 0, 64); // wypełnienie 25% czyli impuls 1ms
}

Aby mieć 50% wypełnienia wpisuję 128.

W miejscu

pwm.setPWMFreq(250);

wpisuję 250.

Wiem, że mógłbym to zrobić za pomocą funkcji setPwmFrequency, bez dodatkowej części. Jednak o wiele łatwiej będzie użyć wymieniony wcześniej moduł.

Bardzo dziękuję za pomoc.

Pozdrawiam

Kuba

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.