View Index by Level
RANDOM PAGE

SITE SEARCH

LOG
IN

SIGN UP

HELP

Picaxe Dimmer


This is the AQA version closing after June 2019. Visit the the version for Eduqas instead.

To gain access to revision questions, please sign up and log in.

A2

Pulse Width Modulation Dimmer or Motor Speed Control

Picoscope Trace

PX-Dimmer.gif

Note the improvised switches. Just press the brown and black wires down to make the pull-up connection to the + supply line..

Motor Speed Control

Speed Control Circuit  Board The Motor

; ==================================
; ===== INITIALISE THE PROGRAM =====
; ==================================
    setfreq em16    ; External-clock Megahertz 16

; ===== Rename b1, b2 and b3 to make the program easier to read =====
    symbol pulse_high = b1
    symbol pulse_low  = b2
    symbol portc_data = b3

; ===== Start the program with about 50:50 mark space ratio
    pulse_high = 128                ; 128 / 4 milliseconds
    pulse_low  = 255 - pulse_high   ; (255 - 128) / 4 milliseconds

; =================================
; ===== THE MAIN PROGRAM LOOP =====
; =================================
start:
    ; ===== PULSE WIDTH MODULATION =============
    high    0               ; Turn the motor on
    pause   pulse_high      ; Short time delay
    low     0               ; Turn the motor off
    pause   pulse_low       ; Short time delay
    ; ==========================================

    portc_data = pins       ; Poll the speed control switches
    
    ; ===== Speed the motor up if this switch is pressed ==================
    if portc_data = 1 then  ; Test the switch on C.0
      inc pulse_high        ; If it's pressed, increase the pulse_high time
      
      if pulse_high = 0 then; Prevent pulse_high going above 255
        pulse_high = 255    ; Since 255 + 1 = 0, fix that problem
      end if
      
      pulse_low = 255 - pulse_high  ; Calculate pulse_low   
    end if
    ; =====================================================================

    ; ===== Slow the motor down if this switch is pressed =================
    if portc_data = 2 then  ; Test the switch on C.1
      dec pulse_high        ; If it's pressed, decrease the pulse_high time
      
      if pulse_high = 255 then; Prevent pulse_high going below 0 
        pulse_high = 0      ; Since 0 - 1 = 255, fix that problem
      end if
      
      pulse_low = 255 - pulse_high  ; Calculate pulse_low   
    end if
    ; =====================================================================
    
    jmp     start           ; Repeat the whole program loop

    ; =====================================================================

 

 

 

reviseOmatic V3     Contacts, ©, Cookies, Data Protection and Disclaimers Hosted at linode.com, London