Gepost door Gerrit Jan Dreijer op maandag 5 juni 2017
'* 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.