Skocz do zawartości
adkuba

Arduino napięcie wyjściowe

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

Udostępnij ten post


Link to post
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ć.

Udostępnij ten post


Link to post
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.

Udostępnij ten post


Link to post
Share on other sites

Sterowanie modelarskich regulatorow? Jesli tak to musisz uzyc PWM. Jak nie wiesz co i jak to szukaj arta "Napedy tunelowe w robotyce".

  • Pomogłeś! 1

Udostępnij ten post


Link to post
Share on other sites

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.

Udostępnij ten post


Link to post
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.

Udostępnij ten post


Link to post
Share on other sites

Niestety nie znam Aruino, dla tego nie mogę pomóc. Chciałbym jedynie utwierdzić Cie, że ostatni tok rozumowania jest poprawny.

A może już sobie poradziłeś?

Udostępnij ten post


Link to post
Share on other sites

Jeśli w Google wpiszesz "arduino servo" to możesz mi wierzyć, że zaleje Cię fala gotowych przykładów. A ESC steruje się tak samo jak servo.

Udostępnij ten post


Link to post
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

Udostępnij ten post


Link to post
Share on other sites

Też mam tę płytkę. Bawiłem się nią z Raspberry Pi.

Udostępnij ten post


Link to post
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!

Gość
Napisz odpowiedź...

×   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...