Avatar billede perolsen Novice
06. februar 2020 - 23:33 Der er 14 kommentarer og
1 løsning

Stepper Motors Arduino

Hej er der en der kan hjælpe mig med et problem jeg har
Problemet er at jeg vil have en Stepper Motors til at kører en omgang
Nå man trykke på en knap ? med jeg ved ikke hvordan jeg skal lave koden i Arduino

På for hånd tak
07. februar 2020 - 01:46 #1
Hej,

Indledningsvis:

Hvad er det for en type STEP-motor du taler om ??

(der er forskellige slags  step-motorer, og den akuelle ARD.. kode afhænger lidt af hvilken type motor - derfor !)

KR
Avatar billede perolsen Novice
07. februar 2020 - 05:43 #2
Hej  KR
jeg ved ikke hvad det er for en type  men det er en stor  en 8 cm og der står  ikke  noget  på den der er 8 kabler  til den
Håber at det er info nok

PÅ forhånd tak
07. februar 2020 - 15:41 #3
Hej,

HM, ærgerligt at du ikke har flere oplysnninger om denne Stepmptor (STM). Har du adgang til et Ohm-meter ?

Det er sandsynligvis 4 spoler inde i STM'en og det kan en måling med et Ohm-meter afgøre. Samtidig er der et spørgsmål om hvilken spænding denne STM kører på. Sætter du eks. 24 volt på en 5 volts STM kan du risikere at brænde den af. Og hvis din er en 5 Volts STM og jeg anbefaler dig at sætte 24 volt på ....... --  Ikke så heldigt.  Har disse ledninger forskellige farver ??  Hvad har du af testudstyr ? 

KR
07. februar 2020 - 15:44 #4
Får en ide, hvor har du fået den fra (en printer eksempelvis) ?  Hvis ja, da er spændingen sandsynligvis (MEN IKKE SIKKERT- jævnfør ovenstående ) 12 - 24 VOLT.

Kr.
Avatar billede perolsen Novice
07. februar 2020 - 22:21 #5
Hej Kr

jeg har adgang til et Ohm-meter
jeg bruger en Leaclshine Microstep driver M542 til den
der er tilsluttet vdc +20V
kabler farve kode er
orange
grøn
hvid
brun
blå
rød
sort
gul
jeg har tilsluttet dem sådan her
B- orange - grøn
B+ hvid - brun
A- blå - rød
A+ sort - gul

og nej STM er ikke fra en printer jeg købte 4 af dem for ca 10 - 12 år siden

på forhånd tak PO
Avatar billede perolsen Novice
07. februar 2020 - 22:24 #6
hej igen Kr

jeg kan også få den til at kører med Arduino UNO
07. februar 2020 - 23:59 #7
HEJ,

Det der var "balsam" i mine øregange.

OK, tilbage til jorden.

Du skriver, at du kan få den til at køre på din ARD UNO.  Da er ca. 75 pct af din opgave allerede løst, idet al interfacen mellem ARD UNO'en og STM er afklaret. Det der mangler nu er at finde ud af hvor mange STEP på motoren (= XXX step), der skal til for at få den til at køre een omgang og derefter at lave et "knap" interface til samme UNO.

Opg: 1:  Lav en Knap-interface, som sender en sløjfe i Ard... C (++), som igen sender XXX step til motoren:

PSEUDOKODE.

Read Inputport (NNN) ;
    BEGIN
          Er Bit(YYY) = '1' så
              BEGIN
                      For N := 1 to XXX DO
                          BEGIN
                                Find StepKode til Motor;
                                Udsend Stepkode til motor på port(ZZZZ);
                                Vent lidt;
                          END;
              END;
// Reset eventuelt START-bit i port NNN ;
  END;

Skal laves i void delen af koden.

Hvis du skal have koden uddybet,  gøre jeg det gerne....
(men vær opmærksom på om trigger-pulsen er fra HØJ (5 volt ) til 0 (0-volt) eller den anden vej.  Lad os kortvarigt antage at puls-triggeren er forkert kodet, da vil koden trigge/starte  når knappen slippes, mod at du trykker den ned... )

KR
Avatar billede perolsen Novice
08. februar 2020 - 16:03 #8
Hej KR

tak tak Men jeg fatter ikke en S*** af det du skriver (-;
jeg er jo ny i det her (-*

Med Venlig Hilsen
PO
09. februar 2020 - 17:34 #9
OK
Jeg havde en ide om det.  Men det er ganske OK, vi har alle være begyndere engang og (det gælder osse for mig).

Men:  På en ARD...  kan du starte en program-rutine på flere måder. Jeg vil ikke beskrive dem alle (s¨å kan jeg strte nu og blive færdig til nytår -- 3305) , men kun tag det relevane, resten kan komme senere:

Lad os antage at du ønsker at lade din stepmotor køre EEN omgang når du trykker på en knap (kontakt/afbryder).  Når du trykker på knappen på kontakten er der inde i selve den fysiske kontakt 2 (eller flere) kontktpunkter som opnår forbindelse.  (Sammenlign med en 220 VOlts lys. Du tænder for lyset ved at slå din LYS-kontakt på.)  Men his du nu lader det ene kontaktpunkt gå til PLUS 5 Volt gennem en modtand (læs: strømbegrænser (Ohms lov)) og lader dette kontaktpunkt gå til et ben på din ard..  (eksempel ben 9.)  Det andet kontakt punkt forbinder du til 0 (jord, grund , minus eller hvad du foretrækker at kalde det.)   

Nu er fidusen den, at NÅR DU TRYKKER PÅ  KONTAKTEN og din ARD er sa op til det,  vil kontakten danne forbindelse med disse 2 punkter og dermed føre 0 ind på ARD.. ens ben 9.  (lige som du tænker for lyset . jf. ovenstående) .

Er ARD.. en sat op til at føle om der en spændingsskifte (fra PLUS til minus) på ben 9 og dette sker (når du trykker kontakten)  ...  vil den starte den rutine, som får sTM til at køre een omgang.


KOden her skal læses på følgende måde:


Read Inputport (NNN) ;

Hent den port på ARD'en hvor ben 9 er i. 

(her får du 8 ben og da det kun er ben 9 "vi" er interessert i må "vi" isolere den.

Samtidig spør vi om der er et spændingsskifte (fra HØJ til LAV  fra 1 til 0 ):

        Er Bit(ben9)  = 0  så
   
HVis ben9 er 0 starter rutinen ellers fortsætter vi bare at spørge om ben9 er 0

Read Inputport (NNN) ;
    BEGIN
          Er Bit(ben9 )  =  0  så
              BEGIN
                    kør motor een gang rundt ;
              END;
  END;

BEGIN END markeringerne er BLOK-markeringer, som indikerer hvad der skal gøres dersom "spørgsmålet" (eks: Read Inputport (NNN) ; eller  Er Bit(ben9 )  =  0  så) er opfyldt.

(læs lidt mere her:    https://caligari.dartmouth.edu/doc/idl/html_6.2/IF...THEN...ELSEemq.html )

Ku' ikke finde en dansk, så ....
Kig lidt på dette og meld tilbage

KR
Avatar billede perolsen Novice
09. februar 2020 - 20:46 #10
Hej KR

først tak for den måde du skriver på det er nemt at forstå tak for det (-;
men hvor i koden får STM at vide hvor mange step den skal kører

PO
09. februar 2020 - 21:23 #11
HEJ,

Den del er jeg ikke kommet til endnu.

Du skrev i forrige indlæg, " tak tak Men jeg fatter ikke en S*** af det du skriver (-;
jeg er jo ny i det her (-*  ",  så jeg valgte at en ny taktik, for at forklare det, nemlig at tage det trin for trin.  Og det trin havde jeg tænkt mig i næste forklarering (nemlig denne):

En stepmotor er konstrueret til at kunne dreje en vis del af en cirkel. Sagt med andre ord:  Ved hver puls drejer motoren et vist antal grader (det er derfor den hedder STM). Så lad os antage at din motor tager et step på 7.5 gr.. Og så kan det beregnes at der skal (360 / 7,5  =  48 )  pulser til at få motor-rotoren (= akslen) til at dreje een gang / een omdrejning.

Her fandt jeg noget:  https://da.wikipedia.org/wiki/Step-motor

Har familie-sammenløb nu (= "føssedag"), så resten kommer nøste gang.

KR
Avatar billede perolsen Novice
22. februar 2020 - 18:21 #12
Hej KR

Jeg er kommet frem til den her kode'

#define DISTANCE 1000

int StepCounter = 0;
int Stepping = false;

void setup() {             
  pinMode(8, OUTPUT);   
  pinMode(9, OUTPUT);
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);

  pinMode(3,INPUT);
}

void loop() {
  if (digitalRead(3) == LOW && Stepping == false)
  {
    Stepping = true;
  }

  if (Stepping == true)
  {
    digitalWrite(9, HIGH);
    delay(1);       
    digitalWrite(9, LOW);
    delay(1);

    StepCounter = StepCounter + 1;

    if (StepCounter == DISTANCE)
    {
      StepCounter = 0;
      Stepping = false;
    }
  }
}
22. februar 2020 - 19:47 #13
Hej,

Har ikke tid  nu. Kommer tilbage (muligvis først tirsdag. )

KR
'
04. marts 2020 - 14:26 #14
Hej,

Så er jeg tilbage. Undskyld dette tog længere tid end forventet, (meget længere tid ! (sul).

Din code:

void loop() {
  if (digitalRead(3) == LOW && Stepping == false)  (1)
  {                          (2)
    Stepping = true;                          (3)
  }                                                    (4)

  if (Stepping == true)      (5)
  {                                    (6)
    digitalWrite(9, HIGH);
    delay(1);                      (8)
    digitalWrite(9, LOW);
    delay(1);                      (10)

    StepCounter = StepCounter + 1;

    if (StepCounter == DISTANCE)
    {
      StepCounter = 0;
      Stepping = false;
    }
  }                        (XX)
}

I linierne 1 - 4 laver du faktisk en " dobbel-konfekt. "  Først tester du om en tilstand er (faktisk 2 tilstande Nemlig om PIN(3) = low og Stepping == FALSK ) . Hvis begge tilstande er sande (altså pin3 == LAV og stepping == falsk (bruger her et IDENTITETS-LIGHEDSTEGN for at vise at variablerne er lig deres forventede resultat) ) vil STEPPING blive sat til SAND:  (linie 3).

I linie 5 tester du om STEPPING er sand (en VARIABEL du umiddelbart før (linie 3) har sat til SAND:  (denne testing er faktisk overflødig..)  Drop linierne 4,5,6 og linien XX længere nede. Der er ingen grund til at  teste på en variabel du allerede (som sagt) har sat. Hvis variablen er sat vil den udføre den rutine, som starter med STEPPING = TRUE;

Jeg går ud fra, at det spændingsskift på pin 8
(  digitalWrite(9, HIGH);
    delay(1);                      (8)
    digitalWrite(9, LOW); 

og  på pin 9

  digitalWrite(9, HIGH);
    delay(1);                      (8)
    digitalWrite(9, LOW);

er rigtigt polariseret i forhold til motorens statorspoler.  (*****)


Jeg går ligeledes ud fra dine DELAY(1) -- linierne 8 og 10 er lange nok til at din stepmotor kan nå at udføre dette step,

Uden at have gennengået koden minutiøst virker det som om koden er gennemtænkt, med de ovennævnte bemærkninger. 

Må jeg komme med et forslag , at du kan EVT. sæt en LED på en af de ledige pins, hvor du kan indikere at der er gået en omgang.    (eller bruge den som en test !)

(****)  Se lidt på den WIKIPEDIA artikel jeg refererede til i # 11 omkring polariseringen.

(og så er jeg klar igen til at hjælpe dig, om ønskes .)

Held og lykke ...    KR
Avatar billede perolsen Novice
14. marts 2020 - 17:06 #15
Hej Kr

1000 tak for hjælpen

det kan værer at jeg vender tilbage om tidsstyret relæ

med venlig hilsen
Per
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester