Shock Media

Navigatie

robot rijdt krom, wiel encoders..

Forum > Robotica > robot rijdt krom, wiel encoders..
Naam Bericht
Danny

Hallo,

Ik ben al een tijdje bezig met het maken van een robot.
hij werkt met 2 aangedreven wielen (1 links en 1 rechts) en een zwenkwiel

resultaat is een robot die wat krom door de kamer rijdt, ipv gewoon recht vooruit te rijden.
daarom heb ik op beide wielen strepen gemaakt, en een TSOP1738 + IR led. dit geheel werkt goed.

mijn probleem:

ik weet niet goed hoe ik dit nu aan moet pakken in picbasic.

het eerste idee wat ik nu heb is om het wiel dat sneller draait, eventjes stil te zetten. totdat ze bijde weer gelijk op gaan. maar dit blijkt moeilijker dan gedacht.

kan iemand mij op gang helpen?

om even een idee te geven van mijn robot:
gebruik nu 2 cybot motors met de overbrenging, en heb al een L298 hbrug-ic en een 16F628A op een print gesoldeerd, met 2x een 7805 voeding, 1 voor de motors, en 1 voor de pic. ook heb ik de HPWM pin van de pic gebruikt omdat de robot anders wel erg hard door de kamer reedt

alvast bedankt, Danny
[Bericht gewijzigd door Danny op 19 juli 2008 19:10:01]
Wat is het vermogen van een oorstokje? 2 Watt?? Altijd al willen weten wat je echt bent? klik hier!
big bang

Als je beide motoren apart met PWM kan regelen, en je kan een snelheidsverschil meten door de encoders op de wielen, dan moet het mogelijk zijn dit verschil weg te regelen.

Het ene wiel even helemaal stil zetten terwijl het andere verder loopt, lijkt me niet zo'n grandioos idee, dan wordt de regeling vrij bruusk, en is ook afhankelijk van grotere of kleinere belasting.
Je kan om de zoveel tijd (10ms, 100ms, ...) afhankelijk van verschillende factoren meten (samplen) hoever het ene wiel gereden is en hoever het andere. Het komt er op neer van beide wielen een bepaalde tijd pulsen te tellen. Daar kan je het verschil van maken, dat wordt een soort errorsignaal waarmee de PWM geleidelijk kan worden bijgesteld. Dat kan in stapjes, das dan simpel, of kan ook heel gesofistikeerd met een softwarematige PI regelaar.

Een mechanische aanpassing kan ook, dat de doormeter van 1 wiel een klein beetje aangepast wordt, door het bvb. af te schuren, omtrek wordt iets kleiner, indien mogelijk.

- - big bang - -
Een voordeel van dementie is dat je je eigen paaseieren kan verstoppen... ;-)
Danny

de wielen veranderen is eigenlijk geen optie, zitten nu mooi in elkaar, met rubber eromheen enzo.

ik zou eigenlijk idd 2x pwm moeten gebruiken, echter heb ik maar 1 HPWM pin op de pic. en om alles weer te moeten veranderen voor een andere pic zie ik niet echt zitten

ik denk dat ik eens ga proberen om een software pwm werkend te krijgen.

zou het pwm commando volstaan, of zouden interrupts makkelijker / beter werken?

ik ga wel wat proberen..

alvast bedankt,
Danny
[Bericht gewijzigd door Danny op 19 juli 2008 20:21:57]
Wat is het vermogen van een oorstokje? 2 Watt?? Altijd al willen weten wat je echt bent? klik hier!
smsmonster

Als je nu maar 1 PWM gebruikt, hoe stuur je dan?
madthijs

waarschijnlijk via 2 enable lijntjes?
big bang

Lopen die 2 motortjes parallel aan alkaar op dezelfde PWM?

- - big bang - -
Een voordeel van dementie is dat je je eigen paaseieren kan verstoppen... ;-)
Danny

bijde motors werken nu idd op dezelfde pwm en het sturen deed ik door 1 motor stil te zetten.

dit werkt dan idd beetje abrupt.

misschien een gek idee hoor, maar ik zit net ff te denken en vraag me af het mogelijk is die ene HPWM pin te multiplexen.

dus dat je dan de wielen om en om aanzet zegmaar en de HPWM steeds veranderd

ik denk als de dit snel genoeg doet dit niet erg schokkerig gaat?

misschien het proberen waard

Danny
Wat is het vermogen van een oorstokje? 2 Watt?? Altijd al willen weten wat je echt bent? klik hier!
Uranium

Je kunt ook 1 motor op volle snelheid laten lopen(de trage), en de andere PWM'en(die die trager moet gaan), Dus als het ware een transistor erbij zetten zodat je kunt kiezen vanuit je programma waar je HPWM naar toe gaat.
[Bericht gewijzigd door Uranium op 20 juli 2008 12:17:23]
Danny

ik heb net een programma in elkaar gestoken met een interrupt, waarmee ik de HWM multiplex. dit werkt.. maar hierdoor heeft de motor weinig kracht meer.

ik ga als ik weer tijd heb het idee van uranium eens proberen denk ik, dus met een tor kiezen waar de hpwm naartoe gaat..

alhoewel op volle snelheid gaat de robot wel erg hard..
mmm ff over nadenken nog..
Wat is het vermogen van een oorstokje? 2 Watt?? Altijd al willen weten wat je echt bent? klik hier!
Corné 12

Ik neem aan dat het 2 dezelfde motors zijn. Ik had ook een project met 2 dezelfde motors, maar de ene ging ook harder dan de ander (ruitenwissermotors).

Wat was er aan de hand? De ene motor moest rechtsom draaien, de andere linksom (stonden gespiegeld). Hierdoor draaiden de motors niet even hard.

Oplossing: 1 motor omdraaien.

Ik weet niet of dit bij u / je het probleem is.
Uranium

Je kunt ook software PWM doen, als je een interupt gebruikt is dat vrij simpel.

In C:
code:
unsinged char pwm1=100,pwm2=100;

unsigned char wiel1=50;         //50%
unsigned char wiel2=30;         //30%

void timer(){
    if(pwm1<wiel1){uitgang1=1;}
    if(pwm1>wiel1){uitgang1=0;}

    if(pwm2<wiel2){uitgang2=1;}
    if(pwm2>wiel2){uitgang2=0;}
 
    pwm1--; pwm2--;
    if(pwm1==0){pwm1=100;}
    if(pwm2==0){pwm2=100;}
}


Eventueel kun je de pwm1 en pwm2 variablen laten lopen van 0-255, dan kunnen de if (pwm1==0) if's weg, want een variable van het type unsigned char zal bij 255 automatisch nul worden.

Met deze methode kun je zoveel pwm pinnen maken als nodig.
EDIT: je gebruikt picbasic zie ik, die taal ken ik niet, maar je kunt het vast wel vertalen.
[Bericht gewijzigd door Uranium op 20 juli 2008 14:55:01]
Daan Timmer

quote:
Op 20 juli 2008 14:49:35 schreef Uranium:
Je kunt ook software PWM doen, als je een interupt gebruikt is dat vrij simpel.

In C:
code:
unsinged char pwm1=100,pwm2=100;



Even een kleine opmerking hierover. Waarom 2 identiek dezelfde variabelen? Die hoe dan ook altijd dezelfde waarde zullen hebben?
Het is veel sneller om er gewoon 1waarde van te maken en die te gebruiken in je if-statements. Dat scheelt HEEL erg veel code(asm)!
Ik ben programmeur! geen electronicus! http://www.daantimmer.nl/ Er is een ontwerp! nu nog inhoud :-)
Uranium

NaaDje: goede opmerking, niet aan gedacht(snel gepost). Ik denk dat de compiler het wel zou weg-optimaliseren.
Daan Timmer

quote:
Op 21 juli 2008 12:28:11 schreef Uranium:
NaaDje: goede opmerking, niet aan gedacht(snel gepost). Ik denk dat de compiler het wel zou weg-optimaliseren.

scheelt ongeveer 17instructies (31 om 48). Net ff getest
[Bericht gewijzigd door Daan Timmer op 21 juli 2008 17:09:38]
Ik ben programmeur! geen electronicus! http://www.daantimmer.nl/ Er is een ontwerp! nu nog inhoud :-)
Uranium

Aha, weten we dat ook weer al (y). Met -O3 gecompileerd?
Danny

Ik heb toenet met succes een dubbele software pwm gemaakt met interrupts. Ik kan nu bijde motors appart van elkaar regelen, in 20 stappen.

Ik was bang dat ik de motors zou horen piepen, dat je de pwm hoort zegmaar. Maar valt reuze mee.
Als ik meer stappen pwm dan wordt de frequentie te laag en gaan de wielen trillen, maar 20 stappen is genoeg.
Nu maar eens kijken of ik een snelheidsverschil kan meten op de manier zoals big bang zegt. "samplen"

Ik houdt jullie op de hoogte..

Misschien beetje offtopic:
Ik weet eigenlijk niet wat P pi of pid precies is, maar zag wel een robotje op youtube dat met PID werkte.. Zag er best mooi uit..
http://nl.youtube.com/watch?v=ALVo4aJpcF0 2e helft
als dat enigzins te maken zou zijn..
Wat is het vermogen van een oorstokje? 2 Watt?? Altijd al willen weten wat je echt bent? klik hier!
jensdc

p, i pi of pid dat zijn regelaars die in de industrie worden gebruikt om een proces zo snel mogelijk naar de juiste waarde te brengen zonder veel schommelingen bv om water warm te houden op 100 graden dan heb je een verwarmingselement dat je meer of minder aanstuurt meestal met 0-10V of 4-20mA sturing en dan een omvormer er tussen de pid is de beste regelaar voor zon processen hij zal proberen zo snel mogelijk 100 graden berijken maar door verwarming krijg je meestal overchoot zoals ze dat soms noemen dat wil zeggen dat je bv al 110 graden hebt en dat is niet de bedoeling.... de regelaar kan je zodanig instellen dat dit niet gebeurd ik kan dit allemaal uitleggen maar dat duurt mij even te lang ik zou dit niet gebruiken voor je robbot maar idd sampling gebruiken
stecj366

Bij een regelprocess heb je altijd 2 dingen: iets waar je naartoe wil, en iets wat je momenteel hebt (zoals water: je wil 100°C, en het is momenteel 60°C). Je hebt nog een fout (die is hier 40°)

Het verschil tussen P, D en I regelaar is wat je reactie op die fout is, hoe je de reactie berekent.

P: je reactie is een constante vermenigvuldigd met de fout.

I: je reactie is een constante vermenigvuldigd met de integraal van de fout

D: je reactie is een constante vermenigvuldigd met de afgeleide van de fout.

Wat is nu het nut dan die I en D regelaar?

I: door het integreren van de fout zullen kleine restfouten weggeregeld worden. De ofset met de gewenste waarde zal nagenoeg nul worden

D: als de verandering van de fout groot is (dus de afgeleide is groot) dan krijg je een grote reactie. De D regelaar staat dus in voor snelle reacties

Dus: PID geeft alles tesamen. Een snelle reactie, maar ook kleine eindfouten. Het instellen van de PID is natuurlijk cruciaal En daarover begint dan een hele resem theorie.
Zoeken in topic