Skocz do zawartości
kuba3122

Weryfikacja poprawności układu oraz programu.

Pomocna odpowiedź

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

Udostępnij ten post


Link to post
Share on other sites
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.

Udostępnij ten post


Link to post
Share on other sites

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.

Udostępnij ten post


Link to post
Share on other sites

W takim razie jak pisać program na taki sterownik ? Aby  obrócić wirnikiem muszę  na wejście PUL + wysłać sygnał z arduino. Może ktoś to objaśnić ?

Udostępnij ten post


Link to post
Share on other sites

@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?

Udostępnij ten post


Link to post
Share on other sites

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 ?

 

 

Udostępnij ten post


Link to post
Share on other sites

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

Udostępnij ten post


Link to post
Share on other sites

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% ?

Udostępnij ten post


Link to post
Share on other sites

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.

Udostępnij ten post


Link to post
Share on other sites

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

Udostępnij ten post


Link to post
Share on other sites

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ę »

×