PID control voor motoren

Hallo allemaal,

Ik ben bezig met een kleine bot met twee motoren aan beide kanten en een zwenkwiel aan de achterzijde. (Voor een beter beeld het gaat om het volgende frame: https://www.hobbyelectronica.nl/product/smart-car-robot-chassis-2wd-pl)

Nu heb ik een issue met de bot recht laten rijden. Mijn aanpak was om 2 PI- controllers te coden en beide motoren hetzelfde toerental te laten draaien. Het gewenste toerental is 60 rondjes per minuut of dus 1 per seconden.

Opzicht kwam ik redelijk in de buurt maar er blijft een te grote afwijking in de aansturing zitten. Even wat feiten op een rij:

- De encoders op de motor hebben 20 gaatjes dus met falling en rising interrupts heb ik 40 pulsen per seconden bij het gewenste toerental.

Ik zelf denk dat dit te weinig is want ik kan de RPM pas berekenen naar 2 pulsen. Hierdoor kan ik de pid loop maximaal met 20hz runnen en dat is dan afhankelijk van de snelheid. Daarnaast krijg ik de encoder niet 100 procent recht op de as waardoor je half om half steeds springt in RPM. Het zou beter zijn om een volledige rotatie te tellen en dan de RPM te berekenen maar dan heb ik een pid loop van 1hz wat voor meer afwijking zorgt.

Zou een encoder wiel met zeg 100 gaten hier veel beter gaan werken? Of doe ik fundamenteel iets verkeerd?

mel

Golden Member

Je krijgt ze nooit gelijk.
Het is beter om iets optisch te gebruiken met plaatsbepaling of zo. Of iets met een gyroscoop

u=ir betekent niet :U bent ingenieur..

Hier vind je veel meer informatie over dit probleem : http://wiki.robotmc.be/index.php/Odometrie
Essentieel is inderdaad een hoge resolutie, bij voorkeur op de motoras. Daarnaast is ook de PWM aansturing belangrijk, hard of zacht (zie link). Als je mechanica OK is, kan je veel bereiken met "odometrie".

High met Henk

Special Member

Een ander geijkte manier is om gebruik te maken van 360 graden modelbouw servo's.

Geef toe dat het beetje flauw is, maar dan lost de Servo het probleem op (ja die Servo is gewoon een DC motor + gearbox + encoder/potmeter + regeling)

Als je persé recht wilt rijden hoef je niet per definitie een snelheidsregelaar te maken. Je kan ook pulsen tellen.
Gelijk aantal pulsen is een gelijk aantal omwentelingen (of deel daarvan).
Verschil in pulsen betekend dat je degene die verder is iets af moet remmen. (Of de achterliggende versnellen )

Dat is dus geen snelheidsregelaar, maar een andere benadering om recht te rijden..

E = MC^2, dus de magnetische compatibiliteit doet kwadratisch mee???
GJ_

Moderator

Op 16 augustus 2021 22:43:05 schreef NarwhalLeo:...Mijn aanpak was om 2 PI- controllers te coden en beide motoren hetzelfde toerental te laten draaien....

En dan krijgen die twee PI regelaars ruzie.

Ik zou eerst uitrekenen wat het toerental voor beide motoren moet zijn. In bochten is dat geen probleem natuurlijk.
Rechtuit rijden is lastiger. Ik denk dat één van de motoren dan de master moet zijn en de andere de slave. Wel met een PID regeling op de positie en een "distance recovery". Want je wil niet synchroon draaien maar hoeksynchroon draaien. Een fout moet dus hersteld worden om op zijn minst de juiste richting in te blijven rijden.

In de aandrijftechniek worden encoder resoluties van minimaal 1024ppr aanbevolen, met de encoder op de motor as. dat zijn dus 4096 counts per omwenteling. Met minder word het een honkebonkerige beweging.

Lambiek

Special Member

De enige manier om dat goed te krijgen is de manier die RP6conrad beschrijft. Ik hoop alleen niet dat ze de H-brug uit het artikel gebruiken, die werkt niet zo met de diodes. Een paar gate weerstanden zou ook niet gek zijn.

En inderdaad de encoder op de motor plaatsen, hij zal nu op de uitgaande as van de vertraging zitten en dat ga je niet goed krijgen. Je moet zorgen dat je een behoorlijk aantal pulsen in kan lezen.

De odometrie methode wordt ook toegepast bij "ROBOT MAZE" dat werkt vrij precies.

Je kunt hier ook een kijken, in de robobits staan ook voorbeelden.

https://robotica.hcc.nl/downloads/category/4-robobits.html

Als je haar maar goed zit, GROETEN LAMBIEK.

Op 17 augustus 2021 07:22:06 schreef RP6conrad:
Hier vind je veel meer informatie over dit probleem : http://wiki.robotmc.be/index.php/Odometrie
Essentieel is inderdaad een hoge resolutie, bij voorkeur op de motoras. Daarnaast is ook de PWM aansturing belangrijk, hard of zacht (zie link). Als je mechanica OK is, kan je veel bereiken met "odometrie".

Dit is precies wat ik zocht!

Bedankt voor alle antwoorden, ik kan weer even verder. Er zit een enorme afwijking in dat goedkope frame dus ik verwacht dat het lastig wordt om de boel recht te krijgen op deze manier. Misschien maar eens wat tijd steken in het ontwerpen van een fatsoenlijk frame.

Lambiek

Special Member

Zorg er ook voor dat het mechanisch ook soepel loopt, dat scheelt een hele hoop ellende.

Succes ermee. :)

Als je haar maar goed zit, GROETEN LAMBIEK.