04-02-2022, 23:53
Zaprezentowany w poprzednim poście szkic działa OK. Sprawdzałem go co prawda tylko analizatorem, ale teraz zmontowałem dwa silniki i kręcą się OK.
https://youtu.be/VZdZk0orGFo
Może masz inny silnik, inaczej ustawione/włączone mikrokroki i wtedy oczywiście będą inne prędkości (moje mają pełne kroki). Może coś pomieszałeś z podłączeniem kabli lub definicją pinów. Może masz ograniczony prąd za bardzo napięciem na driverze, albo za słabe zasilanie.
Ja to podłączyłem na szybko do shielda RAMP 1.5 z driverami A4988, akurat ten shield wymaga sterowania jeszcze pinem ENABLE, więc to i zmiana pinów, które są przeznaczone na shieldzie dla osi X i Y, które wykorzystałem do zasilenia silników, to jedyne modyfikacje.
Dopóki nie zaczną działać jak na filmiku z tym szkicem nie ma sensu brnąć dalej. To co chcesz osiągnąć to już tylko odpowiedni dobór funkcji biblioteki i ułożenie logiki, odpowiedni dobór dostępnych dla programisty algorytmów.
https://youtu.be/VZdZk0orGFo
Może masz inny silnik, inaczej ustawione/włączone mikrokroki i wtedy oczywiście będą inne prędkości (moje mają pełne kroki). Może coś pomieszałeś z podłączeniem kabli lub definicją pinów. Może masz ograniczony prąd za bardzo napięciem na driverze, albo za słabe zasilanie.
Ja to podłączyłem na szybko do shielda RAMP 1.5 z driverami A4988, akurat ten shield wymaga sterowania jeszcze pinem ENABLE, więc to i zmiana pinów, które są przeznaczone na shieldzie dla osi X i Y, które wykorzystałem do zasilenia silników, to jedyne modyfikacje.
Dopóki nie zaczną działać jak na filmiku z tym szkicem nie ma sensu brnąć dalej. To co chcesz osiągnąć to już tylko odpowiedni dobór funkcji biblioteki i ułożenie logiki, odpowiedni dobór dostępnych dla programisty algorytmów.
Kod:
#include <AccelStepper.h>
const int stepPin1 = A0; // Silnik nr 1 ruch poziomy
const int dirPin1 = A1;
const int enablePin1 = 38;
const int stepPin2 = A6; //Silnik nr 2 ruch obrotowy głowicy
const int dirPin2 = A7;
const int enablePin2 = A2;
AccelStepper stepper1 = AccelStepper(1, stepPin1, dirPin1 );
AccelStepper stepper2 = AccelStepper(1, stepPin2, dirPin2 );
uint32_t czasTeraz,czasPoprzedni,tik=10;
uint8_t nTik,sekundy,minuty,godziny,dni;
bool fnTik,fsekundy,fminuty,fgodziny,fdni;
char napis[64];
void setup() {
Serial.begin(115200);
pinMode(enablePin1,OUTPUT);
pinMode(enablePin2,OUTPUT);
digitalWrite(enablePin1, LOW) ;
digitalWrite(enablePin2, LOW) ;
stepper1.setMaxSpeed(100);
stepper1.setAcceleration(50);
stepper1.moveTo(100);
stepper2.setMaxSpeed(300);
stepper2.setAcceleration(100);
stepper2.moveTo(100);
}
void loop()
{
czas();
if (stepper1.distanceToGo() <=100) stepper1.moveTo (stepper1.currentPosition()-50) ;
if (stepper2.distanceToGo() <=100) stepper2.moveTo (stepper2.currentPosition()+50) ;
stepper1.run();
stepper2.run();
if(fsekundy) {
Serial.print(sekundy);
sprintf(napis," Silnik1: %6d",stepper1.currentPosition() );
Serial.print(napis);
sprintf(napis," Silnik2: %6d",stepper2.currentPosition() );
Serial.println(napis);
}
}
void czas()
{
czasTeraz=millis();
fnTik=fsekundy=fminuty=fgodziny=fdni=0;
if((uint32_t)(czasTeraz-czasPoprzedni)>=tik)
{
czasPoprzedni=czasTeraz;
fnTik=1;
nTik++;
if(nTik>=(1000/tik))
{
nTik=0;
sekundy++;
fsekundy=1;
if (sekundy>=60)
{
sekundy=0;
minuty++;
fminuty=1;
if (minuty>=60)
{
minuty=0;
godziny++;
fgodziny=1;
if (godziny>=24)
{
godziny=0;
fdni=1;
dni++;
}
}
}
}
}
}
Miło być decenianym https://buycoffee.to/kaczakat