Skocz do zawartości

Arduino napięcie wyjściowe


Pomocna odpowiedź

Napisano

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

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

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.

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.

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.

  • 4 tygodnie później...

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ś?

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

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...