Skocz do zawartości

Zakłócenia Arduino - układ regulujący obroty silnika


Pomocna odpowiedź

Napisano

Witam

Udało mi się napisać program, który reguluje obroty silnika w zależności od podanego sygnału analogowego. Mam tam podany warunek za pomocą funkcji if, który daje napięcie na silnik gdy wartość sygnału analogowego będzie większa od 0V. Gdy jest podane 0V na sterowniku to arduino nie wyłącza silnika tylko obraca się z minimalnymi obrotami. Po uruchomieniu komunikacji z komputerem arduino otrzymuje sygnał 63 gdy podane jest 0 (są to wartości nie przeliczone). Sprawdziłem miernikiem i na wejście analogowe podawane jest 0V, ale arduino wykrywa jakieś zakłócenia. Z czego to może wynikać ?

Następny problem to taki, gdy testowo ustawiłem wartość minimalną zamiast 0 na 65 to zadziałało silnik się nie obraca, lecz jest ustawiony w momencie trzymającym czyli podawane jest napięcie na jedną z cewek. Mi zależy na tym, aby gdy funkcja nie jest spełniona silnik zostaje odłączony od zasilania. Jak to zaimplementować w arduino

Dziękuję za pomoc i pozdrawiam

@kacperek754 ciężko o rozwiązanie problemu, jeśli nie znamy programu, schematu opisywanego urządzenia oraz innych podstawowych informacji (np. o sposobie zasilania). Zachęcam do publikacji szczegółów, które pozwolą nam domyśleć się co tak właściwie masz przed sobą 🙂

Dnia 24.09.2019 o 21:12, kacperek754 napisał:

Układ zasilany jest napięciem stałym. Arduino oraz kontroler Pokeys55 który podaje sygnał analogowy zasilone są z komputera natomiast sterownik L298N i silnik krokowy zasilane są z zasilacza regulowanego ustawionego na 12V i 1.5V. Program do arduino przesyłam w załączniku

sterowanie_pr_dko_ci__silnika.rar 426 B · 1 download

Cześć,

chciałem spojrzeć w kod, ale archiwum rar  jest puste .. A mógłbyś spakować zip'em ?

Pozdrawiam


#include <Stepper.h>

const int stepsPerRevolution = 200;  

Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);

int stepCount = 0;  
void setup() {
}

void loop() {
  
  int sensorReading = analogRead(A0);
  
  int motorSpeed = map(sensorReading, 25, 1023, 0, 450);
 
  if (motorSpeed >25) {
    myStepper.setSpeed(motorSpeed);
   
    myStepper.step(stepsPerRevolution / 100);
  }
}

W takim razie wstawiam kod

Zakłócenia mogą się pojawiać z różnych przyczyn. Może to być zewnętrzny szum elektromagnetyczny o znacznej mocy jak i wynik pracy mikrokontrolera. Można sobie z tym radzić na kilka sposobów, jak np. przez używanie ADC SLEEP MODE podczas pobierania próbek, ekranowanie toru analogowego itp. Najprostszym rozwiązaniem Twojego problemu będzie chyba pull down na pinie adc przez rezystor conajmniej  ~10k lub więcej w zależności od wartości napięcia zakłóceń (najlepiej zmierzyć lub pokombinować z wartościami rezystorów do 100k). Należy pamiętać przy tym, że wartość napięcia wejściowego może się nieznacznie zmniejszyć podczas stosowania podciągu do masy i trzeba to skompensować programowo. Można też zastosować prosty filtr RC w torze analogowym obliczony dla maksymalnej częstotliwości sygnału sterującego albo nawet filtrację aktywną z użyciem wzmacniaczy operacyjnych ale to już będzie pewnie przerostem formy nad treścią w tym konkretnym przypadku. Pozdrawiam.

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