PowerSSR Tail light dimmer example.

Dependencies:   mbed

Committer:
4180_1
Date:
Thu May 09 01:05:42 2013 +0000
Revision:
0:17804efd16c8
PowerSSR Tail light dimmer example code ver 1.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
4180_1 0:17804efd16c8 1
4180_1 0:17804efd16c8 2 #include "mbed.h"
4180_1 0:17804efd16c8 3
4180_1 0:17804efd16c8 4 PwmOut led(LED1); // led 1 indicates dim value
4180_1 0:17804efd16c8 5 DigitalOut led2(LED2); // led 2 indicates delay time for interrupts
4180_1 0:17804efd16c8 6
4180_1 0:17804efd16c8 7 // pin for ZeroCross tail input
4180_1 0:17804efd16c8 8 // An external 1K pullup required
4180_1 0:17804efd16c8 9 InterruptIn zerocross(p27);
4180_1 0:17804efd16c8 10
4180_1 0:17804efd16c8 11 // pin for PowerSSRtail output
4180_1 0:17804efd16c8 12 DigitalOut SSR(p21);
4180_1 0:17804efd16c8 13
4180_1 0:17804efd16c8 14 //use timer interrupts to control dimming
4180_1 0:17804efd16c8 15 Timeout SSRtriggerOn;
4180_1 0:17804efd16c8 16
4180_1 0:17804efd16c8 17 // dimmer value 0.0=off and 1.0=full on
4180_1 0:17804efd16c8 18 volatile float dim;
4180_1 0:17804efd16c8 19
4180_1 0:17804efd16c8 20 // AC power line frequency
4180_1 0:17804efd16c8 21 const float powerlinefrequency=60.000;
4180_1 0:17804efd16c8 22
4180_1 0:17804efd16c8 23 // this interrupt routine is activated after a time delay set by dim value
4180_1 0:17804efd16c8 24 void triggerOn()
4180_1 0:17804efd16c8 25 {
4180_1 0:17804efd16c8 26 SSR = 1;
4180_1 0:17804efd16c8 27 led2=0;
4180_1 0:17804efd16c8 28 }
4180_1 0:17804efd16c8 29
4180_1 0:17804efd16c8 30 // this interrupt routine is activated by every AC line zero crossing
4180_1 0:17804efd16c8 31 // it is needed to synchronize the SCR turnon time delay to the AC line
4180_1 0:17804efd16c8 32 void dimmer()
4180_1 0:17804efd16c8 33 {
4180_1 0:17804efd16c8 34 // turn off SSR at zero crossing
4180_1 0:17804efd16c8 35 SSR = 0;
4180_1 0:17804efd16c8 36 // compute time delay using dim value and set timer interrupt
4180_1 0:17804efd16c8 37 // triggers SSR after a small post zero crossing time delay
4180_1 0:17804efd16c8 38 SSRtriggerOn.attach(&triggerOn,(1.001-dim)/(2*powerlinefrequency));
4180_1 0:17804efd16c8 39 led2=1;
4180_1 0:17804efd16c8 40 }
4180_1 0:17804efd16c8 41
4180_1 0:17804efd16c8 42 int main()
4180_1 0:17804efd16c8 43 {
4180_1 0:17804efd16c8 44 //set up interrupt routine to detect AC line zero crossings
4180_1 0:17804efd16c8 45 zerocross.mode(PullNone);
4180_1 0:17804efd16c8 46 wait(.2);
4180_1 0:17804efd16c8 47 zerocross.rise(&dimmer);
4180_1 0:17804efd16c8 48 // main program only sets dimmer level (dim)
4180_1 0:17804efd16c8 49 // interrupt routines dim the light
4180_1 0:17804efd16c8 50 while(1) {
4180_1 0:17804efd16c8 51 //increase brightness
4180_1 0:17804efd16c8 52 for(dim = 0.0; dim <= 1.0; dim += 0.025) {
4180_1 0:17804efd16c8 53 led = dim;
4180_1 0:17804efd16c8 54 wait(0.05);
4180_1 0:17804efd16c8 55 }
4180_1 0:17804efd16c8 56 //decrease brightness
4180_1 0:17804efd16c8 57 for(dim = 1.0; dim >= 0.0; dim -= 0.025) {
4180_1 0:17804efd16c8 58 led = dim;
4180_1 0:17804efd16c8 59 wait(0.05);
4180_1 0:17804efd16c8 60 }
4180_1 0:17804efd16c8 61 }
4180_1 0:17804efd16c8 62 }
4180_1 0:17804efd16c8 63