デバッグ中PWM1ch20161212

Dependencies:   mbed

Committer:
woodbed
Date:
Mon Dec 12 07:55:56 2016 +0000
Revision:
1:505435f49bf9
Parent:
0:7e84644181bb
????

Who changed what in which revision?

UserRevisionLine numberNew 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 }