Elektromotor en regelaars

Op zich hoeft "op tijd" geen probleem te zijn, als je de pulstrein en de timer waarmee je die weer uit zet uit dezelfde klok haalt, en dat is het geval bij een microcontroller.

Als je een timer instelt op 160.000 cycles (dus 100Hz bij 16MHz clock), met een compare match op de helft, zodat je 50% pulsbreedte krijgt, en direct daarna een tweede timer start die na 16.000.000 cycles afloopt, en daarmee die eerste timer stopt, heb je exact 1000 stappen gemaakt; zolang je binnen 8000 cycles kunt reageren, klopt het aantal stappen precies.

Als je een ramp-up en ramp-down moet doen wordt het natuurlijk wat lastiger, maar waarschijnlijk is de frequentie alsnog zo laag dat je stappen prima kunt tellen als je bij elke stap een interrupt service routine in gaat, en dan kun je daar ook meteen de timer opnieuw instellen voor die ramp-up en ramp-down.

Ik denk dat 4 knopjes en misschien nog 1 potmeter genoeg is; één knopje voor "doe maar een cyclus", één voor "stapje vooruit", en als je die blijft vasthouden op een lage frequentie blijven joggen, één voor dezelfde functies achteruit, en één voor "sla dit maar op als de nieuwe lengte". Met de potmeter op een analoge ingang zou je dan nog de snelheid kunnen instellen, als je dat zou willen.

@MGP: je kunt toch gewoon interrupts gebruiken en bij de registers van de hardware timers komen om de periode te schrijven? Een taal waarmee dat niet kan heeft m.i. niets te zoeken bij microcontrollers.

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken

Op 2 oktober 2018 20:35:42 schreef SparkyGSX:
@MGP: je kunt toch gewoon interrupts gebruiken en bij de registers van de hardware timers komen om de periode te schrijven? Een taal waarmee dat niet kan heeft m.i. niets te zoeken bij microcontrollers.

Niet zo snel oordelen over iets dat je niet kent.

Ik gebruik LDmicro en dat is een PLC achtige taal met een cyclustijd, dat laatste maakt dat je gebonden bent aan die tijd.
Een Logo8 kan iets van 10Hz en Ldmicro kan 2.5kHz op een 20MHz PIC en 5kHz op een 16MHz Atmel.
Het heeft veel nadelen maar voor mij werkt het prima.

Het programma is trouwens al gereed, moet enkel nog eens een opstelling maken en een filmpje met een stepper en riem...om indruk te maken natuurlijk ;)

Voel je vrij om ook iets te maken, ben ook altijd nieuwsgierig hoe jullie dat (zouden) aanpakken en ik wil het gerust in jullie handen geven hoor want ik heb nog een ander ontwerp in de pijplijn.

edit: ik heb nu 2 knoppen up/down en een startingang, ga er dan ook nog een drukknop bijvoegen om de rol juist te zetten (tippen dat ze alhier noemen)
De ingave wordt in EEPROM opgeslagen en als alles goed werkt kunnen we later misschien enkele vaste modellen in het geheugen steken.

LDmicro user.

Een PLC is iets anders dan een microcontroller; ik heb zelf jaren PLC's geprogrammeerd (en blij dat ik dat niet meer doe), en op zich lenen die talen zich wel voor dingen die relatief traag gaan, dus waarbij een paar milliseconden meer of minder niet uitmaakt.

Overigens kon ik bij Siemens PLCs ook gewoon dingen op interrupts doen, en pulstrein uitgangen kun je vrij in frequentie regelen.

Eigenlijk ben ik wel geneigd om even snel iets te schrijven, of op zijn minst het "lastige" stuk rondom de timers en zo, maar ik zit nu middenin een stuk software voor REW.

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken

Op 2 oktober 2018 21:31:29 schreef SparkyGSX:
Eigenlijk ben ik wel geneigd om even snel iets te schrijven, of op zijn minst het "lastige" stuk rondom de timers en zo, maar ik zit nu middenin een stuk software voor REW.

Ik denk dat dat geen probleem zal zijn, de TS zal toch nog wat werk hebben en zolang we geen verder gegevens hebben van die rollen/stepper/driver kunnen we toch niet verder doen.

Ik ben razend nieuwsgierig hoe jij dat gaat aanpakken.

LDmicro user.

Ik heb eigenlijk geen zin om het stuk rondom het schermpje, de knopjes, etc. te doen, maar het "technische" stuk kan ik wel bouwen en hier publiceren, denk ik.

Bezig...

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken

Sparky... in marlin, wat in 3D printers gebruikt wordt, gebruiken ze een 10khz timer en doen ze dan tot wel drie steps in die ene periode. Dit kan omdat microstepping gebruikt word. Gewoon bijhouden in fractionele microsteps waar je hoort te zijn en het verschil aftikken. Anyway..... /een/ manier om het te doen....

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

Ok, ik heb wat in elkaar gedraaid. Dit heb ik geschreven in de Arduino omgeving, voor een Arduino UNO

code:


// Options for prescaler: 1, 8, 64, 256, 1024
// 256 seems reasonable @16MHz; this gives a minimum frequency of just under 1Hz with a 16-bit timer

const unsigned short PulseLength = 2; // 2 * prescaler (now set at 256), must be smaller than RunInterval
const unsigned long StartInterval = 100; // interval at start of cycle
const unsigned long RunInterval = 10; // interval at top speed in cycle (MUST be smaller than StartInterval!)
const unsigned long RampSteps = 10; // number of staps in acceleration / deceleration ramps

volatile unsigned long StepCount = 0, RampCounter = 0;
// StepCount contains the number of steps remaining.  RampCounter counts from 0 to RampSteps at the start
// of a cycle, and follows StepCount on the way down during the last RampSteps steps of the cycle
 
ISR( TIMER1_COMPA_vect )
{
  if( !--StepCount ) // done yet?
    TCCR1B &= 0xF8; // stop timer, leave the remaining bits alone

  // subtract 1 because the last step (0) is not executed; one cycle could be missing from ramp-down
  if( StepCount - 1 < RampCounter ) // if we're in the ramp-down part (also works if we didn't complete the ramp-up)
    RampCounter = StepCount - 1; // follow number of steps remaining for ramp down
  else
    if( RampCounter < RampSteps ) // not ramping down; are we ramping up?
      RampCounter++; // if we're not done ramping up, take a step

  // ramp generator: lineair interpolation of intervals; may need improvement
  OCR1A = RunInterval + ( StartInterval - RunInterval ) * ( RampSteps - RampCounter ) / RampSteps;
}

void setup() {
  pinMode( 10, OUTPUT ); // output on pin 10 of Arduino UNO
  TCCR1A = 0x23; // OC1B set on compare match, clear at BOTTOM, fast PWM mode, reset on CMPA match
  TCCR1B = 0x18; // other half of fast PWM mode setting, clock stopped
  OCR1B = PulseLength; // setup output pulse length
  TIMSK1 = 0x02; // interrupt on CMPA match
  sei(); // global interrupt enable
}

void StartCycle( unsigned long NrSteps )
{
  if( StepCount )
    return; // if still running ignore command
    
  StepCount = NrSteps; // record number of steps to be done
  RampCounter = 1; // start at 1; the interrupt fires when this one is done
  TCNT1 = 0; // clear counter
  OCR1A = StartInterval; // setup compare value for first cycle
  TCCR1B |= 0x04; // start timer, prescaler 256
}

// TEST CODE ONLY!
void loop() {
  if( !StepCount ) // if done stepping
  {
    delay(100); // wait for a bit (usefull for logic analyser)
    StartCycle( 50 );
  }
}

Plaatjes van de logic analyser aan pin 10:

50 stappen, 10 stappen ramp-up en ramp-down:

20 stappen, ramp-up en ramp-down van 8 stappen (dus een constante snelheid in het middelste deel):

15 stappen, RampSteps = 10, dus onvolledige ramp-up:

Uiteraard moeten de instellingen (start en run intervallen, aantal stappen in de ramp-up/doen, etc.) nog aangepast worden aan de werkelijke setup; deze instellingen waren even handig voor de logic analyser.

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken

Dat is idd een mooi stukje software.

Wat ik mij bij deze afvroeg hoe een stappenmotor zich zal gedragen met en zonder ramp bij zulke korte tijden.
Uw ramp heeft in dit voorbeeld bij de start 1.5mS wat halverwege zal moeten worden ingehaald als je bv 1000 pulsen binnen de 1s moet hebben.

Wegens 'tijdsgebrek' (cyclustijd of scantijd) kan ik mij dat niet permitteren, voor een antennemotor (PWM) ging dat wel.

Ik heb ook geen ervaring met die Nema motoren en weet ook niet hoe ze zich gedragen als je bv full step doet aan 1kHz zonder ramp.
Lambiek kan misschien een tipje van de sluier opheffen?

Arduino is niet mijn ding, kan wel de software lezen want ik was vroeger een TurboC_er.
Ik zal het dus houden bij mijn software, misschien kan er en parallelle ontwikkeling gebeuren.

Met deze moet ik erbij zeggen dat de opmetingen van de folie-rol voor mij cruciaal is, dus geen potentiometers om te finetunen, m.a.w. zwartwit en dat valt in de meeste gevallen reuze mee.

Ik ga deze week een proefopstelling in elkaar vijzen en dan zien we wel.
Daarna zou Lambiek misschien eens een testje kunnen doen als ik hem de hexfile toestuur, testbenodigheden: een 16f628a, 3knoppen en een pulsuitgang en natuurlijk zijn driver/motor, maar voel je niet gedwongen ;)
Door het leddisplay heb ik meer IO nodig en dat zal dan een F876a/F886 worden.

LDmicro user.

Zoals ik al zei, die tijden en de lengte van de ramp-up/down moeten nog goed ingesteld worden voor een werkelijke motor; deze instellingen heb ik gebruikt om de werking goed te laten zien met een logic analyser.

Je hebt echt een ramp-up/down nodig als je een beetje hard wilt, onafhankelijk van het formaat van de motor, simpelweg omdat hij zijn eigen rotor niet snel genoeg op gang kan krijgen. De snelheid die je kunt halen zonder ramps is de snelheid die ik initieel kan gebruiken; zonder ramps blijf je dus altijd op de startsnelheid hangen, met ramps kun je zomaar een factor 4 of zo harder. Daarbij loopt het natuurlijk veel minder ruig als je een beetje rustig start en remt.

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken
Lambiek

Special Member

Op 3 oktober 2018 09:33:18 schreef MGP:
Wat ik mij bij deze afvroeg hoe een stappenmotor zich zal gedragen met en zonder ramp bij zulke korte tijden.

Ramp-up en ramp-down wordt alleen gebruikt om een betrekkelijk zware last op te starten, dat doe je om te voorkomen dat je stappen gaat missen. Je ramp kun je zeer snel op en afbouwen, zonder dat je dat merkt in de tijd. En ook als je snel naar de max frequentie wil gebruik je ramp-up en ramp-down.

Uw ramp heeft in dit voorbeeld bij de start 1.5mS wat halverwege zal moeten worden ingehaald als je bv 1000 pulsen binnen de 1s moet hebben.

Je hoeft niets in te halen, je start met bijv. een lage stap frequentie en die verhoog je binnen bijv. 1.5mS. Dan ga je naar je vaste draai frequentie en als de positie bijna bereikt is ga je de frequentie weer afbouwen naar 0. En dit alles gebeurt binnen het aantal stappen die je nodig hebt voor een X verplaatsing.

Ik heb ook geen ervaring met die Nema motoren en weet ook niet hoe ze zich gedragen als je bv full step doet aan 1kHz zonder ramp.

Ze gedragen zich niet veel anders dan bijv. een stappenmotor uit een printer, behalve dat deze motoren een lager koppel hebben. En zoals ik hier boven al zei, het ligt helemaal aan het startkoppel dat je nodig hebt of je ramp-up en ramp-down gebruikt.

Ik ga deze week een proefopstelling in elkaar vijzen en dan zien we wel.

Ik ben wel benieuwd wat je daar van gaat maken.

Daarna zou Lambiek misschien eens een testje kunnen doen als ik hem de hexfile toestuur, testbenodigheden: een 16f628a, 3knoppen en een pulsuitgang en natuurlijk zijn driver/motor, maar voel je niet gedwongen ;)
Door het leddisplay heb ik meer IO nodig en dat zal dan een F876a/F886 worden.

Als je dan toch een grotere controller gaat gebruiken, neem dan een 16F887, dat heb ik op een test bord staan.

Als je haar maar goed zit, GROETEN LAMBIEK.

Waarom niet iets kant en klaar kopen zoals dit:
https://www.sainsmart.com/products/single-axis-cnc-servo-ste...controller
Volgens mij is dat alles wat je nodig hebt.
Nog een voeding, stepper driver en motor erbij en je bent klaar.

Lambiek

Special Member

Kan ook, maar is niet zo leuk. :)

Als je haar maar goed zit, GROETEN LAMBIEK.

Volgens mij leuker als je er weinig vanaf weet en vooral makkelijk te bedienen en in te bouwen.
Ik heb de handleiding nog niet gelezen maar dat zou de oplossing kunnen zijn, veel beter dan zelfgemaakt waar je nog veel werk zult aan hebben.

Maar we gaan niettemin door met de test, dan zal dat programma 2xx zijn in mijn lijst. ;)

LDmicro user.

Zelf bouwen is ook leerzaam, en je kunt functies toevoegen die niet in zo'n controller zitten, zoals feedback om closed-loop te regelen, het totaliseren van de gebruikte lengte folie, of het aansturen van andere actuators in het apparaat.

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken

Ja man, velen die daarvan dromen en daar blijft het meestal bij ;)

Deze namiddag al de proefopstelling in elkaar gevezen nadat de tuin opgeruimd was.
De bovenste stepper is de aandrijving, de onderste stepper het lijdend voorwerp.

Zal een filmpje posten als de opstelling volledig is en werkt, hopelijk nog voor het WE.

@Lambiek, een F887 heb ik niet maar zal dat voor die pic compileren zodat je dat kunt testen.
Welk testbord heb jij? gekocht of zelfgemaakt?

LDmicro user.

Wat is het doel van die opstelling? Het is geen realistische benadering van de werkelijkheid; je hebt nauwelijks een massatraagheidsmoment, en afhankelijk van wat je precies met die tweede motor gaat doen (kortsluiten?), een hele vreemde laskoppel kromme, met mogelijk een negatieve afgeleide, maar daar heb ik elders op dit forum al flinke stukken over geschreven.

De code die ik voor een Arduino heb geschreven (voornamelijk gekozen omdat dat toegankelijk is en ik zo'n bordje onder handbereik had liggen) is vrij eenvoudig te porten naar een PIC of andere soortgelijke microcontroller. Ik heb daar geen hardware voor paraat, maar dat hoeft niet heel moeilijk te zijn.

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken

Op 3 oktober 2018 22:04:18 schreef SparkyGSX:
Wat is het doel van die opstelling? Het is geen realistische benadering van de werkelijkheid; ...

Mijn programma proberen (display, knoppen, aantal pulsen..enz.) meer niet, dat de opstelling niet realistisch is, is voor mij niet van belang en trouwens ik heb geen grotere motoren en drivers en ga er geen kopen om iets te maken dat zo goed als gratis is.
Je dacht toch niet dat ik een opstelling ging maken zoals op die drukpers?
Ik ben maar een bruggepensioneerde hobbyist hoor ;) maar heb toch veel vertrouwen in wat ik maak

Het enige verschil tussen uw en mijn programma is de ramp en misschien de speed, voor de rest mijn programma klaar voor de test.

Met uw programma kan ik ook niet verder omdat ik er al telang uit ben en een realistische test zou toch niet kunnen.

Maar het bedieningstoestel 'van' Floppy zal ons toch verslaan qua mogelijkheden want ik zou het zelfs aanraden voor iemand die niks van elektronica kent.

Je zult dan vragen waarom ik het doe, awel voor de kick... en een klein beetje om mijn grijze cellen uptodate te houden, is eens wat anders dan kruiswoordraadsels invullen :)

LDmicro user.

Ik doe het ook omdat ik het leuk vind en om ervan te leren hoor, weinig betere motivatie dan dat!

Zo'n pers nabouwen is inderdaad geen doen, en ik zat al te denken over een meer representatieve opstelling, maar heb nog geen echt simpel en haalbaar idee.

Op 3 oktober 2018 22:57:58 schreef MGP:
Het enige verschil tussen uw en mijn programma is de ramp en misschien de speed, voor de rest mijn programma klaar voor de test.

Met uw programma kan ik ook niet verder omdat ik er al te lang uit ben

Maar dat zijn nu juist de 2 enige dingen die van belang zijn bij het aansturen van een stappenmotor driver. Zonder ramp kun je nooit hard; als je dat probeert kan hij zijn eigen massa niet versnellen, waardoor hij de tweede stap al direct zal missen en daarmee ook de volgende 7 stappen totdat het patroon weer herhaalt, maar intussen is die motor wild aan het klapperen en dus nog steeds niet op gang zodat het weer mis gaat een je weer 8 stappen mist, totdat het door toeval net goed gaat en hij op gang komt.

Zonder fijne controle over de frequentie gaat dat nooit lekker lopen; het lijkt erop dat de TS een stapfrequentie van ongeveer 1kHz nodig gaat hebben, kun je dat maken met LDmicro? Hoe ga je de pulsen tellen en op tijd stoppen als je geen interrupts kunt gebruiken?

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken

Naar wat ik vermoed zal het werken op de base frequentie (1kHz) zonder ramp.
De stappenmotor heeft genoeg koppel om die rollen te doen draaien en de folie is toch geen belasting.
Het zijn toch maar folieklemrollen laten draaien, ze wegen toch geen 10kg ... anders was ik er zelfs niet aan begonnen.

Daarom zou ik ook eerst de test door Lambiek laten uitvoeren en ik denk dat alles prima zal verlopen.
Zoniet dan heb ik gefaald en heb daar geen problemen mee want niemand verliest er iets aan behalve wat tijd.

Met LDmicro kun je een counter maken en ondertussen telkens een puls geven waarmee het eindresultaat er niet 1 naast zal zitten.
Voor een goed begrip, de counter bestuurt de puls, niet omgekeerd.
Het programma zit veel beter in elkaar dan je zou denken want ik heb er al redelijk wat ervaring mee.

2kHz zou ik ook nog aankunnen maar eerst mijn programma zoals het nu is proberen, daarom mijn kleine opstelling.
De stepper heeft een 1.8° step, dus gelijk aan die Nema, de riem zou bij een bepaalde stepingave altijd op hetzelfde punt moeten stoppen en dat wil ik zien en hoe ik kan spelen met de base frequentie.

LDmicro user.

Ik ben benieuwd! Wat ik hier mis is een compatible display met kopjes, ik heb stappenmotoren liggen in vele soorten en maten, inclusief NEMA 23 en 34, en een paar industriële stappenmotor drives.

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken

Bij mij is het juist omgekeerd, geen motoren/drives maar al de rest wel.
Ik koop veel algemene modules in China omdat ik ondervonden heb dat zelf printen maken een grote struikelblok is en het moet reproduceerbaar zijn als je iets maakt voor een ander zonder daar zelf in te moeten tussenkomen.

Met de test wil ik ook de bediening op punt zetten, bv. knoppen die automatisch versnellen naargelang je ze blijft indrukken, anders is het geen doen. Het zit er al ingeprogrammeerd maar nu nog finetunen.

Ik had eerst gedacht om BCD duimwielschakelaars te gebruiken maar dat maakt de opbouw alleen maar omslachtiger.

In bijna alle gevallen wordt nadat de opstelling werkt alles opgedoekt en begin ik aan iets nieuw, veel dingen die totaal geen nut hebben behalve de mens bezighouden.

We komen er wel, nu eerst wat huistaken doen en regelmatig eens kijken naar CO ;)

LDmicro user.
Lambiek

Special Member

Op 3 oktober 2018 20:13:37 schreef MGP:
@Lambiek, een F887 heb ik niet maar zal dat voor die pic compileren zodat je dat kunt testen.

Oké. Maar ik ben wel druk, dus het kan even duren.

Welk testbord heb jij? gekocht of zelfgemaakt?

Zelfgemaakt, draait op 10MHz.

Heb hem in twee varianten.

Als je haar maar goed zit, GROETEN LAMBIEK.

Zoals beloofd een filmpje, het heeft meer tijd gekost om het 'bewijs' te leveren dan de opbouw ;)

Wat toelichting:

De driver is een gewone A4988 in fullstep en de motor is een 12V type waar ik gewoon 12V heb aangesloten, dus geen stroomsturing met hogere spanningen.

3knoppen UP/DWN en cyclus(of startknop)

Stappenmotor heeft 1.8°/step = 200steps/toer.

Op de riem zijn 4 witte stippen te zien, die de riem in 4 gelijke stukken verdeelt.
Om goed te kunnen volgen hou de stip op het bovenste tandwiel in de gaten.

Het totale aantal impulsen voor de volledige riemomtrek is 880 steps.

Elke stip komt overeen met 220 steps.

Het display lijkt te knipperen maar daar is in de realiteit niks van te zien en dat komt omdat het display gemultiplext wordt en mijn fototoestel al enkele jaartjes oud is.

Misschien ga ik in het WE de software nog aanvullen om wat metingen te kunnen doen voor eigen gebruik maar zoals je ziet werkt dat goed.

Omdat er niks geweten is over de machine blijf het een heel onzeker gegeven, wat er kan en wat niet kan, heb al genoeg machine ervaring om dat redelijk goed in te schatten.

@Lambiek, ik heb een kristal/resonator van 20Mhz van doen ;)
En je hebt alle tijd en voel je absoluut tot niets verplicht en als het niet gaat ook geen probleem hoor...

En maak je niet ongerust als je het toch wil doen, ik ga het zo eenvoudig mogelijk maken en ga er een vaste waarde insteken (200 = 1tr of een veelvoud ervan) zodat je geen display nodig hebt, enkel 3 knoppen, up/dwn per 200 steps en startknop en een led.

Of je mag zelf zeggen hoe je het wilt hebben.

Filmpje.

Edit: op het allelaatste (110steps) zie je dat er verschil opzat, dat heb je als je met draadjes werk, had een slecht contact..

LDmicro user.
Shiptronic

Golden Member

Wie de vraag stelt, zal met het antwoord moeten leren leven.

Leuk gemaakt! Waar ik me zorgen om maak, is dat het niet meer werkt als de stappenmotor daadwerkelijk koppel moet leveren, en vooral als hij rotationele inertia moet overwinnen, waardoor hij niet snel genoeg kan accelereren om mee te komen met je pulsen, en als ik het goed begrijp heb je weinig tot geen mogelijkheid om daar iets aan te doen in je software.

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken