Motorregelaar elektrische step

Gepost door Gerrit Jan Dreijer op maandag 5 juni 2017 17:38

Het programma

'*  Name    : MOTORREGELAAR VOOR ELEKTRISCHE STEP.                                     
'*  Author  : H van Zwieten.                                    
'*  Notice  : Copyright (c) 2017 H.v.Z.                         
'*          : All Rights Reserved                               
'*  Date    : 30-4-2017                                         
'*  Version : 1.0                                               
'*  Notes   :                                                   
                                                  
Device 12F683                     ; processor type

Xtal 4                            ; Cristal 4Mhz

Config WDT_OFF,_                  ; WatchDog Timer uit
       PWRTE_ON,_                 ; Power-up Timer Enable aan
       MCLRE_OFF,_                ; Externe Master Reset Enable uit
       INTRC_OSC_NOCLKOUT         ; Interne oscilator aan
     
All_Digital true                  ; Alle poorten digitaal

Declare CCP1_Pin GPIO.2           ; HPWM_1

Declare Adin_Res   = 8            ; Resolutie 8 bits      
Declare Adin_Tad   = frc          ; Set rc osc     
Declare Adin_Stime = 50           ; Sample tijd 5        

Symbol LED       = GPIO.0         ; Uitgang led rem / temp
Symbol VRIJGAVE  = GPIO.5         ; Ingang rem

Symbol FREQUENTIE = 2500          ; PWM frequentie 2.5KHz

Dim GASHENDEL As Word             ; Variabele gashendel
Dim WAARDE As Word                ; Variabele waarde PWM
Dim OVER_TEMP As Byte             ; Variabele temperatuur

Clear                             ; Wis geheugen

         ;543210                  ; Hulpregel
GPIO   = %000000                  ; Maak poort laag
TRISIO = %111010                  ; Poort I/O

         ;76543210                ; Hulpregel control register
ADCON0 = %00000001                ; A/D control register


;------------------------------------------
; PROGRAMMA MOTORREGELAAR ELEKTRISCHE STEP.
;------------------------------------------

;------------------------------------------------------
; ZET LED, WAARDE, GASHENDEL, OVER_TEMP EN HPWM OP NUL.
;------------------------------------------------------
 
LED = 0                           
WAARDE = 0                        
GASHENDEL = 0
OVER_TEMP = 0
HPWM 1,0,FREQUENTIE 

;-----------------------------------------
; START VOORWAARDE VRIJGAVE MOTORREGELAAR.
; BIJ REMMEN KNIPPERT LED LANGZAAM.
;-----------------------------------------             

START_VOORWAARDE:                 

    If VRIJGAVE = 1 Then          
     HPWM 1,0,FREQUENTIE         
    EndIf                       
    
    GASHENDEL = ADIn 3 
     
    WAARDE = ((GASHENDEL - 51) * 1.6)
    
    If WAARDE > 255 Then
     WAARDE = 255
    EndIf

    If VRIJGAVE = 0 Then        
     If WAARDE < 15 Then          
      GoTo RUN                    
     EndIf                         
    EndIf                      
    
    LED = 1                       
     DelayMS 500               
    LED = 0                    
     DelayMS 500                  
GoTo START_VOORWAARDE 



;----------------------------------------------------
; RUNMODE MOTORREGELAAR, PLUS BEVEILIGING REM / TEMP.
;----------------------------------------------------        

RUN:                           

    LED = 0
    
    OVER_TEMP = ADIn 1
                
    GASHENDEL = ADIn 3
                
    WAARDE = ((GASHENDEL - 51) * 1.6)
    
    If WAARDE > 255 Then
     WAARDE = 255
    EndIf
    
    HPWM 1,WAARDE,FREQUENTIE      
   
    If OVER_TEMP > 190 Then      
     GoTo TEMP_ALARM            
    EndIf                     
    
    If VRIJGAVE = 1 Then        
     GoTo START_VOORWAARDE       
    EndIf                       
GoTo RUN 

;---------------------------------------------------------
; OVERTEMPERATUUR MOTORREGELAAR BIJ +/- 32 GRADEN CELCIUS.
; TERUG NAAR RUNMODE BIJ +/- 29 GRADEN CELCIUS.
; BIJ OVERTEMPERATUUR KNIPPERT LED SNEL.
;---------------------------------------------------------                      

TEMP_ALARM:                     

    HPWM 1,0,FREQUENTIE          
     
    OVER_TEMP = ADIn 1
                
    GASHENDEL = ADIn 3 
              
    WAARDE = ((GASHENDEL - 51) * 1.6)
    
    If WAARDE > 255 Then
     WAARDE = 255
    EndIf          
    
    If OVER_TEMP < 184 Then    
     If WAARDE < 15 Then          
      GoTo RUN                    
     EndIf                   
    EndIf                       
    
    LED = 1                    
     DelayMS 250                  
    LED = 0                      
     DelayMS 250                  
GoTo TEMP_ALARM                 

End 

Zoals je kunt zien is het programma niet zo groot. Er worden twee analoge signalen gemeten, 1 voor het gashendel en 1 voor de temperatuur controle van de MOSFET's. Er is 1 uitgang voor de led, 1 uitgang voor het PWM-signaal en 1 ingang voor de vrijgave.

Het signaal dat van het gashendel komt moet berekend worden in een formule, het signaal loopt namelijk niet van 0 naar 255. Het gashendel geeft in de nulstand een waarde van 51 en in de maximale stand een waarde van 159. Als je daar niets aan doet zou de motor van de step altijd draaien als het gashendel in de nulstand staat en in de maximale stand zou hij maar 159 zijn in plaats van 255. Dus vandaar de berekening WAARDE = ((GASHENDEL - 51) * 1.6). Op deze manier wordt het hele bereik van het gashendel benut. Om achter de waarde van het gashendel te komen, heb ik een klein programmatje gemaakt zodat ik dat uit kon lezen op een display. Het zijn maar een paar regels.

Op deze manier kun je daar al achter komen. Dat kan niet met de 12F683, maar bijvoorbeeld met een 16F628 of ander type.

RUN:

    WAARDE = ADIn 0
    
    Print At 1,1,Dec3 WAARDE
   
GoTo RUN

De LED in het programma heeft twee functies. Als de rem wordt in geknepen knippert de LED langzaam en als de temperatuur te hoog is knippert de LED snel. De LED gaat uit als het gashendel in de nulstand staat en als de rem losgelaten is, dan pas kan er weer gereden worden. De zelfde voorwaarde geldt voor de temperatuur, pas als de regelaar is afgekoeld en het gashendel in de nulstand staat gaat de LED uit en kan er weer gereden worden. De NTC schakelt de regelaar uit bij ± 40 °C.