Sine pwm

Dependencies:   mbed

Committer:
jromeroramos
Date:
Thu Oct 25 12:50:06 2018 +0000
Revision:
0:30dcc43db185
First version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jromeroramos 0:30dcc43db185 1 #include "mbed.h"
jromeroramos 0:30dcc43db185 2
jromeroramos 0:30dcc43db185 3
jromeroramos 0:30dcc43db185 4 #ifndef M_PI
jromeroramos 0:30dcc43db185 5 #define M_PI 3.14159265358979323846
jromeroramos 0:30dcc43db185 6 #endif
jromeroramos 0:30dcc43db185 7
jromeroramos 0:30dcc43db185 8 DigitalOut myled(LED1);
jromeroramos 0:30dcc43db185 9 PwmOut CH1(PA_8);
jromeroramos 0:30dcc43db185 10 PwmOut CH2(PA_15);
jromeroramos 0:30dcc43db185 11 PwmOut CH3(PA_6);
jromeroramos 0:30dcc43db185 12
jromeroramos 0:30dcc43db185 13 // dc : duty cycle
jromeroramos 0:30dcc43db185 14 // n: sample
jromeroramos 0:30dcc43db185 15 // f:
jromeroramos 0:30dcc43db185 16
jromeroramos 0:30dcc43db185 17 /* This program calculates values of a sine
jromeroramos 0:30dcc43db185 18 function and splits them up in 100 points, these points are then written
jromeroramos 0:30dcc43db185 19 to the duty cycle of the pwm signals.
jromeroramos 0:30dcc43db185 20 */
jromeroramos 0:30dcc43db185 21 Ticker interrupt;
jromeroramos 0:30dcc43db185 22 InterruptIn button(USER_BUTTON);
jromeroramos 0:30dcc43db185 23 int n;
jromeroramos 0:30dcc43db185 24 double dc_min = 0.0, dc_max = 1.0;
jromeroramos 0:30dcc43db185 25 void sine_dc() {
jromeroramos 0:30dcc43db185 26 double dc, sine_term;
jromeroramos 0:30dcc43db185 27 n = n + 1;
jromeroramos 0:30dcc43db185 28 if(n == 100) n = 0;
jromeroramos 0:30dcc43db185 29 sine_term = (1 + sin(2*M_PI*n/100.0));
jromeroramos 0:30dcc43db185 30 dc = sine_term * dc_min + (2 - sine_term) * dc_max;
jromeroramos 0:30dcc43db185 31 CH1.write(dc/2);
jromeroramos 0:30dcc43db185 32 CH2.write(dc/2);
jromeroramos 0:30dcc43db185 33 CH3.write(dc/2);
jromeroramos 0:30dcc43db185 34 }
jromeroramos 0:30dcc43db185 35 int main() {
jromeroramos 0:30dcc43db185 36 int f = 20000;
jromeroramos 0:30dcc43db185 37 n = 0;
jromeroramos 0:30dcc43db185 38 CH1.period_us(100);
jromeroramos 0:30dcc43db185 39 CH1.write(0.5);
jromeroramos 0:30dcc43db185 40 CH2.period_us(100);
jromeroramos 0:30dcc43db185 41 CH2.write(0.5);
jromeroramos 0:30dcc43db185 42 CH3.period_us(100);
jromeroramos 0:30dcc43db185 43 CH3.write(0.5);
jromeroramos 0:30dcc43db185 44 interrupt.attach_us(&sine_dc, f);
jromeroramos 0:30dcc43db185 45
jromeroramos 0:30dcc43db185 46 while(1) {
jromeroramos 0:30dcc43db185 47 myled = !myled;
jromeroramos 0:30dcc43db185 48 wait(1);
jromeroramos 0:30dcc43db185 49 }
jromeroramos 0:30dcc43db185 50 }
jromeroramos 0:30dcc43db185 51