Mini-motorregelaar met terugkoppeling

Gepost door Jeroen Vreuls op woensdag 27 september 2017 22:07

Inleiding

Naar aanleiding van een topic op het forum heb ik deze regelaar ontworpen. Er staan wel een paar motorregelaars op Circuits Online, maar dat zijn regelaars voor de wat grotere motoren. Dit is een regelaar voor bijvoorbeeld Maxon motoren, Bühler motoren of de welbekende RB35 met vertraging. Met deze drie motoren heb ik de regelaar getest, en ze zijn dan ook alle drie prima te regelen met de mini-motorregelaar. Dit zijn leuke motoren voor bijvoorbeeld modelbouw projecten.

De Maxon motor

Maxon motorMaxon motor

De Maxon motoren zijn kwalitatief zeer goede motoren, ze zijn daarom ook niet echt goedkoop. Maar soms kom je dit soort motoren wel eens op een beurs tegen, en als je het treft dan kun je ze voor een paar Euro kopen.

Deze motor heeft ook nog eens een tacho op de motor zitten, aan de achterkant van de motor kun je hem zien zitten. Hier heb ik echter geen gebruik van gemaakt, maar ik heb de regelaar dan ook niet ontworpen voor een tacho-signaal. Wat je wel kan doen is het tacho-signaal gelijkrichten en via een spanningsdeler aan een analoge ingang leggen, op deze manier kun je via dat signaal ook nog wel het een en ander regelen. Maar je moet er dan wel voor zorgen dat het signaal niet boven de 5 V DC uit kan komen.

De Bühler motor

Bühler motorBühler motor

Dit is ook een goede motor, het is een Amerikaans fabrikaat. Hier heb ik er eens een paar van gekocht op een beurs. Deze motor heeft ook een tacho, hier zit de tacho aan de voorkant bij de poelie.

De RB35 motor

RB35 motorRB35 motor

De RB35 motor is ook een leuke motor voor de modelbouw. Bij bijvoorbeeld Conrad kun je ze met verschillende vertragingen kopen. De vertragingen zijn: 1:30, 1:50, 1:100, en 1:200. De motoren kunnen een behoorlijk koppel leveren met de vertraging, 60 Ncm, 90 Ncm en 180 Ncm. Dat is dus een redelijk koppel voor een betrekkelijk kleine motor.

Schema

We gaan het nu over de regelaar hebben. Hieronder het schema van de mini-motorregelaar.

Schema van de mini-motorregelaarSchema van de mini-motorregelaar

De regelaar is opgebouwd rond een 4011 NAND-poort, een L293D, een IN122 instrumentatie versterker en een TLV271 operationele versterker. Het gedeelte rond de controller kun je zelf kiezen, dat kan ieder type zijn.

De 4011 zorgt ervoor dat er geen sluiting kan ontstaan (op welke manier je de regelaar ook aanstuurt) en dat je de regelaar op verschillende manieren aan kan sturen met een controller. De 4011 zit er ook tussen omdat je geen PWM-signaal op de enable pinnen kan zetten. Nu gaat het PWM-signaal via de 4011 naar pin 2 en pin 15. Later daarover een voorbeeld.

De L293D is de eigenlijke motor driver, de driver heeft uitgangen voor twee motoren. Deze uitgangen heb ik parallel gezet (zoals je kunt zien in het schema) zodat de driver meer stroom kan leveren. De maximale stroom is nu 2,4 A geworden, dat is voor de meeste kleine motoren meer dan voldoende.

De terugkoppeling wordt gedaan door de stroom te meten in de min-aansluiting, als er stroom door R5 loopt zorgt dit voor een spanningsval over de weerstand. Die spanningsval wordt aangeboden aan de ingangen van de INA122 en 100 maal versterkt. Bij bijvoorbeeld 2,5A motorstroom valt er 2,5 X 0,1 = 0,25V over de weerstand, 0,25 X 100 = 25V. Maar die spanning wordt niet uitgestuurd door de INA122, want die kan nooit hoger worden dan 5 V DC omdat de INA122 met 5 V DC gevoed wordt. Waarom dan die hoge versterking? Dit heb ik gedaan omdat je een vrij hoge teruggekoppelde spanning wil hebben bij een laag toerental van de motor.

Als je dat niet zou hebben dan regelt de regelaar bijna niet bij, bij lage toerentallen, en juist dan wil je een wat groter koppel hebben. In de software is het een en ander in te stellen. Je kunt er ook nog voor kiezen om R6 te vervangen door een potmeter van 2,5 kΩ. Dan kun je daar de terugkoppeling mee instellen. Na de INA122 komt de TLV271, dit is een filter die maakt een mooi analoog signaal van het nog aanwezige PWM-signaal. De TLV271 staat als spanningsvolger geschakeld, het uitgangssignaal van de TLV271 kan ook niet hoger dan 5 V DC worden omdat ook deze opamp aan 5 V DC hangt. Dus aan de uitgang kant hoeft er niets beveiligd te worden voor de analoge ingang van de controller. Het analoge signaal wordt aangeboden aan de controller, daar wordt in de software het analoge signaal verder verwerkt.

Signalen

Ik had het eerder over de verschillende signalen die op de regelaar gezet kunnen worden, hier wat voorbeelden van die signalen die je via de 4011 op de regelaar kunt zetten.

IngangssignalenIngangssignalen

Zoals je ziet kunnen dat twee PWM-signalen zijn en één vrijgave signaal. Deze PWM-signalen moeten dan wel geïnverteerd zijn ten opzichte van elkaar. Als de twee PWM-signalen gelijk zijn, dan staat de motor stil. Dat is dus met de potmeter in de middenstand. Dit is de potmeter die op de analoge ingang van de controller zit. Verdraai je nu deze potmeter naar links of naar rechts, dan zal en het toerental omhoog gaan en de draairichting van de motor verandert. Het kan ook met één PWM-signaal voor het toerental en twee signalen voor de richting.

Print en aansluitingen

Voor de aansluiting tussen de controller en de regelaar gebruik ik Molex connectoren, maar dat mogen ook andere connectoren zijn natuurlijk. Als de connectoren maar een raster hebben van 2,5 mm. Als je de Molex connectoren gebruikt, heb je wel een speciale tang nodig om de pennen aan de bedrading te knijpen. Maar je kunt de draden er ook aan solderen, al gaat dat wat lastiger maar het is te doen. Het is aan te raden om alle bedrading te twisten, dit in verband met het PWM-signaal. Deze signalen kunnen eventueel storing veroorzaken, ik doe het eigenlijk standaard altijd. Ik heb nog een tekening gemaakt hoe de aansluitingen op de print zitten.

Aansluitingen van de printAansluitingen van de print

Aan de linkerkant zie je de aansluiting naar de controller. Zoals je kunt zien is dat de 5 V DC, rechtsom, PWM, linksom, 0 V DC, en de uitgang voor de I-compensatie. Aan de rechterkant zie je de voeding voor het 12 V DC gedeelte van de regelaar en de motor aansluitingen. De voedingsspanning mag ook lager of hoger zijn dan 12 V DC, deze spanning staat helemaal los van de 5 V voeding voor de IC's. Die spanning mag variëren tussen de 4,5 en 36 V DC.

Onder het koellichaam zitten de 4011 en de L293D, het koellichaam is met warmtegeleidende lijm op de twee IC's gelijmd. Het koellichaam is 23 X 23 X 12 mm. Alle IC's zitten in voeten gemonteerd en zijn gemakkelijk te verwisselen als dat nodig zou zijn. Er zit ook nog een zekering houder op de print, de zekering mag niet zwaarder zijn dan 3,15 A.

De afmeting van de print is 60 X 85 mm, de vier montage gaten op de hoeken heb ik op 3 mm gehouden.

Er is ook weer een print gemaakt voor de motorregelaar, op de print staan alle componenten met de bijbehorende waardes. Als je dit na wil bouwen let dan wel op de twee draadbruggen die onder de 4011 en de L293D zitten. Er zitten zoals te zien op de print meer bruggen, maar daar heb ik nul Ohm weerstanden voor gebruikt, dat staat wat netter.

De print voor de mini-motorregelaarDe print voor de mini-motorregelaar

De print is gemaakt met Sprint-Layout, en hoeft verder geen uitleg denk ik.

Software voor besturing

Ik heb ook een paar software voorbeelden gemaakt in PICBASIC, de gebruikte controller is een PIC16F887.

Stroombegrenzing

'*  Name    : BESTURING MINI MOTORREGELAAR.                                     
'*  Author  : H.van Zwieten.                                    
'*  Notice  : Copyright (c) 2017 H.v.Z.                         
'*          : All Rights Reserved                               
'*  Date    : 13-9-2017                                         
'*  Version : 1.0                                               
 
Device 16F887                     ; Processor type
 
Xtal 10                           ; Cristal 10Mhz
 
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 Adin_Res = 8              ; resolutie 8 bits
Declare Adin_Tad = frc            ; set RC osc
Declare Adin_Stime = 50           ; sample tijd 5
 
Declare CCP1_Pin PORTC.2          ; pwm 1 op poort C.2
Declare CCP2_Pin PORTC.1          ; pwm 2 op poort C.1
 
Symbol VRIJGAVE = PORTC.0         ; Vrijgave regelaar
 
Symbol FREQUENTIE = 5000          ; PWM frequentie 5KHz
 
Dim POTMETER As Byte              ; Variabele waarde potmeter
 
Dim TERUGKOPPELING As Byte        ; Variabele waarde terugkoppeling
 
Clear                             ; Wis geheugen 
 
         ;543210                  ; Hulpregel poort A
PORTA  = %000000                  ; Maak poort A laag
TRISA  = %111111                  ; Poort_A I/O
 
         ;543210                  ; Hulpregel poort B
PORTB  = %000000                  ; Maak poort B laag
TRISB  = %111111                  ; 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  = %111                     ; Poort_E I/O
 
         ;76543210                ; Hulpregel analoog
ADCON0 = %00000001                ; ADCON0 register analoog
 
         ;543210                  ; Hulpregel analoog poort_B
ANSELH = %000000                  ; ANSEL register analoog poort_B
 
;--------------------------------------------
; VOORBEELD STROOMMETING MINI MOTORREGELAAR.
;--------------------------------------------
 
RUN::
    POTMETER = ADIn 0
    TERUGKOPPELING = ADIn 1
 
    VRIJGAVE = 1
 
    If TERUGKOPPELING > 150 Then  
     GoSub OVERSTROOM
    EndIf
 
    HPWM 1,POTMETER,FREQUENTIE 
    HPWM 2,~POTMETER,FREQUENTIE  
GoTo RUN
 
OVERSTROOM:
    VRIJGAVE = 0   
    Return
GoTo OVERSTROOM
 
End

In het eerste programma wordt alleen de stroom begrensd op een bepaalde waarde, de waarde kan aangepast worden in deze regel: IF TERUGKOPPELING > 150 THEN. Door de waarde 150 groter of kleiner te maken zal de motor later of eerder begrensd worden.

Er worden twee analoge ingangen gebruikt: A0 en A1. Op A0 zit de potmeter en op A1 komt het terugkoppel signaal binnen uit de regelaar. Je kan ook zien dat hier twee PWM-signalen gebruikt worden en één vrijgave signaal. Het vrijgave signaal schakelt de regelaar uit bij overstroom, en schakelt direct weer terug naar de RUN lus. Dit blijft net zolang herhalen tot de stroom weer onder de waarde van 150 komt.

Stroombegrenzing en constant toerental

Het tweede programma werkt weer iets anders, daar wordt de stroom begrensd en de regelaar probeert het toerental gelijk te houden bij belasting van de motor.

'*  Name    : BESTURING MINI MOTORREGELAAR_1                                     
'*  Author  : H.van Zwieten.                                    
'*  Notice  : Copyright (c) 2017 H.v.Z.                         
'*          : All Rights Reserved                               
'*  Date    : 15-9-2017                                         
'*  Version : 1.0                                               
'*  Notes   :                                                   
 
Device 16F887                     ; Processor type
 
Xtal 10                           ; Cristal 10Mhz
 
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 Adin_Res = 8              ; resolutie 8 bits
Declare Adin_Tad = frc            ; set RC osc
Declare Adin_Stime = 50           ; sample tijd 5
 
Declare CCP1_Pin PORTC.2          ; pwm 1 op poort C.2
 
Symbol LINKS  = PORTC.0           ; Uitgang motor linksom
Symbol RECHTS = PORTC.1           ; Uitgang motor rechtsom
 
Symbol S1 = PORTE.2               ; Ingang links / rechts
 
Symbol FREQUENTIE = 5000          ; PWM frequentie 5KHz
 
Dim POTMETER As Byte              ; Variabele waarde potmeter
 
Dim TERUGKOPPELING As Byte        ; Variabele waarde terugkoppeling
 
Dim VERSTERKING As Byte           ; Variabele waarde versterking
 
Clear                             ; Wis geheugen 
 
         ;543210                  ; Hulpregel poort A
PORTA  = %000000                  ; Maak poort A laag
TRISA  = %111111                  ; Poort_A I/O
 
         ;543210                  ; Hulpregel poort B
PORTB  = %000000                  ; Maak poort B laag
TRISB  = %111111                  ; 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  = %111                     ; Poort_E I/O
 
         ;76543210                ; Hulpregel analoog
ADCON0 = %00000001                ; ADCON0 register analoog
 
         ;543210                  ; Hulpregel analoog poort_B
ANSELH = %000000                  ; ANSEL register analoog poort_B
 
;----------------------------------------------
; VOORBEELD STROOMMETING PLUS TERUGKOPPELING -
; TOERENTAL MINI MOTORREGELAAR.  
;----------------------------------------------
 
HPWM 1,0,FREQUENTIE
 
LINKS = 0
RECHTS = 0
 
RUN:
    LINKS = 0
    RECHTS = 0
 
    If S1 = 1 Then
     GoTo LINKSOM
    EndIf
 
    If S1 = 0 Then
     GoTo RECHTSOM
    EndIf     
GoTo RUN
 
LINKSOM:
    POTMETER = ADIn 0
    TERUGKOPPELING = ADIn 1
 
    LINKS = 1
    RECHTS = 0
 
    If S1 = 0 Then
     GoTo RUN
    EndIf
 
    If POTMETER < 2 Then
     HPWM 1,0,FREQUENTIE
    EndIf
 
    VERSTERKING = TERUGKOPPELING / 2
 
    If POTMETER > 2 Then
     HPWM 1,POTMETER / 2 + VERSTERKING,FREQUENTIE
    EndIf
 
    If TERUGKOPPELING > 250 Then  
     GoSub OVERSTROOM
    EndIf   
GoTo LINKSOM
 
RECHTSOM:
    POTMETER = ADIn 0
    TERUGKOPPELING = ADIn 1
 
    RECHTS = 1
    LINKS = 0
 
    If S1 = 1 Then
     GoTo RUN
    EndIf
 
    If POTMETER < 2 Then
     HPWM 1,0,FREQUENTIE
    EndIf
 
    VERSTERKING = TERUGKOPPELING / 2
 
    If POTMETER > 2 Then
     HPWM 1,POTMETER / 2 + VERSTERKING,FREQUENTIE
    EndIf
 
 
If TERUGKOPPELING > 250 Then  
     GoSub OVERSTROOM
    EndIf   
GoTo RECHTSOM
 
OVERSTROOM:
    LINKS = 0
    RECHTS = 0   
    Return
GoTo OVERSTROOM
 
End

Het tweede voorbeeldprogramma is iets uitgebreider, de analoge ingangen zijn hetzelfde gebleven. Er wordt nu maar van één PWM-signaal gebruik gemaakt en een linksom en rechtsom signaal. De richting wordt bepaald met S1. Het PWM-signaal wordt op de regelaar gezet als de potmeter waarde groter is dan twee, en het PWM-signaal gaat eraf als het potmeter signaal kleiner is dan twee. Er is ook een variabele toegevoegd, genaamd VERSTERKING.

Het potmeter signaal wordt door twee gedeeld, net zoals het terugkoppelsignaal. Het gedeelde terugkoppelsignaal wordt in de variabele versterking gezet en daarna wordt het opgeteld bij het gedeelde potmeter signaal. Alle twee de programma's zijn gebruikt samen met de Maxon motor, en daar zijn ook de waardes op berekend. Als je hier een andere motor mee wil testen, dan zul je de gedeelde waardes aan moeten passen. Dus voor de Bühler motor en de RB35 motor moeten die waardes aangepast worden.

Als het slecht uitkomt met de hele getallen, nu dus VERSTERKING = TERUGKOPPELING / 2 dan kun je ook dit gebruiken als variabele: DIM VERSTERKING AS FLOAT. Dan kun je bijvoorbeeld VERSTERKING = TERUGKOPPELING / 1.3 of VERSTERKING = TERUGKOPPELING / 2.2 gebruiken. Dan zit je dus niet aan de hele getallen vast.

De werking van het geheel is als volgt. Als je nu de motoras tegenhoudt, dan voel je dat het koppel van de motor omhoog gaat en dat de regelaar probeert om het toerental constant te houden. Bij overstroom van de motor blijft het motorkoppel gelijk, net als bij het eerste programma. De regelaar kan op deze manier ook nooit overbelast raken.

Je kunt ook een PID programma maken, dan zal het geheel nog beter regelen, maar dat is vrij moeilijk in te regelen. En ik denk niet dat we het te moeilijk moeten maken.

Het eindresultaat

Hier nog een foto van het geheel zoals het geworden is.

De opgebouwde printDe opgebouwde print

Op de foto zijn de componenten ook goed te zien, onder het koellichaam zie je nog net de L293D zitten.

Dit artikel is geschreven door Lambiek.