• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
sterowanie silnikiem krokowym
#1
Zbudowałem układ sterowania silnikiem krokowym za pomocą Arduino Uno. Ogólnie wszystko działa, ale mam problem z zaprogramowaniem układu. Sterowanie ma wyglądać mniej więcej w ten sposób, że najpierw silnik obraca się z pełnym krokiem i zmienia kierunek obrotu, następnie zmienia się podział kroku na 1/2 np. na 3 s następnie na 1/4 3s, 1/8 3s, i 1/16 3s.

Problem wygląda tak, że jak napisałem prosty kod w oparciu o delay to nie mogę zmieniać częstotliwości obrotów silnika za pomocą potencjometru, dlatego próbowałem napisać program w oparciu o funkcję millis, jednak chyba nie rozumiem do końca tej funkcji gdyż nie potrafię zaprogramować układu tak, aby chodził jak w  oparciu o delay. W programie z funkcją millis podział kroku nie zmienia się tak jak w programie z delay. Będę bardzo wdzięczny jeśli ktoś pomorze mi to odpowiednio zaprogramować Smile



Kod:
#include <Stepper.h>

#define PIN_KROK 2 /* impuls sterujacy*/
#define PIN_ODCZYT A0 /* odczyt z potencjometru*/
#define MAX 800   /* max obroty */
#define PIN_KIERUNEK 1 /*zmiana kierunku DIR */
#define PIN_STOP 6 /* zatrzymanie */
#define PIN_MS 5 /* MS1 pół krok*/
#define PIN_MS 4  /* MS2 1/4 krok*/
#define PIN_MS 3   /* MS3 */


void setup() {

pinMode (PIN_KROK, OUTPUT);
pinMode (PIN_KIERUNEK, OUTPUT);
pinMode (PIN_MS, OUTPUT);
 }

void loop()
{
unsigned int potencjometr = map(analogRead(PIN_ODCZYT),0,1023,0,MAX);
tone (PIN_KROK, potencjometr);
digitalWrite(1,HIGH);
delay(1000);
digitalWrite(1,LOW);
delay(1000);
/*--------------------------------------------------------------------- */
 digitalWrite(5, HIGH); /* zmiana na pół krok*/
 delay(2000);
 digitalWrite(5, LOW);  /* powrót do 200 kroków*/
 
/*----------------------------------------------------*/
 digitalWrite(4, HIGH); /* zmiana na 1/4 kroku*/
 delay(2000);

/*----------------------------------------------------*/
 digitalWrite(5, HIGH); /* zmiana na 1/8 kroku*/
 delay(2000);
/*----------------------------------------------------*/
 digitalWrite(3, HIGH); /* zmiana na 1/16 kroku*/
 delay(2000);
/*----------------------------------------------------*/
 digitalWrite(3, LOW); /* powrót do 200 kroków */
 digitalWrite(4, LOW);
 digitalWrite(5, LOW);
 }


Niedziałający program z funkcją millis.
Kod:
#include <Stepper.h>
#include <AccelStepper.h>

#define PIN_KROK 2 /* impuls sterujacy*/
#define PIN_ODCZYT A0 /* odczyt z potencjometru*/
#define MAX 800   /* max obroty,  */
#define PIN_KIERUNEK 1 /*zmiana kierunku DIR */
#define PIN_STOP 6 /* zatrzymanie */
#define PIN_MS 5 /* MS1 pół krok*/
#define PIN_MS 4  /* MS2 1/4 krok*/
#define PIN_MS 3   /* MS3 */
#define RESET 7   /* reset pololu */

int potencjometr;

unsigned long aktualnyCzas ;
unsigned long zapamietanyCzas ;
unsigned long zapamietanyCzas1 ;
unsigned long zapamietanyCzas2 ;
unsigned long zapamietanyCzas3 ;
unsigned long zapamietanyCzas4 ;
unsigned long zapamietanyCzas5 ;


void setup() {
 
 pinMode (PIN_KROK, OUTPUT);
 pinMode (PIN_KIERUNEK, OUTPUT);
 pinMode (PIN_MS, OUTPUT);
}

void loop()
{
 potencjometr = map(analogRead(PIN_ODCZYT), 0, 1023, 0, MAX);
 tone (PIN_KROK, potencjometr);

 aktualnyCzas = millis();
 

if (aktualnyCzas - zapamietanyCzas >= 1000UL) {
    zapamietanyCzas = aktualnyCzas;
    digitalWrite(1, HIGH);
  }
if (aktualnyCzas - zapamietanyCzas1 >= 2000UL) {
    zapamietanyCzas1 = aktualnyCzas;
    digitalWrite(5, HIGH);
  }
if (aktualnyCzas - zapamietanyCzas2 >= 3000UL) {
    zapamietanyCzas2 = aktualnyCzas;
    digitalWrite(5, LOW);
    digitalWrite(4, HIGH);}

if (aktualnyCzas - zapamietanyCzas3 >= 4000UL) {
    zapamietanyCzas3 = aktualnyCzas;
    digitalWrite(5, HIGH);}

if (aktualnyCzas - zapamietanyCzas4 >= 5000UL) {
    zapamietanyCzas4 = aktualnyCzas;
    digitalWrite(3, HIGH); }

if (aktualnyCzas - zapamietanyCzas5 >= 6000UL) {
    zapamietanyCzas5 = aktualnyCzas;
    digitalWrite(5, LOW);
    digitalWrite(4, LOW);
    digitalWrite(3, LOW);}
}
 
Odpowiedź
  


Wiadomości w tym wątku
sterowanie silnikiem krokowym - przez Wencław - 14-02-2019, 00:21
RE: sterowanie silnikiem krokowym - przez kaczakat - 14-02-2019, 05:54
RE: sterowanie silnikiem krokowym - przez Wencław - 14-02-2019, 16:49

Skocz do:


Przeglądający: 1 gości