Configured to generate a pwm using a sine function. For the complementary pwm for h-bridge you may invert it by hardware and connect it to a IR2110 in order to provide a dead time on turn on

Dependencies:   mbed

Fork of Inverter_epusalle by JHEFFERSON ROMERO

Committer:
roncanciovl
Date:
Wed May 15 17:39:48 2019 +0000
Revision:
2:3d02ab7f1776
Parent:
1:19c43d391b22
Ajustes

Who changed what in which revision?

UserRevisionLine numberNew contents of line
roncanciovl 1:19c43d391b22 1 /* Power electronics usalle*/
roncanciovl 1:19c43d391b22 2
jromeroramos 0:30dcc43db185 3 #include "mbed.h"
jromeroramos 0:30dcc43db185 4
jromeroramos 0:30dcc43db185 5
jromeroramos 0:30dcc43db185 6 #ifndef M_PI
jromeroramos 0:30dcc43db185 7 #define M_PI 3.14159265358979323846
jromeroramos 0:30dcc43db185 8 #endif
jromeroramos 0:30dcc43db185 9
roncanciovl 1:19c43d391b22 10 // Number of samples to generate sine pattern
roncanciovl 1:19c43d391b22 11 #define SINE_STEPS 100
roncanciovl 1:19c43d391b22 12 // Pwm period in us
roncanciovl 1:19c43d391b22 13 #define PWM_PERIOD 20
roncanciovl 1:19c43d391b22 14
roncanciovl 1:19c43d391b22 15
jromeroramos 0:30dcc43db185 16 DigitalOut myled(LED1);
roncanciovl 1:19c43d391b22 17 PwmOut CH1(PWM_OUT);
roncanciovl 1:19c43d391b22 18
roncanciovl 1:19c43d391b22 19
jromeroramos 0:30dcc43db185 20
jromeroramos 0:30dcc43db185 21 // dc : duty cycle
roncanciovl 1:19c43d391b22 22 // n: a sample
roncanciovl 1:19c43d391b22 23 // T: Time in microsecond the sine_dc function is evaluated
roncanciovl 1:19c43d391b22 24 // 1/PWM_PERIOD defines the conmutation frequency (default 50kHz)
roncanciovl 1:19c43d391b22 25 // T divided by PWM_PERIOD defines the number of pwm cycles for each sine term sample (default 8.3)
roncanciovl 1:19c43d391b22 26 // T times SINE_STEPS defines sine modulation period
jromeroramos 0:30dcc43db185 27
jromeroramos 0:30dcc43db185 28 /* This program calculates values of a sine
jromeroramos 0:30dcc43db185 29 function and splits them up in 100 points, these points are then written
jromeroramos 0:30dcc43db185 30 to the duty cycle of the pwm signals.
jromeroramos 0:30dcc43db185 31 */
jromeroramos 0:30dcc43db185 32 Ticker interrupt;
jromeroramos 0:30dcc43db185 33 InterruptIn button(USER_BUTTON);
jromeroramos 0:30dcc43db185 34 int n;
jromeroramos 0:30dcc43db185 35 double dc_min = 0.0, dc_max = 1.0;
jromeroramos 0:30dcc43db185 36 void sine_dc() {
jromeroramos 0:30dcc43db185 37 double dc, sine_term;
jromeroramos 0:30dcc43db185 38 n = n + 1;
roncanciovl 1:19c43d391b22 39 if(n == SINE_STEPS) n = 0;
roncanciovl 1:19c43d391b22 40 sine_term = sin(2*M_PI*n/SINE_STEPS);
roncanciovl 1:19c43d391b22 41 // Convert sine term to duty cycle: if sine_term == 0, then dc = 0.5
roncanciovl 2:3d02ab7f1776 42 if (sine_term > 0) dc = 0.5 + (sine_term * (dc_max - 0.5));
roncanciovl 2:3d02ab7f1776 43 if (sine_term < 0) dc = 0.5 + (sine_term * (0.5 - dc_min));
roncanciovl 2:3d02ab7f1776 44 if (sine_term == 0) dc = 0.5;
roncanciovl 1:19c43d391b22 45 CH1.write(dc);
roncanciovl 2:3d02ab7f1776 46 }
roncanciovl 1:19c43d391b22 47
jromeroramos 0:30dcc43db185 48 int main() {
roncanciovl 1:19c43d391b22 49 int T = 166;
jromeroramos 0:30dcc43db185 50 n = 0;
roncanciovl 1:19c43d391b22 51 CH1.period_us(PWM_PERIOD);
jromeroramos 0:30dcc43db185 52 CH1.write(0.5);
roncanciovl 1:19c43d391b22 53
roncanciovl 1:19c43d391b22 54
roncanciovl 1:19c43d391b22 55
roncanciovl 1:19c43d391b22 56 //
roncanciovl 1:19c43d391b22 57 interrupt.attach_us(&sine_dc, T);
jromeroramos 0:30dcc43db185 58
jromeroramos 0:30dcc43db185 59 while(1) {
jromeroramos 0:30dcc43db185 60 myled = !myled;
jromeroramos 0:30dcc43db185 61 wait(1);
jromeroramos 0:30dcc43db185 62 }
jromeroramos 0:30dcc43db185 63 }
jromeroramos 0:30dcc43db185 64