Laminator Speed Controller

Toner Transfer Mod for PCB Making (2020)

Modified Laminator

About

I used to make my own PCBs using the toner transfer method — printing onto glossy magazine paper and running it through a laminator onto copper-clad board. To improve success rate and transfer quality, I modified the laminator to run extremely slowly using a PIC16F88-based controller circuit.

This controller cycles the motor on and off, allowing the board to heat thoroughly before advancing. It may take up to 20 minutes to pass a board through, but the results are significantly more reliable than repeating failed transfers.

 

Safety Notice

⚠️ WARNING: This project switches AC mains power. Only attempt this if you're confident working with high voltage. Insulate and enclose all mains components properly.

 

Circuit Diagram

Circuit Diagram

 

Features & Modes

  • Powered by PIC16F88
  • Controls motor through MOC3031M opto-isolated TRIAC trigger
  • Push-button cycles through 4 speed modes:
  • Mode 0 – Motor on continuously (standard laminator operation)
  • Mode 1 – On 0.5s, off 3s
  • Mode 2 – On 0.5s, off 6s
  • Mode 3 – On 0.5s, off 10s

Each mode change is confirmed by flashing the LED the corresponding number of times. The controller defaults to normal mode on power-up.

 

Firmware

The firmware was written in Assembly. It controls the motor timing, LED indication, and button-based mode switching logic. The delay routine and LED blink count are implemented manually using nested loops and timers.

See below for full source code:

View Firmware Source (ASM)
; Laminator Speed Controller - 2020 IanThor
; PIC16F88 firmware for slowing the motor to aid toner transfer PCB making

list p=16F88
#include <p16F88.inc>

__CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_IO

; Variables
mode            EQU 0x21
delayCounter    EQU 0x22
delayValue      EQU 0x23
tempdata        EQU 0x24
count           EQU 0x29
counter         EQU 0x2A
button          EQU 1
motor           EQU 4

org 0
    goto initialise
org 0x04
    goto start

initialise:
    bsf STATUS, RP0
    movlw b'00000010'
    movwf TRISA
    movlw b'00000000'
    movwf TRISB
    movlw b'01101000'
    movwf OSCCON

Stableloop:
    btfss OSCCON, IOFS
    goto Stableloop

    movlw b'00000000'
    movwf ANSEL
    bcf STATUS, RP0

start:
    movlw 0x00
    movwf mode
    bsf PORTA, 4  ; Motor ON

mainloop:
    movf mode, W
    movwf counter

flashloop:
    bsf PORTA, 2  ; LED ON
    movlw 0xFF
    call MSdelay
    bcf PORTA, 2  ; LED OFF
    movlw 0xFF
    call MSdelay
    decfsz counter, f
    goto flashloop

lamloop:
    bsf PORTA, 4
    bsf PORTA, 2
    ; On-time delay (approx. 0.5s)
    repeat4: movlw 0xFF
    call MSdelay
    decfsz count, f
    goto repeat4

    bcf PORTA, 2
    btfsc PORTA, button
    goto pressed

    bcf PORTA, 4
    movf mode, W
    movwf counter
    xorwf counter, W
    btfsc STATUS, Z
    goto lamloop

timeloop:
    call secondDelay
    btfsc PORTA, button
    goto pressed
    decfsz counter, f
    goto timeloop
    goto lamloop

pressed:
    ; Mode cycling logic (0 → 10 → 15 → 20 → 0)
    movlw 0x00
    xorwf mode, W
    btfss STATUS, Z
    goto check10
    movlw 0x0A
    movwf mode
    goto mainloop

check10:
    movlw 0x0A
    xorwf mode, W
    btfss STATUS, Z
    goto check15
    movlw 0x0E
    movwf mode
    goto mainloop

check15:
    movlw 0x0E
    xorwf mode, W
    btfss STATUS, Z
    goto check20
    movlw 0x13
    movwf mode
    goto mainloop

check20:
    movlw 0x13
    xorwf mode, W
    btfss STATUS, Z
    goto pressed
    movlw 0x00
    movwf mode
    bsf PORTA, 4
    goto mainloop

; Delay routines
MSdelay:
    movwf delayCounter
outer1:
    movlw 0xA4
    movwf delayValue
inner1:
    decfsz delayValue, f
    goto inner1
    decfsz delayCounter, f
    goto outer1
    return

secondDelay:
    bsf PORTA, 3
    repeat8: movlw D'250'
    call MSdelay
    decfsz count, f
    goto repeat8
    bcf PORTA, 3
    repeat8b: movlw D'250'
    call MSdelay
    decfsz count, f
    goto repeat8b
    return

end

 

Final Result

  • Significantly improved toner transfer quality
  • Completely silent operation
  • 4 programmable speed profiles

 

For info, the best paper to transfer laser toner is that super thin pages that magazines are printed on.

 

Download

Get the source code, hex file and proteus simulation here: laminator.zip

 

Build

  • Circuit Diagram
Circuit Diagram
  • Circuit Diagram
Circuit Diagram
 

 

 

← Back to Projects