JHEFFERSON ROMERO
/
Inverter_epusalle
Sine pwm
main.cpp@0:30dcc43db185, 2018-10-25 (annotated)
- Committer:
- jromeroramos
- Date:
- Thu Oct 25 12:50:06 2018 +0000
- Revision:
- 0:30dcc43db185
First version
Who changed what in which revision?
User | Revision | Line number | New 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 |