TriangularWave

Dependencies:   mbed

Committer:
VigneshRSR
Date:
Mon Aug 17 00:08:46 2015 +0000
Revision:
0:0487fe0e0dd5
TriangularWave

Who changed what in which revision?

UserRevisionLine numberNew contents of line
VigneshRSR 0:0487fe0e0dd5 1 #include "mbed.h"
VigneshRSR 0:0487fe0e0dd5 2
VigneshRSR 0:0487fe0e0dd5 3 //Number of dutycycle steps for output wave
VigneshRSR 0:0487fe0e0dd5 4 #define TRI_STEPS 33
VigneshRSR 0:0487fe0e0dd5 5
VigneshRSR 0:0487fe0e0dd5 6 //Frequency of output sine in Hz
VigneshRSR 0:0487fe0e0dd5 7 #define TRI_OUT_FREQ 1
VigneshRSR 0:0487fe0e0dd5 8
VigneshRSR 0:0487fe0e0dd5 9 //Frequency of Pulse Width Modulated signal in Hz
VigneshRSR 0:0487fe0e0dd5 10 #define PWM_FREQ 6600
VigneshRSR 0:0487fe0e0dd5 11
VigneshRSR 0:0487fe0e0dd5 12 float tri_duty[TRI_STEPS];
VigneshRSR 0:0487fe0e0dd5 13
VigneshRSR 0:0487fe0e0dd5 14 //PWM pin
VigneshRSR 0:0487fe0e0dd5 15 PwmOut mypwm(D10);
VigneshRSR 0:0487fe0e0dd5 16
VigneshRSR 0:0487fe0e0dd5 17 //Heartbeat LED
VigneshRSR 0:0487fe0e0dd5 18 DigitalOut myled(LED1);
VigneshRSR 0:0487fe0e0dd5 19
VigneshRSR 0:0487fe0e0dd5 20 //Ticker to update the PWM dutycycle
VigneshRSR 0:0487fe0e0dd5 21 Ticker pwm_ticker;
VigneshRSR 0:0487fe0e0dd5 22
VigneshRSR 0:0487fe0e0dd5 23 //Ticker calls this fucntion to update the PWM dutycycle
VigneshRSR 0:0487fe0e0dd5 24 void pwm_duty_updater() {
VigneshRSR 0:0487fe0e0dd5 25 static int idx = 0;
VigneshRSR 0:0487fe0e0dd5 26 mypwm.write(tri_duty[idx]); // Set the dutycycle % to next value in array
VigneshRSR 0:0487fe0e0dd5 27 idx++; // Increment the idx
VigneshRSR 0:0487fe0e0dd5 28 if (idx == TRI_STEPS) idx=0; // Reset the idx when the end has been reached
VigneshRSR 0:0487fe0e0dd5 29 }
VigneshRSR 0:0487fe0e0dd5 30
VigneshRSR 0:0487fe0e0dd5 31 int main() {
VigneshRSR 0:0487fe0e0dd5 32 float tri[] = {0,
VigneshRSR 0:0487fe0e0dd5 33 0.0625,
VigneshRSR 0:0487fe0e0dd5 34 0.125,
VigneshRSR 0:0487fe0e0dd5 35 0.1875,
VigneshRSR 0:0487fe0e0dd5 36 0.25,
VigneshRSR 0:0487fe0e0dd5 37 0.3125,
VigneshRSR 0:0487fe0e0dd5 38 0.375,
VigneshRSR 0:0487fe0e0dd5 39 0.4375,
VigneshRSR 0:0487fe0e0dd5 40 0.5,
VigneshRSR 0:0487fe0e0dd5 41 0.5625,
VigneshRSR 0:0487fe0e0dd5 42 0.625,
VigneshRSR 0:0487fe0e0dd5 43 0.6875,
VigneshRSR 0:0487fe0e0dd5 44 0.75,
VigneshRSR 0:0487fe0e0dd5 45 0.8125,
VigneshRSR 0:0487fe0e0dd5 46 0.875,
VigneshRSR 0:0487fe0e0dd5 47 0.9375,
VigneshRSR 0:0487fe0e0dd5 48 1,
VigneshRSR 0:0487fe0e0dd5 49 0.9375,
VigneshRSR 0:0487fe0e0dd5 50 0.875,
VigneshRSR 0:0487fe0e0dd5 51 0.8125,
VigneshRSR 0:0487fe0e0dd5 52 0.75,
VigneshRSR 0:0487fe0e0dd5 53 0.6875,
VigneshRSR 0:0487fe0e0dd5 54 0.625,
VigneshRSR 0:0487fe0e0dd5 55 0.5625,
VigneshRSR 0:0487fe0e0dd5 56 0.5,
VigneshRSR 0:0487fe0e0dd5 57 0.4375,
VigneshRSR 0:0487fe0e0dd5 58 0.375,
VigneshRSR 0:0487fe0e0dd5 59 0.3125,
VigneshRSR 0:0487fe0e0dd5 60 0.25,
VigneshRSR 0:0487fe0e0dd5 61 0.1875,
VigneshRSR 0:0487fe0e0dd5 62 0.125,
VigneshRSR 0:0487fe0e0dd5 63 0.0625,
VigneshRSR 0:0487fe0e0dd5 64 0};
VigneshRSR 0:0487fe0e0dd5 65
VigneshRSR 0:0487fe0e0dd5 66 for (int i = 0; i < TRI_STEPS; i++) {
VigneshRSR 0:0487fe0e0dd5 67 tri_duty[i] = tri[i];
VigneshRSR 0:0487fe0e0dd5 68 }
VigneshRSR 0:0487fe0e0dd5 69
VigneshRSR 0:0487fe0e0dd5 70 // Set PWM frequency
VigneshRSR 0:0487fe0e0dd5 71 mypwm.period( 1.0f / (float) PWM_FREQ);
VigneshRSR 0:0487fe0e0dd5 72
VigneshRSR 0:0487fe0e0dd5 73 // Init the Ticker to call the dutycyle updater at the required interval
VigneshRSR 0:0487fe0e0dd5 74 // The update should be at (SINE_STEPS * SINE_OUT_FREQ)
VigneshRSR 0:0487fe0e0dd5 75 pwm_ticker.attach(&pwm_duty_updater, 1.0f / (float)(TRI_STEPS * TRI_OUT_FREQ));
VigneshRSR 0:0487fe0e0dd5 76
VigneshRSR 0:0487fe0e0dd5 77 while(1){ //infinite loop
VigneshRSR 0:0487fe0e0dd5 78 myled = !myled;
VigneshRSR 0:0487fe0e0dd5 79 wait(0.5);
VigneshRSR 0:0487fe0e0dd5 80 }
VigneshRSR 0:0487fe0e0dd5 81 }