Skocz do zawartości

Weryfikacja poprawności układu oraz programu.


Pomocna odpowiedź

Napisano

Witam, mam problem z działaniem układu z załącznika. Program banalnie prosty:

int sygnal=6;
int kierunek=5;

void setup(){
  pinMode(sygnal,OUTPUT);
  pinMode(kierunek,OUTPUT);
  
}

void loop(){
  digitalWrite(kierunek, HIGH);

  for(int a=0 ;a<=800, a++;){
  digitalWrite(sygnal,HIGH);
  delay(3000);
  }
  
}

Silnik 60HS100 - 200 kroków na obrót, prąd znamionowy 3,5 A

sterownik TB6600 4A - przełączniki SW ustawione tak aby sterownik dawał możliwie jak większy prąd.

Sterownik zasilany zasilaczem komputerowym 12V.

Według tego co napisane jest w kodzie, silnik powinien obrócić wirnikiem 4 razy po czym odczeka 3 sekundy i ponownie wykona pętle for, efekt jest taki, że układ jak w załączniku nie reaguje, silnik krokowy jedynie "świszczy".

Gdzie popełniłem błąd ? 

układ.png

13 minut temu, kuba3122 napisał:

Według tego co napisane jest w kodzie, silnik powinien obrócić wirnikiem 4 razy po czym odczeka 3 sekundy i ponownie wykona pętle for, efekt jest taki, że układ jak w załączniku nie reaguje, silnik krokowy jedynie "świszczy".

 

Przecież ten program tylko ustawia dwa piny na HIGH i nic więcej nie robi.

A co tu ma działać? Na pinie sygnal masz cały czas stan wysoki, równie dobrze mógłbyś go razem z pinem kierunek podłączyć do plusa... taniej by wyszło.

@kuba3122, witam na forum 😉 Widzę, że to Twoje pierwsze kroki na Forbocie, oto najważniejsze informacje na start:

  • Chcesz przywitać się z innymi członkami naszej społeczności? Skorzystaj z tematu powitania użytkowników.
  • Opis najciekawszych funkcji, które ułatwiają korzystanie z forum znajdziesz w temacie instrukcja korzystania z forum - co warto wiedzieć?
  • Poszczególne posty możesz oceniać (pozytywnie i negatywnie) za pomocą reakcji - ikona serca w prawym dolnym rogu każdej wiadomości.
20 godzin temu, kuba3122 napisał:

W takim razie jak pisać program na taki sterownik ?

A co dokładnie według Ciebie robi program, który tu wkleiłeś - jak interpretujesz jego działanie (szczególnie tę pętlę for)? Sam go pisałeś czy to jakiś "przykład" z Internetu?

Zostawmy tamten program. Mam kilka pytań na temat mechaniki działania programu.

// defines pins numbers
const int stepPin = 5; 
const int dirPin = 2; 


void setup() {
  
  // Sets the two pins as Outputs
  pinMode(stepPin,OUTPUT); 
  pinMode(dirPin,OUTPUT);
  
}
void loop() {
  
  digitalWrite(dirPin,LOW); 
  for(int x = 0; x <= 200; x++) {
    digitalWrite(stepPin,HIGH); 
    delay(2); 
    digitalWrite(stepPin,LOW);
    delay(2);
  } 
  
  delay(5000);
  
}

Czy dobrze rozumiem , że program napisany w pętli for generuje sygnał PWM , ustawia wyjście stepPin w stan wysoki i utrzymuje go przez 2/1000 sek

następnie to samo wyjście ustawia w stan niski na 2/1000sek , powtarza pętle 200 razy  wychodzi z pętli , czeka 5 sekund i powtarza program od nowa. 

Czy zmieniając wartości w delay mogę sterować wypełnieniem sygnału ?

 

 

Mniej więcej tak, aczkolwiek dokładne czasy będą się różnić, bo samo wykonywanie instrukcji pomiędzy też zajmuje jakiś czas. Żeby mieć dokładny sygnał PWM najlepiej jest użyć dedykowanej do tego części mikrokontrolera, która się nazywa "timer" i która ma właśnie tryb PWM. Wówczas sygnał jest generowany precyzyjnie "w tle" przez dedykowany do tego układ, a mikrokontroler może się zajmować w tym czasie innymi rzeczami. W Arduino z tego mechanizmu korzysta komenda analogWrite().

To w takim razie jak wytłumaczyć fakt , że silnik ma  większe obroty na ustawieniach  wartości :

delay(1)

[...]

delay(1)

niż np na wartościach 5 i 1 gdzie jak rozumiem wypełnienie sygnału powinno wynosić 5/6 z 100% ?

Być może dlatego, że częstotliwość sygnału jest większa? Przy sterowaniu sygnałem PWM zazwyczaj nie zmienia się częstotliwości, tylko samo wypełnienie. Trudno powiedzieć jak twój sterownik reaguje na zmianę obu.

No tak zwiększając delay zmniejszam częstotliwość a zwiększam wypełnienie.

A od czego zależy przy jakiej najmniejszej wartości delay silnik krokowy będzie chciał wykonywać jeszcze obroty ? tutaj około delayMicroseconds(800);

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