21-06-2018, 12:32
Witam
Chciałbym aby silnik krokowy podążał za kołem które osiągnie maksymalnie 5 obrotów na sekundę. Na kole zamontowany jest czujnik zbliżeniowy i tarcza z 20 wypustkami czyli maksymalnie Arduino będzie musiało tą sekwencję wykonać 100 razy na sekundę. Pytanie moje jest zasadnicze czy to jest wykonalne w tym czasie. Założenie jest takie że na każdy impuls z czujnika silnik ma wykonać 10 kroków. Program zaadoptowałem z silnika sterowanego przez enkoder.
Chciałbym aby silnik krokowy podążał za kołem które osiągnie maksymalnie 5 obrotów na sekundę. Na kole zamontowany jest czujnik zbliżeniowy i tarcza z 20 wypustkami czyli maksymalnie Arduino będzie musiało tą sekwencję wykonać 100 razy na sekundę. Pytanie moje jest zasadnicze czy to jest wykonalne w tym czasie. Założenie jest takie że na każdy impuls z czujnika silnik ma wykonać 10 kroków. Program zaadoptowałem z silnika sterowanego przez enkoder.
Kod:
#define KROK 4
#define KIERUNEK 5
#define EN 6
#define ENK1 2
#define ENK2 3
void setup() {
pinMode(KROK, OUTPUT);
pinMode(KIERUNEK, OUTPUT);
pinMode(EN, OUTPUT);
pinMode(ENK1, INPUT_PULLUP);
pinMode(ENK2, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(ENK2), krocz, FALLING);
}
boolean krok = false;
boolean sleep = true;
unsigned long ostatni_krok;
void krocz()
{
sleep = true;
ostatni_krok = millis() + 1000;
krok = true;
if (digitalRead(ENK1))
digitalWrite(KIERUNEK, LOW);
else
digitalWrite(KIERUNEK, HIGH);
}
void loop() {
if(ostatni_krok < millis())
sleep = false;
digitalWrite(EN, sleep);
if(krok)
{
digitalWrite(KROK, HIGH);
digitalWrite(KROK, LOW);
delay (1 / 10);
digitalWrite(KROK, HIGH);
digitalWrite(KROK, LOW);
delay (1 / 10);
digitalWrite(KROK, HIGH);
digitalWrite(KROK, LOW);
delay (1 / 10);
digitalWrite(KROK, HIGH);
digitalWrite(KROK, LOW);
delay (1 / 10);
digitalWrite(KROK, HIGH);
digitalWrite(KROK, LOW);
delay (1 / 10);
digitalWrite(KROK, HIGH);
digitalWrite(KROK, LOW);
delay (1 / 10);
digitalWrite(KROK, HIGH);
digitalWrite(KROK, LOW);
delay (1 / 10);
digitalWrite(KROK, HIGH);
digitalWrite(KROK, LOW);
delay (1 / 10);
digitalWrite(KROK, HIGH);
digitalWrite(KROK, LOW);
delay (1 / 10);
digitalWrite(KROK, HIGH);
digitalWrite(KROK, LOW);
delay (1 / 10);
krok = false;
}
}