takuya okada
/
PWM_1ch
デバッグ中PWM1ch20161212
main.cpp@1:505435f49bf9, 2016-12-12 (annotated)
- Committer:
- woodbed
- Date:
- Mon Dec 12 07:55:56 2016 +0000
- Revision:
- 1:505435f49bf9
- Parent:
- 0:7e84644181bb
????
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
woodbed | 0:7e84644181bb | 1 | #include "mbed.h" |
woodbed | 0:7e84644181bb | 2 | |
woodbed | 0:7e84644181bb | 3 | //PWM |
woodbed | 0:7e84644181bb | 4 | PwmOut pwm(p23); |
woodbed | 0:7e84644181bb | 5 | |
woodbed | 0:7e84644181bb | 6 | //Ticker |
woodbed | 0:7e84644181bb | 7 | Ticker timer; |
woodbed | 0:7e84644181bb | 8 | |
woodbed | 0:7e84644181bb | 9 | //Timer |
woodbed | 0:7e84644181bb | 10 | //Timer ta; |
woodbed | 0:7e84644181bb | 11 | |
woodbed | 0:7e84644181bb | 12 | //Digital Out |
woodbed | 0:7e84644181bb | 13 | DigitalOut test(p20); |
woodbed | 0:7e84644181bb | 14 | |
woodbed | 0:7e84644181bb | 15 | //Cos Wave |
woodbed | 0:7e84644181bb | 16 | float coswave[256]; |
woodbed | 0:7e84644181bb | 17 | |
woodbed | 0:7e84644181bb | 18 | //User set Wave Paramater |
woodbed | 0:7e84644181bb | 19 | int sample_dt = 100; //microsec 10kHz |
woodbed | 0:7e84644181bb | 20 | float freq = 200; //Hz |
woodbed | 0:7e84644181bb | 21 | float level = 1; //min=0 max=1 |
woodbed | 0:7e84644181bb | 22 | |
woodbed | 0:7e84644181bb | 23 | |
woodbed | 0:7e84644181bb | 24 | float period = 1000000*1/freq; //microSec |
woodbed | 0:7e84644181bb | 25 | float n = 0; |
woodbed | 0:7e84644181bb | 26 | float n_sample = 0; //The maximum number of sampling points in the signal |
woodbed | 0:7e84644181bb | 27 | float tend = 0; //The remainder of sampling points in the signal |
woodbed | 0:7e84644181bb | 28 | float tstart = 0; //start offset of sampling time |
woodbed | 0:7e84644181bb | 29 | float t_samplepoint = 0; |
woodbed | 0:7e84644181bb | 30 | float table_dt = period/256; |
woodbed | 0:7e84644181bb | 31 | float n_samplepoint = 0; |
woodbed | 0:7e84644181bb | 32 | float rem_samplepoint = 0; |
woodbed | 0:7e84644181bb | 33 | float v_samplepoint = 0; |
woodbed | 0:7e84644181bb | 34 | float signal = 0; |
woodbed | 0:7e84644181bb | 35 | |
woodbed | 0:7e84644181bb | 36 | int pwidth = 0; |
woodbed | 0:7e84644181bb | 37 | |
woodbed | 0:7e84644181bb | 38 | //Signal Culcurate |
woodbed | 0:7e84644181bb | 39 | |
woodbed | 0:7e84644181bb | 40 | |
woodbed | 0:7e84644181bb | 41 | //Signal type parameter |
woodbed | 0:7e84644181bb | 42 | void signal_culc(){ |
woodbed | 0:7e84644181bb | 43 | |
woodbed | 0:7e84644181bb | 44 | //RESP section |
woodbed | 0:7e84644181bb | 45 | n_sample = (period - tstart) / sample_dt; |
woodbed | 0:7e84644181bb | 46 | tend = fmod((period - tstart) , sample_dt); |
woodbed | 1:505435f49bf9 | 47 | if(tend == 0){ |
woodbed | 1:505435f49bf9 | 48 | n_sample = n_sample-1; |
woodbed | 1:505435f49bf9 | 49 | } |
woodbed | 1:505435f49bf9 | 50 | else { |
woodbed | 1:505435f49bf9 | 51 | } |
woodbed | 0:7e84644181bb | 52 | t_samplepoint = tstart + sample_dt * n; //time of sampling point |
woodbed | 0:7e84644181bb | 53 | n_samplepoint = t_samplepoint / table_dt; |
woodbed | 0:7e84644181bb | 54 | rem_samplepoint = fmod(t_samplepoint , table_dt); |
woodbed | 0:7e84644181bb | 55 | v_samplepoint = level*(coswave[(int)n_samplepoint]-(rem_samplepoint/table_dt)*(coswave[(int)n_samplepoint]-coswave[(int)n_samplepoint+1])); |
woodbed | 0:7e84644181bb | 56 | signal = v_samplepoint+0.5; //0-1 -> 0V-3.3V |
woodbed | 0:7e84644181bb | 57 | if(n == (int)n_sample) { |
woodbed | 0:7e84644181bb | 58 | n =0; |
woodbed | 0:7e84644181bb | 59 | tstart = sample_dt - tend; |
woodbed | 0:7e84644181bb | 60 | } |
woodbed | 0:7e84644181bb | 61 | else { |
woodbed | 0:7e84644181bb | 62 | n++; |
woodbed | 0:7e84644181bb | 63 | } |
woodbed | 0:7e84644181bb | 64 | |
woodbed | 0:7e84644181bb | 65 | //PWM Output Pulse width |
woodbed | 0:7e84644181bb | 66 | pwidth = signal * sample_dt; |
woodbed | 0:7e84644181bb | 67 | |
woodbed | 0:7e84644181bb | 68 | pwm.pulsewidth_us(pwidth); |
woodbed | 0:7e84644181bb | 69 | } |
woodbed | 0:7e84644181bb | 70 | |
woodbed | 0:7e84644181bb | 71 | void attime(){ |
woodbed | 0:7e84644181bb | 72 | signal_culc(); |
woodbed | 0:7e84644181bb | 73 | } |
woodbed | 0:7e84644181bb | 74 | |
woodbed | 0:7e84644181bb | 75 | |
woodbed | 0:7e84644181bb | 76 | int main() { |
woodbed | 0:7e84644181bb | 77 | |
woodbed | 0:7e84644181bb | 78 | //Make Cos wave |
woodbed | 0:7e84644181bb | 79 | int i; |
woodbed | 0:7e84644181bb | 80 | for(i=0;i<=255;i++){ //256->255 |
woodbed | 0:7e84644181bb | 81 | coswave[i]=0.5*(cos(2.0*3.1415*i/256)); //256->256 |
woodbed | 0:7e84644181bb | 82 | } |
woodbed | 0:7e84644181bb | 83 | i = 0; |
woodbed | 0:7e84644181bb | 84 | |
woodbed | 0:7e84644181bb | 85 | pwm.period_us(sample_dt); //Pulse_cycle = 100usec = 10kHz |
woodbed | 0:7e84644181bb | 86 | |
woodbed | 0:7e84644181bb | 87 | int j; |
woodbed | 0:7e84644181bb | 88 | j = sample_dt; |
woodbed | 0:7e84644181bb | 89 | timer.attach_us(&attime,j); |
woodbed | 0:7e84644181bb | 90 | |
woodbed | 0:7e84644181bb | 91 | while(1) { |
woodbed | 0:7e84644181bb | 92 | |
woodbed | 0:7e84644181bb | 93 | } |
woodbed | 0:7e84644181bb | 94 | } |