Gepost door Jeroen Vreuls op woensdag 27 september 2017 22:07
Ik heb ook een paar software voorbeelden gemaakt in PICBASIC, de gebruikte controller is een PIC16F887.
'* 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.
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.