Stappenmotor blokkeert en maakt raar geluid

Ik moet voor school een eindwerk maken die uit veel stappenmotoren bestaat. Ik stuur deze motoren aan met een L298n dual bridge die met 12V en 2,5A (labobron) is gevoed. Als ik op een drukknop (geïntegreerd op joystick) druk, zou de stappenmotor snel 90° heen en weer moeten bewegen. Dit gebeurt echter niet ... in de plaats krijg ik een vreemd "blokkerend" geluid te horen. Ik heb de stroom al aangepast maar dit heeft geen effect. Zie programma in bijlage.

Arco

Special Member

Wellicht iets mis in de schakeling die de 90 graden stap verzorgt?

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Op 15 maart 2020 22:49:58 schreef Arco:
Wellicht iets mis in de schakeling die de 90 graden stap verzorgt?

De stappenmotor draait perfect als ik hem gewoon laat draaien met de commando stepper.step(200) maar wanneer ik op de drukknop druk, wordt de functie "stepper.step(50) en vervolgens stepper.step(-50) doorlopen. Ik vermoed misschien dat dit veel te snel gebeurt waardoor de stappenmotor stappen overslaat en dus "blokkeert" of "trilt".

Dat lijkt me dan een programma fout en dat kan je toch gewoon aanpassen?

Mensen zijn soms net als een gelijkrichter, ze willen graag hun gelijk hebben.

Kennelijk gebruik je een Arduino. Een stappenmotor kan niet ineens op volle snelheid lopen laat staan omkeren. Daar heb je een ramp-up en down voor nodig. Een betere steproutine zoeken dus of zelf schrijven.
De routine die je gebruikt is blocking, dus je kan daar ook maar een motor tegelijk mee laten lopen.

Shiptronic

Overleden

volgens muj zit er geen delay in, je moet demotor tijd geven om op zijn plek te komen, voordat je het volgende comando(hoek) geeft.

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

Op 15 maart 2020 23:11:31 schreef floppy:
Kennelijk gebruik je een Arduino. Een stappenmotor kan niet ineens op volle snelheid lopen laat staan omkeren. Daar heb je een ramp-up en down voor nodig. Een betere steproutine zoeken dus of zelf schrijven.
De routine die je gebruikt is blocking, dus je kan daar ook maar een motor tegelijk mee laten lopen.

Wat bedoel je met steproutine?

buckfast_beekeeper

Golden Member

Wordt de contactdender van de knop opgevangen? Is er tijd tussen de commando's stepper.step(50) en stepper.step(-50)?

Is stepper.step(50) het aantal stappen of de hoek?

Van Lambiek wordt goede geuze gemaakt.

Dit weekeinde bij toeval met deze library gespeeld: http://www.airspayce.com/mikem/arduino/AccelStepper/ - lijkt goed te werken.

Lambiek

Special Member

Op 15 maart 2020 22:46:50 schreef Pallieman:
Als ik op een drukknop (geïntegreerd op joystick) druk, zou de stappenmotor snel 90° heen en weer moeten bewegen. Dit gebeurt echter niet ... in de plaats krijg ik een vreemd "blokkerend" geluid te horen.

Stap frequentie te hoog, spanning te laag, geen ramp-up en ramp-down gebruikt, zomaar een paar dingen.

Ik heb de stroom al aangepast maar dit heeft geen effect.

Hoe heb je dat gedaan? Een L298N heeft geen stroomregeling, tenzij je iets met pwm gedaan hebt.

Hier heb je nog wat info, lees dit eens door.

https://www.circuitsonline.net/artikelen/view/47

Als je haar maar goed zit, GROETEN LAMBIEK.

@Pallieman:
Je moet eerst setSpeed() gebruiken om de snelheid in te stellen.

Vervangen DOOR.

Op 16 maart 2020 09:27:28 schreef Boudie:
@Pallieman:
Je moet eerst setSpeed() gebruiken om de snelheid in te stellen.

Uiteraard, dat heb ik gedaan.

Op 16 maart 2020 09:16:32 schreef Lambiek:
[...]
Stap frequentie te hoog, spanning te laag, geen ramp-up en ramp-down gebruikt, zomaar een paar dingen.

[...]
Hoe heb je dat gedaan? Een L298N heeft geen stroomregeling, tenzij je iets met pwm gedaan hebt.

Hier heb je nog wat info, lees dit eens door.

https://www.circuitsonline.net/artikelen/view/47

Als ik tussen myStepper.step(50) en myStepper.step(-50) een delay(500) plaats, is dit voldoende voor de ramp-up en ramp-down?

Lambiek

Special Member

Op 16 maart 2020 10:44:06 schreef Pallieman:
Als ik tussen myStepper.step(50) en myStepper.step(-50) een delay(500) plaats, is dit voldoende voor de ramp-up en ramp-down?

Nee. Daar moet je een klein stukje software voor schrijven. Als je de stappenmotor start begin je met een lage frequentie "ramp-up" en die frequentie laat je oplopen binnen een X aantal stappen. En met ramp-down doe je dat ook, maar dan tegen gesteld.

Als je haar maar goed zit, GROETEN LAMBIEK.
buckfast_beekeeper

Golden Member

Een delay is geen ramp up, ramp down. Begrijp je de begrippen?

We zitten in de schoolvragen sectie. Er is je al veel op een dienblad aangeboden.

Een aantal (terechte) vragen beantwoord je niet.

Begrijp je wat er gebeurd in de librarie?

Van Lambiek wordt goede geuze gemaakt.

Op 16 maart 2020 06:22:55 schreef buckfast_beekeeper:
Wordt de contactdender van de knop opgevangen? Is er tijd tussen de commando's stepper.step(50) en stepper.step(-50)?

Is stepper.step(50) het aantal stappen of de hoek?

Aantal stappen

buckfast_beekeeper

Golden Member

Mijn mening is dat je normaal uitgaat van een hoek en niet van het aantal stappen.

Blijft de vraag of je de contactdender van de schakelaar opvangt.

Begin eens met een lage snelheid en weinig stappen.

Van Lambiek wordt goede geuze gemaakt.

Op 16 maart 2020 10:54:31 schreef buckfast_beekeeper:
Een delay is geen ramp up, ramp down. Begrijp je de begrippen?

We zitten in de schoolvragen sectie. Er is je al veel op een dienblad aangeboden.

Een aantal (terechte) vragen beantwoord je niet.

Begrijp je wat er gebeurd in de librarie?

Wat ik heb begrepen door de reacties op mijn post, is dat mijn stappenmotor waarschijnlijk niet de tijd krijgt om heen en weer te bewegen. Dit los ik op door een ramp-up en ramp-down. Hier moet ik even research over doen hoe ik dit ga programmeren aangezien mijn beperkte kennis over elektronica.

Op 16 maart 2020 11:24:52 schreef buckfast_beekeeper:
Mijn mening is dat je normaal uitgaat van een hoek en niet van het aantal stappen.

Blijft de vraag of je de contactdender van de schakelaar opvangt.

Begin eens met een lage snelheid en weinig stappen.

Contactdender?
Ik heb de motor al op lage snelheid en weinig stappen heen en weer laten bewegen. Dit was echter zonder resultaat.

Lambiek

Special Member

Op 16 maart 2020 11:33:44 schreef Pallieman:
Ik heb de motor al op lage snelheid en weinig stappen heen en weer laten bewegen. Dit was echter zonder resultaat.

Wat gebruik je hele stappen, halve stappen, micro stappen?

Heb je het artikel doorgelezen wat ik gestuurd heb?

En heb je een schema van het geheel en een stukje code?

Als je haar maar goed zit, GROETEN LAMBIEK.

Op 16 maart 2020 10:36:20 schreef Pallieman:
[...]
Uiteraard, dat heb ik gedaan.

Goed zo.
Met welke waarde?

Vervangen DOOR.

Op 16 maart 2020 11:42:54 schreef Lambiek:
[...]
Wat gebruik je hele stappen, halve stappen, micro stappen?

Heb je het artikel doorgelezen wat ik gestuurd heb?

En heb je een schema van het geheel en een stukje code?

Ik gebruik hele stappen normaal gezien.
Ja, dat heb ik gelezen maar dit gaat eerder over de werking van een stappenmotor en ik weet ongeveer de werking. Namelijk per puls beweegt de stappenmotor een stap.
Dit is mijn programma (zie bijlage). In de void slag1 en slag3 zou de stappenmotor snel en heer weten moeten bewegen. Het bovenste gedeelte van het programma is het aansturen van een DC-motor met een joystick. Bij het bewegen van de joystick moet de motor namelijk heen en weer bewegen. Dit werkt perfect dus nu alleen het probleem van de stappenmotor vinden. Ik hoop dat iemand mij nu de fout in het programma kan vinden.

Op 16 maart 2020 11:24:52 schreef buckfast_beekeeper:
Mijn mening is dat je normaal uitgaat van een hoek en niet van het aantal stappen.

Voor een algemene "arduino library" die niet weet of je een 200stappen per omwenteling of "48 stappen per omwenteling" stappenmotor hebt, lijkt het me veel beter om gewoon in stappen te werken. Als je bijvoorbeeld steeds 5 graden verder zou willen bij je 200 stappen/omw. stepper dan ga je zien dat best-case ie soms 2 meestal 3 stappen doet: niet gelijke tussenruimtes. Worst-case doet ie altijd drie stappen en na 360/5 = 72 keer een "5 graden draaien" commando verwacht je dat ie bij het begin is, maar is ie ondertussen 388 graden verdraaid! 28 graden te ver! Nu is dit nogal a-subtiel, dus zal je er wel redelijk snel achterkomen.

Een interface "zonder verrassingen" is veel beter: je geeft gewoon het integer aantal stappen op.

Op 16 maart 2020 12:25:56 schreef Pallieman:
Ik hoop dat iemand mij nu de fout in het programma kan vinden.

Ehh... Jij zit op school, wij niet (de meeste van ons dan). Het is jou project. Jij moet er wat van leren. Dus JIJ moet leren foutzoeken om het probleem te gaan vinden. Niet: "Wij doen je huiswerk voor je".

Maar goed. We zijn niet "te beroerd om te helpen". Vraagje: Wat voor stappenmotoren gebruik je? Heb je een datasheet? Staat die online, kan je een linkje delen naar dat datasheet?

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

Golden Member

Waar roep je de methode void slag1() en void slag3() aan? Ik vind die niet in je loop. In beide geef je ook geen snelheid aan.

In je loop staat een if die altijd false zal zijn joywaarde kan niet gelijk kleiner zijn dan 435 en groter dan 485. Bekijk eens de functie if - else if - else.

Bovenaan geef je aan dat 1 volle draai 200 stappen is. Is er geen functie waar je het aantal graden kan ingeven? Een goede librarie gaat dan zelf het aantal stappen voor je berekenen.

Begin eens met de code van stepper.h en stepper.c uit vlooien. Hoe gaat deze code om met de commando's. Mocht ik leerkracht zijn, kreeg je deze vraag sowieso op je boterham tijdens de verdediging van je project. Een aanwezige librarie gebruiken is 1, je moet het wiel inderdaad niet terug uitvinden, weten hoe deze zijn werk doet is toch een must.

ramp up ramp down. Ik zal het even in een andere context plaatsen. Vertrekt een auto op volle snelheid? Stopt deze plots? (een ongeval even niet meegerekend) Welke wet heeft hier invloed? Is deze ook gerelateerd aan je stappenmotor?

@rew: hij geeft zelf de constante stepsRevolution mee in de declaratie van zijn steppers als 1ste argument. Lijkt me dan logisch dat de software dit wel kent.

Van Lambiek wordt goede geuze gemaakt.
Lambiek

Special Member

Op 16 maart 2020 12:25:56 schreef Pallieman:
Ja, dat heb ik gelezen maar dit gaat eerder over de werking van een stappenmotor en ik weet ongeveer de werking.

Als je goed kijkt gaat het over meer dan alleen de werking, het wordt alleen niet met een Arduino gedaan. :)

Namelijk per puls beweegt de stappenmotor een stap.

Dat zou moeten ja, maar dat gebeurd niet. Dus wat gaat er fout. :)

Dit is mijn programma (zie bijlage). In de void slag1 en slag3 zou de stappenmotor snel en heer weten moeten bewegen.

Hier kan ik je niet mee helpen, ik gebruik geen Arduino's. Maar er zijn er genoeg hier die daar wel mee werken, bijv. rew en buckfast_beekeeper en anderen.

Als je haar maar goed zit, GROETEN LAMBIEK.