Skocz do zawartości
adamsm

Program do płynnej regulacji prędkości silnika za pomocą potencjometru

Pomocna odpowiedź

Witam,

Piszę program, który ma na celu płynną regulację prędkości silnika dc(wentylatora 5V) za pomocą potencjometru oraz wyświetlanie napięcia regulowanego przez potencjometr na lcd, jednak napotkałem na problem, który nie wiem jak rozwiązać - przy regulacji potencjometrem silnik nie przyspiesza i hamuje płynnie, tylko skokowo(0,1)załącza się przy ok. 2,5V i do 5V prędkość jest bez zmian, przy zejściu poniżej 2,5V silnik po prostu się wyłącza.

Prośba o pomoc, wielkie dzięki z góry.

Kod

#include <LiquidCrystal.h> //Dołączenie bilbioteki
LiquidCrystal lcd(2, 3, 4, 5, 11, 12);

void setup() {
  lcd.begin(16, 2); //Deklaracja typu
  lcd.clear();
  lcd.setCursor(0, 0); //Ustawienie kursora
  lcd.print("VOLTAGE"); //ustawienie lcd
  lcd.setCursor(0,1);
  lcd.print("0.00V"); 

pinMode(6, OUTPUT); //Sygnal PWM silnika nr1
digitalWrite(6, HIGH); //ustawiamy na stale stan wysoki na 6 pinie
pinMode(A0, INPUT);//potencjometr
pinMode(7, OUTPUT); //Sygnaly sterujace kierunkiem obrotow silnika
pinMode(8, OUTPUT);
}
double odczyt;

void loop()
{
 odczyt = analogRead(A0)*5.0/1024.0; //Wartość napięcia
 lcd.setCursor(0, 1); //Ustawienie kursora w odpowiednim momencie
 lcd.print(odczyt); //Wyświetlenie tekstu
 delay(250); //Opóźnienie
 
  int pwm = analogRead(A0); //regulacja pr. obr. za pomocą potencjometru
  pwm = map(pwm,1023,0,0,255);
  analogWrite(7, pwm);
  digitalWrite(8, HIGH);
  delay(25);
  }


 
  

Udostępnij ten post


Link to post
Share on other sites

@adamsm witam na forum 🙂

Dla większego porządku pytanie wydzieliłem z kursu, ponieważ nie dotyczy ono bezpośrednio omawianych tam ćwiczeń. Tutaj będzie łatwiej utrzymać porządek w dyskusji i nie będziemy mylić osób szukających informacji o programach z kursu. Źródło pytania: https://forbot.pl/forum/topic/8385-kurs-arduino-8-sterowanie-silnikami-dc-petla-for/

8 godzin temu, adamsm napisał:

Piszę program, który ma na celu płynną regulację prędkości silnika dc(wentylatora 5V) za pomocą potencjometru oraz wyświetlanie napięcia regulowanego przez potencjometr na lcd, jednak napotkałem na problem, który nie wiem jak rozwiązać - przy regulacji potencjometrem silnik nie przyspiesza i hamuje płynnie, tylko skokowo(0,1)załącza się przy ok. 2,5V i do 5V prędkość jest bez zmian, przy zejściu poniżej 2,5V silnik po prostu się wyłącza.

Czy testowałeś działanie innego programu? Czy mogłeś innym kodem wpłynąć na prędkość silnika? Pytam, aby wykluczyć ewentualne problemy wynikające z błędnego podłączenia układu. Jeśli wszystko działało dobrze to w takim razie warto sprawdzić czy wszelkie obliczenia robione w programie są poprawne. Czy próbowałeś wypisać sobie wartość zmiennej pwm (przed i po użyciu funkcji map)? Możesz do tego wykorzystać podłączony LCD lub np. UART. Daj znać jakie wyniki 😉

PS kody programów należy umieszczać za pomocą odpowiedniego narzędzia dostępnego w edytorze ("Wstaw kod"). Programy są wtedy prezentowane w czytelny sposób, a ich składania jest kolorowana. Tym razem poprawiłem to za Ciebie, ale pamiętaj o tej opcji w przyszłości. Z góry dziękuję za zrozumienie i pomoc w utrzymaniu porządku 😉

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Dzięki za odpowiedź !

W przypadku programu z pętlą for z kursu z płynnym przyspieszaniem i hamowaniem silnika  gdzie prędkość obrotowa była regulowana przez PWM - pin 6 w programie wszystko było OK, jednak przy pomocy potencjometru już nie mogę uzyskać tego efektu.

"Czy próbowałeś wypisać sobie wartość zmiennej pwm (przed i po użyciu funkcji map)? Możesz do tego wykorzystać podłączony LCD lub np. UART. Daj znać jakie wyniki 😉"

Możesz wytłumaczyć co dokładnie masz na myśli na przykładzie kodu?

Dzięki z góry !

Edytowano przez adamsm

Udostępnij ten post


Link to post
Share on other sites

Pomyliłeś piny - PWM możesz mieć na pinie 6 a nie 7.

  • Lubię! 2

Udostępnij ten post


Link to post
Share on other sites

Czyli ten fragment kodu ma wyglądać w ten sposób?

 int pwm = analogRead(A0); //regulacja pr. obr. za pomocą potencjometru
  pwm = map(pwm,1023,0,0,255);
  analogWrite(6, pwm);
  digitalWrite(7, LOW);
  digitalWrite(8, HIGH);
  delay(25);
  }

O to chodzi?

 

 

Udostępnij ten post


Link to post
Share on other sites

Coś w tym stylu. Tutaj masz pokazane, na których pinach możesz mieć PWM (a i to nie zawsze).

 

  • Lubię! 1
  • Pomogłeś! 1

Udostępnij ten post


Link to post
Share on other sites

Sam program to trochę mało, bo nie wiemy jak masz fizycznie podłączony ten sterownik (tak na 101%) 😉 Ale ogólnie to tak, pin 6 powinien być tutaj używany jako ten od regulacji prędkości.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Może to być też wina samego silnika np. od wentylatora. Niektóre silniki mają wbudowane diody i poniżej napięcia progowego siłą rzeczy nie działają lub prąd przy zbyt niskim napięciu jest niewystarczający do uruchomienia silnika. Należy wtedy ustalić próg zadziałania i w programie ustawić odpowiedni offset. Poza tym wszystko normalnie.  Nie wiem też po co Ci ten drugi delay skoro wszystko masz w jednej pętli.

Udostępnij ten post


Link to post
Share on other sites

Ok, właśnie przetestowałem zmianę pinu PWM na 6 w programie tak jak pisaliśmy wyżej i regulacja prędkości działa, tylko nie idealnie tak jak sobie to wyobrażałem.

Mianowicie dopiero gdy ustawie potencjometr na max wskazanie 5V to po chwili startuje, natomiast przy zmniejszaniu napięcia jest OK - powoli płynie zmniejszają się obroty i poniżej 2V wentylator się zatrzymuje, jeśli jest w tym zakresie 2-5V to regulacja działa super w obie strony, problem jest jednak taki, że jak już się zatrzyma przy wartości poniżej 2V to nie startuje z powrotem powyżej tej granicy, lecz dopiero jak dam potencjometr na max w prawo do 5V i po chwili rusza.

Myślicie, że jest to kwestia napięcia progowego tego wentylatora? Jego parametry to DC 5V, 0.7W

Udostępnij ten post


Link to post
Share on other sites

Nawet zwykły silnik DC szczotkowy nie ruszy od tego samego napięcia w jakim się zatrzymał tylko sporo wyżej a jeśli myślisz, że "Wentylator DC 5V" (np. taki z komputera) ma coś wspólnego z "Silnikiem DC" w popularnym rozumieniu tego słowa to się grubo mylisz. On nawet nie leżał koło szczotkowego silnika DC: ma prawdopodobnie 2 lub 3 fazy, elektroniczny komutator i scalak który steruje jego pracą.

 

  • Lubię! 2

Udostępnij ten post


Link to post
Share on other sites

Witam.

Możesz pokazać schemat podłączenia wentylatora do Arduino? Może tu jest problem? Jak go zasilasz? Czy wydajność prądowa jest wystarczająca? Silnik elektryczny potrzebuje więcej prądu, żeby ruszyć niż do utrzymania potem ruchu obrotowego. Oczywiście o ile nie zmieni się obciążenie.

Udostępnij ten post


Link to post
Share on other sites

Masz tam L293D? Będziesz miał na tym spadek napięcia z 1,5V. Sprawdź to sobie multimetrem. Dodatkowo bateria 9V ma bardzo małą wydajność prądową. Nie dziw się, że silnik ruszyć nie może. Daj przynajmniej zewnętrzne zasilanie mostka z jakąś rozsądną wydajnością prądową.

  • Pomogłeś! 1

Udostępnij ten post


Link to post
Share on other sites

Wielkie dzięki za tą sugestię Jamik !  Miałem akurat pod ręką zasilacz 12V co prawda mały prąd 0,25A, ale wentylator śmiga aż miło i płynnie się reguluje prawie w całym zakresie potencjometru.

Kupię jakiś porządny zasilacz 12V i wtedy już w ogóle myślę, że będzie idealnie.

Pozdrawiam 🙂 

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