Software aanpassen van servo naar stappenmotoren

Arduino specifieke Software
Berichten: 8
Geregistreerd: 14 Mei 2013, 15:49

Re: Software aanpassen van servo naar stappenmotoren

Berichtdoor Bart-d » 27 Mei 2013, 13:34

Ik hoop nog iemand te vinden

Jammer dat er weinig reacties zijn

Toch al vast bedankt

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Software aanpassen van servo naar stappenmotoren

Berichtdoor nicoverduin » 27 Mei 2013, 19:49

Bart
Als je wilt weten of je de pwm kan gebruiken om de stappen motor te sturen? Theoretisch wel. De PWM maakt ook pulsen. De Arduino werkt op TTL (transistor-transistor-logic) spanning nivo's dus rond de 0V = "0" en 5V = "1". Wel moet je ook een richting meegeven.
Nu de addertjes :
a) De PWM timer op de arduino draait op iets van 400 Hz. Dat lijkt veel maar als je bedenkt dat een stappenmotor tegenwoordig al 200 stappen nodig heeft om 1x rond te draaien, dan draait ie op rond de 2-2.5 Rps (rotatie per seconde). Als dat genoeg is, dan werkt het. duty cycle op 128 (analogWrite(x, 128); = 50%
b) hele stappen is vrij grof en maakt vrij veel herrie op een stappenmotor. Daarnaast moet je zelf de telling bij houden om op tijd te stoppen want hij draait gewoon door.

Een alternatief is wel een stuk complexer:
- zet het printje op 1/8 of 1/16 stappen (1/8 = 8 x 200 stappen voor 1 omwenteling)
- programmeer Timer1 op de frequentie die je wilt
- Verbind de timer pin op de pulse pin van de stappenmotor driver
- verbind de timer pin op een van de externe interrupts
- de ISR van die pin zet de timer weer uit.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 8
Geregistreerd: 14 Mei 2013, 15:49

Re: Software aanpassen van servo naar stappenmotoren

Berichtdoor Bart-d » 29 Mei 2013, 07:47

Hoi Nico

Ik begrijp wat je bedoeld. Mechanisch zou ik het kunnen maken. Het programmeren is voor mij een ander verhaal.

Nu zoek ik dus iemand die mij dit kan programmeren in een bestaand programma.

Er zal ook een sensor bij moeten komen om het nulpunt aan te geven.

Zou er iemand zijn die een code kan aanpassen?

Gr. Bart

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Software aanpassen van servo naar stappenmotoren

Berichtdoor nicoverduin » 29 Mei 2013, 15:51

Er is altijd wel iemand :) die de code aan kan passen. Ligt ook een beetje aan de kwaliteit van de huidige bestaande code. Dat laat nog wel eens te wensen over zie ik soms.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 8
Geregistreerd: 14 Mei 2013, 15:49

Re: Software aanpassen van servo naar stappenmotoren

Berichtdoor Bart-d » 29 Mei 2013, 17:20

Dat klopt, alleen moet ik die persoon nog vinden.

Ondertussen ga ik gewoon door met mijn project en maak het zo dat dit goed te veranderen is

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Software aanpassen van servo naar stappenmotoren

Berichtdoor nicoverduin » 29 Mei 2013, 20:27

Dan moet je me maar ff mailen: info at verelec punt com
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 229
Geregistreerd: 20 Jan 2013, 12:01

Re: Software aanpassen van servo naar stappenmotoren

Berichtdoor astrofrostbyte » 01 Jun 2013, 17:42

De reden waarom Ik nog geen reactie gegeven heb is dat ik nog steeds wat problemen om het geheel te begrijpen als ik de hele thread doorlees.

De Vraag
Ik ben bezig met een project dat via een arduino een paintball geweer aanstuurt.
Nu heb ik mijn project al bijna afgerond en werkt het theoretisch al.
Wat ik nu wil doen is het programma aanpassen zodat ik stappenmotoren kan gebruiken ipv servomotoren.

Ik heb nu servo's gebruikt die via een snaar een groter tandwiel aandrijven. Ik heb de potmeter uit de servo's gehaald en in het midden van het grote tandwiel geplaatst. Nu ziet de servo waar die is. Ik heb wel een tandwieletje van de servo moeten aanpassen omdat deze eigenlijk bedoeld waren voor 180'
Alleen vind ik de servo's niet echt lekker lopen en zijn niet stabiel. Ik ben toch van mening dat een stappenmotor een betere optie is. Meer kwaliteit.

Is duidelijke je wil over naar steppers. het is echter niet duidelijk wat de servo deed, en wat de stepper moet gaan doen.


Een gevonden mogelijke stappenmotor aansturing:
Deze link: http://www.pololu.com/catalog/product/1182
Ziet er goed uit, dit is een vrij simpele oplossing. Maar om de stappenmotor te laten draaien heeft het printje een puls nodig. En een puls om richting te bepalen.
Zou ik hier ook met de sturing van een servo op aan kunnen sluiten?

Dit is erg mooi en heel makkelijk aan te sturen vanuit de arduino.
Je kan bv een functie aanmaken die een x aantal pulsje geeft, en evt limiet schakelaars uitleest.
Code: Alles selecteren
byte stepper(unsigned int nrsteps, boolean right)
{
   if (right) digitalWrite(PIN_DIRECTION, RECHTS); // zet direction pinnetje naar rechts
   else       digitalWrite(PIN_DIRECTION, LINKS); // zet direction pinnetje naar links

   while ( nrsteps )
   {  digitalWrite(PIN_STEP, HIGH);         // zet step pin hoog
      delay( 10 );                          // set delays zo kort mogelijk
      digitalWrite(PIN_STEP, LOW);          //  zet step pin laag
      delay( 10 );
      if( digitalRead(PIN_LIMIET) )       // limiet schakelaar uitlezen
      { break;                            // spring uit while() loop
      }
   }
   return( nrsteps );   // geeft normaal '0' terug, als hij een limiet schakelaar heeft gezien blijven er nog wat steps over
}
Gear: Arduino- Uno,Due,Ethernet,Mega2560 , OLS LogicAnalyser, TDS1002, Rigol DG1022, J-Link EDU, BusPirate

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Software aanpassen van servo naar stappenmotoren

Berichtdoor nicoverduin » 01 Jun 2013, 19:39

Ik ben al met hem bezig:
- worden 2 stappenmotoren met feedback loop via een potmeter. Pulsen gaan nog wel eens verloren (is een beetje afhankelijk van het momentum bij draaien). Die potmeter zat er al en geeft de mogelijkheid om pulsen (via timer 1 en 2) te blijven geven tot het punt is bereikt. Via sensoren op de uitersten kan hij geijkt worden (max 180 graden en een potmeter draait 300). hierdoor maakt het niet uit hoe de potmeter geïnstalleerd is. Als hij maar 180 graden kan draaien.
- De Arduino praat met een computerprogramma en krijgt zo zijn instructies. De oorspronkelijke source staat hier: https://github.com/sentryGun53/Project- ... o_Code.ino
- Maar die heb ik eerst onderhanden genomen om eens te kijken wat hij nou precies doet. Tevens de nodige aanpassingen gedaan (defines en structs in een header file gegooid, definiëren van de pinnen anders gedaan waardoor rond 1K minder geheugen nodig was, Eindeloze if else statements vervangen voor Switch case, en een batterij commentaar toegevoegd.
Nu snap ik wat de ontwikkelaar dacht :)

Ik had al eens code geschreven voor Timer 1 dus die kan ik mooi gebruiken voor de stappenmotoren:
Code is voor een wikkelmachine:
Code: Alles selecteren
//
// *****************************************************************************
// ISR: WindingPulse()
// Purpose: Handle interrupt pulses generated from winder
//          determine the new frequency of the stepper motor
//          program Timer 1 (Stepper motor frequency)
//          update pulse counter and check if winding completed
// *****************************************************************************
//
void WindingPulse()
{
  unsigned long TOP;               // value for ICR1 in Timer 1
  unsigned int  DutyCycle;         // Duty cycle for Stepper motor

  TimeNew = micros();              // get new time
  //
  // test for wrap around
  //
  if (TimeOld < TimeNew)
  {
    //
    // no wrap around
    //
    Delta   = TimeNew - TimeOld;   // calculate difference
    TimeOld = TimeNew;             // save for next time
  }
  //
  // determine stepper frequency
  //
  StepperFrequency = (double(StepsToMove) * 1000000.0) / double(Delta);

  //
  // check for valid value for TOP
  //

  Scalar = 1;                      // fake scalar a bit as the correct
                                   // value is usually 8
  do {
    //
    // adjust Scalar
    //
    if (Scalar == 256)  Scalar = 1024;
    if (Scalar == 64)   Scalar = 256;
    if (Scalar == 8)    Scalar = 64;
    if (Scalar == 1)    Scalar = 8;
    //
    // Calculate TOP
    //
    TOP = SYSTEMFREQUENCY / (2 * StepperFrequency * Scalar);
  }
  while (TOP > 65535);
  //
  // Calculate Duty Cycle
  //
  DutyCycle = TOP / 2;                   // 50% duty cycle
  //
  // Program Timer 1
  //
  // Phase and frequency correct mode
  //
  TCCR1A = _BV(COM1A1);                  // only pin 9 is used
  TCCR1B = _BV(WGM13);                   // Timer Mode 8
  //
  // lookup CS10, CS11, CS12
  //
  for (int i = 0; i < 5; i++)
  {
    if (Scalar == ScalarTable[i][0])
    {
      //
      // found correct value mask lower 3 bits and put
      // found value in it
      //
      TCCR1B = (TCCR1B & 0b11111000) | ScalarTable[i][1];
      //
      //
      break;
    }
  }
  //
  // Start Timer 1
  //
  ICR1  = TOP;
  OCR1A = DutyCycle;
  //
  // Winder Pulse counter processing
  //
  PulseCount++;                                  // Increase with 1
  if (PulseCount % PULSES_PER_REVOLUTION == 0)   // one winding completed
  {
    LayerCount ++;                               // increment layer counter
  }
}
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 229
Geregistreerd: 20 Jan 2013, 12:01

Re: Software aanpassen van servo naar stappenmotoren

Berichtdoor astrofrostbyte » 02 Jun 2013, 17:06

ah ok, mooi ..
Gear: Arduino- Uno,Due,Ethernet,Mega2560 , OLS LogicAnalyser, TDS1002, Rigol DG1022, J-Link EDU, BusPirate

Vorige

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: aefudoaso, Google Adsense [Bot] en 32 gasten