Siedziałem ostatnio nad sterowaniem silnika krokowego , podstawowe założenie to prostota i program na attiny ( akurat padło na attiny85 ) sterowanie na razie potencjometrem a docelowo z sygnału odbiornika rc.
Do zasilania silnika użyłem ULN2803 ponieważ pozwala na sterowanie 2 silnikami unipolarnymi naraz bez zbędnych zewnętrznych elementów
Być może nie jest to szczyt możliwości programistycznych ale niedawno zacząłem zabawę z arduino .
kodzik pod attiny
a tutaj kod po optymalizacji
Do zasilania silnika użyłem ULN2803 ponieważ pozwala na sterowanie 2 silnikami unipolarnymi naraz bez zbędnych zewnętrznych elementów
Być może nie jest to szczyt możliwości programistycznych ale niedawno zacząłem zabawę z arduino .
kodzik pod attiny
Kod:
/*
Sterowanie silnikiem krokowym ULN2803 4 fazy Attiny85 JasQ
*/
int x = 2 ;
int y = 0 ;
int z ;
void setup() {
pinMode(0, OUTPUT);
pinMode(1, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
}
void loop() {
z = analogRead(A1);
if ( z > 520 ) { y = map(z,1023,530,0,50); przod(); }
if ( z < 500 ) { y = map(z,500,0,50,0); tyl(); }
if ( z > 500 and z < 520 ) { stoi(); }
}
void przod(void){
digitalWrite(0, HIGH);delay(x);digitalWrite(0, LOW);delay(y);
digitalWrite(1, HIGH);delay(x);digitalWrite(1, LOW);delay(y);
digitalWrite(3, HIGH);delay(x);digitalWrite(3, LOW);delay(y);
digitalWrite(4, HIGH);delay(x);digitalWrite(4, LOW);delay(y);
}
void tyl(void){
digitalWrite(4, HIGH);delay(x);digitalWrite(4, LOW);delay(y);
digitalWrite(3, HIGH);delay(x);digitalWrite(3, LOW);delay(y);
digitalWrite(1, HIGH);delay(x);digitalWrite(1, LOW);delay(y);
digitalWrite(0, HIGH);delay(x);digitalWrite(0, LOW);delay(y);
}
void stoi(void){
digitalWrite(0, LOW);
digitalWrite(1, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
}
a tutaj kod po optymalizacji
Kod:
// Sterowanie silnikiem krokowym ULN2803 4 fazy
int pin[5]={10,11,12,13};
int y = 0 ;
int z ;
int q = 0 ;
void setup() {
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
pinMode(9, INPUT_PULLUP );
pinMode(8, INPUT_PULLUP );
pinMode(7, INPUT_PULLUP );
}
void loop() {
z = analogRead(A2);
if ( digitalRead(9) == LOW ){ z = 510; }
if ( digitalRead(8) == LOW ){ z = 1023; }
if ( digitalRead(7) == LOW ){ z = 0; }
if ( z > 520 ) { y = map(z,1023,530,0,150); krok(); q++ ; if ( q > 3 )q=0;}
if ( z < 500 ) { y = map(z,500,0,150,0); krok(); q-- ; if ( q < 0 )q=3; }
if ( z > 500 and z < 520 ) { q-- ; if ( q < 0 ) q=3; digitalWrite( pin[q], LOW ); }
}
void krok(void){
digitalWrite( pin[q], HIGH );delay(2);digitalWrite( pin[q], LOW);delay(y);
}
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji