Skocz do zawartości

Problem z synchronizacją potencjometrów w sterowniku na bazie Arduino Uno.


Gintek

Pomocna odpowiedź

Witam mam program na arduino uno do sterowania siłownikiem elektrycznym z wbudowanym potencjometrem poprzez mostek H. Sterownik steruje tym siłownikiem poprzez zadanie danego wysunięcia lub wsunięcia dwoma potencjometrami. Uruchamianie odbywa się poprzez naciśnięcie jednego z przycisków zależnie czy chcę aby siłownik się wysunął czy wsunął. Zakres wysiewu i chowania ustawia się potencjometrami. I tu jest problem gdyż potencjometr w siłowniku robi tylko około połowę swojego zakresu przez co potencjometry do ustalania pozycji działają też tylko w połowie swoich zakresów. Jak to zrobić żeby potencjometry ustalające działały w pełnym swoim zakresie?

Link do komentarza
Share on other sites

(edytowany)
int dol = 0;
int gura = 0; //
int pozycja = 0;
int stan = 0;
float czas = 0; 


void setup() {
  // put your setup code here, to run once:
  pinMode(5, OUTPUT); //podnosi
pinMode(6, OUTPUT);// opuszcza
pinMode(7, INPUT_PULLUP); //podnoszenie manualne
pinMode(8, INPUT_PULLUP); // opuszczanie manualne
pinMode(9, INPUT_PULLUP);//end stop
pinMode(10, INPUT_PULLUP); // opuszczanie auto
pinMode(11, INPUT_PULLUP);// podnoszenie auto
pinMode(12, INPUT_PULLUP);//end stop
pinMode(13, OUTPUT);//hamulec
analogWrite(5, 0);
analogWrite(6, 0);
Serial.begin(9600);
}

void loop() { 
  



  
while (digitalRead(7) == LOW){ //podnoszenie manualne
analogWrite(5, czas);
digitalWrite(13, HIGH);
delay(10);
analogWrite(5, 0);
 analogWrite(6, 0);
 digitalWrite(13, LOW);


}
while (digitalRead(8) == LOW){ // opuszczanie manualne
analogWrite(5, 0);
analogWrite(6, czas);
digitalWrite(13, HIGH);
 delay(10);
 analogWrite(6, 0);
digitalWrite(13, LOW);

}


Serial.println(czas);
delay(1);



dol = analogRead(5);
  gura = analogRead(4);
  pozycja = analogRead(1);
 czas = analogRead(3);

  czas = czas / 4;






while ((digitalRead(10) == LOW) && (pozycja < gura)) {
 
analogWrite(5, czas);
digitalWrite(13, HIGH);

dol = analogRead(5);
  gura = analogRead(4);
  pozycja = analogRead(1);

   stan = 1;
   delay(100);
}



while ((digitalRead(11) == LOW) && (pozycja > dol)) {
 
  analogWrite(6, czas);
digitalWrite(13, HIGH);
dol = analogRead(5);
  gura = analogRead(4);
  pozycja = analogRead(1);

  stan = 1;
    delay(100);
}




if ((pozycja > gura) && (stan == 1) || (digitalRead(9) == LOW)) {
analogWrite(5, 0);
digitalWrite(13, LOW);
dol = analogRead(5);
  gura = analogRead(4);
  pozycja = analogRead(1);
  stan = 0;
   delay(50);
}

if ((pozycja < dol) && (stan == 1) || (digitalRead(12) == LOW)) {
analogWrite(6, 0);
digitalWrite(13, LOW);
dol = analogRead(5);
  gura = analogRead(4);
  pozycja = analogRead(1);
  stan = 0;
   delay(50);
}


stan = 1;
 delay(130);
}

Schematu jak to jest podłączone nie mam wszystko robione z głowy.

 

Edytowano przez Gintek
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

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

Potencjometr jest wieloobrotowy i przy max schowanym i max wysuniętym siłowniku potencjometr obróci się tylko o około połowę swoich obrotów roboczych. Potem napiszę jakie osiąga wartości na monitoringu portu szeregowego.

Link do komentarza
Share on other sites

Pomijając wymianę potencjometru, widzę dwie drogi rozwiązania: można elektronicznie układ doprowadzić do takiego stanu że połowa zakresu użytego pot-ka będzie udawała jego pełny zakres. Lub przeskalować wyniki z ADC aby uzyskać ten sam wynik z tym że wtedy stracisz na rozdzielczości pomiaru 

Edytowano przez _LM_
Link do komentarza
Share on other sites

Podaj jakie napięcie zasila potencjometr oraz jakie masz napięcie odniesienia w twoim AVR

No i przydałoby się znać wartość tego pot który jest na siłowniku 

Edytowano przez _LM_
Pytania uzupełniające :)
Link do komentarza
Share on other sites

Wszystkie potencjometry są zasilanie z płytki arduino 5v. Nie bardzo rozumiem o jakie napięcie AVR chodzi. Wybacz moją nie wiedzę ale nie znam się na tym. Program mi wykonał ktoś inny. Tak sobie myślę żeby rozebrać ten siłownik i przestawić potencjometr tak żeby dochodził w jedno skrajnie położenie a nie działał tylko po środku. A do tych potencjometrów ustalających chcianą pozycję zamontować po jednym dodatkowym potencjometrze i nim wyregulować skok głównych potencjometrów. Chyba o to Ci chodziło.

Link do komentarza
Share on other sites

Myślę że nie będą potrzebne takie kombinacje. Zakładam że umiesz wgrać nowy program? Jeśli tak to w setup wpisz taką linijkę 

analogReference( INTERNAL);

Jeśli to coś zmieni w dzialaniu to będziesz musiał w obwód potencjometru wlutować jeden rezystor, jednak aby wyliczyć jego wartość muszę znać wartość potencjometru. Można ją odczytać z obudowy lub zmierzyć omomierzem. 

Link do komentarza
Share on other sites

Uwaga jednak popełniłem błąd ta zmiana napięcia referencyjnego zmieni też działanie reszty potencjometrów, przepraszam nie zwróciłem na to uwagi za pierwszym razem. Trzeba szukać innej drogi. Lub do reszty potencjometrów również dodać rezystory 

Edytowano przez _LM_
Link do komentarza
Share on other sites

(edytowany)

Z tym nie ma problemu.

Jeszcze bym miał takie pytanie prośbę. Bo teraz ten układ działa w taki sposób że wybieram żądaną pozycję potencjometrem naciskam przycisk i siłownik ustawia się w danej pozycji ale jak cofnę potencjometr do pierwotnego położenia i nacisne przycisk to już siłownik się nie cofa, trzeba nacisnąć drugi przycisk i wtedy siłownik ustawia się wedle pozycji drugiego potencjometru i dopiero wtedy po naciśnięciu pierwszego przycisku wraca w pierwotne położenie. Jakby można było zrobić tak żeby po każdorazowej korekcie potencjometrem nie zależnie w którą stronę i po naciśnięciu przycisku siłownik ustawiał się do zadanej pozycji przez potencjometr.

Edytowano przez Gintek
Link do komentarza
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!

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

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.