Zelfbouw modelbouw motorregelaar

Afdrukken

Gepost door Jeroen Vreuls op donderdag 24 augustus 2023

Lambiek presenteert een ontwerp voor een motorregelaar voor de modelbouw.

Inleiding

Een modelbouw regelaar is natuurlijk gewoon te koop, maar je kunt er ook zelf een maken. Vooral als het om een groot model gaat, denk dan bijvoorbeeld aan een schip of aan een voertuig, bijvoorbeeld een tank of vrachtauto. Daar heb je dus een vrij grote motor voor nodig die niet al te snel draait, je kunt daar bijvoorbeeld prima een ruitenwisser motor voor gebruiken. Deze moet wel aangepast worden, voor een schip mag de vertraging verwijdert worden en voor een tank hoeft dat weer niet. De motor moet wel aangepast worden, de borstelbrug moet bijvoorbeeld aangepast worden. Vaak zitten er drie borstels in een ruitenwissermotor en die staan onder een hoek, dit is gedaan voor het hoge en lage toerental van de motor. Je moet dus zorgen dat de twee borstels die tegenover elkaar staan blijven zitten, die onder een hoek staan mogen weg.

Zelf heb ik zo'n 30 jaar geleden een sleepboot gemaakt, geheel eigen ontwerp. Daar zaten twee aangepaste ruitenwisser motoren in. Het schip was 1,20 meter lang, 35 centimeter breed en 1,10 meter hoog topje mast tot aan het vlak. Het geheel woog vaarklaar ± 40 kilogram, dat was met een 60 Ah loodaccu. De romp was gemaakt van polyester en de opbouw was van triplex. Heb daar helaas geen foto's meer van.

De motoren bediende ieder een schroef (links en rechts draaiend), zo bleef het model mooi rechtuit varen. De schroeven werden direct aangedreven, dus zonder vertraging. Dit zorgde er ook voor dat het model erg stil was.

Als je daar de standaard modelbouw motoren voor gebruikt, die motoren maken veel toeren en veel meer geluid. Een type 540 motor zit al snel aan de 30.000 toeren per minuut. Dat is leuk voor een speedboot of een race wagen, maar voor een groot model minder geschikt plus dat je altijd een vertraging nodig hebt. Die motoren en regelaars zijn ook aardig aan de prijs.

Een BLDC motor zit al snel aan de ± € 150,- of hoger en daar komt dan nog eens een regelaar bij die ongeveer de zelfde prijs heeft. Er zijn uiteraard goedkopere motoren en regelaars, maar daar hangen weer heel andere specificaties aan.

Een ruitenwissermotor kun je bijvoorbeeld op een sloop of een tweedehands auto materialen zaak kopen voor ± € 30,-. En het hoeft niet perse een ruitenwisser motor te zijn, met de regelaar die we gaan maken kun je in principe iedere borstelmotor aansturen, als je maar binnen de specificaties blijft van de gebruikte H-brug. De H-brug die we gaan bekijken kan zo'n 75 Watt aan, het type met een geforceerde koeling kan zo'n 120 Watt aan en dat is het type die we gaan gebruiken.

Ik laat nog even een paar plaatjes zien van gekochte motoren en regelaars.

Hieronder een borstelmotor met een regelaar.

Een borstelmotor

Een regelaar voor een borstelmotor

Dit zijn de goedkoopste setjes, die heb je voor rond de € 100,-. Maar persoonlijk vind ik dit minder geschikt voor grote modellen vanwege het hoge toerental en dat geldt ook voor de BLDC motoren plus regelaars. Je hebt dus meestal een vertraging nodig om aan het juiste toerental te komen en een vertraging maakt vaak veel herrie, vooral in de romp van een schip, daar wordt het geluid nog eens versterkt door de ruimte. Niet echt ideaal dus.

Hieronder nog een set van BLDC motor en regelaar.

Een BLDC motor

Een regelaar voor een BLDC motor

Voor zo'n setje ben je al snel ruim € 500,- kwijt en dat is toch heel wat voor een motor met regelaar.

De hardware

We gaan eens kijken hoe we zoiets kunnen bouwen, je kunt daar uiteraard een H-brug voor kopen, maar die kun je ook zelf maken. Voor bijvoorbeeld een ruitenwisser motor heb je zo'n 60 Watt nodig, de H-brug die ik laat zien kan maximaal 120 Watt aan. Maar je kunt uiteraard ook een zwaardere maken.

Hieronder het schema en de print voor de H-brug.

Schema van de H-brug

Printplaat van de H-brug

Hieronder de opgebouwde regelaar.

Aansluitingen aan de H-brug

Je kunt de regelaar dus voor een 12 of een 24 V DC systeem gebruiken. De regelaar heeft een 5 V DC aansluiting, die gebruikt kan worden als BEC uitgang. Daar kun je dus de ontvanger mee voeden, je hebt dus geen extra batterijen nodig voor de ontvanger.

Verder zitten er nog vier aansluitingen op voor linksom, rechtsom, PWM en I-compensatie. Die laatste aansluiting kun je gebruiken om de stroom te meten, daar kun je dan bijvoorbeeld de maximale stroom mee regelen of als terugkoppeling om het toerental te controleren en bij te regelen onder belasting. Die aansluiting heb ik hier niet gebruikt. Later meer daar over.

Je kunt de regelaar op verschillende manieren aansturen, waar nu PWM bij staat wordt als vrijgave regelaar gebruikt. En waar links en rechts bij staat, daar komt twee maal een PWM-signaal op. Die twee PWM-signalen worden geïnverteerd ten opzichte van elkaar, iets verderop laat ik zien hoe dat werkt.

De aansluitingen M1 en M2 zijn de motor aansluitingen.

De eindtransistoren zitten op een ruimtebesparend koelblok, onder dat blok zitten nog diverse componenten. Op het koelblok zie je twee ventilatoren zitten voor de koeling van het geheel, deze ventilatoren draaien continue.

Hieronder het totale schema van het systeem.

Schema van het totale systeem

De controller die hier gebruikt wordt voor de test is een Microchip PIC16F887, daar wordt het display, de ontvanger en de H-brug op aangesloten plus een paar drukknoppen en een LED. Voor de besturing van de H-brug heb je twee PWM-signalen nodig en één vrijgave signaal. Voor de beide PWM-signalen kun je het beste HPWM gebruiken, die draaien namelijk op de achtergrond en hebben geen invloed op de rest van het programma. De regelaar wordt in dit geval gevoed met 24 V DC, simpelweg om dat de aangesloten motor een 24 V DC type is.

PWM-2 moet hier dus geïnverteerd aangeboden worden ten opzichte van PWM-1. Hier zie je hoe dat werkt, in het voorbeeld staat het PWM-signaal op 50 %.

PWM-signaal op 50%

De motor zal nu stilstaan. Als PWM-1 bijvoorbeeld naar 80 procent gaat, dan gaat PWM-2 naar 20 procent. De motor gaat nu een bepaalde richting op draaien en het toerental zal verhoogd worden. Als bijvoorbeeld PWM-1 naar 20 procent gaat, dan gaat PWM-2 naar 80 procent. De motor zal nu naar de andere kant draaien met een bepaald toerental. Op deze manier wordt de motor dus geregeld in richting en snelheid.

Op de controller zitten nog twee schakelaars, een jumper en een functie LED. Met de standby-schakelaar zet je de ontvanger standby, in die stand kun je de zender uitzetten zonder dat de ontvanger storing op pikt. De reset failsafe-schakelaar dient ervoor om de ontvanger uit de failsafe te halen. De ontvanger gaat naar de failsafe functie als het model bijvoorbeeld buiten het zendbereik van de zender komt of als de zender bijvoorbeeld uit zou vallen. Met de jumper kun je instellen of je de failsafe functie wil gebruiken of niet. De functie LED geeft aan of je de motor aanstuurt, als je de motor aanstuurt gaat de LED continu branden. Als de led snel knippert staat de regelaar in de failsafe functie en als de LED langzaam knippert staat de regelaar in de standby functie. Dan hebben we nog de aansluiting voor de ontvanger en het display.

De software voor het uitlezen van de ontvanger

Voor een goede werking moeten we de ontvanger uitlezen, er komt een signaal uit de ontvanger waarvan de pulsbreedte varieert tussen de 1 en 2 ms bij een frequentie van 50 Hz. Dit signaal moet omgezet worden naar een PWM-signaal voor de regelaar, die PWM waarde gaat variëren tussen de 0 en 255, een acht bit waarde dus.

Het uitlezen van de ontvanger

Door nu een klein stukje code te schrijven kunnen we achter die waarde komen en het tonen op het display, met de waardes die daar uitkomen kunnen we later het hoofdprogramma maken voor de modelbouw regelaar. We gaan drie waardes bepalen, namelijk de midden, hoogste en laagste waarde. Dat doen we door de knuppel op de zender in de hoge, midden en lage positie te zetten.

We gaan even naar het stukje software kijken om de ontvanger uit te lezen.

Device 16F887                        ; Processor type

Xtal 10                              ; Crystal 10 MHz

Asm                                  ; Config settings
CONFIG_REQ            
__CONFIG _CONFIG1, HS_OSC & WDT_OFF & DEBUG_OFF & FCMEN_OFF & LVP_OFF & IESO_OFF & BOR_OFF & CPD_OFF & CP_OFF & MCLRE_OFF & PWRTE_ON 
__CONFIG _CONFIG2, WRT_OFF & BOR40V 
EndAsm
   
All_Digital true                     ; Alle poorten digitaal

Declare LCD_RSPin PORTD.2            ; Reset display poort D.2
Declare LCD_ENPin PORTD.3            ; Enable display poort D.3
Declare LCD_DTPin PORTD.4            ; Data display poort D.4 t/m D.7
Declare LCD_Lines 2                  ; Twee lijns display

Dim VAR1 As Word                     ; Variabele waarde ontvanger

Cls                                  ; Wis display

DelayMS 2000                         ; Pauze 2 sec 

Clear                                ; Wis geheugen

         ;543210                     ; Hulpregel poort A
PORTA  = %000000                     ; Maak poort A laag
TRISA  = %000000                     ; Poort_A I/O

         ;543210                     ; Hulpregel poort B
PORTB  = %000000                     ; Maak poort B laag
TRISB  = %000000                     ; Poort_B I/O

         ;76543210                   ; Hulpregel poort C
PORTC  = %00000000                   ; Maak poort C laag
TRISC  = %00000000                   ; Poort_C I/O

         ;76543210                   ; Hulpregel poort D
PORTD  = %00000000                   ; Maak poort D laag
TRISD  = %00000000                   ; Poort_D I/O

         ;210                        ; Hulpregel poort E 
PORTE  = %000                        ; Maak poort E laag
TRISE  = %000                        ; Poort_E I/O

        ;76543210                    ; Hulpregel analoog
ANSEL = %00000000                    ; ANSEL register analoog poort_A

         ;76543210                   ; Hulpregel analoog
ADCON0 = %00000001                   ; ADCON0 register analoog 8 bit

          ;76543210                  ; Hupregel analoog
;ADCON1 = %10000000                  ; ADCON1 register analoog 10 bit

          ;76543210                  ; Hulpregel analoog poort_B
;ANSELH = %00000000                  ; ANSEL register analoog poort_B

;--------------------------------------
; WAARDE MODELBOUW ONTVANGER UITLEZEN.
;--------------------------------------

RUN:


    VAR1 = PulsIn PORTA.5,1
    
    Print At 1,1,Dec3,WAARDE
    
GoTo RUN

End

Zoals je kunt zien stelt dat niets voor, we hebben aan een paar regels genoeg om de ontvanger uit te lezen. We hebben de variabele VAR1 als woord ingesteld, omdat de waarde groter wordt dan 255. Maar de waarde wordt niet groter dan drie digits (Dec3). Voor het uitlezen van de ontvanger gebruiken we het PULSIN commando.

De zender en ontvanger zijn van Graupner en werkt in de 40 MHz band. We gaan nu kijken welke waardes we te zien krijgen. Met de knuppel in de middenstand krijgen we een waarde van 353 te zien. Met de knuppel in de bovenste stand zien we een waarde van 457 en met de knuppel in de onderste stand zien we een waarde van 243. Deze waardes moeten nu omgezet worden in een waarde tussen de 0 en 255, die waarde gaan we later gebruiken voor het aansturen van de regelaar.

Om aan de waarde van 0 tot 255 te komen, moeten we een formule gaan maken. We gaan uit van de laagst gemeten waarde, die is nu 243 maar die moet 0 worden als de knuppel in de onderste stand staat. Als we nu zeggen VAR1 = 243 - 243 = 0, dan wordt de waarde 0 met de knuppel in de onderste stand, dat is dus goed. Nu gaan we naar de hoogste waarde kijken, als we nu zeggen VAR1 = 457 - 243 = 214 dan komen we 41 te kort om aan de waarde 255 te komen. Als we nu 255 delen door 214, krijgen we 255 : 214 = 1.19158. Die waarde ronden we af naar 1.20. Dan zou voor de knuppel in de hoogste stand de formule zo worden (VAR - 243) X 1.20. De waarde wordt dan (457 - 243) X 1.20 = 256.8, dat is dus net boven de 255 en dat is prima. Nu gaan we naar de middelste waarde kijken, die moet eigenlijk op ± 127 uit komen. 353 - 243 = 110, we komen hier dus 17 te kort. Als we 127 delen door 110, dan krijgen we 127 : 110 = 1.1545. Daar kunnen we ook 1.20 van maken, dan komen we uit op VAR1 = 353 - 243 = 110 X 1.20 = 132. Dit kunnen we wel met de trim functie van de zender weg werken.

De formule gaat dus dit worden: (VAR1 - 243) X 1.20. Voor de laagste stand maakt het niet uit dat er met 1.20 vermenigvuldigd wordt, want 0 X 1.20 blijft 0. Nu kunnen we dus een waarde maken tussen de 0 en 255.

De software voor de modelbouw regelaar

Device 16F887                              ; Processor type

Xtal 10                                    ; Crystal 10 MHz

Asm                                        ; Config settings
CONFIG_REQ            
__CONFIG _CONFIG1, HS_OSC & WDT_OFF & DEBUG_OFF & FCMEN_OFF & LVP_OFF & IESO_OFF & BOR_OFF & CPD_OFF & CP_OFF & MCLRE_OFF & PWRTE_ON 
__CONFIG _CONFIG2, WRT_OFF & BOR40V 
EndAsm

All_Digital true                           ; Alle poorten digitaal

Declare CCP1_Pin PORTC.2                   ; PWM 1 op poort C.2
Declare CCP2_Pin PORTC.1                   ; PWM 2 op poort C.1

Declare LCD_RSPin PORTD.2                  ; Reset display poort D.2
Declare LCD_ENPin PORTD.3                  ; Enable display poort D.3
Declare LCD_DTPin PORTD.4                  ; Data display poort D.4 t/m D.7
Declare LCD_Lines 2                        ; Twee lijns display

Symbol STANDBY_SCHAK  = PORTA.0            ; Ingang standby schakelaar
Symbol RESET_FAILSAFE = PORTA.1            ; Ingang reset failsafe
Symbol JUMPER         = PORTA.2            ; Ingang failsafe aan / uit
Symbol FUNCTIE_LED    = PORTA.3            ; Uitgang functie led
Symbol VRIJGAVE       = PORTC.0            ; Uitgang vrijgave regelaar

Symbol FREQUENTIE = 10000                  ; PWM frequentie 10KHz

Dim VAR1 As Word                           ; Variabele var1
Dim WAARDE As Word                         ; Variabele waarde

Clear                                      ; Wis geheugen 
                                   
DelayMS 2000                               ; Wacht 2 seconden

         ;543210                           ; Hulpregel poort A
PORTA  = %000000                           ; Maak poort A laag
TRISA  = %100111                           ; Poort_A I/O

        ;543210                            ; Hulpregel poort B
PORTB = %000000                            ; Maak poort B is laag
TRISB = %000000                            ; Poort_B I/O

        ;76543210                          ; Hulpregel poort C
PORTC = %00000000                          ; Maak poort C laag
TRISC = %00000000                          ; Poort_C I/O

        ;76543210                          ; Hulpregel poort D
PORTD = %00000000                          ; Maak poort D laag
TRISD = %00000000                          ; Poort_D I/O

        ;210                               ; Hulpregel poort E 
PORTE = %000                               ; Maak poort E laag
TRISE = %000                               ; Poort_E I/O

        ;76543210                          ; Hulpregel analoog
ANSEL = %00000000                          ; ANSEL register analoog poort_A

         ;76543210                         ; Hulpregel analoog
ADCON0 = %00000011                         ; ADCON0 register analoog 8 bit

         ;76543210                         ; Hupregel analoog
ADCON1 = %10000000                         ; ADCON1 register analoog 10 bit

         ;76543210                         ; Hulpregel analoog poort_B
;ANSELH = %00000000                        ; ANSEL register analoog poort_B

;---------------------------------------------------------
; PROGRAMMA MODELBOUW REGELAAR VOOR GRAUPNER C4-X 40 SSM.
;---------------------------------------------------------

;-----------------------------
; ALLE UITGANGEN LAAG ZETTEN.
;-----------------------------

FUNCTIE_LED = 0
VRIJGAVE = 0                           
HPWM 1,0,0                              
HPWM 2,0,0

;-------------------------------------------------------
; ONTVANGER SIGNAAL INLEZEN EN VERWERKEN.
; PRINT OPDRACHT GEVEN.
; REGELAAR BLOKKEREN.
; FUNCTIE LED AANSTUREN.
; SIGNAAL LINKS RECHTS CONTROLEREN.
; SCHAKELAAR STANDBY INLEZEN.
; ALS JUMPER GEPLAATST IS FAILSAFE FUNCTIE CONTROLEREN.
;-------------------------------------------------------                              
                                
START:


    VAR1 = PulsIn PORTA.5 , 1                 
    WAARDE = (VAR1-243)*1.20   
    
    Print At 1,1,"H.v.Z-PRODUCT"
    Print At 2,1,"WAARDE:    STOP"
    Print At 2,8,Dec3, WAARDE
                            
    VRIJGAVE = 0 
                               
    FUNCTIE_LED = 0
                                                  
    If WAARDE > 137 Then
       Cls 
       GoTo RECHTS_OM
    EndIf
            
    If WAARDE < 117 Then
       Cls 
       GoTo LINKS_OM 
    EndIf
          
    If STANDBY_SCHAK = 0 Then
       Cls 
       GoTo STANDBY
    EndIf 
    
    If JUMPER = 1 Then        
       If VAR1 < 50 Then   
          Cls 
          GoTo FAILSAFE
       EndIf
                
       If VAR1 > 650 Then   
          Cls  
          GoTo FAILSAFE
       EndIf
    EndIf
           
GoTo START 

;-------------------------------------------------------
; ONTVANGER SIGNAAL INLEZEN EN VERWERKEN.
; PRINT OPDRACHT GEVEN.
; SCHAKELAAR STANDBY INLEZEN.
; REGELAAR VRIJGEVEN.
; FUNCTIE LED AANSTUREN.
; WAARDE BLOKKEREN OP 255.
; MOTOR AANSTUREN EN REGELEN.
; WAARDE CONTROLEREN.
; ALS JUMPER GEPLAATST IS FAILSAFE FUNCTIE CONTROLEREN.
;-------------------------------------------------------                                    
    
RECHTS_OM:


    VAR1 = PulsIn PORTA.5 , 1                  
    WAARDE = (var1-243)*1.20   
    
    Print At 1,1,"H.v.Z-PRODUCT"
    Print At 2,1,"WAARDE:    FORW"
    Print At 2,8,Dec3, WAARDE
                             
    If STANDBY_SCHAK = 0 Then
       Cls 
       GoTo STANDBY
    EndIf
           
    VRIJGAVE = 1
                               
    FUNCTIE_LED = 1
                  
    If WAARDE > 254 Then 
       WAARDE = 255
       Print At 2,1,"WAARDE:255 FORW" 
    EndIf
             
    HPWM 1 , WAARDE , FREQUENTIE        
    HPWM 2 , ~ WAARDE , FREQUENTIE 
                             
    If WAARDE < 138 Then
       Cls 
       GoTo START
    EndIf

    If JUMPER = 1 Then      
       If VAR1 < 50 Then   
          Cls 
          GoTo FAILSAFE
       EndIf
                
       If VAR1 > 650 Then 
          Cls  
          GoTo FAILSAFE
       EndIf       
    EndIf
    
GoTo RECHTS_OM 

;-------------------------------------------------------
; ONTVANGER SIGNAAL INLEZEN EN VERWERKEN.
; PRINT OPDRACHT GEVEN.
; SCHAKELAAR STANDBY INLEZEN.
; REGELAAR VRIJGEVEN.
; FUNCTIE LED AANSTUREN.
; WAARDE BLOKKEREN OP 0.
; MOTOR AANSTUREN EN REGELEN.
; WAARDE CONTROLEREN.
; ALS JUMPER GEPLAATST IS FAILSAFE FUNCTIE CONTROLEREN.
;-------------------------------------------------------                                      

LINKS_OM:


    VAR1 = PulsIn PORTA.5 , 1                  
    WAARDE = (var1-243)*1.20   
    
    Print At 1,1,"H.v.Z-PRODUCT"
    Print At 2,1,"WAARDE:    REV"
    Print At 2,8,Dec3, WAARDE
                            
    If STANDBY_SCHAK = 0 Then
       Cls 
       GoTo STANDBY
    EndIf
          
    VRIJGAVE = 1
                                 
    FUNCTIE_LED = 1
                 
    If WAARDE < 0 Then 
       WAARDE = 0
       Print At 2,1,"WAARDE:000 REV"
    EndIf
                  
    HPWM 1 , WAARDE , FREQUENTIE   
    HPWM 2 , ~ WAARDE , FREQUENTIE 
                             
    If WAARDE > 120 Then   
       Cls 
       GoTo START
    EndIf

    If JUMPER = 1 Then           
       If VAR1 < 50 Then 
          Cls 
          GoTo FAILSAFE
       EndIf 
       If VAR1 > 650 Then 
          Cls 
          GoTo FAILSAFE
       EndIf
    EndIf 
            
GoTo LINKS_OM 

;---------------------------------
; PRINT OPDRACHT GEVEN.
; REGELAAR BLOKKEREN.
; HPWM-1 EN HPWM-2 OP NUL ZETTEN.
; FUNCTIE LED AANSTUREN.
; SCHAKELAAR STANDBY INLEZEN.
;---------------------------------                                

STANDBY:


    Print At 1,1,"H.v.Z-PRODUCT"
    Print At 2,1,"STANDBY"
                                      
    VRIJGAVE = 0
                                
    HPWM 1,0,0                              
    HPWM 2,0,0 
                                
    FUNCTIE_LED = 1                     
    DelayMS 500                       
    FUNCTIE_LED = 0                      
    DelayMS 500
                                
    If STANDBY_SCHAK = 1 Then  
       Cls
       GoTo START
    EndIf
               
GoTo STANDBY

;------------------------------------
; PRINT OPDRACHT GEVEN.
; REGELAAR BLOKKEREN.
; HPWM-1 EN HPWM-2 OP NUL ZETTEN.
; FUNCTIE LED AANSTUREN.
; SCHAKELAAR RESET FAILSAFE INLEZEN.
;------------------------------------                                  

FAILSAFE:


    Print At 1,1,"H.v.Z-PRODUCT"
    Print At 2,1,"FAILSAFE"
                                   
    VRIJGAVE = 0
                               
    HPWM 1,0,0                              
    HPWM 2,0,0
                                  
    FUNCTIE_LED = 1                      
    DelayMS 50                         
    FUNCTIE_LED = 0                       
    DelayMS 50
                                     
    If RESET_FAILSAFE = 1 Then 
       Cls
       GoTo START
    EndIf
         
GoTo FAILSAFE                                  
      
End

Dit is het hele programma voor de modelbouw regelaar, ik heb boven de lussen wat tekst gezet die uitlegt wat er in de desbetreffende lus gebeurt. Ik hoop dat het duidelijk is op deze manier.

De PWM-frequentie staat hier op 10 KHz zodat je niet het irritante gepiep hoort van de regelaar.

Er zijn twee variabelen gebruikt VAR1 en WAARDE, beide staan als woord om dat de WAARDE iets groter kan worden dan 0 tot 255. VAR1 wordt sowieso groter dan 255.

Om de HPWM waarde tussen de 0 en 255 te houden heb ik dit gedaan:

If WAARDE > 254 Then 
   WAARDE = 255
   Print At 2,1,"WAARDE:255 FORW" 
EndIf

Dat is er voor om te zorgen dat de waarde niet boven de 255 uit kan komen, we hebben in de formule gezien dat die waarde iets groter kan worden. Namelijk 256.8 en als we de trim functie van de zender gebruiken kan dat verschil nog iets groter worden. En om de HPWM waarde niet kleiner te laten worden dan 0, doen we dit:

If WAARDE < 0 Then 
   WAARDE = 0
   Print At 2,1,"WAARDE:000 REV"
EndIf

Op deze manier blijft de HPWM waarde keurig tussen de 0 en 255.

Met de functie LED kunnen we mooi kijken of het ontvanger signaal in het midden staat, de functie LED gaat branden als we de knuppel naar boven of naar beneden bewegen. In de middenstand is de functie LED uit. De functie LED heeft nog twee functies, als de regelaar in de standby stand staat knippert de LED langzaam en als de regelaar in de failsafe staat knippert de LED snel.

Dit was het wel zo'n beetje wat de software betreft voor de modelbouw regelaar zonder stroommeting. Ik ga toch nog even laten zien wat er voor nodig is om de regelaar met een stroommeting uit te rusten.

Regelaar met stroommeetfunctie

Er verandert aan de hardware niet veel, het enige wat er moet gebeuren is een extra draad aansluiten tussen de regelaar en controller.

Schema met stroommeting

Ik heb de lijn even rood gemaakt, dat is de enige draad die er bij komt. De draad komt op een analoge ingang van de controller te zitten, in dit geval gebruik ik hier poort E0 voor.

De software is iets meer, maar valt ook mee. Ik ga alleen laten zien wat er aan software bijkomt, dus niet het hele programma.

Dit gaan we toevoegen. Boven in het programma komt dit erbij zodat we de analoge waarde in kunnen lezen. En daar onder de stroom waarde en de variabele van de stroom.

Declare Adin_Res = 8                       ; resolutie 8 bits
Declare Adin_Tad = frc                     ; set RC osc
Declare Adin_Stime = 50                    ; sample tijd 5
                              
Symbol MAX_CURRENT = 26                    ; Stroom instelling
Dim CURRENT As Word                        ; Variabele stroom

We lezen de analoge poort met 8 bit in, van 0 tot 255. De controller werkt op 5 V DC, dus de stappen zijn 5 : 255 = 0,01960 V DC per stapje. De meetweerstand op de regelaar is 0,1 Ohm (zie schema). Ik heb de maximale stroom door de motor even op 5 A gehouden. Dan krijgen we dus een spanningsval over de weerstand van 5 A X 0.1 = 0,5 V DC : 0.01960 = 26, dat is dus de waarde die we invullen bij MAX_CURRENT. Dit is puur theoretisch, we hebben ook nog te maken met de afwijking van de weerstand, de sporen op de print en de bedrading. Het zou dus zomaar kunnen zijn dat de motor eerder of later in overstroom gaat. We gaan kijken wat er verder nog nodig is.

Onder de START lus verandert er niets, dat blijft allemaal zoals het is. Waar we wel iets aan toevoegen is bij RECHTS_OM en bij LINKS_OM, daar voegen we dit toe:

CURRENT = ADIn 5 
    
If CURRENT > MAX_CURRENT Then
  GoSub OVERSTROOM
EndIf

Hier wordt de waarde CURRENT die binnenkomt op de analoge ingang vergeleken met de MAX_CURRENT (in dit geval 26) en als die waarde overschreden wordt dan springt het programma naar de OVERSTROOM lus. Deze lus komt onder FAILSAFE.

OVERSTROOM:


  VAR1 = PulsIn PORTA.5 , 1                 
  WAARDE = (VAR1-243)*1.20
    
  VRIJGAVE = 0   

  HPWM 1,0,0                              
  HPWM 2,0,0

  FUNCTIE_LED = 1                      
  DelayMS 50                         
  FUNCTIE_LED = 0                       
  DelayMS 50
  FUNCTIE_LED = 1                      
  DelayMS 50                         
  FUNCTIE_LED = 0                       
  DelayMS 500


  If WAARDE > 120 Then
    If WAARDE < 138 Then   
      Cls
      Return
    EndIf
  EndIf
      
GoTo OVERSTROOM

End

Bij OVERSTROOM worden de beide HPWM signalen en het vrijgave signaal uit gezet, ook wordt er naar de signaal waarde van de zender gekeken. Als het signaal tussen de 120 en 138 zit (stuurknuppel in de middenstand) dan wordt er uit de OVERSTROOM lus gesprongen naar waar de overstroom gedetecteerd is. Dat kan naar RECHTS_OM of naar LINKS_OM zijn, als in één van de twee lussen de middenstand van de knuppel gedetecteerd wordt, spring het programma naar de START lus. Op deze manier wordt dus de stroom door de motor gemeten. De waarde die bij MAX_CURRENT ingevuld wordt is dus afhankelijk van de grootte van de aangesloten motor. Als de motor bijvoorbeeld bij 6 A uit moet schakelen wordt de waarde 6 X 0.1 = 0.6 : 0.01960 = 31.

Als het programma in de overstroom lus zit, knippert de functie LED twee maal snel en wacht dan even om daarna weer twee maal snel te knipperen. Zo kun je dus zien dat de motor teveel stroom getrokken heeft.

Ik heb nog even een meting gedaan om te kijken of de ingegeven stroom waarde een beetje klopt.

Stroommeting

Links onderin zie je wat de motor vrij draaiend opneemt, dit is zowel links als rechtsom. Naarmate je de knuppel sneller heen en weer haalt loopt de stroom iets op naar ± 2 A. De hoge waarde die je ziet is de stall current, die loopt op naar zo'n 4 A voor dat de motor uitschakelt. Als de motor normaal onder belasting draait schakelt deze uit rond de 4,5 A. Dat is dus iets lager dan wat we berekend hebben en dat komt door de vrij lange bedrading aan de regelaar en waarschijnlijk de print sporen. Dus de MAX_CURRENT zou iets hoger kunnen, maar de motor levert een behoorlijk koppel, hij is niet met de hand tegen te houden.

Dit is trouwens de gebruikte motor voor de test:

Gebruikte motor voor de stroommeting

Heb het ding ooit uit een elektrische step gehaald.

Nawoord

Het is echt een leuke regeling en met de beveiligingen die er op zitten zoals de failsafe functie, standby functie en de stroom meting, wordt er wel iets extra's toe gevoegd aan de veiligheid. Al hebben de nieuwere zender ontvangers tegenwoordig standaard een failsafe functie ingebouwd. De functie-LED is ook wel makkelijk, je kunt direct zien in welke mode de regelaar staat.

Je kunt natuurlijk ook andere H-brug types gebruiken, voor als je zelf iets maken niet ziet zitten. Er is genoeg te koop tegenwoordig. Je kunt ook een H-brug maken met MOSFET's voor nog meer vermogen en minder verliezen, maar het ligt er maar net aan welk type motor je gaat gebruiken. Met een zwaardere regelaar zou je zelfs een rolstoel motor kunnen bedienen, het is maar net wat je nodig hebt. Een drie-fase motor met een frequentie regelaar kan ook als je zou willen, de mogelijkheden zijn onbegrensd.

De regelaar werkt in principe met iedere modelbouw zender en ontvanger, dit omdat het ontvanger signaal te allen tijden tussen de 1 en 2 ms ligt.

Dit artikel is geschreven door Lambiek.