Veelzijdige servotester - controleer het gedrag, ook zonder datasheet
De algemene definitie van een servomechanisme, of servo, is een apparaat dat wordt gebruikt om een gewenste bewerking te regelen met behulp van terugkoppeling. In de elektronica, en dan met name waar het elektromechanische actuatoren betreft, is een servo een apparaat dat, aangestuurd door een elektrische puls, een mechanische beweging genereert.
Voorbeelden van dergelijke servo’s zijn alom te vinden; voor dit artikel beperken we ons tot de servo’s die worden gebruikt in radiografisch bestuurbare modellen, aangezien die extreem populair zijn en veel worden gebruikt, niet alleen voor modellen maar voor hobbydoeleinden in het algemeen. Er zijn verschillende soorten servo’s, analoog of digitaal, met plastic of metalen tandwielen, met of zonder kogellagers – en zo vervolgens. Ze hebben echter allemaal één ding gemeen: ze worden voor alle praktische doeleinden met hetzelfde elektrische signaal aangestuurd.
Dit is een signaal dat uit pulsen met een variabele breedte maar met een vast interval ertussen bestaat (figuur 1). Dat vaste interval is meestal 20 milliseconden (ms); de breedte van de pulsen regelt de verdraaiing van de servo. De middenpositie is bij de meeste servo’s ingesteld op een pulsbreedte van 1500 microseconden (µs), terwijl de uiterste posities kunnen variëren van 500 µs als laagste waarde en 2500 µs als hoogste waarde. Meestal komen deze uitersten overeen met een verdraaiing van –90° en +90° vanuit de middelstand, die als 0° is gedefinieerd. De draairichting (met de klok mee of tegen de klok in) is afhankelijk van de fabrikant.
De pulsamplitude in V is meestal gelijk aan de voedingsspanning van de servo; gebruikelijke waarden zijn 4,8 V en 6,0 V, hoewel tegenwoordig andere amplitudes mogelijk zijn van 3,7 V tot 14 V en hoger.
Waarom een servotester?
Hoewel de datasheet van de fabrikant alle specificaties van de servo geeft in termen van maximale verplaatsing, snelheid, dode band enzovoort, is die niet altijd bij de hand. Dat geldt vooral voor het enorme aanbod van goedkope servo’s. In veel gevallen zijn sommige gegevens wellicht beschikbaar, maar kan een praktijktest van de werkelijke prestaties heel andere resultaten opleveren. Uiteindelijk gaat het om de feitelijke prestatie van de servo die u wilt gebruiken, niet om wat hij in theorie zou moeten doen.
Een servotester ontwerpen
Een eenvoudige servotester is heel gemakkelijk te bouwen, en er zijn genoeg voorbeelden op internet te vinden. Met een 555 (een bijzonder populair IC) en een paar andere componenten bouwt u in een handomdraai een analoge servotester. Als u echter het servogedrag nauwkeurig wilt meten, met een visuele indicatie van de pulsen die naar de servo worden gestuurd, wordt het ietwat ingewikkelder. Iets luxueuzer dan de eenvoudige 555-tester is een exemplaar met nauwkeurige regeling van de pulsbreedte, inclusief een display dat die pulsbreedte toont. Goedkope versies zijn te vinden op het web, maar ze hebben één nadeel: de meeste parameters zijn voorgeprogrammeerd en kunnen niet door de gebruiker worden gewijzigd. Zou het niet geweldig zijn om een volledig aanpasbare servotester te hebben, waarbij de gebruiker volledige controle heeft over alle parameters om het gewenste signaal te genereren, inclusief handmatige en automatische testfuncties?
Dat is precies wat we hier presenteren: een volledig programmeerbare unit waarvan de gebruiker alle parameters kan regelen, met handmatige en automatische modi, en met een duidelijke en intuïtieve gebruikersinterface.
Hardware
Het volledige schema is te zien in figuur 2. De externe aansluitingen zijn onderaan getekend; links zien we de voedingsingang (J5 – DC IN), die kan worden aangesloten op de ESC van het RC-model, of op een voeding die de vereiste stroom kan leveren voor de te testen servo. De schakeling zelf verbruikt minder dan 15 mA en zal de voeding niet zwaar belasten. De spanning kan variëren van 4,5 tot 6,0 V, afhankelijk van wat de servo nodig heeft.
Let op: de servo krijgt de volledige spanning voor zijn kiezen die door de voeding wordt geleverd. Zorg ervoor dat u de maximale waarde voor de servo niet overschrijdt!
In overeenstemming met de specificaties van de meeste fabrikanten, is de middelste aansluiting altijd de positieve voedingsspanning, terwijl GND en SIGNAL op buitenste pennen zitten.
De voeding heeft slechts twee ingangslijnen nodig (+V en GND); er is echter een driepolige connector gemonteerd zodat elke standaard ESC-connector past. Rechts in het schema is de servo-uitgang getekend (J4 – OUT), met zijn drie aansluitingen (+V, GND en SIGNAL). Hier wordt de te testen servo aangesloten.
Linksboven ziet u de microcontroller (U2) en de gebruikersinterface, een enkele potentiometer (T1) en twee SPST-schakelaars (X1 en X2). Met de potentiometer kan de pulsduur worden veranderd, terwijl met de schakelaars de vier bedrijfsmodi worden geselecteerd conform onderstaande tabel (de verschillende modi worden verderop besproken):
Ten slotte is rechtsboven in het schema U3 getekend, een 4-cijferig 7-segment-display met de omringende componenten.
Print-layout
Hoewel de hardware op een breadboard of op gaatjesprint kan worden gemonteerd, zorgt een goed PCB-ontwerp voor duurzaamheid en betrouwbaarheid. Een mogelijke layout is getoond in figuur 3. Het ontwerp (NI Multisim) en de Gerber-bestanden om de print bij de leverancier van uw keuze te bestellen, kunnen worden gedownload. Let op: de condensatoren van de microcontroller-oscillator ontbreken in dit printontwerp; kennelijk werkt de servotester van de auteur ook zonder C5 en C6 als een zonnetje. De condensatoren kunnen eenvoudig aan de koperzijde (onderkant) van de print worden toegevoegd; wellicht moet u ter plaatse het soldeermasker van het massavlak wegkrabben. Maar u kunt natuurlijk ook de ontwerpbestanden downloaden en de beide condensatoren aan de layout toevoegen.
Functies en specificaties:
- Bedrijfsmodi: handmatig (lage en hoge resolutie) en automatisch (lage en hoge snelheid).
- Minimale pulsbreedte: softwarematig instelbaar.
- Maximale pulsbreedte: softwarematig instelbaar.
- Middenpositie: kan handmatig worden aangepast.
- Minimale stap/puls-resolutie: 1 µs.
- Maximale stapgrootte: softwarematig instelbaar.
- Signaalperiode: vast ingesteld op 20 ms.
- Pulsstabiliteit/nauwkeurigheid: kristalgestuurd.
- Voeding: 4,5...6,0 V.
Software
De software is waarschijnlijk het belangrijkste onderdeel van dit ontwerp; deze is bepalend voor de precisie en de veelzijdigheid. Het programma draait in een PIC16F1829 waarbij een 32MHz-kristal het tempo bepaalt; het is geschreven in C met behulp van de CCS C-Compiler. De broncode en het HEX-bestand voor het programmeren van de microcontroller kunnen worden gedownload.
Het programma begint met definities van de hardware en verbindingen en van belangrijke referentiewaarden: de letters a tot g vertegenwoordigen de zeven segmenten van het numerieke display, terwijl d1...d4 overeenkomen met de vier cijfers.PWM is het uitgangssignaal waarmee de servo wordt aangestuurd, en SW1 / SW2 zijn de schakelaars. De potmeter is aangesloten op de analoge ingang AN7 (PIN_C3) en wordt ingesteld in de main-functie.
Onderaan staan vier bijzonder belangrijke definities:
- BRI: helderheid van het LED-display. Deze waarde bepaalt de persistentie van elk cijfer (in µs), dus de schijnbare helderheid. Hij staat ingesteld op 50, maar kan worden gewijzigd van 1 tot 200.
- SPD: snelheid van de servobeweging in de automatische modus. Deze waarde vertegenwoordigt de stapgrootte (in µs) bij het vergroten/verkleinen van de pulsduur; hoe hoger de waarde, des te sneller de servo beweegt. Elke waarde van 1 tot 100 is bruikbaar.
- MIN: minimale pulsduur (in µs). Dit is de kortste waarde van de puls, zowel in de handmatige als in de automatische modus. Hoewel elke waarde functioneert, wordt aanbevolen om niet lager dan 500 te gaan, omdat de servo mogelijk niet zo ver kan draaien.
- MAX: maximale pulsduur (in µs). Dit is de langste waarde van de puls, zowel in de handmatige als in de automatische modus. Hoewel elke waarde werkt, wordt aanbevolen om niet hoger te gaan dan 2500, omdat de servo mogelijk niet zo ver kan draaien.
Deze vier parameters geven de tester een veelzijdigheid die in geen enkele (goedkope) commerciële tester te vinden is. Als u de microcontroller in een voetje monteert, kunt u hem gemakkelijk verwijderen, herprogrammeren en zo een nieuwe tester samenstellen wanneer u daar behoefte aan hebt; en als u tevreden bent met één set parameters, kunt u gewoon altijd hetzelfde programma gebruiken.
Elk cijfer is volledig gedefinieerd binnen een functie (num) en kan worden geselecteerd met een switch-statement; elke keer dat deze functie wordt aangeroepen met een waarde die is opgeslagen in n, wordt dat cijfer op het display weergegeven. Om te selecteren welke van de vier cijfers op een gegeven tijdstip actief is (aangezien het display sequentieel wordt aangestuurd) omvat de functie digit die selectie, ook binnen een switch-statement. Telkens wanneer de functie wordt opgeroepen, zal het cijfer oplichten dat in z is opgeslagen. Als z de waarde 5 bevat, zijn alle cijfers uit; zo krijgen we een nette overgang van het ene cijfer naar het andere, zonder zwak oplichtende ‘spookcijfers’.
In de functie display komt alles bij elkaar (cijferselectie en numerieke uitvoer); deze functie neemt een viercijferig getal, splitst dat in de afzonderlijke cijfers en geeft die in de juiste volgorde op het display weer, van rechts naar links (de eenheden eerst) door de twee eerdergenoemde functies aan te roepen. De helderheid van het display wordt geregeld door de vertraging aan te passen voordat een cijfer wordt gewist.
De precieze timing van de periode en pulsduur wordt bereikt met TIMER1-interrupts. Omdat het een 16-bits teller betreft, hebben we een overflow bij 65536, waardoor de interrupt wordt geactiveerd; door TIMER1 vooraf te laden met een offsetwaarde, kan via deze interrupt een precieze tijd worden gemeten. Dat gaat als volgt: de eerste keer dat deze INT wordt aangeroepen, laden we TIMER1 met de waarde die nodig is voor de pulsduur; de volgende keer is het de rest van de totale periode. Dit proces wordt continu herhaald (via de variabele pulse), zodat een nauwkeurige pulsbreedte wordt bereikt, terwijl een constante periode van 20 ms wordt aangehouden.
Hier controleren we ook de stand van de schakelaars om te zien of de auto-modus is ingesteld (SW1 = 0). In dat geval bepaalt SW2 de snelheid van de automatische sweep (continu van MIN naar MAX en weer terug naar MIN): SW2 = 1 betekent normale snelheid (de pulslengte verandert telkens met 1 µs) en SW2 = 0 betekent hoge snelheid (de puls verandert met SPD µs per keer). U herinnert zich misschien dat SPD elk waarde van 1 tot 100 kan zijn; als SPD = 1, zijn normale en hoge snelheid hetzelfde (dat is natuurlijk niet erg handig).
Tot slot brengt main alles bij elkaar; naast de initialisatie van de analoog/digitaal-converter (ADC), TIMER1 en interrupts, bevindt zich hier de hoofd-programmalus. Deze lus leest de ADC (dus de waarde van de potentiometer) in en regelt de pulsduur dienovereenkomstig.
In de handmatige modus (SW1 = 1), wordt de stand van SW2 ingelezen; als die “1“ is, dan is de lage resolutie-modus actief en kan de potentiometer het volledige pulsbreedtebereik (MIN–MAX) doorlopen. Deze modus wordt om een eenvoudige reden “lage resolutie” genoemd: de ADC kan slechts 1024 verschillende waarden inlezen, maar het pulsbreedtebereik kan 1400 of meer µs bedragen; het is dus niet mogelijk om binnen het volledige bereik een resolutie van 1 µs te halen. Als SW2 = 0, dan is de hoge resolutie-modus ingeschakeld. Hier is het volledige pulsbreedtebereik beperkt van 1469 tot 1531 µs. De potentiometer kan eenvoudig worden verdraaid om een pulsbreedteverandering van 1 µs per keer te krijgen , wat erg handig is om:
- de servo in de middenstand te zetten (1500 µs);
- de dode band te meten, dus hoeveel µs de puls moet veranderen voor een minimale servobeweging.
Een professioneel jasje
Met de juiste behuizing ziet dit apparaat er behoorlijk professioneel uit; de behuizing beschermt ook de hardware. Een eenvoudige 3D-geprinte behuizing (figuur 4) volstaat; het ontwerpbestand kan hier worden gedownload.
De print wordt ‘vastgeklemd’ tussen vier afstandhouders (cilinders) en de onderste helft van de behuizing; de bovenzijde wordt vastgezet met vier M2,5x20-kruiskopchroeven. Figuur 5 toont het resultaat.
Vragen of opmerkingen?
Hebt u technische vragen of opmerkingen naar aanleiding van dit artikel? Stuur een e-mail naar de redactie van Elektor via
luc.lemmens@elektor.com of redactie@elektor.com.