takuya okada
/
PWM_Signal_Generator_DriveSignal_Rev1
駆動信号発生器用プログラム
main.cpp@0:1f4efca8f7dd, 2017-03-24 (annotated)
- Committer:
- woodbed
- Date:
- Fri Mar 24 04:42:17 2017 +0000
- Revision:
- 0:1f4efca8f7dd
???????????
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
woodbed | 0:1f4efca8f7dd | 1 | #include "mbed.h" |
woodbed | 0:1f4efca8f7dd | 2 | |
woodbed | 0:1f4efca8f7dd | 3 | int mode = 1; //0=電気信号発生器 1=駆動信号発生器 |
woodbed | 0:1f4efca8f7dd | 4 | int revision = 1; |
woodbed | 0:1f4efca8f7dd | 5 | |
woodbed | 0:1f4efca8f7dd | 6 | //Serial Port Setting |
woodbed | 0:1f4efca8f7dd | 7 | Serial pc(p13, p14); // シリアルポートのインスタンス |
woodbed | 0:1f4efca8f7dd | 8 | |
woodbed | 0:1f4efca8f7dd | 9 | //PWM Port Setting |
woodbed | 0:1f4efca8f7dd | 10 | PwmOut signal_1(p23); |
woodbed | 0:1f4efca8f7dd | 11 | PwmOut signal_2(p22); |
woodbed | 0:1f4efca8f7dd | 12 | PwmOut signal_3(p21); |
woodbed | 0:1f4efca8f7dd | 13 | |
woodbed | 0:1f4efca8f7dd | 14 | //Ticker |
woodbed | 0:1f4efca8f7dd | 15 | Ticker timer; |
woodbed | 0:1f4efca8f7dd | 16 | |
woodbed | 0:1f4efca8f7dd | 17 | //Digital Out |
woodbed | 0:1f4efca8f7dd | 18 | DigitalOut ledch1(LED1); |
woodbed | 0:1f4efca8f7dd | 19 | |
woodbed | 0:1f4efca8f7dd | 20 | //cos Wave |
woodbed | 0:1f4efca8f7dd | 21 | float coswave[256]; |
woodbed | 0:1f4efca8f7dd | 22 | |
woodbed | 0:1f4efca8f7dd | 23 | //status flug |
woodbed | 0:1f4efca8f7dd | 24 | int status1 =0; //suatus1 : 0=波形出力停止中, 1=波形出力中 |
woodbed | 0:1f4efca8f7dd | 25 | |
woodbed | 0:1f4efca8f7dd | 26 | //User set Wave Paramater 初期値 |
woodbed | 0:1f4efca8f7dd | 27 | int sample_dt = 100; //microsec 10kHz |
woodbed | 0:1f4efca8f7dd | 28 | float hb_carr_freq = 8.7; //Hz |
woodbed | 0:1f4efca8f7dd | 29 | float hb_mod_freq = 1; //Hz |
woodbed | 0:1f4efca8f7dd | 30 | float hb_carr_level = 0.06; //min=0 max=0.5 0.5以上ではMOD 50%以上で振幅が飽和する |
woodbed | 0:1f4efca8f7dd | 31 | float hb_mod_ratio = 60; //0-100 % |
woodbed | 0:1f4efca8f7dd | 32 | float resp_freq = 0.3; //Hz |
woodbed | 0:1f4efca8f7dd | 33 | float resp_level = 0.23; //min=0 max=1 |
woodbed | 0:1f4efca8f7dd | 34 | float snore_freq = 150; //Hz |
woodbed | 0:1f4efca8f7dd | 35 | float snore_level = 0.045; //min=0 max=1 |
woodbed | 0:1f4efca8f7dd | 36 | int snore_oncycle = 10000; //On Time = snore_oncycle * sample_dt, snore_oncycle < snore_allcycle; |
woodbed | 0:1f4efca8f7dd | 37 | int snore_allcycle = 33333; //OFF Time = (allcycle - oncycle) * sample_dt |
woodbed | 0:1f4efca8f7dd | 38 | int snore_onoff = 1; //0: ALL Time ON, 1:On Time only |
woodbed | 0:1f4efca8f7dd | 39 | |
woodbed | 0:1f4efca8f7dd | 40 | //Set wave paramater |
woodbed | 0:1f4efca8f7dd | 41 | //HB_carr |
woodbed | 0:1f4efca8f7dd | 42 | float hb_carr_period = 1000000*1/hb_carr_freq; //microSec |
woodbed | 0:1f4efca8f7dd | 43 | float hb_carr_n = 0; |
woodbed | 0:1f4efca8f7dd | 44 | float hb_carr_n_sample = 0; //The maximum number of sampling points in the signal |
woodbed | 0:1f4efca8f7dd | 45 | float hb_carr_tend = 0; //The remainder of sampling points in the signal |
woodbed | 0:1f4efca8f7dd | 46 | float hb_carr_tstart = 0; //start offset of sampling time |
woodbed | 0:1f4efca8f7dd | 47 | float hb_carr_t_samplepoint = 0; |
woodbed | 0:1f4efca8f7dd | 48 | float hb_carr_table_dt = hb_carr_period/256; |
woodbed | 0:1f4efca8f7dd | 49 | float hb_carr_n_samplepoint = 0; |
woodbed | 0:1f4efca8f7dd | 50 | float hb_carr_v_samplepoint = 0; |
woodbed | 0:1f4efca8f7dd | 51 | |
woodbed | 0:1f4efca8f7dd | 52 | //HB_mod |
woodbed | 0:1f4efca8f7dd | 53 | float hb_mod_period = 1000000*1/hb_mod_freq; |
woodbed | 0:1f4efca8f7dd | 54 | float hb_mod_n = 0; |
woodbed | 0:1f4efca8f7dd | 55 | float hb_mod_n_sample = 0; //The maximum number of sampling points in the signal |
woodbed | 0:1f4efca8f7dd | 56 | float hb_mod_tend = 0; //The remainder of sampling points in the signal |
woodbed | 0:1f4efca8f7dd | 57 | float hb_mod_tstart = 0; //start offset of sampling time |
woodbed | 0:1f4efca8f7dd | 58 | float hb_mod_t_samplepoint = 0; |
woodbed | 0:1f4efca8f7dd | 59 | float hb_mod_table_dt = hb_mod_period/256; |
woodbed | 0:1f4efca8f7dd | 60 | float hb_mod_n_samplepoint = 0; |
woodbed | 0:1f4efca8f7dd | 61 | float hb_mod_v_samplepoint = 0; |
woodbed | 0:1f4efca8f7dd | 62 | |
woodbed | 0:1f4efca8f7dd | 63 | float hb_mod_ra = hb_mod_ratio * 0.01; |
woodbed | 0:1f4efca8f7dd | 64 | float hb_signal = 0; |
woodbed | 0:1f4efca8f7dd | 65 | float mod_signal = 0; |
woodbed | 0:1f4efca8f7dd | 66 | |
woodbed | 0:1f4efca8f7dd | 67 | //RESP |
woodbed | 0:1f4efca8f7dd | 68 | float resp_period = 1000000*1/resp_freq; //microSec |
woodbed | 0:1f4efca8f7dd | 69 | float resp_n = 0; |
woodbed | 0:1f4efca8f7dd | 70 | float resp_n_sample = 0; //The maximum number of sampling points in the signal |
woodbed | 0:1f4efca8f7dd | 71 | float resp_tend = 0; //The remainder of sampling points in the signal |
woodbed | 0:1f4efca8f7dd | 72 | float resp_tstart = 0; //start offset of sampling time |
woodbed | 0:1f4efca8f7dd | 73 | float resp_t_samplepoint = 0; |
woodbed | 0:1f4efca8f7dd | 74 | float resp_table_dt = resp_period/256; |
woodbed | 0:1f4efca8f7dd | 75 | float resp_n_samplepoint = 0; |
woodbed | 0:1f4efca8f7dd | 76 | float resp_v_samplepoint = 0; |
woodbed | 0:1f4efca8f7dd | 77 | float resp_signal = 0; |
woodbed | 0:1f4efca8f7dd | 78 | |
woodbed | 0:1f4efca8f7dd | 79 | //SNORE Paramater |
woodbed | 0:1f4efca8f7dd | 80 | float snore_period = 1000000*1/snore_freq; //microSec |
woodbed | 0:1f4efca8f7dd | 81 | float snore_n = 0; |
woodbed | 0:1f4efca8f7dd | 82 | float snore_n_sample = 0; //The maximum number of sampling points in the signal |
woodbed | 0:1f4efca8f7dd | 83 | float snore_tend = 0; //The remainder of sampling points in the signal |
woodbed | 0:1f4efca8f7dd | 84 | float snore_tstart = 0; //start offset of sampling time |
woodbed | 0:1f4efca8f7dd | 85 | float snore_t_samplepoint = 0; |
woodbed | 0:1f4efca8f7dd | 86 | float snore_table_dt = snore_period/256; //2016/12/12 255->256 |
woodbed | 0:1f4efca8f7dd | 87 | float snore_n_samplepoint = 0; |
woodbed | 0:1f4efca8f7dd | 88 | float snore_v_samplepoint = 0; |
woodbed | 0:1f4efca8f7dd | 89 | int snore_cycle = 0; |
woodbed | 0:1f4efca8f7dd | 90 | float snore_signal = 0; |
woodbed | 0:1f4efca8f7dd | 91 | |
woodbed | 0:1f4efca8f7dd | 92 | int pwidth_1 = 0; |
woodbed | 0:1f4efca8f7dd | 93 | int pwidth_2 = 0; |
woodbed | 0:1f4efca8f7dd | 94 | int pwidth_3 = 0; |
woodbed | 0:1f4efca8f7dd | 95 | |
woodbed | 0:1f4efca8f7dd | 96 | // Debug use only ---- |
woodbed | 0:1f4efca8f7dd | 97 | int dbcount = 0; |
woodbed | 0:1f4efca8f7dd | 98 | |
woodbed | 0:1f4efca8f7dd | 99 | // End of debug use ---- |
woodbed | 0:1f4efca8f7dd | 100 | |
woodbed | 0:1f4efca8f7dd | 101 | //Signal Culcurate |
woodbed | 0:1f4efca8f7dd | 102 | void signal_culc(){ |
woodbed | 0:1f4efca8f7dd | 103 | |
woodbed | 0:1f4efca8f7dd | 104 | //HB section |
woodbed | 0:1f4efca8f7dd | 105 | //HB_carr |
woodbed | 0:1f4efca8f7dd | 106 | hb_carr_n_sample = (hb_carr_period - hb_carr_tstart) / sample_dt; |
woodbed | 0:1f4efca8f7dd | 107 | hb_carr_tend = fmod((hb_carr_period - hb_carr_tstart) , sample_dt); |
woodbed | 0:1f4efca8f7dd | 108 | if(hb_carr_tend == 0){ |
woodbed | 0:1f4efca8f7dd | 109 | hb_carr_n_sample = hb_carr_n_sample-1; |
woodbed | 0:1f4efca8f7dd | 110 | } |
woodbed | 0:1f4efca8f7dd | 111 | hb_carr_t_samplepoint = hb_carr_tstart + sample_dt * hb_carr_n; //time of sampling point |
woodbed | 0:1f4efca8f7dd | 112 | hb_carr_n_samplepoint = hb_carr_t_samplepoint / hb_carr_table_dt; |
woodbed | 0:1f4efca8f7dd | 113 | if(hb_carr_n_samplepoint >= 256){ |
woodbed | 0:1f4efca8f7dd | 114 | hb_carr_n_samplepoint = 0; |
woodbed | 0:1f4efca8f7dd | 115 | } |
woodbed | 0:1f4efca8f7dd | 116 | hb_carr_v_samplepoint = coswave[(int)hb_carr_n_samplepoint]; |
woodbed | 0:1f4efca8f7dd | 117 | if(hb_carr_n > (int)hb_carr_n_sample) { |
woodbed | 0:1f4efca8f7dd | 118 | hb_carr_n =0; |
woodbed | 0:1f4efca8f7dd | 119 | hb_carr_tstart = sample_dt - hb_carr_tend; |
woodbed | 0:1f4efca8f7dd | 120 | } |
woodbed | 0:1f4efca8f7dd | 121 | else { |
woodbed | 0:1f4efca8f7dd | 122 | hb_carr_n++; |
woodbed | 0:1f4efca8f7dd | 123 | } |
woodbed | 0:1f4efca8f7dd | 124 | //HB_mod |
woodbed | 0:1f4efca8f7dd | 125 | //A(1+macosωmt)*cosωct Acosωct = fcarr(t),ma = modulation ratio, |
woodbed | 0:1f4efca8f7dd | 126 | hb_mod_n_sample = (hb_mod_period - hb_mod_tstart) / sample_dt; |
woodbed | 0:1f4efca8f7dd | 127 | hb_mod_tend = fmod((hb_mod_period - hb_mod_tstart) , sample_dt); |
woodbed | 0:1f4efca8f7dd | 128 | if(hb_mod_tend == 0){ |
woodbed | 0:1f4efca8f7dd | 129 | hb_mod_n_sample = hb_mod_n_sample-1; |
woodbed | 0:1f4efca8f7dd | 130 | } |
woodbed | 0:1f4efca8f7dd | 131 | hb_mod_t_samplepoint = hb_mod_tstart + sample_dt * hb_mod_n; //time of sampling point |
woodbed | 0:1f4efca8f7dd | 132 | hb_mod_n_samplepoint = hb_mod_t_samplepoint / hb_mod_table_dt; |
woodbed | 0:1f4efca8f7dd | 133 | if(hb_mod_n_samplepoint >= 256){ |
woodbed | 0:1f4efca8f7dd | 134 | hb_mod_n_samplepoint = 0; |
woodbed | 0:1f4efca8f7dd | 135 | } |
woodbed | 0:1f4efca8f7dd | 136 | hb_mod_v_samplepoint = hb_mod_ra*(coswave[(int)hb_mod_n_samplepoint]); |
woodbed | 0:1f4efca8f7dd | 137 | if(hb_mod_n > (int)hb_mod_n_sample) { |
woodbed | 0:1f4efca8f7dd | 138 | hb_mod_n =0; |
woodbed | 0:1f4efca8f7dd | 139 | hb_mod_tstart = sample_dt - hb_mod_tend; |
woodbed | 0:1f4efca8f7dd | 140 | } |
woodbed | 0:1f4efca8f7dd | 141 | else { |
woodbed | 0:1f4efca8f7dd | 142 | hb_mod_n++; |
woodbed | 0:1f4efca8f7dd | 143 | } |
woodbed | 0:1f4efca8f7dd | 144 | |
woodbed | 0:1f4efca8f7dd | 145 | //HB_AM MOD |
woodbed | 0:1f4efca8f7dd | 146 | |
woodbed | 0:1f4efca8f7dd | 147 | hb_signal = 0.5*(hb_carr_level*(1+hb_mod_v_samplepoint)*hb_carr_v_samplepoint)+0.5;//0-1 -> 0V-3.3V |
woodbed | 0:1f4efca8f7dd | 148 | |
woodbed | 0:1f4efca8f7dd | 149 | //debug part |
woodbed | 0:1f4efca8f7dd | 150 | /* |
woodbed | 0:1f4efca8f7dd | 151 | if(dbcount>=100){ |
woodbed | 0:1f4efca8f7dd | 152 | pc.printf("%f, %f, %f\n",hb_signal,mod_signal,hb_mod_v_samplepoint); |
woodbed | 0:1f4efca8f7dd | 153 | dbcount = 0; |
woodbed | 0:1f4efca8f7dd | 154 | } |
woodbed | 0:1f4efca8f7dd | 155 | dbcount++; |
woodbed | 0:1f4efca8f7dd | 156 | */ |
woodbed | 0:1f4efca8f7dd | 157 | //end debug part |
woodbed | 0:1f4efca8f7dd | 158 | |
woodbed | 0:1f4efca8f7dd | 159 | //RESP section |
woodbed | 0:1f4efca8f7dd | 160 | resp_n_sample = (resp_period - resp_tstart) / sample_dt; |
woodbed | 0:1f4efca8f7dd | 161 | resp_tend = fmod((resp_period - resp_tstart) , sample_dt); |
woodbed | 0:1f4efca8f7dd | 162 | if(resp_tend == 0){ |
woodbed | 0:1f4efca8f7dd | 163 | resp_n_sample = resp_n_sample-1; |
woodbed | 0:1f4efca8f7dd | 164 | } |
woodbed | 0:1f4efca8f7dd | 165 | resp_t_samplepoint = resp_tstart + sample_dt * resp_n; //time of sampling point |
woodbed | 0:1f4efca8f7dd | 166 | resp_n_samplepoint = resp_t_samplepoint / resp_table_dt; |
woodbed | 0:1f4efca8f7dd | 167 | if(resp_n_samplepoint >= 256){ |
woodbed | 0:1f4efca8f7dd | 168 | resp_n_samplepoint = 0; |
woodbed | 0:1f4efca8f7dd | 169 | } |
woodbed | 0:1f4efca8f7dd | 170 | resp_v_samplepoint = resp_level*(coswave[(int)resp_n_samplepoint]); |
woodbed | 0:1f4efca8f7dd | 171 | resp_signal = 0.5*resp_v_samplepoint+0.5; //0-1 -> 0V-3.3V |
woodbed | 0:1f4efca8f7dd | 172 | if(resp_n > (int)resp_n_sample) { |
woodbed | 0:1f4efca8f7dd | 173 | resp_n =0; |
woodbed | 0:1f4efca8f7dd | 174 | resp_tstart = sample_dt - resp_tend; |
woodbed | 0:1f4efca8f7dd | 175 | } |
woodbed | 0:1f4efca8f7dd | 176 | else { |
woodbed | 0:1f4efca8f7dd | 177 | resp_n++; |
woodbed | 0:1f4efca8f7dd | 178 | } |
woodbed | 0:1f4efca8f7dd | 179 | |
woodbed | 0:1f4efca8f7dd | 180 | //SNORE section |
woodbed | 0:1f4efca8f7dd | 181 | snore_n_sample = (snore_period - snore_tstart) / sample_dt; // |
woodbed | 0:1f4efca8f7dd | 182 | snore_tend = fmod((snore_period - snore_tstart) , sample_dt); |
woodbed | 0:1f4efca8f7dd | 183 | if(snore_tend == 0){ |
woodbed | 0:1f4efca8f7dd | 184 | snore_n_sample = snore_n_sample-1; |
woodbed | 0:1f4efca8f7dd | 185 | } |
woodbed | 0:1f4efca8f7dd | 186 | else { |
woodbed | 0:1f4efca8f7dd | 187 | } |
woodbed | 0:1f4efca8f7dd | 188 | snore_t_samplepoint = snore_tstart + sample_dt * snore_n; //time of sampling point |
woodbed | 0:1f4efca8f7dd | 189 | snore_n_samplepoint = snore_t_samplepoint / snore_table_dt; |
woodbed | 0:1f4efca8f7dd | 190 | if(snore_n_samplepoint >= 256){ |
woodbed | 0:1f4efca8f7dd | 191 | snore_n_samplepoint = 0; |
woodbed | 0:1f4efca8f7dd | 192 | } |
woodbed | 0:1f4efca8f7dd | 193 | snore_v_samplepoint = snore_level*(coswave[(int)snore_n_samplepoint]); |
woodbed | 0:1f4efca8f7dd | 194 | if(snore_n > (int)snore_n_sample) { |
woodbed | 0:1f4efca8f7dd | 195 | snore_n =0; //2016/12/12 1->0 |
woodbed | 0:1f4efca8f7dd | 196 | snore_tstart = sample_dt - snore_tend; |
woodbed | 0:1f4efca8f7dd | 197 | } |
woodbed | 0:1f4efca8f7dd | 198 | else { |
woodbed | 0:1f4efca8f7dd | 199 | snore_n++; |
woodbed | 0:1f4efca8f7dd | 200 | } |
woodbed | 0:1f4efca8f7dd | 201 | if(snore_onoff==0){ |
woodbed | 0:1f4efca8f7dd | 202 | } |
woodbed | 0:1f4efca8f7dd | 203 | else if(snore_onoff==1){ |
woodbed | 0:1f4efca8f7dd | 204 | if (snore_cycle <= snore_oncycle) { |
woodbed | 0:1f4efca8f7dd | 205 | snore_cycle++; |
woodbed | 0:1f4efca8f7dd | 206 | } |
woodbed | 0:1f4efca8f7dd | 207 | else if (snore_cycle>snore_oncycle && snore_cycle <= snore_allcycle){ |
woodbed | 0:1f4efca8f7dd | 208 | snore_v_samplepoint = 0; |
woodbed | 0:1f4efca8f7dd | 209 | snore_cycle++; |
woodbed | 0:1f4efca8f7dd | 210 | } |
woodbed | 0:1f4efca8f7dd | 211 | else { |
woodbed | 0:1f4efca8f7dd | 212 | snore_cycle = 0; |
woodbed | 0:1f4efca8f7dd | 213 | } |
woodbed | 0:1f4efca8f7dd | 214 | } |
woodbed | 0:1f4efca8f7dd | 215 | snore_signal = 0.5*snore_v_samplepoint+0.5; //0-1 -> 0V-3.3V |
woodbed | 0:1f4efca8f7dd | 216 | |
woodbed | 0:1f4efca8f7dd | 217 | //PWM Output Pulse width |
woodbed | 0:1f4efca8f7dd | 218 | pwidth_1 = hb_signal * sample_dt; |
woodbed | 0:1f4efca8f7dd | 219 | pwidth_2 = resp_signal * sample_dt; |
woodbed | 0:1f4efca8f7dd | 220 | pwidth_3 = snore_signal * sample_dt; |
woodbed | 0:1f4efca8f7dd | 221 | |
woodbed | 0:1f4efca8f7dd | 222 | signal_1.pulsewidth_us(pwidth_1); |
woodbed | 0:1f4efca8f7dd | 223 | signal_2.pulsewidth_us(pwidth_2); |
woodbed | 0:1f4efca8f7dd | 224 | signal_3.pulsewidth_us(pwidth_3); |
woodbed | 0:1f4efca8f7dd | 225 | } |
woodbed | 0:1f4efca8f7dd | 226 | |
woodbed | 0:1f4efca8f7dd | 227 | //チッカー割り込みハンドラ |
woodbed | 0:1f4efca8f7dd | 228 | void attime(){ |
woodbed | 0:1f4efca8f7dd | 229 | if(status1==1){ |
woodbed | 0:1f4efca8f7dd | 230 | ledch1=0; |
woodbed | 0:1f4efca8f7dd | 231 | signal_culc(); |
woodbed | 0:1f4efca8f7dd | 232 | } |
woodbed | 0:1f4efca8f7dd | 233 | else{ |
woodbed | 0:1f4efca8f7dd | 234 | ledch1=!ledch1; |
woodbed | 0:1f4efca8f7dd | 235 | } |
woodbed | 0:1f4efca8f7dd | 236 | } |
woodbed | 0:1f4efca8f7dd | 237 | |
woodbed | 0:1f4efca8f7dd | 238 | //Serial 受信割り込みハンドラ |
woodbed | 0:1f4efca8f7dd | 239 | void isrRx() { |
woodbed | 0:1f4efca8f7dd | 240 | |
woodbed | 0:1f4efca8f7dd | 241 | /* UART受信コマンド |
woodbed | 0:1f4efca8f7dd | 242 | start: 波形出力スタート |
woodbed | 0:1f4efca8f7dd | 243 | stop: 波形出力ストップ |
woodbed | 0:1f4efca8f7dd | 244 | St: 割り込み周期[μsec] |
woodbed | 0:1f4efca8f7dd | 245 | carrf: 脈波AM変調波搬送波周波数[Hz] |
woodbed | 0:1f4efca8f7dd | 246 | modf: 脈波AM変調波変調周波数[Hz] |
woodbed | 0:1f4efca8f7dd | 247 | carrl: 脈波振幅 |
woodbed | 0:1f4efca8f7dd | 248 | modr: 脈波変調波変調率[%] |
woodbed | 0:1f4efca8f7dd | 249 | respf: 呼吸周波数[Hz] |
woodbed | 0:1f4efca8f7dd | 250 | respl: 呼吸振幅 |
woodbed | 0:1f4efca8f7dd | 251 | snorf: 体動・イビキ周波数[Hz] |
woodbed | 0:1f4efca8f7dd | 252 | snorl: 体動・イビキ振幅 |
woodbed | 0:1f4efca8f7dd | 253 | snon: 体動・イビキONサイクル |
woodbed | 0:1f4efca8f7dd | 254 | snall: 体動・イビキALLサイクル |
woodbed | 0:1f4efca8f7dd | 255 | sncn: 体動・イビキ断続制御 |
woodbed | 0:1f4efca8f7dd | 256 | */ |
woodbed | 0:1f4efca8f7dd | 257 | |
woodbed | 0:1f4efca8f7dd | 258 | char scan[10]; |
woodbed | 0:1f4efca8f7dd | 259 | float para; |
woodbed | 0:1f4efca8f7dd | 260 | |
woodbed | 0:1f4efca8f7dd | 261 | pc.scanf("%s",scan); // 文字列受信バッファより取り出し |
woodbed | 0:1f4efca8f7dd | 262 | // pc.printf("read = %s\n",scan); |
woodbed | 0:1f4efca8f7dd | 263 | |
woodbed | 0:1f4efca8f7dd | 264 | if(strcmp(scan,"start")==0){ |
woodbed | 0:1f4efca8f7dd | 265 | pc.printf("go\n"); |
woodbed | 0:1f4efca8f7dd | 266 | status1=1; //波形出力状態へ遷移 |
woodbed | 0:1f4efca8f7dd | 267 | } |
woodbed | 0:1f4efca8f7dd | 268 | else if(strcmp(scan,"stop")==0){ |
woodbed | 0:1f4efca8f7dd | 269 | pc.printf("end\n"); |
woodbed | 0:1f4efca8f7dd | 270 | status1=0; //波形出力停止へ遷移 |
woodbed | 0:1f4efca8f7dd | 271 | } |
woodbed | 0:1f4efca8f7dd | 272 | else if(strcmp(scan,"dt")==0){ |
woodbed | 0:1f4efca8f7dd | 273 | pc.scanf("%f",¶); |
woodbed | 0:1f4efca8f7dd | 274 | sample_dt = para; |
woodbed | 0:1f4efca8f7dd | 275 | pc.printf("dt = %f\n",sample_dt); |
woodbed | 0:1f4efca8f7dd | 276 | } |
woodbed | 0:1f4efca8f7dd | 277 | else if(strcmp(scan,"carrf")==0){ |
woodbed | 0:1f4efca8f7dd | 278 | pc.scanf("%f",¶); |
woodbed | 0:1f4efca8f7dd | 279 | hb_carr_freq = para; |
woodbed | 0:1f4efca8f7dd | 280 | hb_carr_period = 1000000*1/hb_carr_freq; //microSec |
woodbed | 0:1f4efca8f7dd | 281 | hb_carr_n = 0; |
woodbed | 0:1f4efca8f7dd | 282 | hb_carr_n_sample = 0; //The maximum number of sampling points in the signal |
woodbed | 0:1f4efca8f7dd | 283 | hb_carr_tend = 0; //The remainder of sampling points in the signal |
woodbed | 0:1f4efca8f7dd | 284 | hb_carr_tstart = 0; //start offset of sampling time |
woodbed | 0:1f4efca8f7dd | 285 | hb_carr_t_samplepoint = 0; |
woodbed | 0:1f4efca8f7dd | 286 | hb_carr_table_dt = hb_carr_period/256; |
woodbed | 0:1f4efca8f7dd | 287 | hb_carr_n_samplepoint = 0; |
woodbed | 0:1f4efca8f7dd | 288 | hb_carr_v_samplepoint = 0; |
woodbed | 0:1f4efca8f7dd | 289 | pc.printf("carrf = %f\n",hb_carr_freq); |
woodbed | 0:1f4efca8f7dd | 290 | hb_mod_period = 1000000*1/hb_mod_freq; |
woodbed | 0:1f4efca8f7dd | 291 | hb_mod_n = 0; |
woodbed | 0:1f4efca8f7dd | 292 | hb_mod_n_sample = 0; //The maximum number of sampling points in the signal |
woodbed | 0:1f4efca8f7dd | 293 | hb_mod_tend = 0; //The remainder of sampling points in the signal |
woodbed | 0:1f4efca8f7dd | 294 | hb_mod_tstart = 0; //start offset of sampling time |
woodbed | 0:1f4efca8f7dd | 295 | hb_mod_t_samplepoint = 0; |
woodbed | 0:1f4efca8f7dd | 296 | hb_mod_table_dt = hb_mod_period/256; |
woodbed | 0:1f4efca8f7dd | 297 | hb_mod_n_samplepoint = 0; |
woodbed | 0:1f4efca8f7dd | 298 | hb_mod_v_samplepoint = 0; |
woodbed | 0:1f4efca8f7dd | 299 | } |
woodbed | 0:1f4efca8f7dd | 300 | else if(strcmp(scan,"modf")==0){ |
woodbed | 0:1f4efca8f7dd | 301 | pc.scanf("%f",¶); |
woodbed | 0:1f4efca8f7dd | 302 | hb_mod_freq = para; |
woodbed | 0:1f4efca8f7dd | 303 | hb_mod_period = 1000000*1/hb_mod_freq; |
woodbed | 0:1f4efca8f7dd | 304 | hb_mod_n = 0; |
woodbed | 0:1f4efca8f7dd | 305 | hb_mod_n_sample = 0; //The maximum number of sampling points in the signal |
woodbed | 0:1f4efca8f7dd | 306 | hb_mod_tend = 0; //The remainder of sampling points in the signal |
woodbed | 0:1f4efca8f7dd | 307 | hb_mod_tstart = 0; //start offset of sampling time |
woodbed | 0:1f4efca8f7dd | 308 | hb_mod_t_samplepoint = 0; |
woodbed | 0:1f4efca8f7dd | 309 | hb_mod_table_dt = hb_mod_period/256; |
woodbed | 0:1f4efca8f7dd | 310 | hb_mod_n_samplepoint = 0; |
woodbed | 0:1f4efca8f7dd | 311 | hb_mod_v_samplepoint = 0; |
woodbed | 0:1f4efca8f7dd | 312 | pc.printf("modf = %f\n",hb_mod_freq); |
woodbed | 0:1f4efca8f7dd | 313 | hb_carr_n = 0; |
woodbed | 0:1f4efca8f7dd | 314 | hb_carr_n_sample = 0; //The maximum number of sampling points in the signal |
woodbed | 0:1f4efca8f7dd | 315 | hb_carr_tend = 0; //The remainder of sampling points in the signal |
woodbed | 0:1f4efca8f7dd | 316 | hb_carr_tstart = 0; //start offset of sampling time |
woodbed | 0:1f4efca8f7dd | 317 | hb_carr_t_samplepoint = 0; |
woodbed | 0:1f4efca8f7dd | 318 | hb_carr_table_dt = hb_carr_period/256; |
woodbed | 0:1f4efca8f7dd | 319 | hb_carr_n_samplepoint = 0; |
woodbed | 0:1f4efca8f7dd | 320 | hb_carr_v_samplepoint = 0; |
woodbed | 0:1f4efca8f7dd | 321 | } |
woodbed | 0:1f4efca8f7dd | 322 | else if(strcmp(scan,"carrl")==0){ |
woodbed | 0:1f4efca8f7dd | 323 | pc.scanf("%f",¶); |
woodbed | 0:1f4efca8f7dd | 324 | hb_carr_level = para; |
woodbed | 0:1f4efca8f7dd | 325 | pc.printf("carrl = %f\n",hb_carr_level); |
woodbed | 0:1f4efca8f7dd | 326 | } |
woodbed | 0:1f4efca8f7dd | 327 | else if(strcmp(scan,"modr")==0){ |
woodbed | 0:1f4efca8f7dd | 328 | pc.scanf("%f",¶); |
woodbed | 0:1f4efca8f7dd | 329 | hb_mod_ratio = para; |
woodbed | 0:1f4efca8f7dd | 330 | hb_mod_ra = hb_mod_ratio *0.01; |
woodbed | 0:1f4efca8f7dd | 331 | pc.printf("modr = %f\n",hb_mod_ra); |
woodbed | 0:1f4efca8f7dd | 332 | } |
woodbed | 0:1f4efca8f7dd | 333 | else if(strcmp(scan,"respf")==0){ |
woodbed | 0:1f4efca8f7dd | 334 | pc.scanf("%f",¶); |
woodbed | 0:1f4efca8f7dd | 335 | resp_freq = para; |
woodbed | 0:1f4efca8f7dd | 336 | resp_period = 1000000*1/resp_freq;//microSec |
woodbed | 0:1f4efca8f7dd | 337 | resp_n = 0; |
woodbed | 0:1f4efca8f7dd | 338 | resp_n_sample = 0; //The maximum number of sampling points in the signal |
woodbed | 0:1f4efca8f7dd | 339 | resp_tend = 0; //The remainder of sampling points in the signal |
woodbed | 0:1f4efca8f7dd | 340 | resp_tstart = 0; //start offset of sampling time |
woodbed | 0:1f4efca8f7dd | 341 | resp_t_samplepoint = 0; |
woodbed | 0:1f4efca8f7dd | 342 | resp_table_dt = resp_period/256; |
woodbed | 0:1f4efca8f7dd | 343 | resp_n_samplepoint = 0; |
woodbed | 0:1f4efca8f7dd | 344 | resp_v_samplepoint = 0; |
woodbed | 0:1f4efca8f7dd | 345 | pc.printf("respf = %f\n",resp_freq); |
woodbed | 0:1f4efca8f7dd | 346 | } |
woodbed | 0:1f4efca8f7dd | 347 | else if(strcmp(scan,"respl")==0){ |
woodbed | 0:1f4efca8f7dd | 348 | pc.scanf("%f",¶); |
woodbed | 0:1f4efca8f7dd | 349 | resp_level = para; |
woodbed | 0:1f4efca8f7dd | 350 | pc.printf("respl = %f\n",resp_level); |
woodbed | 0:1f4efca8f7dd | 351 | } |
woodbed | 0:1f4efca8f7dd | 352 | else if(strcmp(scan,"snorf")==0){ |
woodbed | 0:1f4efca8f7dd | 353 | pc.scanf("%f",¶); |
woodbed | 0:1f4efca8f7dd | 354 | snore_freq = para; |
woodbed | 0:1f4efca8f7dd | 355 | snore_period = 1000000*1/snore_freq; //microSec |
woodbed | 0:1f4efca8f7dd | 356 | snore_n = 0; //2016/12/12 1->0 |
woodbed | 0:1f4efca8f7dd | 357 | snore_n_sample = 0; //The maximum number of sampling points in the signal |
woodbed | 0:1f4efca8f7dd | 358 | snore_tend = 0; //The remainder of sampling points in the signal |
woodbed | 0:1f4efca8f7dd | 359 | snore_tstart = 0; //start offset of sampling time |
woodbed | 0:1f4efca8f7dd | 360 | snore_t_samplepoint = 0; |
woodbed | 0:1f4efca8f7dd | 361 | snore_table_dt = snore_period/256; |
woodbed | 0:1f4efca8f7dd | 362 | snore_n_samplepoint = 0; |
woodbed | 0:1f4efca8f7dd | 363 | snore_v_samplepoint = 0; |
woodbed | 0:1f4efca8f7dd | 364 | snore_cycle = 0; |
woodbed | 0:1f4efca8f7dd | 365 | pc.printf("snorf = %f\n",snore_freq); |
woodbed | 0:1f4efca8f7dd | 366 | } |
woodbed | 0:1f4efca8f7dd | 367 | else if(strcmp(scan,"snorl")==0){ |
woodbed | 0:1f4efca8f7dd | 368 | pc.scanf("%f",¶); |
woodbed | 0:1f4efca8f7dd | 369 | snore_level = para; |
woodbed | 0:1f4efca8f7dd | 370 | pc.printf("snorl = %f\n",snore_level); |
woodbed | 0:1f4efca8f7dd | 371 | } |
woodbed | 0:1f4efca8f7dd | 372 | else if(strcmp(scan,"snon")==0){ |
woodbed | 0:1f4efca8f7dd | 373 | pc.scanf("%f",¶); |
woodbed | 0:1f4efca8f7dd | 374 | snore_oncycle = (int)para; |
woodbed | 0:1f4efca8f7dd | 375 | pc.printf("snon = %d\n",snore_oncycle); |
woodbed | 0:1f4efca8f7dd | 376 | } |
woodbed | 0:1f4efca8f7dd | 377 | else if(strcmp(scan,"snall")==0){ |
woodbed | 0:1f4efca8f7dd | 378 | pc.scanf("%f",¶); |
woodbed | 0:1f4efca8f7dd | 379 | snore_allcycle = (int)para; |
woodbed | 0:1f4efca8f7dd | 380 | pc.printf("snall = %d\n",snore_allcycle); |
woodbed | 0:1f4efca8f7dd | 381 | } |
woodbed | 0:1f4efca8f7dd | 382 | else if(strcmp(scan,"sncn")==0){ |
woodbed | 0:1f4efca8f7dd | 383 | pc.scanf("%f",¶); |
woodbed | 0:1f4efca8f7dd | 384 | snore_onoff = (int)para; |
woodbed | 0:1f4efca8f7dd | 385 | pc.printf("sncn = %d\n",snore_onoff); |
woodbed | 0:1f4efca8f7dd | 386 | } |
woodbed | 0:1f4efca8f7dd | 387 | else if(strcmp(scan,"ack")==0){ |
woodbed | 0:1f4efca8f7dd | 388 | pc.printf("carrf = %f\n",hb_carr_freq); |
woodbed | 0:1f4efca8f7dd | 389 | pc.printf("carrl = %f\n",hb_carr_level); |
woodbed | 0:1f4efca8f7dd | 390 | pc.printf("modf = %f\n",hb_mod_freq); |
woodbed | 0:1f4efca8f7dd | 391 | pc.printf("modr = %f\n",hb_mod_ra); |
woodbed | 0:1f4efca8f7dd | 392 | pc.printf("respf = %f\n",resp_freq); |
woodbed | 0:1f4efca8f7dd | 393 | pc.printf("respl = %f\n",resp_level); |
woodbed | 0:1f4efca8f7dd | 394 | pc.printf("snorf = %f\n",snore_freq); |
woodbed | 0:1f4efca8f7dd | 395 | pc.printf("snorl = %f\n",snore_level); |
woodbed | 0:1f4efca8f7dd | 396 | pc.printf("snon = %d\n",snore_oncycle); |
woodbed | 0:1f4efca8f7dd | 397 | pc.printf("snall = %d\n",snore_allcycle); |
woodbed | 0:1f4efca8f7dd | 398 | pc.printf("sncn = %d\n",snore_onoff); |
woodbed | 0:1f4efca8f7dd | 399 | } |
woodbed | 0:1f4efca8f7dd | 400 | else if(strcmp(scan,"mr")==0){ |
woodbed | 0:1f4efca8f7dd | 401 | pc.printf("mode = %d\n",mode); |
woodbed | 0:1f4efca8f7dd | 402 | pc.printf("revision = %d\n",revision); |
woodbed | 0:1f4efca8f7dd | 403 | } |
woodbed | 0:1f4efca8f7dd | 404 | else { |
woodbed | 0:1f4efca8f7dd | 405 | pc.printf("Command Error\n"); |
woodbed | 0:1f4efca8f7dd | 406 | } |
woodbed | 0:1f4efca8f7dd | 407 | } |
woodbed | 0:1f4efca8f7dd | 408 | |
woodbed | 0:1f4efca8f7dd | 409 | int main() { |
woodbed | 0:1f4efca8f7dd | 410 | pc.printf("Start Up\n"); |
woodbed | 0:1f4efca8f7dd | 411 | |
woodbed | 0:1f4efca8f7dd | 412 | //Make cos wave |
woodbed | 0:1f4efca8f7dd | 413 | int i; |
woodbed | 0:1f4efca8f7dd | 414 | for(i=0;i<=255;i++){ |
woodbed | 0:1f4efca8f7dd | 415 | coswave[i]=cos(2.0*3.1415*i/256); //2017/1/5 0.5*(cos(2.0*3.1415*i/256)); |
woodbed | 0:1f4efca8f7dd | 416 | } |
woodbed | 0:1f4efca8f7dd | 417 | i = 0; |
woodbed | 0:1f4efca8f7dd | 418 | |
woodbed | 0:1f4efca8f7dd | 419 | signal_1.period_us(sample_dt); //Pulse_cycle = 100usec = 10kHz |
woodbed | 0:1f4efca8f7dd | 420 | signal_2.period_us(sample_dt); |
woodbed | 0:1f4efca8f7dd | 421 | signal_3.period_us(sample_dt); |
woodbed | 0:1f4efca8f7dd | 422 | |
woodbed | 0:1f4efca8f7dd | 423 | int j; |
woodbed | 0:1f4efca8f7dd | 424 | j = sample_dt; |
woodbed | 0:1f4efca8f7dd | 425 | timer.attach_us(&attime,j); //⇒UART割り込み”START”に移動 |
woodbed | 0:1f4efca8f7dd | 426 | |
woodbed | 0:1f4efca8f7dd | 427 | pc.attach(isrRx, Serial::RxIrq); // 割込みハンドラ登録 |
woodbed | 0:1f4efca8f7dd | 428 | NVIC_SetPriority(UART1_IRQn,1); |
woodbed | 0:1f4efca8f7dd | 429 | |
woodbed | 0:1f4efca8f7dd | 430 | while(1) { |
woodbed | 0:1f4efca8f7dd | 431 | } |
woodbed | 0:1f4efca8f7dd | 432 | } |