Piepschuimsnijder

Gepost door Jeroen Vreuls op donderdag 16 januari 2020 22:50

De software

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.

Software

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.

Reacties

Er zijn nog geen reacties geplaatst.

Als je ingelogd bent kun je een reactie plaatsen.