19-02-2022, 17:37
Okej! Poradziłem sobie! Problem był z samym połączeniem jak i jego realizacji - na płytce stykowej dochodziło do gigantycznych zakłóceń.
Obecnie kod wygląda następująco:
Chciałbym dodać 2 funkcjonalności - pierwsza do kontrola kierunku obrotów.
Zdefiniowałem Pin kontrolujący to przyciskiem, usunąłem określenie stanu Pinu kierunku w setupie, a następnie w void loop dodałem zapis:
Efekt jest następujący:
Przy stanie wysokim na pinie buttonPin - silnik kręci się odpowiednio.
Przy stanie niskim na pinie buttonPin - silnik staje w miejscu, drgając.
Dodatkowo przez pierwszą sekundę po uruchomieniu silnik zachowuje się tak jakby nie było kontroli nad nim.
Czyli po podłączeniu zasilania obraca się przez sekundę dosyć szybko, a dopiero po chwili arduino przejmuje nad nim kontrolę i silnik zwalnia pozwalając na kontrolę potencjometrem.
Zapewne pierwszym rozwiązaniem byłoby najpierw uruchamianie Arduino, a dopiero potem podanie napięcia v-mot do stepsticka. Czy tutaj po stronie Arduino można to rozwiązać, czy zostanie do dyspozycji jedynie zastosowanie np. mosfetu?
Dzięki wielkie za rady!
Obecnie kod wygląda następująco:
Kod:
// Defines pins numbers
const int stepPin = 3;
const int dirPin = 2;
const int ms1Pin = 4;
const int ms2Pin = 5;
const int ms3Pin = 6;
int customDelay,customDelayMapped; // Defines variables
void setup() {
// Sets the two pins as Outputs
pinMode(stepPin,OUTPUT);
pinMode(dirPin,OUTPUT);
digitalWrite(ms1Pin, LOW);
digitalWrite(ms2Pin, HIGH);
digitalWrite(ms3Pin, LOW);
digitalWrite(dirPin,HIGH); //Enables the motor to move in a particular direction
}
void loop() {
customDelayMapped = speedUp(); // Gets custom delay values from the custom speedUp function
// Makes pules with custom delay, depending on the Potentiometer, from which the speed of the motor depends
digitalWrite(stepPin, HIGH);
delayMicroseconds(customDelayMapped);
digitalWrite(stepPin, LOW);
delayMicroseconds(customDelayMapped);
}
// Function for reading the Potentiometer
int speedUp() {
int customDelay = analogRead(A0); // Reads the potentiometer
int newCustom = map(customDelay, 0, 1023, 6000,14000); // Convrests the read values of the potentiometer from 0 to 1023 into desireded delay values (300 to 4000)
return newCustom;
}
Chciałbym dodać 2 funkcjonalności - pierwsza do kontrola kierunku obrotów.
Zdefiniowałem Pin kontrolujący to przyciskiem, usunąłem określenie stanu Pinu kierunku w setupie, a następnie w void loop dodałem zapis:
Kod:
if (digitalRead(buttonPin) == HIGH)
{
digitalWrite(dirPin, HIGH); // spin counterclockwise
}
else {
digitalWrite(dirPin, LOW); // spin clockwise button not pushed
}
Efekt jest następujący:
Przy stanie wysokim na pinie buttonPin - silnik kręci się odpowiednio.
Przy stanie niskim na pinie buttonPin - silnik staje w miejscu, drgając.
Dodatkowo przez pierwszą sekundę po uruchomieniu silnik zachowuje się tak jakby nie było kontroli nad nim.
Czyli po podłączeniu zasilania obraca się przez sekundę dosyć szybko, a dopiero po chwili arduino przejmuje nad nim kontrolę i silnik zwalnia pozwalając na kontrolę potencjometrem.
Zapewne pierwszym rozwiązaniem byłoby najpierw uruchamianie Arduino, a dopiero potem podanie napięcia v-mot do stepsticka. Czy tutaj po stronie Arduino można to rozwiązać, czy zostanie do dyspozycji jedynie zastosowanie np. mosfetu?
Dzięki wielkie za rady!