F103

Uit RobotMC.be
Versie door BlueHaze (overleg | bijdragen) op 29 dec 2017 om 22:37
(wijz) ← Oudere versie | Huidige versie (wijz) | Nieuwere versie → (wijz)
Ga naar: navigatie, zoeken

F103 : Een snelle lijnvolger !

JH lijnvolger80.jpg

Deze lijnvolger haalt op het parcours van RobotMC (minimum bochtstraal = 25 cm) 147,5 cm/sec. De hardware bestaat voornamelijk uit China-componenten :

  • Processor bordje : Een erg goedkoop, maar toch krachtige 32 bit ARM die loopt aan 72 mHz : De STM32 F103C8. Deze processor heeft 64 kB Flash en x kB Ram. Hij is voorzien van een erg snelle 12 bit AD-converter, die over DMA rechtstreeks naar de RAM kan schrijven. Het bordje is voorzien van 3.3 V regelaar, een 8 MHz en een 32 kHz kristal. Je kan het bordje eenvoudig programmeren via een USB-SWD programmer. Het bordje vindt je voor 3€, de bijhorende USB/SWD programmer ook voor ca 3€. Ideaal voor deze lijnvolger omwille van de snelle AD-converter (8 kanalen kunnen makkelijk op 1 ms uitgelezen worden).
  • H-brug : De welbekende TB6612FNG, een FET H-brug met 2 kanalen. De H-brug is 3.3 V compatibel, opgelet voor een harde aansturing heb je wel minstens 3 uitgangen/kanaal nodig ! De H-brug mag belast worden tot 2 A. Eerst had ik problemen met storing op de encoder signalen, het probleem werd veroorzaakt doordat de H-brug via een diode gevoed werd : er kan dan onmogelijk stroom terugvloeien vanuit de H-brug naar de batterij ! Daarom heb ik over de voeding van de H-brug nog een 100 µF electrolytische C gesoldeerd.
  • Draadloze verbinding : Met de klassieke HC-05 Bluetooth dongle, dit is een erg betrouwbare en snelle draadloze verbinding.
  • Motoren : Erg kleine en lichte motoren die je in talloze varianten kan verkrijgen. Ik heb 6VDC motoren met ingebouwde encoder. Overbrenging 1:29.47, no load speed bij 6 VDC is 530 RPM van de uitgaande as. De max. efficientie wordt bereikt bij een snelheid van 370 rpm ! Met een wieldiameter van 47 mm is dan de snelheid 0.9 m/s. Daarom gebruik ik 3s lipos, de max.snelheid wordt dan 1.8 m/s. Uiteindelijk bleek dat met een wiel van 70 mm toch de snelste tijden behaald werden !
  • Batterijen : 3s lipos 700 mAh. Ruim voldoende om toch een uur lang rond te rijden, maar opgelet dat de motoren nooit blokkeren als je de volle 12 Volt uitstuurt ! Omdat het 6 Volt motoren zijn, zullen ze zeer snel de hittedood sterven bij indien er een blokkering optreedt bij 12Volt
  • RC5 ontvangst met de klassieke TSOP38 (versie geschikt voor 3.3 V)
  • IR-sensoren : Zelf samengesteld met 6 IR Fototransistoren en 6 IR-leds. Deze array kan op een vrij grote afstand (15 tot 30mm) toch nog een betrouwbare meting doen. De 7 IR-leds staan in serie en worden met een eenvoudige NPN-transistor stroom gestuurd (40 mA).
  • Spanningsregelaar 7805 wordt via een diode door de batterij gevoed (beveiliging tegen ompolen).
  • Wielen 70 mm van Polulu.
  • Chassis is een samenraapsel van hout, perspex plaatje en plakband.
  • Het totale gewicht bedraagt 204 g, de batterij weegt ca 66 g. Hier is zeker nog optimalisatie mogelijk, alhoewel het gewicht op zich geen bepalende factor is voor de maximale bochtsnelheid. De verhouding motor vermogen/gewicht is wel belangrijk !
  • De spoorbreedte (afstand tussen de wielen) bedraagt 150 mm, het zwaartepunt ligt ongeveer 14 mm voor de wielas. Het zwaartepunt kan zeker nog veel lager liggen, de robot had nu soms de neiging om bij het acceleren een "wheelie" te doen.

Regelstrategie

Het uitlezen van de IR-sensoren gebeurt met een sample rate van 2 ms. De verwerking is beschreven zoals op pagina Lijnvolgen. Aan de hand van de gemeten offset wordt er een PWM waarde berekend voor de linker en rechter motor. Hier is er wel een zekere "asymmetrie" voorzien : het wiel aan de binnenbocht wordt sterker afgeremd dan dat het wiel aan de buitenbocht versneld wordt. Dit heeft als gevolg dat de "gemiddelde bochtsnelheid" lager is dan bij het rechtdoor rijden. Als de lijn links of rechts verloren is, wordt er nog een bepaalde tijd met de laatst gekende offset verder gereden, daarna stopt de lijnvolger. De berekening doe ik als volgt :

if (pwm_offset>0){		//dit voor assymmetry in bochten, rechtdoor dus volle snelheid, in bochten meer vertragen
	pwm_offset_left=pwm_offset*(100+a_line)/100;	//dan versnellen, a_line kan van -100 to +100, 0 = geen invloed
	pwm_offset_right=pwm_offset*(100-a_line)/100;
	}
else {
	pwm_offset_left=pwm_offset*(100-a_line)/100;
	pwm_offset_right=pwm_offset*(100+a_line)/100;
	}

Bij een assymmetrie(a_line) van 100% wordt het buitenwiel dus niet meer versneld, het binnenwiel wordt dan dubbel zo sterk afgeremd. De assymmetrie bij de snelste run stond op 40% ingesteld. Daarnaast heb ik ook nog een "D-factor" om overshoot te beperken. Omwille van de korte sampletijd wordt er hier ook een "gemiddelde" waarde genomen van de laatste 4 offset-metingen om een D-correctie te berekenen( IIR-filter).

De bepalende factor voor een snelle run was steeds een stabiele regeling zonder dat de lijnvolger slipte in de bochten. Het zijdelings wegdriften in de bocht ziet er wel spectaculair uit, maar heeft veel tijdverlies tot gevolg.

Aansluitschema

De F103 heeft 4 32 bit timers die kunnen gebruikt worden voor verschillende doelen : timer 3 en 4 lezen de wiel-encoders, timer 2 stuurt de PWM voor beide motoren en timer 1 wordt gebruikt voor RC5 decodering. Daarnaast is er ook een "Systick" die elke 1 ms een ISR aanroept voor allerhande timers. De 12 bit AD-converter wordt via DMA continu uitgelezen (pin A0...A7). De USART1 wordt dan gebruikt voor de seriele communicatie naar de Bluetooth HC05 module.

JH lijnvolger.png

Nog enkele fotos

JH lijnvolger64.jpgJH lijnvolger70.jpgJH lijnvolger77.jpg