stappenmotor sturing

algemene C code
Berichten: 6
Geregistreerd: 10 Apr 2021, 12:52

stappenmotor sturing

Berichtdoor snarf » 10 Apr 2021, 13:09

Hallo

ik heb pas een arduino gekocht (leerboek reeds besteld maar nog onderweg ;) )

wil graag een stille stappenmotor sturing maken.
heb nu een 32 bits microstep driver en motor draait al een stuk stiller.

maar nu de code

ben al 2 dagen aan het stoeien maar krijg het niet voor elkaar

motor moet draaien bij indrukken knop -> dit lukt
motor moet vertraagt inschakelen -> dit lukt ook nog enigszins // eigenlijk alleen als ik if(digitalRead(4) op HIGH zet ???
maar met het grafisch display erbij gaat dit niet goed ook als ik de code langer maakt gaat de frequentie van de motor naar beneden

wat doe ik fout
dank alvast

Code: Alles selecteren


#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);   //leonardo     pin 2 en 3   voor display
void setup()
{
pinMode (7, OUTPUT);
pinMode (6, OUTPUT);
pinMode (8, OUTPUT);        // enable /disable driver  / ZET motor IN VRIJLOOPSTAND
pinMode(4, INPUT_PULLUP);  // drukknop

digitalWrite (6, LOW);
digitalWrite (7, LOW);
digitalWrite (8, LOW);   


 // initialize the LCD,
  lcd.init();                      // initialize the lcd
  lcd.backlight();

  lcd.clear();
  lcd.print("druk op een knop");
  lcd.setCursor (0, 2); // go to start of 2nd line
  lcd.print("Knop1  Knop2b  Knop3");
 
     }



void loop() {

digitalWrite (6, LOW);
digitalWrite (6, HIGH);
delayMicroseconds(35);

   if(digitalRead(4) ==LOW)

 {
 /* lcd.clear();
    lcd.print("drukknop is ingedruk");
 delay (6500);  na deze tijd moet de motor gaan draaien 
 */
 digitalWrite (8, LOW);
   }

 
 if(digitalRead(4) ==HIGH)
 /* als knop logelaten word moet de motor weer stoppen  (driver disabele)
 */
  {
 digitalWrite (8, HIGH);
     }
 
   
 

 }


Advertisement

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: stappenmotor sturing

Berichtdoor shooter » 10 Apr 2021, 21:25

Maak even een schema hoe het in elkaar zit dus waar gaan welke draadhjes naar toe?
kijk ook hoe je met define een naam kunt veranderen dan kun je dus bijv vragen if digitalInput(ingang=AAN) {digitalwrite(puls,UIT)}
je moet de meesten namelijk met pulsen sturen en dan maken ze een stap een puls heeft dus een bepaalde tijdsduur dus je zet een itgang aan en dan even wachten met microsec bijv en dan zet je hem weer uit.
en als je de tussentijd van de pauze groter maakt dan gaat het motortje langzamer draaien.
als dat werkt dan kun je kijken naar accelstepper om dat automatisch te maken. de stepper.step moet wel heel vaak gedaan worden dus de loop bevat dat, en dan maak je een subprogramma (functie) om elke seconde bijvoorbeeld even je lcd te updaten.
paul deelen
shooter@home.nl

Berichten: 6
Geregistreerd: 10 Apr 2021, 12:52

Re: stappenmotor sturing

Berichtdoor snarf » 11 Apr 2021, 14:29

Ha Paul dank voor je bericht

bijgaand een afbeelding van de situatie
ik gebruikt een externe driver voor de motor


nema17.jpg
schema
nema17.jpg (31.89 KiB) 10636 keer bekeken

Berichten: 6
Geregistreerd: 10 Apr 2021, 12:52

Re: stappenmotor sturing

Berichtdoor snarf » 11 Apr 2021, 19:23

na een volledige dag programmeren en knippen en plakken werk het bijna naar mijn zin.

zit nog een probleem..... bij het indrukken van de drukknop wordt de motor toch al bekrachtigd en pas bij het lostalen gaat de delay in werking en gaat de motor draaien. Er komt namelijk geen drukknop naar een schakelaar en dan gaat dit niet goed :|
hoe zou ik dit kunnen oplossen ?

Code: Alles selecteren
#include <LiquidCrystal_I2C.h>

const int startB  = 4; //define input pin for Start push button
const int stopB = 5; //define input pin for Stop push button
const int enaB = 7; //define input pin enable / disable
const int puls = 8; //define input pin for puls naar driver

// Set the LCD address to 0x27 for a 20 chars and 4 line display
LiquidCrystal_I2C lcd(0x27, 20, 4);

void setup() {

 digitalWrite(enaB, HIGH);
 
  pinMode(startB, INPUT_PULLUP);
  pinMode(stopB, INPUT_PULLUP);
  pinMode(enaB, OUTPUT);
  pinMode(puls, OUTPUT);

  lcd.init();                      // initialize the lcd
  lcd.backlight();


lcd.clear();
    lcd.print("druk op een knop");
    lcd.setCursor (0, 1); // go to start of 2nd line
    lcd.print("");
    lcd.setCursor (0, 2); // go to start of 3nd line
    lcd.print("Knop1  Knop2  Knop3");
    lcd.setCursor (0, 3); // go to start of 3nd line
    lcd.print("");
  delay(500);
 
}


void loop() {
 
  updateState();

    digitalWrite(puls, HIGH);
    delayMicroseconds(40);
    digitalWrite(puls, LOW);

}//loop



void updateState()
{
   if(digitalRead(startB) ==LOW)
       
       
        {
           delay(3000);
         digitalWrite(enaB, LOW); 
          lcd.setCursor (0, 1); // go to start of 2nd line
        lcd.print("     gestart     ");
        }



     if(digitalRead(stopB) ==LOW)
        {
       digitalWrite(enaB, HIGH);
       lcd.setCursor (0, 1); // go to start of 2nd line
        lcd.print("     gestopt     ");
        }


 
 }//updateState end



Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: stappenmotor sturing

Berichtdoor shooter » 13 Apr 2021, 20:25

ja een stappenmotor driver staat altijd aan, behalve als je de enable uitzet. verder zet jij de puls aan dus een stap zet je dan. daarna kijk je eerst of start aan is, dan wacht je 3 seconde en dan kijk je of stop aan is maar je moet zorgen dat hij eerst naar de stop kijkt en als die waar is dan mag je ook niet starten.
paul deelen
shooter@home.nl

Berichten: 6
Geregistreerd: 10 Apr 2021, 12:52

Re: stappenmotor sturing

Berichtdoor snarf » 14 Apr 2021, 17:28

Ha Paul

rare is als ik het schrijven naar het "LCD" weg laat werkt het wel.
nu dacht ik zo iets .......maar ook hier weer als ik lcd.print(" motor gestart "); toevoegt draait de motor niet (word wel bekrachtigd)
zonder lcd werkt het prima
Code: Alles selecteren

 if  (digitalRead(startB) ==LOW)
 
  {
    digitalWrite(enaB, LOW);
      lcd.setCursor (0, 1); // go to start of 2nd line
        lcd.print("     motor gestart     ");
  }
 
  else
 
  {
    digitalWrite(enaB, HIGH);
    lcd.setCursor (0, 1); // go to start of 2nd line
        lcd.print("     gestopt     ");
  }

Berichten: 6
Geregistreerd: 10 Apr 2021, 12:52

Re: stappenmotor sturing

Berichtdoor snarf » 17 Apr 2021, 16:03

mmmm zie dat er meerdere problemen zijn met het display

google op : stepper motor turns slow with lcd display :oops:

iemand nog een idee ?

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: stappenmotor sturing

Berichtdoor shooter » 20 Apr 2021, 14:40

welke pinnen gebruikt het LCD want 4 staat er dubbel in?
paul deelen
shooter@home.nl

Berichten: 287
Geregistreerd: 15 Apr 2021, 20:05

Re: stappenmotor sturing

Berichtdoor ctunes » 20 Apr 2021, 20:52

Je moet de delay() eruit halen

https://www.arduino.cc/reference/en/language/functions/time/delay/
More knowledgeable programmers usually avoid the use of delay() for timing of events longer than 10’s of milliseconds unless the Arduino sketch is very simple.


RTFM?

https://www.arduino.cc/en/Tutorial/BuiltInExamples/BlinkWithoutDelay

Berichten: 287
Geregistreerd: 15 Apr 2021, 20:05

Re: stappenmotor sturing

Berichtdoor ctunes » 20 Apr 2021, 20:55

shooter schreef:welke pinnen gebruikt het LCD want 4 staat er dubbel in?



Dat kan ook behoorlijk roet veroorzaken...

:)

Volgende

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 3 gasten