Start

Förstasidan
Statistik

Social robot

Robotens syn
Modell/simulator
Levande modell


Arduino

Starta upp Arduino
DCcduino UNO
Pro Mini

Raspberry pi

Om Raspberry

Pic32

Om Pic32
Konstruktionen
Praktisk kom-igång
Starta upp UBW32
Installera MPLAB
Rinnande ljus
Stegmotor
Display
RS232 Pic32 - terminal
Luffarschack

Servo

Överblick
Isärmonterat servo
Styrning av servo
Mini Maestro
Bygga ett servo

Elektronik

Open Collector
Kontaktstuds
Drivsteg på utgångarna
Halleffektsensor/switch
MLX90316 (halleffekt)
Pulsbreddsmodulering

Open CV

Om OpenCV

Matematik

Linjär algebra
Olinjär länkmekanism

MLX90316 - Positionssensor
Återkoppla roterad vinkel
Ett sätt att återkoppla en position är att använda en potentiometer. Men det finns andra lösningar också. Jag hittade en spännande krets som bygger på att mäta vinkel i ett magnetfält.

Expriment med MLX90316
mlx90316MLX90316 är en cmos hall givare som läser av riktningen på ett magnetfält. Den fungerar alltså m.h.a. det som kallas för halleffekt.

Detta chip gör det möjligt att skapa en kontaktlös positionssensor helt befriad från delar som slits. Vad man gör är att man på något sätt fäster en lämplig magnet på en axel och mekaniskt bygger det så att denna magnet roterar ovanför chippet. Lite beroende på vilken variant av detta chip man köper får man då antingen en analog signal ut motsvarande riktningen på magnetfältet eller en pulsbreddsmodulerad signal (PWM) eller en helt digital signal.

En titt i databladet ger följande enkla schema för den analoga versionen av detta chip. Kondensatorerna i schemat verkar sitta där för att koppla av störningar. Ett motstånd på 10K Ohm känns viktigt.
mlx90316 schema

Lämplig magnet
Magnet Den här sensorn förutsätter en magnet med ett diametrisk magnetfält; alltså ett magnetfält parallellt med sensorn. Det är rätt så logiskt om man tänker efter då det annars inte skulle finnas något att mäta. Detta utesluter alla runda magneter med monteringshål i mitten som jag känner till, vilket är lite synd då en sådan skulle passa rätt bra.

Återstår alltså så långt jag vet fyrkantiga magneter eftersom dessa går att vända i önskvärd riktning.

Noggrannhet m.m.
Mätnoggrannheten specificeras till 10 bitar, vilket är mindre än den upplösning som skickas ut via analog utgång (12 bitars upplösning) eller via digital utgång (14 bitars upplösning).

10 bitar betyder 2^10 = 1024 nivåer. Dvs en upplösning på 360 grader / 1024 = 0.35 grader.

Eftersom utgångarna har högre upplösning går det naturligtvis att mäta mindre vinklar. Analoga utgången's 12 bitars upplösning betyder 2^12 = 4096 nivåer respektive för den digitala 2^14 = 16384 nivåer vilket skulle indikera en vinkel på 360 / 4096 = 0.088 grader respektive 0.022 grader som minsta mätbara förändring.

"Inbyggda" fel specificeras som ca 1 grad fel. Om jag tolkar databladet rätt syftar alltså detta på absoluta fel i givaren. Säg att man monterat in en sådan här givare i en applikation. Sen tänker man sig att givaren byts ut mot en ny. Då kan det alltså skilja 1 grad i mätdata trots att inget annat förändrats. Detta inbyggda fel kalibreras bort.

Det finns en meny med valmöjligheter att öka noggrannheten ifall detta skulle bli nödvändigt.

- Välja en dubbel version av MLX90316 och ta snittvärdet av båda sensorer.
- Olika mjukvarulösningar, t.ex. räkna snittvärden, ta hänsyn till var sensorn säger och vad servot borde vara, osv.


Testriggen för att testa givaren
Som synes är det en väldigt liten krets. Lite halvjobbig att löda fast sladdar på. Men skam den som ger sig! Det var ett tag sedan jag använde voltmetern i mitt digitala lab så jag gör en liten testmätning med extern voltmeter. Schemat jag använder är det som finns här ovan.

mlx koppling mlx dubbelkolla med voltmeter

Om man tittar noga uppe i övre högra hörnet ser man voltmetern på det digitala labbet. Den visar 1,5 volt resp 3.5 volt och 4.5 volt för de 3 bilderna; beroende på hur jag vänder magneten som du kan se att jag placerat på kretsen.

mlx 1.5 volt mlx 3.5 volt
mlx 4.5 volt


Lite mätresultat
Rött nedan är det som kallas nord på magneten. När vinkeln gått ett varv och slår över från 359 grader till noll grader så snubblar man över en diskontinuitet. Jag har därför skrivit 0+ (0.0001...grader) som ger 0.5 volt ut. 0- (359.99... grader) ger 4.5 volt ut. Observera att vinkel och utdata ökar moturs från 0.5 volt till 4.5 volt.

mlx 0 grader
Vinkel 0+ grader
0.50 volt
mlx 45 grader
Vinkel 45 grader
1.0 volt
mlx 90 grader
Vinkel 90 grader
1.5 volt
mlx 135 grader
Vinkel 135 grader
2.0 volt
mlx 180 grader
Vinkel 180 grader
2.5 volt
mlx 225 grader
Vinkel 225 grader
3.0 volt
mlx 270 grader
Vinkel 270 grader
3.5 volt
mlx 315 grader
Vinkel 315 grader
4.0 volt
mlx 0 grader
Vinkel 0- grader
4.5 volt

Spänningen här ovan i mina egna mätningar är angiven med 2 värdesiffror. Det betyder en noggrannhet på +/- 4 grader ungefär om jag räknar rätt.

Det är antagligen bra att känna till att mätcentrum på kretsen ligger inte i centrum mlx matpunktutan lite vid sidan om. Nu är ju kretsen mycket liten så när jag exprimenterar här själv så märker jag inte direkt någon skillnad. Men om man tittar i databladet så hittar man bilden till höger.

Man får försöka ta hänsyn till detta när kretsen placeras in i sin skarpa omgivning. Å andra sidan kommer utdata från denna krets filtreras genom någon sortsverföringsfunktion så det står och faller inte med absolut precision här.

Montering på ett adapterkort
Eftersom kretsen ovan är helt hopplöst arbeta med praktiskt är det lämpligt montera kretsen på ett lite större adapterkort.



Efter lite lödning blev resultatet som nedan.



Efter att kringkomponenter monterats blev resultatet så här.





Robot och elektronik -sidan byter namn till electro.st

Senast läst 20:35:00 28/5 2017 Texten uppdaterad 18/10 2014
footer sign