AC/DrieC
Den Dries www.hulens.be
Als je een raspberry gaat gebruiken heb je USB poorten. Je zou 2 optische muizen (5euro/stuk) kunnen gebruiken/slopen, voor dit doel ? Allemaal misschien wat moeilijker, maar wel cooler 
@Lucky Luke: juist te laat 
SparkyGSX
Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken
Je kunt ook de stroomrimpel van de motoren meten, die veroorzaakt wordt doordat de koolborstels over de collector lopen en daarmee steeds een andere spoel in- en uitschakelen. Ook daarbij is het lastige dat de PWM regeling het moeilijker maakt om de meting te doen.
Je zou het PWM signaal door een LC filter kunnen halen om de meting mogelijk te maken (meten tussen het filter en de motor), maar het lastige is dat de motor zelf ook inductief is, en met een extra spoel in serie kan dat hele zaakje ook gaan oscilleren.
Ik geloof dat 4QD hier wel eens een stukje over geschreven heeft. Als ik me goed herinner, slaan zij steeds een paar PWM periodes over om de meting mogelijk te maken. Het nadeel van een dergelijke constructie is dat je de snelheid wel redelijk nauwkeurig kunt meten, maar niet zomaar een aantal pulsen kunt tellen om de afstand te bepalen.
@Lucky Luke: hoe doe je de stroommeting? Met een shunt, al dan niet met een meetversterker? Zo'n shunt is altijd licht inductief, dus je kun niet vlak na het schakelen van de MOSFET gaan meten. Helaas is het met AVR en PIC controllers vaak lastig of onmogelijk om synchroon met de PWM kanalen de ADCs te triggeren (al heb ik die dingen al een tijd niet meer gebruikt; ik weet niet precies wat de nieuwere types kunnen).
@TS: kun je geen lichte en donkere vlakjes op de zijkant van de wielen maken, waar je een of twee reflectie sensoren naar laat kijken? In principe weet je altijd wat de draairichting is, en dan heb je aan 1 sensor genoeg om de snelheid en afstand te bepalen. Dat signaal is ook nog eens veel eenvoudiger te tellen met een microcontroller, aangezien de AVR en PIC controllers zelden of nooit hardware aan boord hebben om incrementele encoders met een hoge frequentie goed uit te lezen.
Als de as aan de achterkant van de motor niet uitsteekt, maar wel bereikbaar is, zou je ook nog kunnen proberen daar een gaatje in te boren en draad in te tappen, maar met een stalen as met een diameter van 4mm lijkt dat me bijna onmogelijk.
Lucky Luke
Eluke.nl | handgetypt | I'm a poor, lonesome cowboy, with a long, long way to go.
Op 11 maart 2012 18:53:03 schreef SparkyGSX:
@Lucky Luke: hoe doe je de stroommeting? Met een shunt, al dan niet met een meetversterker? Zo'n shunt is altijd licht inductief, dus je kun niet vlak na het schakelen van de MOSFET gaan meten. Helaas is het met AVR en PIC controllers vaak lastig of onmogelijk om synchroon met de PWM kanalen de ADCs te triggeren (al heb ik die dingen al een tijd niet meer gebruikt; ik weet niet precies wat de nieuwere types kunnen).
Shunt, geen versterker. Synchroniseren is op zich wel mogelijk* maar dan nog meet ik de piekstroom. Kan ik net zo goed tig keer achter elkaar meten en daar de hoogste waarde van pakken. Dat doe ik dan ook en dat werkt aardig, maar alsnog false positives als de robot versneld. Ik vind er wel wat op**
Ben momenteel ook met andere dingen bezig. (Hoewel, met een topic als dit...)
*zeker bij AVR, daar kun je een timer bij overflow oid de adc laten starten, als je diezelfde timer voor PWM gebruikt loopt dat dus synchroon. Maar mijn robotje werkt met een PIC. Ik gebruik allebei die soorten uc's)
**mogelijk ook een muis eronder, als het met de accelerometer niet al lukt
Op 11 maart 2012 18:24:43 schreef AC/DrieC:
@Lucky Luke: juist te laat
(Al moet ik toegeven: aan de USB had ik nog niet gedacht. En ik dacht aan 1 muis, die gewoon naar de grond kijkt, niet naar een wiel.)
SparkyGSX
Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken
@Lucky Luke: ja, je kunt die ADC wel triggeren op de timer overflow, maar als je die ook gebruikt om het PWM signaal te genereren, sample je dus precies op het moment dat je de MOSFET gaat schakelen. Je wilt juist nog heel even wachten tot de spanning over die shunt gestabiliseerd is. Het zou misschien wel goed gaan (behalve bij hele kleine pulsbreedtes) als je symmetrische PWM signalen genereert, en dan bij het top of bottom event de ADC kunt triggeren, omdat je op die manier precies het midden van de puls te pakken hebt.
Door de inductie van de weerstand kan de spanning kortstondig veel groter zijn dan wanneer je dezelfde stroom er DC doorheen zou drukken. Zeker als je op willekeurige momenten sampled, en het hoogste sample pakt, ga je daarmee natuurlijk flink de mist in.
Ik zou eerst alle samples die veel te laag zijn (MOSFET uit) weg mikken, en daarna met een median filter (het middelste sample, dat is dus niet hetzelfde als het gemiddelde) een sample of het gemiddelde van de middelste paar samples pakken om de stroom te berekenen.
Helaas is een median filter niet echt eenvoudig efficiënt te programmeren. Als je een lopend filter maakt (dus steeds 1 sample erin, een oude eruit, en een nieuw resultaat berekenen) is het nog wel te doen, mits de samplerate niet al te hoog is. Helaas is de rekencapaciteit van een 8-bit AVR niet bepaald ruim te noemen voor zulke dingen.
Het grote voordeel van een median filter is dat je daarmee de sporadische uitzonderlijke metingen 100% kunt onderdrukken.
SparkyGSX
Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken
Een digitaal kompas werkt binnen niet echt lekker, zeker als je in een gebouw zit dat veel staal bevat.
Het is niet waar dat je met PWM de motor een constant vermogen geeft; was dat maar zo, dan was het aansturen van motoren lekker eenvoudig geweest. Met PWM leg je een effectieve spanning aan, die een fractie is van de voedingsspanning. De stroom die er dan gaat lopen, is afhankelijk van de snelheid van de motor, en andere eigenschappen van de motor, zoals de weerstand, inductie, etc. Als de motor een bepaalde snelheid heeft, en je een kleine pulsbreedte gebruikt, kan die stroom zelfs negatief worden, als je een H-brug of halve brug gebruikt (met alleen een transistor of MOSFET en een diode, zoals bij de CO motorregeling, kan dat niet).
Desalniettemin blijft je punt wel gewoon geldig; je kunt wel weten wat voor PWM waarde je uitstuurt, maar je hebt dan geen flauw idee van de snelheid.
@TS: Zoals REW en ik al eerder aangaven: je hebt niet zo heel erg veel aan het meten van de snelheid. Het is beter dan helemaal niets meten, maar met alle meetfouten en onnauwkeurigheden in de berekeningen kun je alsnog een flinke afwijking krijgen. Het is dan beter om de afgelegde afstand van elk wiel te meten.
Lucky Luke heeft natuurlijk ook gelijk dat je daar nog een mogelijke afwijking krijgt, als de wielen een beetje slippen. Met een optische muis heb je daar geen last meer van, als je tenminste naar de ondergrond kunt kijken. Dergelijke systemen heb ik vaker gezien, en dat werkt zelfs nog bij verbazend hoge snelheden (10km/h of zo). Je bent dan natuurlijk wel wat beperkt in de ondergrond waar je op kunt rijden.
Ik zou zelf gewoon een paar ronde stickers met streepjes maken, die aan de binnenkant van de wielen plakken, en met een reflectiesensor die streepjes tellen.