Skocz do zawartości

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


Pomocna odpowiedź

Napisano

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?

Moja czarodziejska kula mówi: pokaż kod i schemat. Bez tego doradza położenie czarnego waleta na damie czerwiennej, oraz modlitwę do Dobrego Mzimu.

(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

Co oznacza 

1 godzinę temu, Gintek napisał:

potencjometr w siłowniku robi tylko około połowę swojego zakresu

? W sensie że ośka tegoż dociera do połowy? 

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.

(edytowany)

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_
(edytowany)

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 :)

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.

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. 

(edytowany)

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_
(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

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