kiker212 Napisano Maj 9, 2022 Udostępnij Napisano Maj 9, 2022 Witam mam problem z silnikiem dc. Chciałem zrobić zdalnie sterowane auto które będzie kontrolowane przez aplikację na moim telefonie poprzez Bluetooth. Na początku miałem silniki od drukarki dla testów. Napisałem cały program i zrobiłem układ za pomocą przetwornicy, mostka H, arduino nano i modułu Bluetooth . Wszystko działo i prędkość sterowałem pwm. Arduino ma wyjścia pwm 8 bitowe . Potem kupiłem silniki modelarskie które miały działać od 3 do 6 V lecz po podłączeniu piszczą. Po lekkim popchnięciu zaczynają działać lecz działają słabo. Próbowałem użyć perskalera bo myślałem że chodzi o częstotliwość. Najpierw ustawiłem perskaler na 8 żeby po podziale 16 MHz wyszło mi około 8 Khz. Lecz efekt był taki sam. Potem przeczytałem że lepiej użyć częstotliwości mniejszych bo prąd wyprzedza napięcie i moc jest za mała. I ustawiłem perskaler na 256 , 512 i 1024 lecz efekt był taki sam. Chcę dodać że mierzyłem na oscyloskopie częstotliwość i wychodziła taka jak powinna. Wie ktoś może jak rozwiązać ten problem ? Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Maj 10, 2022 Udostępnij Maj 10, 2022 @kiker212 witam na forum 🙂 Jakie dokładnie silniki modelarskie zakupiłeś? Jeśli są to same silniki, bez żadnej przekładni to może zwyczajnie są zbyt słabe, aby poruszyć robota. Silniki DC mają stosunkowo wysokie obroty i niski moment, aby mogły napędzać robota najczęściej potrzebują przekładnię, która obniży prędkość i zmniejszy moment obrotowy. Stąd podczas budowy robotów najczęściej korzysta się z gotowych napędów, które składają się z silnika DC oraz przekładni - np. 20:1, 200:1 itd. 2 Link do komentarza Share on other sites More sharing options...
kiker212 Maj 21, 2022 Autor tematu Udostępnij Maj 21, 2022 Silnik bez zamontowania piszczy. Jest to konkretnie silnik dc 380 . Link do komentarza Share on other sites More sharing options...
kiker212 Maj 21, 2022 Autor tematu Udostępnij Maj 21, 2022 (edytowany) Później dałem akumulator do mostka lecz to też nic to nie dało. Edytowano Maj 21, 2022 przez kiker212 Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. 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
kiker212 Maj 21, 2022 Autor tematu Udostępnij Maj 21, 2022 #include <avr/io.h> #define MOTOR1_PWM 6 //D6 #define MOTOR1_PWM_COR 0 #define MOTOR1_IN1 14 //A0 #define MOTOR1_IN2 15 //A1 #define MOTOR2_PWM 5 //D5 #define MOTOR2_PWM_COR 0 #define MOTOR2_IN1 16 //A2 #define MOTOR2_IN2 17 //A3 #define DIODA1_R 18 //A4 #define DIODA1_G 4 //D4 #define DIODA1_B 2 //D2 #define DIODA2_R 10 //D10 #define DIODA2_G 11 //D11 #define DIODA2_B 12 //D12 char lastCode = ' '; int pwmSpeed = 0; void setup() { Serial.begin(9600); TCCR0A = _BV(WGM01) | _BV(WGM00); TCCR0B = _BV(CS01) | _BV(CS00); OCR0A = 100; OCR0B = 100; pinMode(MOTOR1_PWM, OUTPUT); digitalWrite(MOTOR1_PWM, HIGH); pinMode(MOTOR1_IN1, OUTPUT); pinMode(MOTOR1_IN2, OUTPUT); pinMode(MOTOR2_PWM, OUTPUT); digitalWrite(MOTOR2_PWM, HIGH); pinMode(MOTOR2_IN1, OUTPUT); pinMode(MOTOR2_IN2, OUTPUT); lightOff(); stop(); } void loop() { analogWrite(MOTOR1_PWM, pwmSpeed); analogWrite(MOTOR2_PWM, pwmSpeed); if (Serial.available() > 0) { char code = Serial.read(); if (code == 'F') { front(); } else if (code == 'L') { left(); } else if (code == 'R') { right(); } else if (code == 'B') { back(); } else if (code == 'S') { stop(); } else if (code == '0') { setSpeed(0); } else if (code == '1') { setSpeed(1); } else if (code == '2') { setSpeed(2); } else if (code == '3') { setSpeed(3); } else if (code == '4') { setSpeed(4); } else if (code == '5') { setSpeed(5); } else if (code == '6') { setSpeed(6); } else if (code == '7') { setSpeed(7); } else if (code == '8') { setSpeed(8); } else if (code == '9') { setSpeed(9); } else if (code == 'q') { setSpeed(10); } else if (code == 'W') { lightOn(); } else if (code == 'w'){ lightOff(); } lastCode = code; Serial.print("LastCode: "); Serial.println(lastCode); } if(lastCode == ' ') { stop(); } } void left() { Serial.println("left"); digitalWrite(MOTOR1_IN1, LOW); digitalWrite(MOTOR1_IN2, HIGH); digitalWrite(MOTOR2_IN1, HIGH); digitalWrite(MOTOR2_IN2, LOW); } void right() { Serial.println("righ"); digitalWrite(MOTOR2_IN1, LOW); digitalWrite(MOTOR2_IN2, HIGH); digitalWrite(MOTOR1_IN1, HIGH); digitalWrite(MOTOR1_IN2, LOW); } void back() { Serial.println("back"); digitalWrite(MOTOR1_IN1, HIGH); digitalWrite(MOTOR1_IN2, LOW); digitalWrite(MOTOR2_IN1, HIGH); digitalWrite(MOTOR2_IN2, LOW); } void front() { Serial.println("front"); digitalWrite(MOTOR2_IN1, LOW); digitalWrite(MOTOR2_IN2, HIGH); digitalWrite(MOTOR1_IN1, LOW); digitalWrite(MOTOR1_IN2, HIGH); } void stop() { Serial.println("stop"); digitalWrite(MOTOR2_IN1, LOW); digitalWrite(MOTOR2_IN2, LOW); digitalWrite(MOTOR1_IN1, LOW); digitalWrite(MOTOR1_IN2, LOW); } void setSpeed(int speed) { pwmSpeed = 100 + speed * 15 ; } void lightOn() { light1(LOW); light2(LOW); } void lightOff() { light1(HIGH); light2(HIGH); } void light1(int status){ pinMode(DIODA1_R, OUTPUT); digitalWrite(DIODA1_R, status); pinMode(DIODA1_G, OUTPUT); digitalWrite(DIODA1_G, status); pinMode(DIODA1_B, OUTPUT); digitalWrite(DIODA1_B, status); } void light2(int status){ pinMode(DIODA2_R, OUTPUT); digitalWrite(DIODA2_R, status); pinMode(DIODA2_G, OUTPUT); digitalWrite(DIODA2_G, status); pinMode(DIODA2_B, OUTPUT); digitalWrite(DIODA2_B, status); } A to jest program Link do komentarza Share on other sites More sharing options...
farmaceuta Maj 21, 2022 Udostępnij Maj 21, 2022 Jak dlubiesz po rejestrach to nie uzywasz wtedy bibliotecznej funkcji analogWrite()...nie wiem ktorego trybu pwm uzywasz, ale tam sie "podpina" piny sprzetowe i dalej sie nie martwisz, piny same zmieniaja stan...kolejna sprawa to do rejestrow OCRA/OCRB wpisujesz wartosc wypelnienia (0-255/8bit)...sprawdz te silniki tylko na analogWrite().. 1 Link do komentarza Share on other sites More sharing options...
kiker212 Maj 22, 2022 Autor tematu Udostępnij Maj 22, 2022 (edytowany) Chodzi ci o to? TCCR0A = _BV(WGM01) | _BV(WGM00); TCCR0B = _BV(CS01) | _BV(CS00); OCR0A = 100; OCR0B = 100; Jeśli się nie korzysta funkcji analogWrite() to z jakiej? Używam trybu Fast Pwm. Z góry dziękuję. Edytowano Maj 22, 2022 przez kiker212 Link do komentarza Share on other sites More sharing options...
kiker212 Maj 22, 2022 Autor tematu Udostępnij Maj 22, 2022 (edytowany) Jeśli chodzi o rejestry OCRA/OCRB to wpisywałem cały zakres wypełnienia i to też nic nie dawało. Edytowano Maj 22, 2022 przez kiker212 Link do komentarza Share on other sites More sharing options...
farmaceuta Maj 22, 2022 Udostępnij Maj 22, 2022 17 minut temu, kiker212 napisał: Chodzi ci o to? TCCR0A = _BV(WGM01) | _BV(WGM00); TCCR0B = _BV(CS01) | _BV(CS00); OCR0A = 100; OCR0B = 100; Jeśli się nie korzysta funkcji analogWrite() to z jakiej? Używam trybu Fast Pwm. Z góry dziękuję. Jesli nie korzystasz z analogWrite() tylko rejestrow to albo uruchamiasz piny sprzetowe dla danego timera i zmiany stanu odbywaja sie juz "same", lub uruchamiasz odpowiedni wektor przerwania ISR i w nim manipulujesz dowolnym pinem/pinami... Jesli silnik bez obciazenia piszczy i nie kreci, lub prawie nie kreci na funkcji analogWrite() w calym zakresie to na sto procent nie jest to wina pwm/czestotliwosci...bardziej szukal bym winy w zasilaniu/mostku Czym zasilasz? Jaki mostek?(sterownik) 1 Link do komentarza Share on other sites More sharing options...
kiker212 Maj 22, 2022 Autor tematu Udostępnij Maj 22, 2022 (edytowany) Mostek to L298N a zasilam go akumulatorem 1000mAh 20-30C discharge i myślałem że może być to wina przewodów ponieważ kiedy uruchamiałem układ to czasami przewody się dymiły więc chcę też spróbować z innymi przewodami bo są słabe i mają słabą izolację. Edytowano Maj 22, 2022 przez kiker212 Link do komentarza Share on other sites More sharing options...
farmaceuta Maj 22, 2022 Udostępnij Maj 22, 2022 1 minutę temu, kiker212 napisał: ponieważ kiedy uruchamiałem układ to czasami przewody się dymiły więc chcę też spróbować z innymi przewodami. Oj joj...to nie dobrze, nie powinno byc zadnego dymu czy ciepla podczas wlaczania, nie wazne jak cienkie przewody by byly...(inna sprawa podczas krecenia silnika) Hmm..nie uzywalem tego mostka wiec nie doradze za wiele...no a spruboj ten silnik uruchomic bezposrednio z tego ogniwa...rozumiem ze to 1S (3.7v nominal) Link do komentarza Share on other sites More sharing options...
kiker212 Maj 22, 2022 Autor tematu Udostępnij Maj 22, 2022 (edytowany) Kiedy podłączam akumulator do silnika to normalnie się kręci więc może to przewody nie dają rady. Edytowano Maj 22, 2022 przez kiker212 Link do komentarza Share on other sites More sharing options...
farmaceuta Maj 22, 2022 Udostępnij Maj 22, 2022 Wrzuc jakies zdjecie...tylko takie zeby bylo cos widac (polaczenia etc) Link do komentarza Share on other sites More sharing options...
kiker212 Maj 22, 2022 Autor tematu Udostępnij Maj 22, 2022 (edytowany) Jest to akumulator 2S(7.4V nominal).Nie wiem czy z zdjęciem da radę bo przewodów jest za dużo i nic przez to nie widać. Edytowano Maj 22, 2022 przez kiker212 Link do komentarza Share on other sites More sharing options...
kiker212 Maj 22, 2022 Autor tematu Udostępnij Maj 22, 2022 I chcę dodać że sytuacja działa się także na starym mostku. Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
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ę »