Leon van der Horst - Microcontrollers

Motor regelaar

Arduino

Boarduino

Basic Stamp

JeeLink/Node

Projecten

Workshop

Links

 

Tijdens het geven van de workshop microcontroller werd duidelijk dat de cursisten verder wilden gaan en daaruit zijn diverse projecten ontstaan.
Één van die projecten is het maken van een motor regelaar waarbij de snelheid en de draairichting geregeld moeten kunnen worden.
Na de workshop lessen heb ik hen een open opdracht gegeven: Maak een regelaar voor het aansturen van een kleine electromotor via een PWM signaal en zorg dat ook de draairichting geschakeld kan worden. Dit is een combinatie van de lessen
CIRC-03 en CIRC-11, waarbij extra de ompoling gerealiseerd moest worden zodat de draairichting bepaald kan worden.
Dit resulteerde in twee verschillende schakelingen met bijbehorende software, welke ik hieronder zal behandelen. Hierna gaan we met de hele groep een nieuwe regelaar ontwerpen, waarbij we van te voren een pakket van eisen bepalen, daarover later meer.

Een eenvoudige ompoolschakeling is deze:

Het relais dat wij gebruiken vanuit de ARDX experimenteer kit bevat een dubbele schakelaar, zoals in bovenstaand voorbeeld is gebruikt. Hier wordt B verbonden met A of C en tegelijkertijd E met D of F. Op deze manier wordt de aangeboden voedingsspanning omgedraaid aangeboden aan de motor bij het bekrachtigen van het relais en dat bepaald dan de draairichting van de motor.

 

Motor regelaar 1: Ontwikkeld door Peter Zorgdrager.

Uitleg schema:

Condensator C1 zorgt voor het opvangen van eventuele rimpels op de voedingspanning van 5V die afkomstig is van het Arduino board.
De RC-ontvanger wordt aangesloten op de analoge ingang A0 op het Arduino board (hier aangeduid als Pin 14, zie sketch voor uitleg).
Digitale pin 10 wordt gebruikt om het relais aan te sturen, welke dient voor het omdraaien van de draairichting van de motor.
Digitale pin 9 wordt gebruikt voor het aansturen van de motor via een PWM (= Pulse Width Modulation) signaal.
De beide diodes worden gebruikt om diverse zaken aan te geven, bijvoorbeeld indicatie voor de draairichting (groen vooruit, rood achteruit) of indien ze knipperen dan geven ze aan dat er geen of een foutief signaal van de ontvanger komt (fail-safe indicatie).

 

Onderdelen:
R1 + R2 = 560 Ohm
R3 + R4 = 2200 Ohm
D1 = rode 5mm LED
D2 = groene 5mm LED
D3 = 1N4148
C1 = 100nF
T1 = 2N2222
T2 = 2N2222 of beter nog een zwaardere transistor
Relais is van het type 5V met twee schakelaars
DC electromotor 6V
Pinheader voor ontvanger

 

Bijbehorende sketch:

De sketch kun je hier downloaden.

Uitleg sketch: volgt nog...

 

 

Motor regelaar 2: Ontwikkeld door Giel Geldermans:

Uitleg schema: volgt nog

 

Alternatief schema met externe voeding, bijvoorbeeld een 12V accu:

Uitleg schema: volgt nog

 

Bijbehorende sketch:

De sketch kun je hier downloaden.

Uitleg sketch: volgt nog

 

 

Motor regelaar 3: Ontwikkeld door Marten de Groot:

Uitleg schema: De optocouplers zorgen voor een galvanische scheiding tussen de Arduino (Atmel processor) en de werkelijke aansturing van de motor. Dit om de processor goed te beveiligen tegen de hogere spanningen en stromen.
De AND's zorgen voor de beveiliging van de H-brug. Het voorkomt en eventuele kortsluiting bij het gelijktijdig aansturen van de verkeerde FET's.
De H-brug is opgebouwd uit FET's, waardoor men flexibeler is voor de keuze van maximale stroom. Een kant-en-klare H-brug chip is vaak beperkt in stroomgrootte en daardoor niet geschikt voor de zwaardere motoren die vaak in (grote) schpeesmodellen worden gebruikt.
De "input"-lijnen zorgen voor het bepalen van de draairichting, er zijn daarmee 4 mogelijkheden: 1. Motor rechtsom. 2. Motor linksom. 3. Remfunctie. 4. Geen functie.
Vervolgens is er 1 PWM signaal die dan uiteindelijk de motor aanstuurd.

Dit schema wordt even opzij gezet om door te gaan met de ontwikkeling van motor regelaar 4.
Zondag 14 februari zijn we bezig geweest met het maken van een prototype van deze eindtrap met FET's, echter dit resulteerde niet in het gewenste resultaat. Gebruik daarom bovenstaand schema NIET. We gaan nu eerst een een protoype eindtrap opbouwen volgens motor regelaar 4, zoals hieronder is te vinden.

 

 

Motor regelaar 4: Ontwikkeld door de gehele groep:

De gezamelijke motor regelaar die we als groep ontwerpen dient aan de volgende eisen te voldoen, zoals besloten tijdens de workshop avond van vrijdag 29 januari 2009:

1)

Snelheid van de motor regelen via een PWM signaal van 16kHz.

2)


 

Draairichting motor bepalen via een H-brug. Hierbij het processorgedeelte op de print gescheiden van de H-brug, zodanig dat alles als één print kan blijven of dat men de print kan doorzagen, zodat er een vrije keuze is om de processor en stuur gedeeltes fysiek te scheiden.

3)

 

Instelbaarheid via een menu voor het instellen van: a) maximale snelheid vooruit; b) maximale snelheid achteruit; c) de nulstand (dode punt rondom nulstand). Dit te samen met een optionele LCD display met buttons (voor menu bediening).

4)

Accuspanningsmeter voor 12-24V accu's.

5)

Beveiliging voor overschrijden van stroomverbruik van de motor (bijv. door vastloper).

6)
 

Output ter indicatie van de motor draairichting via één LED (aan = vooruit, knipperen = achteruit) en/of een LCD display. En voor alarmmeldingen een buzzer en/of LED's.

7)

Motor van  12V – 24V  en een maximale stroom van 20A.

8)




 

Uitlezen van RC-ontvanger ten bate van het aansturen van de motor, inclusief fail-safe.
We maken gebruik van het uitlezen van het PWM signaal van het desbetreffende kanaal waarop de motoraansturing plaatsvind. Er zijn ontvangers die ook een PPM signaal aanbieden, dit is een signaal waarin alle kanalen via één aansluiting wordt aangeboden. Echter dat is niet universeel, vandaar dat we ons beperken tot het uitlezen van één PWM signaal.

9)

 

Alle vrije digitale en analoge poorten van de Atmel naar buiten voeren voor toekomstige uitbreidingen. In ieder geval een I²C aansluiting beschikbaar maken. I²C wordt bijv. gebruikt voor de optionele LCD display.

Optionele functies: Watermelder, toerentalmeter, (motor)temperatuurmeter, LCD display inclusief buttons voor menubesturing van instellingen en voor testen functies.

 

Het schema met H-brug:

Uitleg schema: De BTN7930 in tweevoud vormen tesamen een H-brug welke een maximale stroom aan kan van 20A. Intern heeft deze chip diverse beveiligingen, waaronder: stroom, temperatuur, overspanning, onderspanning.

Een H-brug is een schakeling die zorgdraagt voor de draairichting van de motor. Dit wordt dan electronisch bepaald.

              

Schematisch is hierboven aangegeven hoe de H-brug werkt. Transistoren of Fet's vormen tesamen 4 schakelaars waarmee de draairichting wordt bepaald en tevens de motor van spanning wordt voorzien om te gaan draaien. De schakelaars moeten daarbij paar-gewijs worden aangestuurd. S1 met S4 vormen een paar en S3 met S2 vormen een paar. S1 met S4 zorgen voor het draaien in richting a en S3 met S2 in richting b. Er zijn twee situaties die NIET mogen voorkomen, dat zijn S1 met S2 tesamen ingeschakeld, evenzo voor S3 met S4 tesamen ingeschakeld. In deze beide situaties word de voedingsspanning kortgesloten.
De BTN7930's zorgen ervoor dat dit niet kan voorkomen, door een interne beveiliging.

Vervolgens wordt het tijd voor een proefopstelling met de H-brug, zie resultaten verderop op deze pagina.

 

Onderdelen:
IC1 = Atmel328
IC2 + IC3 = BTN7930
R1 + R2 + R5 + R6 = 10 kOhm
R3 = 470 Ohm
R4 + R7 = 0..51 kOhm (via een potmeter nog de juiste waarde te bepalen, bij test = 0 Ohm)
R8 = 1 kOhm
C1 + C2 = 470nF
C3 = 470uF
Dz1 = 10V zenerdiode
T1 = IPB100P03P3L-04 (wordt een ander type, daar deze uitgefaseerd is)
Overige onderdelen volgen nog...

 

Print layout eindtrap:

Hiernaast het bovenaanzicht en onderaanzicht van de eindtrap zoals deze nu wordt ontworpen.

 

 

Er komt nog een beveiliging op voor het geval de accu spanning verkeerd om wordt aangesloten.

Print layout controller:

   

bovenaanzicht

onderaanzicht

 

Hierboven het bovenaanzicht en onderaanzicht van de controller zoals deze nu wordt ontworpen. Daarbij worden diverse optionele zaken ook op de print vastgelegd, zoals aansluitingen voor I²C, SPI/ISP-programming port, FTDI-interface en alle pinnen van de Atmel komen beschikbaar voor een zogenaamde piggyback montage.

De pin configuratie van de drie verschilende BTN7930's die in omloop zijn vind je hiernaast.
Wij gebruiken de linker variant, de BTN7930B, dit is een SMD uitvoering.

 

Bijbehorende sketch:

De sketch kun je hier downloaden.

Uitleg sketch: Eerst wordt een aanpassing gemaakt van de timer/counter 1 van de Atmel328 microcontroller waarmee we in staat gesteld gaan worden een PWM signaal van 16kHz te gaan toepassen voor het aansturen van de motor.
Tevens is het inlezen van een RC-ontvanger geregeld, het aansturen van een LCD-display, het meten van de spanning van een aangesloten accu (12-24V) en het inlezen van menu buttons.

De definitieve versie wordt verder ontwikkeld, maar wordt niet gepubliceerd op deze website.
De versie op deze site is toepasbaar voor als men dit zelf wil bouwen en uitwerken.

Theorie is leuk, het dient ook in praktiijk gebracht te worden en er werd dus getest of er daadwerkelijk een 16kHz PWM signaal geproduceerd kon worden.
Hier rechts het gemeten signaal op een oscilloscoop. De time/div staat ingesteld op 10s. Dit beeld laat een pulstijd zien van ongeveer 63
s, wat neerkomt op een frequentie van ongeveer 1/63s = 15873Hz. Links de frequentie gemeten met een multimeter, waarbij we een iets andere deelfactor hebben toegepast (van 510 naar 500, deze deelfactor wordt bepaald met ICR1).

Een 'onafhankelijk' meetinstituut (Piet Vet) heeft de metingen bevestigd, zie foto's hiernaast:

Uitleg over de timer/counter die wij gebruiken van de Atmel chip:

Er zijn drie timers/counters aanwezig in de Atmel328. Timer0, 1 en 2. Timer0 (8-bits) wordt gebruikt voor enkele basis functies van de Arduino IDE, waaronder de delay() functie e.d. en bepaald de tijden in milli seconden. Deze timer wil je daarom met rust laten. Timer2 is ook 8-bits en niet geschikt voor ons doel. Blijft over Timer1 (16-bits). Voor volledige details zie de datasheet van de Atmel328 (pagina's 113 t/m 143).
De basis voor alle timers is een extern kristal, in ons geval eentje van 16MHz.

De datasheet geeft aan dat voor het aansturen van electro motoren met een PWM signaal het beste is om de timer/counter instelling in mode 8 of 9 te zetten, deze wordt als volgt genoemd: Phase and Frequency Correct PWM Mode.

Wafeform Generation Mode Bit Description

De teller/counter waarde kun je dan instellen met de register waarde van ICR1 of OCR1A, afhankelijk welke mode je kiest. We hebben ervoor gekozen dit te doen via mode 9, opdat we dan twee waarden kunnen instellen, niet alleen de OCR1A, maar ook de OCR1B. De A bestuurd het PWM signaal op digital pin 9 en de B op digital pin 10. Daarmee is het dus mogelijk om twee onafhankelijke PWM signalen te generen die beide op 16kHz werken.
Met de instructie "#include <avr/interrupt.h>" wordt een library mee gelinkt in de sketch waarin de diverse register variabelen voor de timers staan gedefinieerd. In de setup van deze sketch zijn de juiste waarden voor diverse registers ingesteld om het bewuste PWM-signaal van 16kHz te genereren. De Atmel processor doet dit dan geheel hardwarematig, waardoor er ruimte en vooral tijd beschikbaar blijft voor de software om allerlei andere zaken te regelen.

Zondag 21 maart 2010: Testen met de H-brug is geslaagd! De motor is prima aan te sturen met het 16kHz signaal, waarbij de INH als enable/disable fungeert (motor stop functie) en de beide IN aansluitingen van de BTN7930's worden elk voorzien van hun eigen PWM signaal, de ene via digital pin 9 en de andere via digital pin 10 van de Atmel328 processor. Daarbij is het wel zo, dat telkens één van beiden 'uit' staat (waarde=500), waarmee de draairichting bepaald wordt.

Hierboven de zweefbouw constructie.

Hierboven het bewijs dat het werkt.


Vrijdag 26 maart 2010
: De sketch is aangepast voor het aansturen van een 16x4 LCD via de JeeLabs LCD-plug, inlezen van een analoge voedingsspanning van bijvoorbeeld een aangesloten accu (zie
accumeter), inlezen van menu buttons (zie LCD met menu butttons), waarmee de motorsnelheid en draairichting geregeld kan worden en het inlezen van één RC-ontvanger kanaal (waarde komt op LCD en tevens fail-safe aanduiding). Dit alles zal later opgenomen worden in een testmenu welke in deze regelaar gaat komen, zodat alle functies apart getest kunnen worden.
De eindtrap is nu opgebouwd op een gaatjes-experimenteer-board tesamen met een accumeter, drukknoppen voor de menubesturing, LCD-plug van JeeLabs en een 16x4 LCD.
Zie foto's en filmpje hieronder:

Hierboven en links het prototype gesoldeerd op een gaatjes-experimenteer-board. Extra toegevoegd: Accumeter via een TLP-731 optocoupler, menu drukknoppen, 16x4 LCD via de JeeLabs LCD-plug en RC-ontvanger uitlezing.


Zondag 18 April 2010: Marten heeft een print layout gemaakt voor de eindtrap voor een enkelzijdige print. Hiervan gaan we printjes maken (prototype) voor alle deelnemers aan de workshop zodat ze deze kunnen gebruiken om verder mee te testen.
De logica wordt dan nog eventjes gedaan door gebruik te maken van de Arduino
.

Peter Hogenstijn en Piet Vet zijn beiden bezig met het ontwerpen en testen van een toerentalmeter.

Zondag 25 April: De sketch is uitgebreid met een werkend menu. Het hoofdmenu is onderverdeeld in een Test menu en Instellingen menu. Het Test menu is volledig operationeel, met daarin het testen van diverse onderdelen: Motor, ontvanger, tachometer, accumeter, menubuttons en LCD. Het Instellingen menu dient nog voorzien te worden van submenu's waarin de diverse zaken daadwerkelijk instelbaar worden, waaronder: Ontvanger voor minimale en maximale uitslag en nul-instellingen, het ijken van de accumeter en tachometer en het instellen van diverse alarmfuncties: Accumeter, watermelder(s) en ontvanger (failsafe).

Vrijdag 14 Mei: De printjes van de eindtrap zijn binnen. Ze zien er keurig uit en zijn mooi vertind. Dat soldeert heel prettig, voor de SMD BTN7930's en bovendien beschermd het de koperbanen. Een prijsaanvraag voor de controller print met de microcontroller is ook verstuurd, dan laten we daar ook een paar printjes van maken voor het prototype. In de tussentijd gaan we testen uitvoerenen de software verder uitbreiden. Versie1.0 Beta is momenteel uitgebracht voor de deelnemers.

Vrijdag 7 Januari 2011: De definitieve printjes voor de controller en de H-brug zijn besteld in China.

Donderdag 10 Februari: De printjes van de controller en H-brug zijn binnen!

ESC - SMG IJmond - Controller

ESC - SMG IJmond - H-bridge

 

Naar elektronica          Naar microcontrollers          Naar hoofd pagina