Pytanie:
Silnik prądu stałego Arduino powoduje zakłócenia. Co może to spowodować?
Vince verhoeven
2015-12-21 05:32:23 UTC
view on stackexchange narkive permalink

Próbowałem rozwiązać ten problem przez cały weekend, ale bez powodzenia postanowiłem zamieścić go tutaj. Byłbym naprawdę wdzięczny za każdą pomoc.

Problem

Moduł Wi-Fi aktywuje silnik prądu stałego i pozwala mu pracować przez 3 sekundy, ale kiedy Silnik prądu stałego zatrzymuje się po tych 3 sekundach, moduł Wi-Fi i wyświetlacz już nie reagują. Działa tylko raz. (Po naciśnięciu przycisku resetowania dzieje się to samo.)

Pytanie

Co powoduje te zakłócenia? Masz jakąś radę na temat mojego obwodu? (zamieściłem diagram Fritzinga, ponieważ źle rysuję schematy)

Fritzing Diagram

  # Include <SoftwareSerial.h> # include <LiquidCrystal.h>LiquidCrystal lcd (12, 11, 5, 4, 3, 2); SoftwareSerial ESP8266 (9, 8); // RX = 8 pl TX = 9 # define DEBUG trueboolean FAIL_8266 = false; int LED = 13; // led op 13int secondeAan = 3000; String my_AP_SSID = "myID"; String my_AP_Pass = "myPass"; void setup () {// - stel led in - pinMode (LED, OUTPUT); // - lcd scherm - lcd.begin (16, 2); lcd.clear (); lcd.setCursor (0, 1); zrób {ESP8266. początek (115200); // rozpocznij komunikację z esp8266 // Poczekaj na uruchomienie monitora szeregowego while (! Serial); lcd.clear (); lcd.print ("--- Start ---"); ESP8266.print ("AT \ r \ n"); opóźnienie (500); if (ESP8266.find ("OK")) {FAIL_8266 = false; sendData ("AT + RST \ r \ n", 4000, DEBUG); sendData ("AT + CWMODE = 3 \ r \ n", 2000, DEBUG); sendData ("AT + CWJAP = \" "+ my_AP_SSID +" \ ", \" "+ my_AP_Pass +" \ ", 9,4 \ r \ n", 2000, DEBUG); sendData ("AT + CIFSR \ r \ n", 2000, DEBUG); sendData ("AT + CIPMUX = 1 \ r \ n", 2000, DEBUG); sendData ("AT + CIPSERVER = 1,80 \ r \ n", 2000, DEBUG); } else {lcd.clear (); lcd.setCursor (0, 1); lcd.print ("Moduł nie odpowiada."); opóźnienie (500); FAIL_8266 = prawda; }} while (FAIL_8266);} void loop () {// Pobierz liczbę bajtów (znaków) dostępnych do odczytu z portu szeregowego if (ESP8266.find ("+ IPD,")) {
lcd.clear (); lcd.print ("Nieuwe connectie"); // - sluit connectie - motorToggle (); sendData ("AT + CIPCLOSE = 0 \ r \ n", 100, DEBUG); sendData ("AT + CIPCLOSE = 1 \ r \ n", 100, DEBUG); sendData ("AT + CIPCLOSE = 2 \ r \ n", 100, DEBUG); }} void motorToggle () {digitalWrite (LED, WYSOKI); lcd.clear (); lcd.print ("eten gegeven"); opóźnienie (secondeAan); digitalWrite (LED, LOW); delay (200);} String sendData (polecenie String, const int timeout, debugowanie typu boolean) {String response = ""; ESP8266.print (polecenie); // wyślij odczytany znak do esp8266 long int time = millis (); while ((czas + limit czasu) > millis ()) {while (ESP8266.available ()) {char c = ESP8266.read (); odpowiedź + = c; }} if (debugowanie) {lcd.clear (); lcd.print (odpowiedź); } odpowiedź zwrotna;}  
Czy Uno może zapewnić zasilanie 3,3 V dla esp8266? Zamiast tego powinien mieć regulator 3,3 V z 5 V. I kilka bardzo dużych kondensatorów. Może pomóc to odniesienie: http://iot-playground.com/2-uncategorised/17-esp8266-wifi-module-and-5v-arduino-connection. Twoje zdrowie!
@MikaelPatel Dzięki za komentarz! Myślisz, że to powoduje zakłócenia? Esp8266 działa dobrze bez silnika prądu stałego
Przekroczenie możliwości regulatora 3,3 V jest prawdopodobnie problemem, tak. Możesz również umieścić mały ceramiczny kondensator dyskowy na zaciskach silnika lub jeden między każdym zaciskiem a puszką. Kiedyś uważano to za konieczne do tłumienia zakłóceń w analogowym sprzęcie RC o niższej częstotliwości, może być mniejszy przy 2,4 GHz, ale nadal nie jest złym pomysłem.
Czy na pewno jest to problem ze sprzętem, a nie z oprogramowaniem? Czy możesz opublikować przykładowy kod? Na podstawie dostarczonych informacji nie można stwierdzić, czy problem dotyczy silnika.
Ponieważ silnik pracuje w pętli otwartej, po prostu odłączenie silnika podczas działania oprogramowania, które zakłada, że ​​nadal istnieje, powinno wyjaśnić, czy jest to problem ze sprzętem lub oprogramowaniem.
@ChrisStratton MattClark Myślę, że jest to problem sprzętowy, ponieważ po odłączeniu akumulatora zasilającego silnik prądu stałego wszystko działa dobrze. Dodam kod arduino do mojego postu
Okablowanie akumulatora na schemacie wygląda dziwnie, czy jest poprawne? Wymień silnik na otwarty obwód lub atrapę rezystora, aby wyeliminować go jako przyczynę. Czy Twój FET i rezystor działają zgodnie z oczekiwaniami? Czy możesz to sprawdzić za pomocą multimetru cyfrowego? Rezystor 2k2 powinien ograniczać pobór na UNO do ~ 2mA.
Dwa odpowiedzi:
Vince verhoeven
2015-12-22 21:09:36 UTC
view on stackexchange narkive permalink

Dziękuję wszystkim za pomoc. Naprawiłem to za pomocą kondensatorów. Tłumią hałas wytwarzany przez silnik prądu stałego. Moje informacje znalazłem tutaj

enter image description here

dlu
2015-12-21 12:19:19 UTC
view on stackexchange narkive permalink

Jest kilka rzeczy, które mogą powodować problemy:

  • Pobór prądu silnika, szczególnie podczas rozruchu. Silnik może pobierać wystarczającą moc, aby obniżyć napięcie na procesorze, powodując jego awarię lub

  • Możesz widzieć stany nieustalone podczas uruchamiania i / lub zatrzymywania silnika, które są powodując awarię procesora.

Jednym ze sposobów wykrywania takich problemów jest użycie wbudowanej diody LED jako wskaźnika bicia serca lub pracy. Możesz albo mrugnąć w loop () , albo zrobić coś takiego, jak wyłączyć to tuż przed uruchomieniem lub zatrzymaniem silnika, a następnie ponownie włączyć. Jeśli miganie ustanie lub dioda zgaśnie to wiesz, że procesor przestał działać.

Zgodnie z ogólną zasadą, z wyjątkiem najmniejszych silników, sugerowałbym użycie Arduino do sterowania tranzystorem który steruje silnikiem z własnej linii zasilającej (może to być to samo zasilanie, które zasila Arduino, po prostu nie uruchamiaj zasilania silnika przez Arduino). To oraz sugestie zawarte w komentarzach znacznie przyczynią się do odizolowania Arduino od silnika i zakłóceń zasilania, które spowoduje.

Zwróć uwagę, że plakat już „używa tranzystora sterującego silnikiem z własnego źródła zasilania”
Ack, przegapiłem to…


To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...