Gepost door Jeroen Vreuls op donderdag 16 januari 2020 22:50
Voor de test regeling heb ik een PIC16F887 microcontroller gebruikt en een zelfgebouwde driver voor de stappenmotor. De driver wordt met puls en richting aangestuurd, ook zit er een step en hold ingang op de driver. Deze heeft twee functies, of je gebruikt hem voor de enable, of je gebruikt hem voor een lagere stroom door de motor als deze stilstaat. Die keuze kun je maken door een instelpotmeter te verdraaien. Als je zelf zo'n regeling wil maken om de draadspanning constant te houden, dan kan dat gewoon met een PIC12F683 en een standaard stappenmotordriver. Daar kun je dan gelijk de PWM-regeling in maken voor de snijdraad verwarming, mocht die nog niet op de bestaande of zelf te bouwen machine zitten. Het hoeft dus niet met een PIC16F887. Een uitgebreidere beschrijving van de stappenmotorregeling kun je hier vinden.
De software is in Basic gemaakt met Proton Plus.
Device 16F887 ; Processor type
Xtal 10 ; Crystal 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 = 10 ; resolutie 8 bits
Declare Adin_Tad = frc ; set RC osc
Declare Adin_Stime = 50 ; sample tijd 5
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 D.4 t/m D.7
Declare Rsin_Pin PORTB.0 ; Data in
Declare Rsout_Pin PORTB.1 ; Data uit
Declare Serial_Baud 9600 ; Baudrate 9600
Declare Serial_Data 8 ; Seriele data 8 bit
Symbol S1 = PORTE.2 ; Schakelaar draad invoer
Symbol PULS = PORTC.2 ; Uitgang stappenmotor driver
Symbol DIR = PORTC.1 ; Uitgang stappenmotor driver
Symbol STEP_HOLD = PORTC.0 ; Uitgang stappenmotor driver
Symbol SPAN_WAARDE = 512 ; Waarde sensor
Symbol FREQUENTIE = 3000 ; Instelling stap frequentie
Symbol HYSTERESIS = 20 ; Waarde hysteresis
Dim SENSOR_WAARDE As Word ; Variabele sensor waarde
Cls ; Wis display
DelayMS 500 ; Pauze 0.5 sec
Clear ; Wis geheugen
;543210 ; Hulpregel poort A
PORTA = %000000 ; Maak poort A laag
TRISA = %000001 ; 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 = %100 ; Poort_E I/O
;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 ; ANSELH register analoog poort_B
RUN:
If S1 = 1 Then
GoSub DRAAD_INVOER
EndIf
SENSOR_WAARDE = ADIn 0
If SENSOR_WAARDE > SPAN_WAARDE And SENSOR_WAARDE - SPAN_WAARDE > HYSTERESIS Then
STEP_HOLD = 1
DIR = 1
PULS = 1
DelayUS FREQUENTIE
PULS = 0
DelayUS FREQUENTIE
EndIf
If SPAN_WAARDE > SENSOR_WAARDE And SPAN_WAARDE - SENSOR_WAARDE > HYSTERESIS Then
STEP_HOLD = 1
DIR = 0
PULS = 1
DelayUS FREQUENTIE
PULS = 0
DelayUS FREQUENTIE
EndIf
If SENSOR_WAARDE = SPAN_WAARDE Then
PULS = 0
EndIf
GoTo RUN
DRAAD_INVOER:
STEP_HOLD = 0
PULS = 0
If S1 = 0 Then
STEP_HOLD = 1
DelayMS 100
Return
EndIf
GoTo DRAAD_INVOER
End
Schakelaar S1 dient voor de draad invoer, als S1 hoog is kun je de stappenmotor met de hand draaien. Ook kan er geen puls naar de motor gestuurd worden op dat moment. Nu kan de snijdraad ingevoerd worden en aangesloten worden op de kracht sensor. Als S1 laag is wordt er weer naar de RUN
mode gegaan en zal de snijdraad gespannen worden tot de juiste waarde bereikt is. Het signaal dat van de sensor komt is een analoog signaal tussen de 0 en 5 V DC, deze waarde wordt vergeleken met de SPAN_WAARDE
. De SPAN_WAARDE
staat hier op 512, als de waarde op de analoge ingang ook 512 is dan staat de snijdraad op de juiste mechanische spanning. Door nu de SPAN_WAARDE
te verhogen of te verlagen kun je de mechanische spanning veranderen. Je zou ook nog een extra analoge ingang hiervoor aan kunnen maken en daar een potmeter op aan sluiten, dan kun je de mechanische spanning van de snijdraad via de potmeter regelen.
De analoge ingang staat hier op 10 bit, dus een waarde van 0 tot 5 V DC komt overeen met een digitale waarde van 0 tot 1024. Zoals ik al zei, dit hele riedeltje kan in een PIC12F683. De PIC12F683 heeft vier kanalen 10 bit analoog aan boord. Als je een externe potmeter voor de SPAN_WAARDE
zou gebruiken dan hou je nog één pin over, kan precies dus. Ook kun je kiezen om het programma iets uit te breiden en de extra potmeter gebruiken om bijvoorbeeld de temperatuur van je snijdraad te regelen. Maar dan heb je niet genoeg I/O voor de externe potmeter om de draadspanning te regelen, dat moet dan weer via de software. Maar dat moet geen probleem zijn lijkt mij.
Dit artikel is geschreven door Lambiek.
Als je ingelogd bent kun je een reactie plaatsen.
Is het niet veel simpeler de verwarmingsdraad aan een zijde gewoon vast te klemmen, over een paar katrolletjes te laten lopen en aan de andere kant een gewichtje van een paar honderd gram eraan te hangen?
Trekkracht constant onafhankelijk van lengteverandering draad.
Ja, maar je zit met verschillende soorten piepschuim met een verschillend soortelijk gewicht. Ook heb je te maken met verschillende diktes van je snijdraad, dus software matig de spanning aanpassen heeft dan toch de voorkeur.