ryou sato / Mbed 2 deprecated LPC11U35_CTswitch_relay

Dependencies:   mbed LPC11U35_MCP41HV51-503EST

Committer:
ryousato
Date:
Sun Sep 06 09:30:04 2020 +0000
Revision:
7:7d0d98e0ae48
Parent:
6:91eec3396ee9
Child:
8:aea096edd536
200906

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ryousato 0:df1e1f84ded8 1 //////////////////////////////////////////////////
ryousato 0:df1e1f84ded8 2 // Include Files
ryousato 0:df1e1f84ded8 3 #include "mbed.h"
ryousato 0:df1e1f84ded8 4 #include "LPC11Uxx.h"
ryousato 0:df1e1f84ded8 5 #include "USBSerial.h"
ryousato 0:df1e1f84ded8 6 //////////////////////////////////////////////////
ryousato 0:df1e1f84ded8 7
ryousato 0:df1e1f84ded8 8 //Configure the PC Serial Port for CDC USB
ryousato 0:df1e1f84ded8 9 USBSerial serial;
ryousato 0:df1e1f84ded8 10 Serial device(P0_19,P0_18);
ryousato 3:d55ebd20d750 11 Ticker OffsetCal;
ryousato 3:d55ebd20d750 12 Ticker timerint;
ryousato 3:d55ebd20d750 13 Timer timecount;
ryousato 0:df1e1f84ded8 14
ryousato 0:df1e1f84ded8 15 //Pin Defines
ryousato 3:d55ebd20d750 16 DigitalOut led1(LED1);
ryousato 0:df1e1f84ded8 17
ryousato 3:d55ebd20d750 18 char moji[32]; //入力文字列
ryousato 3:d55ebd20d750 19 int suuji[6];
ryousato 3:d55ebd20d750 20 int count = 0; //文字数カウンタ
ryousato 3:d55ebd20d750 21 int CorF;
ryousato 3:d55ebd20d750 22 int adjmode;
ryousato 3:d55ebd20d750 23 int val; //POTのワイパー移動数
ryousato 3:d55ebd20d750 24 int incr;
ryousato 3:d55ebd20d750 25 int wa;
ryousato 3:d55ebd20d750 26 int mode_p = 0;
ryousato 3:d55ebd20d750 27 int *pmode;
ryousato 6:91eec3396ee9 28 int CTrange; //[60A:120A] [0:1]
ryousato 6:91eec3396ee9 29 int *pCTrange;
ryousato 3:d55ebd20d750 30 float Vcc = 3.292; //実測値を入力すること
ryousato 3:d55ebd20d750 31 float Vref;
ryousato 4:e69f73c66598 32 float ActualVref[4] = {1.65, 1.65, 1.65, 1.65};
ryousato 3:d55ebd20d750 33 float *pAVrefcal;
ryousato 3:d55ebd20d750 34 int AD_flag;
ryousato 3:d55ebd20d750 35 float AD_val = 0;
ryousato 3:d55ebd20d750 36 float AD_val_sum = 0;
ryousato 3:d55ebd20d750 37 float Vrms = 0;
ryousato 3:d55ebd20d750 38 float set_val = 0;
ryousato 3:d55ebd20d750 39 float diff = 0;
ryousato 3:d55ebd20d750 40 //float zero_cal[2];
ryousato 3:d55ebd20d750 41 int AD_count = 0;
ryousato 3:d55ebd20d750 42 float setval = 0;
ryousato 3:d55ebd20d750 43
ryousato 1:88f0bc1e1aff 44
ryousato 0:df1e1f84ded8 45 DigitalOut coilEN1(P0_1);
ryousato 0:df1e1f84ded8 46 DigitalOut coilEN2(P0_2);
ryousato 0:df1e1f84ded8 47 DigitalOut coilEN3(P0_3);
ryousato 0:df1e1f84ded8 48 DigitalOut coilEN4(P0_4);
ryousato 0:df1e1f84ded8 49 DigitalOut coilEN5(P0_5);
ryousato 0:df1e1f84ded8 50 DigitalOut coilEN6(P0_20);
ryousato 0:df1e1f84ded8 51 DigitalOut coilEN7(P1_19);
ryousato 0:df1e1f84ded8 52
ryousato 0:df1e1f84ded8 53 DigitalOut ENn(P0_16);
ryousato 0:df1e1f84ded8 54 DigitalOut addr0(P0_17);
ryousato 0:df1e1f84ded8 55 DigitalOut addr1(P0_18);
ryousato 0:df1e1f84ded8 56 DigitalOut addr2(P0_19);
ryousato 0:df1e1f84ded8 57
ryousato 0:df1e1f84ded8 58 DigitalOut SCT_AMP(P0_10);
ryousato 0:df1e1f84ded8 59 DigitalOut WLATn(P0_23);
ryousato 0:df1e1f84ded8 60 DigitalOut SHDNn(P1_15);
ryousato 0:df1e1f84ded8 61
ryousato 3:d55ebd20d750 62 AnalogIn AD_TRANS_IN(P0_11); //AD_TRANS_IN
ryousato 3:d55ebd20d750 63 AnalogIn AD_CT_IN(P0_12); //AD_CT_IN
ryousato 3:d55ebd20d750 64
ryousato 0:df1e1f84ded8 65
ryousato 1:88f0bc1e1aff 66 SPI spi(P0_9, P0_8, P0_6);
ryousato 2:5e6613f149d4 67
ryousato 1:88f0bc1e1aff 68 void setup() {
ryousato 2:5e6613f149d4 69 spi.format(16,0);
ryousato 3:d55ebd20d750 70 wait(0.02);
ryousato 2:5e6613f149d4 71 spi.frequency(1000000);
ryousato 1:88f0bc1e1aff 72 device.baud(115200);
ryousato 0:df1e1f84ded8 73
ryousato 3:d55ebd20d750 74 coilEN1 = 0; //50Hz
ryousato 3:d55ebd20d750 75 coilEN2 = 0; //TRANS_OUT調整
ryousato 3:d55ebd20d750 76 coilEN3 = 0; //CT1,2_OUT調整
ryousato 3:d55ebd20d750 77 coilEN4 = 0; //CT1,2_OUT選択
ryousato 3:d55ebd20d750 78 coilEN5 = 0; //±5V,±15 OFF
ryousato 3:d55ebd20d750 79 coilEN6 = 0; //未使用
ryousato 3:d55ebd20d750 80 coilEN7 = 0; //未使用
ryousato 0:df1e1f84ded8 81
ryousato 3:d55ebd20d750 82 ENn = 1; //CD74HC4051E CSをディセーブル
ryousato 0:df1e1f84ded8 83 addr0 = 0;
ryousato 0:df1e1f84ded8 84 addr1 = 0;
ryousato 0:df1e1f84ded8 85 addr2 = 0;
ryousato 0:df1e1f84ded8 86
ryousato 3:d55ebd20d750 87 WLATn = 1; //MCP41HV51-503EST ワイパーラッチ
ryousato 3:d55ebd20d750 88 SCT_AMP = 0; //CT入力アンプ 60Aレベル切替え
ryousato 6:91eec3396ee9 89 CTrange = 0;
ryousato 5:5d7483b46cda 90 SHDNn = 1; //電流帰還アンプ シャットダウンしない
ryousato 2:5e6613f149d4 91 }
ryousato 0:df1e1f84ded8 92
ryousato 2:5e6613f149d4 93 void serialstart(){
ryousato 3:d55ebd20d750 94 wait(0.02);
ryousato 3:d55ebd20d750 95 serial.printf("\r\nReady!\r\n");
ryousato 3:d55ebd20d750 96 wait(0.02);
ryousato 0:df1e1f84ded8 97 }
ryousato 0:df1e1f84ded8 98
ryousato 0:df1e1f84ded8 99 void helpwrite(){
ryousato 3:d55ebd20d750 100 serial.printf("\r\n------------------");
ryousato 3:d55ebd20d750 101 //serial.printf("\r\ncmd");
ryousato 3:d55ebd20d750 102 serial.printf("\r\nhelp");
ryousato 3:d55ebd20d750 103 //serial.printf("\r\n?");
ryousato 3:d55ebd20d750 104 serial.printf("\r\ninitial");
ryousato 3:d55ebd20d750 105 serial.printf("\r\nV_OFF");
ryousato 3:d55ebd20d750 106 serial.printf("\r\nV_ON");
ryousato 3:d55ebd20d750 107 serial.printf("\r\n50Hz");
ryousato 3:d55ebd20d750 108 serial.printf("\r\n60Hz");
ryousato 3:d55ebd20d750 109 serial.printf("\r\nTRANS_OUT_ADINT");
ryousato 3:d55ebd20d750 110 serial.printf("\r\nCT1_OUT_ADINT");
ryousato 3:d55ebd20d750 111 serial.printf("\r\nCT2_OUT_ADINT");
ryousato 3:d55ebd20d750 112 serial.printf("\r\nTRANS_OUT_EXT");
ryousato 4:e69f73c66598 113 serial.printf("\r\nCT_OUT_EXT");
ryousato 6:91eec3396ee9 114 serial.printf("\r\nCTrange_60A");
ryousato 6:91eec3396ee9 115 serial.printf("\r\nCTrange_120A");
ryousato 4:e69f73c66598 116 serial.printf("\r\nTRANS_offset");
ryousato 4:e69f73c66598 117 serial.printf("\r\nCT1_offset");
ryousato 4:e69f73c66598 118 serial.printf("\r\nCT2_offset");
ryousato 4:e69f73c66598 119 serial.printf("\r\ndispVref");
ryousato 6:91eec3396ee9 120 serial.printf("\r\nTRANS_ADJ_100V");
ryousato 6:91eec3396ee9 121 serial.printf("\r\nCT1_ADJ_60A");
ryousato 6:91eec3396ee9 122 serial.printf("\r\nCT2_ADJ_60A");
ryousato 6:91eec3396ee9 123 serial.printf("\r\nTRANS_ADJ_MODE");
ryousato 6:91eec3396ee9 124 serial.printf("\r\nCT1_ADJ_MODE");
ryousato 6:91eec3396ee9 125 serial.printf("\r\nCT2_ADJ_MODE");
ryousato 3:d55ebd20d750 126 serial.printf("\r\nMANUAL_TRANS_ADJ");
ryousato 3:d55ebd20d750 127 serial.printf("\r\nMANUAL_CT1_ADJ");
ryousato 3:d55ebd20d750 128 serial.printf("\r\nMANUAL_CT2_ADJ");
ryousato 3:d55ebd20d750 129 serial.printf("\r\n------------------");
ryousato 0:df1e1f84ded8 130 }
ryousato 0:df1e1f84ded8 131
ryousato 3:d55ebd20d750 132 //MCP41HV51コマンド
ryousato 3:d55ebd20d750 133 //デバッグ用
ryousato 3:d55ebd20d750 134 void TCON(){ //端子スイッチ接続
ryousato 2:5e6613f149d4 135 int whoami = spi.write(0x40FF);
ryousato 3:d55ebd20d750 136 serial.printf("\r\nWHOAMI register = 0x%X", whoami);
ryousato 2:5e6613f149d4 137 }
ryousato 2:5e6613f149d4 138
ryousato 3:d55ebd20d750 139 //デバッグ用
ryousato 2:5e6613f149d4 140 void TCONread(){
ryousato 2:5e6613f149d4 141 int whoami = spi.write(0x4C00);
ryousato 3:d55ebd20d750 142 serial.printf("\r\nWHOAMI register = 0x%X", whoami);
ryousato 3:d55ebd20d750 143 }
ryousato 3:d55ebd20d750 144
ryousato 3:d55ebd20d750 145 //デバッグ用
ryousato 3:d55ebd20d750 146 void read(){
ryousato 3:d55ebd20d750 147 int read_val = spi.write(0x0C00);
ryousato 3:d55ebd20d750 148 serial.printf("\r\nread_val = 0x%X", read_val);
ryousato 3:d55ebd20d750 149 }
ryousato 3:d55ebd20d750 150
ryousato 3:d55ebd20d750 151 //デバッグ用
ryousato 3:d55ebd20d750 152 void write00(){
ryousato 3:d55ebd20d750 153 int whoami = spi.write(0x0000);
ryousato 3:d55ebd20d750 154 serial.printf("\r\nWHOAMI register = 0x%X", whoami);
ryousato 2:5e6613f149d4 155 }
ryousato 2:5e6613f149d4 156
ryousato 3:d55ebd20d750 157 //デバッグ用
ryousato 3:d55ebd20d750 158 void write7F(){
ryousato 3:d55ebd20d750 159 int whoami = spi.write(0x007F);
ryousato 3:d55ebd20d750 160 serial.printf("\r\nWHOAMI register = 0x%X", whoami);
ryousato 2:5e6613f149d4 161 }
ryousato 2:5e6613f149d4 162
ryousato 3:d55ebd20d750 163 //デバッグ用
ryousato 3:d55ebd20d750 164 void writeFF(){
ryousato 2:5e6613f149d4 165 int whoami = spi.write(0x00FF);
ryousato 3:d55ebd20d750 166 serial.printf("\r\nWHOAMI register = 0x%X", whoami);
ryousato 3:d55ebd20d750 167 }
ryousato 3:d55ebd20d750 168
ryousato 3:d55ebd20d750 169 //デバッグ用
ryousato 3:d55ebd20d750 170 void TENinc(){
ryousato 3:d55ebd20d750 171 int readval = spi.write(0x0C00);
ryousato 3:d55ebd20d750 172 int incval = readval & 0xFF;
ryousato 3:d55ebd20d750 173 incval = incval + 10;
ryousato 3:d55ebd20d750 174 int whoami = spi.write(incval);
ryousato 3:d55ebd20d750 175 serial.printf("\r\nWHOAMI register = 0x%X", whoami);
ryousato 2:5e6613f149d4 176 }
ryousato 2:5e6613f149d4 177
ryousato 2:5e6613f149d4 178 void WLAT(){
ryousato 2:5e6613f149d4 179 WLATn = 0;
ryousato 3:d55ebd20d750 180 wait(0.02);
ryousato 3:d55ebd20d750 181 WLATn = 1;
ryousato 3:d55ebd20d750 182 //serial.printf("\r\n OK(WLAT)");
ryousato 3:d55ebd20d750 183 }
ryousato 3:d55ebd20d750 184
ryousato 3:d55ebd20d750 185 //CD74HC4051Eのイネーブル
ryousato 3:d55ebd20d750 186 void CS(int cs){
ryousato 3:d55ebd20d750 187 ENn = cs;
ryousato 3:d55ebd20d750 188 serial.printf("\r\n OK(CS)");
ryousato 3:d55ebd20d750 189 }
ryousato 3:d55ebd20d750 190
ryousato 3:d55ebd20d750 191 /******************************************************************************/
ryousato 3:d55ebd20d750 192 //CD74HC4051Eのアドレスセレクト
ryousato 3:d55ebd20d750 193 /******************************************************************************/
ryousato 3:d55ebd20d750 194 void ADDR(int addr){
ryousato 3:d55ebd20d750 195 ENn = 1; //CSをディセーブルにしておく
ryousato 3:d55ebd20d750 196 wait(0.02);
ryousato 3:d55ebd20d750 197 if(addr == 0){
ryousato 3:d55ebd20d750 198 addr0 = 0;
ryousato 3:d55ebd20d750 199 addr1 = 0;
ryousato 3:d55ebd20d750 200 addr2 = 0;
ryousato 3:d55ebd20d750 201 }
ryousato 3:d55ebd20d750 202 else if(addr == 1){
ryousato 5:5d7483b46cda 203 addr0 = 0;
ryousato 5:5d7483b46cda 204 addr1 = 1;
ryousato 3:d55ebd20d750 205 addr2 = 0;
ryousato 3:d55ebd20d750 206 }
ryousato 3:d55ebd20d750 207 else if(addr == 2){
ryousato 5:5d7483b46cda 208 addr0 = 1;
ryousato 5:5d7483b46cda 209 addr1 = 0;
ryousato 3:d55ebd20d750 210 addr2 = 0;
ryousato 3:d55ebd20d750 211 }
ryousato 3:d55ebd20d750 212 else if(addr == 3){
ryousato 3:d55ebd20d750 213 addr0 = 1;
ryousato 3:d55ebd20d750 214 addr1 = 1;
ryousato 3:d55ebd20d750 215 addr2 = 0;
ryousato 3:d55ebd20d750 216 }
ryousato 3:d55ebd20d750 217 else if(addr == 4){
ryousato 3:d55ebd20d750 218 addr0 = 0;
ryousato 3:d55ebd20d750 219 addr1 = 0;
ryousato 3:d55ebd20d750 220 addr2 = 1;
ryousato 3:d55ebd20d750 221 }
ryousato 3:d55ebd20d750 222 else if(addr == 5){
ryousato 3:d55ebd20d750 223 addr0 = 1;
ryousato 3:d55ebd20d750 224 addr1 = 0;
ryousato 3:d55ebd20d750 225 addr2 = 1;
ryousato 3:d55ebd20d750 226 }
ryousato 3:d55ebd20d750 227 else if(addr == 6){
ryousato 3:d55ebd20d750 228 addr0 = 0;
ryousato 3:d55ebd20d750 229 addr1 = 1;
ryousato 3:d55ebd20d750 230 addr2 = 1;
ryousato 3:d55ebd20d750 231 }
ryousato 3:d55ebd20d750 232 else if(addr == 7){
ryousato 3:d55ebd20d750 233 addr0 = 1;
ryousato 3:d55ebd20d750 234 addr1 = 1;
ryousato 3:d55ebd20d750 235 addr2 = 1;
ryousato 3:d55ebd20d750 236 }
ryousato 3:d55ebd20d750 237 wait(0.02);
ryousato 3:d55ebd20d750 238 ENn = 0; //イネーブル
ryousato 3:d55ebd20d750 239 wait(0.02);
ryousato 3:d55ebd20d750 240 //serial.printf("\r\n OK(ADDR%d)", addr);
ryousato 3:d55ebd20d750 241 }
ryousato 3:d55ebd20d750 242
ryousato 3:d55ebd20d750 243 /******************************************************************************/
ryousato 3:d55ebd20d750 244 //POT制御
ryousato 3:d55ebd20d750 245 //指定したPOTの現在値から、指定した量を増減する
ryousato 3:d55ebd20d750 246 /******************************************************************************/
ryousato 3:d55ebd20d750 247 void incdec(int incr, int val, int CorF, int mode){ //incr [0:1][-:+], val [0~255], CorF [2:1][C:F], mode [1:2:3][trans:ct1:ct2]
ryousato 3:d55ebd20d750 248 //現在の設定値読み取り
ryousato 3:d55ebd20d750 249 ADDR(mode * 2 + CorF -2);
ryousato 3:d55ebd20d750 250 int read_val = spi.write(0x0C00);
ryousato 3:d55ebd20d750 251 read_val &= 0x00FF;
ryousato 3:d55ebd20d750 252
ryousato 3:d55ebd20d750 253 //現在の設定値から増減値書き込み
ryousato 3:d55ebd20d750 254 int write_val;
ryousato 3:d55ebd20d750 255 if(incr == 1){write_val = read_val + val;}
ryousato 3:d55ebd20d750 256 else if(incr == 0){write_val = read_val - val;}
ryousato 3:d55ebd20d750 257 spi.write(write_val);
ryousato 3:d55ebd20d750 258
ryousato 3:d55ebd20d750 259 wait(0.001);
ryousato 3:d55ebd20d750 260
ryousato 3:d55ebd20d750 261 //粗、微 読み取り
ryousato 3:d55ebd20d750 262 ADDR(mode * 2); //TRANS粗調整POT
ryousato 3:d55ebd20d750 263 int read_val_Coarse = spi.write(0x0C00);
ryousato 3:d55ebd20d750 264 read_val_Coarse &= 0x00FF;
ryousato 3:d55ebd20d750 265
ryousato 3:d55ebd20d750 266 wait(0.001);
ryousato 3:d55ebd20d750 267
ryousato 3:d55ebd20d750 268 ADDR(mode * 2 - 1); //TRANS微調整POT
ryousato 3:d55ebd20d750 269 int read_val_Fine = spi.write(0x0C00);
ryousato 3:d55ebd20d750 270 read_val_Fine &= 0x00FF;
ryousato 3:d55ebd20d750 271
ryousato 3:d55ebd20d750 272 WLAT();
ryousato 3:d55ebd20d750 273
ryousato 3:d55ebd20d750 274 wait(0.001);
ryousato 3:d55ebd20d750 275
ryousato 3:d55ebd20d750 276 ENn = 1; //ディセーブル
ryousato 3:d55ebd20d750 277
ryousato 3:d55ebd20d750 278 serial.printf("\r\n Status --- Coarse[%d/255], Fine[%d/255] ---", read_val_Coarse, read_val_Fine);
ryousato 3:d55ebd20d750 279 }
ryousato 3:d55ebd20d750 280
ryousato 3:d55ebd20d750 281 /******************************************************************************/
ryousato 3:d55ebd20d750 282 //AD変換
ryousato 3:d55ebd20d750 283 //デバッグ用
ryousato 3:d55ebd20d750 284 /******************************************************************************/
ryousato 3:d55ebd20d750 285
ryousato 3:d55ebd20d750 286 void AD(int ad){
ryousato 3:d55ebd20d750 287 unsigned short AD_Val;
ryousato 3:d55ebd20d750 288 float AD_Val_f;
ryousato 3:d55ebd20d750 289 if(ad == 1){
ryousato 3:d55ebd20d750 290 AD_Val = (AD_TRANS_IN.read_u16() >> 6); //右シフト「>> 6」で10bit分解能に合わせる
ryousato 3:d55ebd20d750 291 AD_Val_f = AD_TRANS_IN.read();
ryousato 3:d55ebd20d750 292 }
ryousato 3:d55ebd20d750 293 else if(ad == 2){
ryousato 3:d55ebd20d750 294 AD_Val = (AD_CT_IN.read_u16() >> 6); //右シフト「>> 6」で10bit分解能に合わせる
ryousato 3:d55ebd20d750 295 AD_Val_f = AD_CT_IN.read();
ryousato 3:d55ebd20d750 296 }
ryousato 3:d55ebd20d750 297 wait(0.02);
ryousato 4:e69f73c66598 298 serial.printf("\r\nAD_Val : %1f [V] / (%d)d / (%x)h",(AD_Val*Vcc/1023),AD_Val,AD_Val);
ryousato 3:d55ebd20d750 299 serial.printf("\r\nAD_Val_f : %1f [V] / (%f)d",(AD_Val_f*Vcc),AD_Val_f);
ryousato 3:d55ebd20d750 300 }
ryousato 3:d55ebd20d750 301
ryousato 3:d55ebd20d750 302
ryousato 3:d55ebd20d750 303
ryousato 3:d55ebd20d750 304 void AD_CT(){
ryousato 3:d55ebd20d750 305 float AD_Val;
ryousato 3:d55ebd20d750 306 AD_Val = AD_TRANS_IN.read();
ryousato 3:d55ebd20d750 307 wait(0.02);
ryousato 3:d55ebd20d750 308 serial.printf("\r\n%1.3f",AD_Val);
ryousato 3:d55ebd20d750 309 }
ryousato 3:d55ebd20d750 310
ryousato 3:d55ebd20d750 311 /******************************************************************************/
ryousato 3:d55ebd20d750 312 //各POT初期設定
ryousato 3:d55ebd20d750 313 //mode 1:TRANS 2:CT1 3:CT2
ryousato 3:d55ebd20d750 314 /******************************************************************************/
ryousato 3:d55ebd20d750 315 void POTini(int mode){
ryousato 3:d55ebd20d750 316 ADDR(mode * 2); //TRANS粗調整POT
ryousato 3:d55ebd20d750 317 if(mode==1){spi.write(0x0076);}
ryousato 3:d55ebd20d750 318 else if(mode==2 || mode==3){spi.write(0x006B);}
ryousato 3:d55ebd20d750 319
ryousato 3:d55ebd20d750 320 wait(0.001);
ryousato 3:d55ebd20d750 321
ryousato 3:d55ebd20d750 322 ADDR(mode * 2 - 1); //TRANS微調整POT
ryousato 3:d55ebd20d750 323 spi.write(0x007F);
ryousato 3:d55ebd20d750 324
ryousato 3:d55ebd20d750 325 WLAT();
ryousato 3:d55ebd20d750 326
ryousato 3:d55ebd20d750 327 wait(0.001);
ryousato 3:d55ebd20d750 328
ryousato 3:d55ebd20d750 329 ENn = 1; //ディセーブル
ryousato 3:d55ebd20d750 330 }
ryousato 3:d55ebd20d750 331
ryousato 3:d55ebd20d750 332 /******************************************************************************/
ryousato 3:d55ebd20d750 333 //初期設定
ryousato 3:d55ebd20d750 334 //TRANS_OUT,CT1,2_OUTを初期値(50Hz,AC100V,60A相当)に調整
ryousato 3:d55ebd20d750 335 /******************************************************************************/
ryousato 3:d55ebd20d750 336 void initial(){
ryousato 3:d55ebd20d750 337 //全てのPOTの端子スイッチをONにする(TCON)
ryousato 3:d55ebd20d750 338 ADDR(1); //TRANS微調整POT
ryousato 3:d55ebd20d750 339 spi.write(0x40FF);
ryousato 3:d55ebd20d750 340 ADDR(2); //TRANS粗調整POT
ryousato 3:d55ebd20d750 341 spi.write(0x40FF);
ryousato 3:d55ebd20d750 342 ADDR(3); //CT1微調整POT
ryousato 3:d55ebd20d750 343 spi.write(0x40FF);
ryousato 3:d55ebd20d750 344 ADDR(4); //CT1粗調整POT
ryousato 3:d55ebd20d750 345 spi.write(0x40FF);
ryousato 3:d55ebd20d750 346 ADDR(5); //CT2微調整POT
ryousato 3:d55ebd20d750 347 spi.write(0x40FF);
ryousato 3:d55ebd20d750 348 ADDR(6); //CT2粗調整POT
ryousato 3:d55ebd20d750 349 spi.write(0x40FF);
ryousato 3:d55ebd20d750 350 wait(0.02);
ryousato 3:d55ebd20d750 351 ENn = 1; //CSをディセーブル
ryousato 3:d55ebd20d750 352
ryousato 3:d55ebd20d750 353 coilEN5 = 1; //±5V,±15VをON
ryousato 3:d55ebd20d750 354
ryousato 3:d55ebd20d750 355 coilEN1 = 0; //50Hz切替え
ryousato 3:d55ebd20d750 356
ryousato 3:d55ebd20d750 357 SCT_AMP = 0; //CT入力アンプ 60Aレベル切替え
ryousato 6:91eec3396ee9 358 CTrange = 0;
ryousato 5:5d7483b46cda 359 SHDNn = 1; //電流帰還アンプ シャットダウンしない
ryousato 3:d55ebd20d750 360
ryousato 3:d55ebd20d750 361 //TRANS_OUT初期設定
ryousato 3:d55ebd20d750 362 coilEN2 = 0; //TRANS_OUTをAD入力方向へ切替え
ryousato 3:d55ebd20d750 363
ryousato 3:d55ebd20d750 364 ADDR(2); //TRANS粗調整POT
ryousato 3:d55ebd20d750 365 spi.write(0x0076);
ryousato 6:91eec3396ee9 366 //read();
ryousato 3:d55ebd20d750 367 ADDR(1); //TRANS微調整POT
ryousato 3:d55ebd20d750 368 spi.write(0x007F);
ryousato 6:91eec3396ee9 369 //read();
ryousato 3:d55ebd20d750 370 WLAT(); //設定したワイパーをラッチ
ryousato 3:d55ebd20d750 371 wait(0.02);
ryousato 3:d55ebd20d750 372 ENn = 1; //CSをディセーブル
ryousato 3:d55ebd20d750 373
ryousato 3:d55ebd20d750 374 //CT1_OUT初期設定
ryousato 3:d55ebd20d750 375 coilEN3 = 0; //CT1_OUT1と2をAD入力方向へ切替え
ryousato 3:d55ebd20d750 376 coilEN4 = 0; //CT1を選択
ryousato 3:d55ebd20d750 377
ryousato 3:d55ebd20d750 378 ADDR(4); //CT1粗調整POT
ryousato 3:d55ebd20d750 379 spi.write(0x006B);
ryousato 6:91eec3396ee9 380 //read();
ryousato 3:d55ebd20d750 381 ADDR(3); //CT1微調整POT
ryousato 3:d55ebd20d750 382 spi.write(0x007F);
ryousato 6:91eec3396ee9 383 //read();
ryousato 3:d55ebd20d750 384 WLAT(); //設定したワイパーをラッチ
ryousato 3:d55ebd20d750 385 wait(0.02);
ryousato 3:d55ebd20d750 386 ENn = 1; //CSをディセーブル
ryousato 3:d55ebd20d750 387
ryousato 3:d55ebd20d750 388 //CT2_OUT初期設定
ryousato 3:d55ebd20d750 389 coilEN3 = 0; //CT1_OUT1と2をAD入力方向へ切替え
ryousato 3:d55ebd20d750 390 coilEN4 = 1; //CT2を選択
ryousato 3:d55ebd20d750 391
ryousato 3:d55ebd20d750 392 POTini(3);
ryousato 3:d55ebd20d750 393 ADDR(6); //CT2粗調整POT
ryousato 3:d55ebd20d750 394 spi.write(0x006B);
ryousato 6:91eec3396ee9 395 //read();
ryousato 3:d55ebd20d750 396 ADDR(5); //CT2微調整POT
ryousato 3:d55ebd20d750 397 spi.write(0x007F);
ryousato 6:91eec3396ee9 398 //read();
ryousato 3:d55ebd20d750 399 WLAT(); //設定したワイパーをラッチ
ryousato 3:d55ebd20d750 400 wait(0.02);
ryousato 3:d55ebd20d750 401 ENn = 1; //CSをディセーブル
ryousato 3:d55ebd20d750 402
ryousato 3:d55ebd20d750 403 coilEN2 = 1; //TRANS_OUT出力
ryousato 3:d55ebd20d750 404 coilEN3 = 1; //CT1,2_OUT出力
ryousato 4:e69f73c66598 405 coilEN4 = 0;
ryousato 4:e69f73c66598 406
ryousato 4:e69f73c66598 407 /*
ryousato 3:d55ebd20d750 408 for(int i=0; i<10*2; i++){
ryousato 3:d55ebd20d750 409 led1 = !led1;
ryousato 2:5e6613f149d4 410 wait(0.1);
ryousato 3:d55ebd20d750 411 }
ryousato 3:d55ebd20d750 412 led1 = 0;
ryousato 4:e69f73c66598 413 */
ryousato 3:d55ebd20d750 414 serial.printf("\r\n OK(initial)");
ryousato 2:5e6613f149d4 415 }
ryousato 2:5e6613f149d4 416
ryousato 3:d55ebd20d750 417 /******************************************************************************/
ryousato 3:d55ebd20d750 418 //手動調整
ryousato 3:d55ebd20d750 419 /******************************************************************************/
ryousato 3:d55ebd20d750 420 void manual_adj(int mode){
ryousato 3:d55ebd20d750 421 if(mode == 2 || mode == 3){
ryousato 3:d55ebd20d750 422 serial.printf("\r\n Select range mode. Type '60A' or '120A'.");
ryousato 3:d55ebd20d750 423 while(1){
ryousato 3:d55ebd20d750 424 if(serial.readable()) { // 受信確認
ryousato 3:d55ebd20d750 425 moji[count] = serial.getc(); //キーボード入力文字を1文字ずつmojiに代入
ryousato 3:d55ebd20d750 426 serial.printf("%c", moji[count]); //シリアル出力表示
ryousato 3:d55ebd20d750 427
ryousato 3:d55ebd20d750 428 if(count == 5 ){ // ①文字数が既定の個数になった場合
ryousato 3:d55ebd20d750 429 moji[5] = '\0'; // 末尾に終端文字を入れる
ryousato 3:d55ebd20d750 430 serial.printf("\r\n\r\n ERROR!\r\n");
ryousato 3:d55ebd20d750 431 count = 0; // 文字カウンタをリセット
ryousato 3:d55ebd20d750 432 }
ryousato 3:d55ebd20d750 433
ryousato 3:d55ebd20d750 434 else if(moji[0] == '\n'){count = 0;}
ryousato 3:d55ebd20d750 435
ryousato 3:d55ebd20d750 436 else if((moji[count] == '\r')) { // ②CRを受信した場合
ryousato 3:d55ebd20d750 437 moji[count] = '\0'; //末尾に終端文字を入れる
ryousato 3:d55ebd20d750 438 count = 0; //文字カウンタをリセット
ryousato 3:d55ebd20d750 439 if (strcmp(moji, "60A") == 0){
ryousato 3:d55ebd20d750 440 SCT_AMP = 0; //CT入力アンプ 60Aレベル切替え
ryousato 6:91eec3396ee9 441 CTrange = 0;
ryousato 3:d55ebd20d750 442 break;}
ryousato 3:d55ebd20d750 443 else if(strcmp(moji, "120A") == 0){
ryousato 3:d55ebd20d750 444 SCT_AMP = 1; //CT入力アンプ 120Aレベル切替え
ryousato 6:91eec3396ee9 445 CTrange = 1;
ryousato 3:d55ebd20d750 446 break;}
ryousato 3:d55ebd20d750 447 else serial.printf("\r\n\r\n NG!\r\n");
ryousato 3:d55ebd20d750 448 }
ryousato 3:d55ebd20d750 449 else count++; // 文字カウンタに1加算
ryousato 3:d55ebd20d750 450 }
ryousato 3:d55ebd20d750 451 }
ryousato 3:d55ebd20d750 452 serial.printf("\r\n OK");
ryousato 3:d55ebd20d750 453 }
ryousato 3:d55ebd20d750 454
ryousato 3:d55ebd20d750 455 /*
ryousato 3:d55ebd20d750 456 if(mode == 1){coilEN2 = 0;} //TRANS_OUTをAD入力方向へ切替え
ryousato 3:d55ebd20d750 457 else if(mode == 2){coilEN3 = 0; coilEN4 = 0;} //CT1_OUT1と2をAD入力方向へ切替え
ryousato 3:d55ebd20d750 458 else if(mode == 3){coilEN3 = 0; coilEN4 = 1;} //CT1_OUT1と2をAD入力方向へ切替え
ryousato 3:d55ebd20d750 459 */
ryousato 3:d55ebd20d750 460
ryousato 3:d55ebd20d750 461 //POTの状態を確認し、ステータス情報に表示する
ryousato 3:d55ebd20d750 462 ADDR(mode * 2); //TRANS粗調整POT
ryousato 3:d55ebd20d750 463 wait(0.2);
ryousato 3:d55ebd20d750 464 int read_val_Coarse = spi.write(0x0C00);
ryousato 3:d55ebd20d750 465 read_val_Coarse &= 0x00FF;
ryousato 3:d55ebd20d750 466
ryousato 3:d55ebd20d750 467 ADDR(mode * 2 - 1); //TRANS微調整POT
ryousato 3:d55ebd20d750 468 wait(0.2);
ryousato 3:d55ebd20d750 469 int read_val_Fine = spi.write(0x0C00);
ryousato 3:d55ebd20d750 470 read_val_Fine &= 0x00FF;
ryousato 3:d55ebd20d750 471 ENn = 1; //CSをディセーブル
ryousato 3:d55ebd20d750 472 serial.printf("\r\n\r\n Status --- Coarse[%d/255], Fine[%d/255] ---\r\n", read_val_Coarse, read_val_Fine);
ryousato 3:d55ebd20d750 473
ryousato 3:d55ebd20d750 474
ryousato 3:d55ebd20d750 475 //ループスタート
ryousato 3:d55ebd20d750 476 while(1){ //ループ1
ryousato 3:d55ebd20d750 477 serial.printf("\r\n Select mode '+-' or 'num'. ('q' quit)\r\n");
ryousato 3:d55ebd20d750 478 while(1){ //adjmode
ryousato 3:d55ebd20d750 479 if(serial.readable()) { // 受信確認
ryousato 3:d55ebd20d750 480 moji[count] = serial.getc(); //キーボード入力文字を1文字ずつmojiに代入
ryousato 3:d55ebd20d750 481 serial.printf("%c", moji[count]); //シリアル出力表示
ryousato 3:d55ebd20d750 482
ryousato 3:d55ebd20d750 483 if(count == 4 ){ // ①文字数が既定の個数になった場合
ryousato 3:d55ebd20d750 484 moji[4] = '\0'; // 末尾に終端文字を入れる
ryousato 3:d55ebd20d750 485 serial.printf("\r\n\r\n ERROR!\r\n");
ryousato 3:d55ebd20d750 486 count = 0; // 文字カウンタをリセット
ryousato 3:d55ebd20d750 487 }
ryousato 3:d55ebd20d750 488
ryousato 3:d55ebd20d750 489 else if(moji[0] == '\n'){count = 0;}
ryousato 3:d55ebd20d750 490
ryousato 3:d55ebd20d750 491 else if((moji[count] == '\r')) { // ②CRを受信した場合
ryousato 3:d55ebd20d750 492 moji[count] = '\0'; //末尾に終端文字を入れる
ryousato 3:d55ebd20d750 493 count = 0; //文字カウンタをリセット
ryousato 3:d55ebd20d750 494 if (strcmp(moji,"+-") == 0){
ryousato 3:d55ebd20d750 495 adjmode = 1;
ryousato 3:d55ebd20d750 496 break;}
ryousato 3:d55ebd20d750 497 else if(strcmp(moji,"num") == 0){
ryousato 3:d55ebd20d750 498 adjmode = 2;
ryousato 3:d55ebd20d750 499 break;}
ryousato 3:d55ebd20d750 500 else if(strcmp(moji,"q") == 0){break;}
ryousato 3:d55ebd20d750 501 else serial.printf("\r\n\r\n NG!\r\n");
ryousato 3:d55ebd20d750 502 }
ryousato 3:d55ebd20d750 503 else count++; // 文字カウンタに1加算
ryousato 3:d55ebd20d750 504 }
ryousato 3:d55ebd20d750 505 } //adjmode
ryousato 3:d55ebd20d750 506
ryousato 3:d55ebd20d750 507 if(strcmp(moji,"q")==0){serial.printf("\r\n quit\r\n"); break;} //ループ1ブレイク
ryousato 3:d55ebd20d750 508
ryousato 3:d55ebd20d750 509 while(1){ //ループ2
ryousato 3:d55ebd20d750 510 serial.printf("\r\n Type 'C' for Coarse or 'F' for Fine. ('q' quit, 'b' back)\r\n");
ryousato 3:d55ebd20d750 511 while(1){ //CorF setting
ryousato 3:d55ebd20d750 512 if(serial.readable()) { // 受信確認
ryousato 3:d55ebd20d750 513 moji[count] = serial.getc(); //キーボード入力文字を1文字ずつmojiに代入
ryousato 3:d55ebd20d750 514 serial.printf("%c", moji[count]); //シリアル出力表示
ryousato 3:d55ebd20d750 515
ryousato 3:d55ebd20d750 516 if(count == 2 ){ // ①文字数が既定の個数になった場合
ryousato 3:d55ebd20d750 517 moji[2] = '\0'; // 末尾に終端文字を入れる
ryousato 3:d55ebd20d750 518 serial.printf("\r\n\r\n ERROR!\r\n");
ryousato 3:d55ebd20d750 519 count = 0; // 文字カウンタをリセット
ryousato 3:d55ebd20d750 520 }
ryousato 3:d55ebd20d750 521
ryousato 3:d55ebd20d750 522 else if(moji[0] == '\n'){count = 0;}
ryousato 3:d55ebd20d750 523
ryousato 3:d55ebd20d750 524 else if((moji[count] == '\r')) { // ②CRを受信した場合
ryousato 3:d55ebd20d750 525 moji[count] = '\0'; //末尾に終端文字を入れる
ryousato 3:d55ebd20d750 526 count = 0; //文字カウンタをリセット
ryousato 3:d55ebd20d750 527 if (strcmp(moji, "C") == 0){
ryousato 3:d55ebd20d750 528 CorF = 2; //粗調整
ryousato 3:d55ebd20d750 529 serial.printf("\r\n---Coarse Setting---");
ryousato 3:d55ebd20d750 530 break;}
ryousato 3:d55ebd20d750 531 else if(strcmp(moji, "F") == 0){
ryousato 3:d55ebd20d750 532 CorF = 1; //微調整
ryousato 3:d55ebd20d750 533 serial.printf("\r\n---Fine Setting---");
ryousato 3:d55ebd20d750 534 break;}
ryousato 3:d55ebd20d750 535 else if(strcmp(moji,"b")==0 || strcmp(moji,"q")==0){break;}
ryousato 3:d55ebd20d750 536 else serial.printf("\r\n\r\n NG!\r\n");
ryousato 3:d55ebd20d750 537 }
ryousato 3:d55ebd20d750 538 else count++; // 文字カウンタに1加算
ryousato 3:d55ebd20d750 539 }
ryousato 3:d55ebd20d750 540 }//CorF setting
ryousato 3:d55ebd20d750 541
ryousato 3:d55ebd20d750 542 if(strcmp(moji,"b")==0){
ryousato 3:d55ebd20d750 543 serial.printf("\r\n return\r\n");
ryousato 3:d55ebd20d750 544 break; //ループ2ブレイク
ryousato 3:d55ebd20d750 545 }
ryousato 3:d55ebd20d750 546 else if(strcmp(moji,"q")==0){break;} //ループ2ブレイク
ryousato 3:d55ebd20d750 547
ryousato 3:d55ebd20d750 548 while(1){ //ループ3
ryousato 3:d55ebd20d750 549 if(adjmode == 1){
ryousato 3:d55ebd20d750 550 serial.printf("\r\n Type '+' for increment, '-' for decrement. ('q' quit, 'b' back)");
ryousato 3:d55ebd20d750 551 while(1){ //+-モード
ryousato 3:d55ebd20d750 552 if(serial.readable()) { // 受信確認
ryousato 3:d55ebd20d750 553 moji[count] = serial.getc(); //キーボード入力文字を1文字ずつmojiに代入
ryousato 3:d55ebd20d750 554 serial.printf("\r\n%c", moji[count]); //シリアル出力表示
ryousato 3:d55ebd20d750 555 moji[1] = '\0'; //末尾に終端文字を入れる
ryousato 3:d55ebd20d750 556 count = 0; //文字カウンタをリセット
ryousato 3:d55ebd20d750 557
ryousato 3:d55ebd20d750 558 if(strcmp(moji,"b")==0 || strcmp(moji,"q")==0){break;}
ryousato 3:d55ebd20d750 559 else if(strcmp(moji,"\n") == 0){}
ryousato 3:d55ebd20d750 560 else if(strcmp(moji,"+") == 0){incdec(1,1,CorF,mode);}
ryousato 3:d55ebd20d750 561 else if(strcmp(moji,"-") == 0){incdec(0,1,CorF,mode);}
ryousato 3:d55ebd20d750 562 else serial.printf("\r\n\r\n NG!\r\n");
ryousato 3:d55ebd20d750 563 }
ryousato 3:d55ebd20d750 564 } //+-モード
ryousato 3:d55ebd20d750 565 if(strcmp(moji,"b")==0){
ryousato 3:d55ebd20d750 566 serial.printf("\r\n return\r\n");
ryousato 3:d55ebd20d750 567 break; //ループ3ブレイク
ryousato 3:d55ebd20d750 568 }
ryousato 3:d55ebd20d750 569 else if(strcmp(moji,"q")==0){break;} //ループ3ブレイク
ryousato 3:d55ebd20d750 570 }
ryousato 3:d55ebd20d750 571 else if(adjmode == 2){
ryousato 3:d55ebd20d750 572 while(1){ //ループ4
ryousato 3:d55ebd20d750 573 serial.printf("\r\n Type '+' for increase, '-' for decrease. ('q' quit, 'b' back)");
ryousato 3:d55ebd20d750 574 while(1){ //numモード
ryousato 3:d55ebd20d750 575 if(serial.readable()) { // 受信確認
ryousato 3:d55ebd20d750 576 moji[count] = serial.getc(); //キーボード入力文字を1文字ずつmojiに代入
ryousato 3:d55ebd20d750 577 serial.printf("%c", moji[count]); //シリアル出力表示
ryousato 3:d55ebd20d750 578
ryousato 3:d55ebd20d750 579 if(count == 2 ){ // ①文字数が既定の個数になった場合
ryousato 3:d55ebd20d750 580 moji[2] = '\0'; // 末尾に終端文字を入れる
ryousato 3:d55ebd20d750 581 serial.printf("\r\n\r\n ERROR!\r\n");
ryousato 3:d55ebd20d750 582 count = 0; // 文字カウンタをリセット
ryousato 3:d55ebd20d750 583 }
ryousato 3:d55ebd20d750 584
ryousato 3:d55ebd20d750 585 else if(moji[0] == '\n'){count = 0;}
ryousato 3:d55ebd20d750 586
ryousato 3:d55ebd20d750 587 else if((moji[count] == '\r')) { // ②CRを受信した場合
ryousato 3:d55ebd20d750 588 moji[count] = '\0'; //末尾に終端文字を入れる
ryousato 3:d55ebd20d750 589 count = 0; //文字カウンタをリセット
ryousato 3:d55ebd20d750 590 if (strcmp(moji, "+") == 0){
ryousato 3:d55ebd20d750 591 incr = 1; //増加
ryousato 3:d55ebd20d750 592 serial.printf("\r\n---increase---");
ryousato 3:d55ebd20d750 593 break;}
ryousato 3:d55ebd20d750 594 else if(strcmp(moji, "-") == 0){
ryousato 3:d55ebd20d750 595 incr = 0; //減少
ryousato 3:d55ebd20d750 596 serial.printf("\r\n---decrease---");
ryousato 3:d55ebd20d750 597 break;}
ryousato 3:d55ebd20d750 598 else if(strcmp(moji,"b")==0 || strcmp(moji,"q")==0){break;}
ryousato 3:d55ebd20d750 599 else serial.printf("\r\n\r\n NG!\r\n");
ryousato 3:d55ebd20d750 600 }
ryousato 3:d55ebd20d750 601 else count++; // 文字カウンタに1加算
ryousato 3:d55ebd20d750 602 }
ryousato 3:d55ebd20d750 603 } //numモード
ryousato 3:d55ebd20d750 604 if(strcmp(moji,"b")==0 || strcmp(moji,"q")==0){break;} //ループ4ブレイク
ryousato 3:d55ebd20d750 605 while(1){ //ループ5
ryousato 3:d55ebd20d750 606 serial.printf("\r\n Type number [0-255]. ('q' quit, 'b' back)");
ryousato 3:d55ebd20d750 607 for(int i=0; i<3; i++){moji[i] = '0';}
ryousato 3:d55ebd20d750 608
ryousato 3:d55ebd20d750 609 while(1){ //numモード2
ryousato 3:d55ebd20d750 610 if(serial.readable()) { // 受信確認
ryousato 3:d55ebd20d750 611 moji[count] = serial.getc(); //キーボード入力文字を1文字ずつmojiに代入
ryousato 3:d55ebd20d750 612 serial.printf("%c", moji[count]); //シリアル出力表示
ryousato 3:d55ebd20d750 613
ryousato 3:d55ebd20d750 614 if(count == 4 ){ // ①文字数が既定の個数になった場合
ryousato 3:d55ebd20d750 615 moji[4] = '\0'; // 末尾に終端文字を入れる
ryousato 3:d55ebd20d750 616 serial.printf("\r\n\r\n ERROR!\r\n");
ryousato 3:d55ebd20d750 617 count = 0; // 文字カウンタをリセット
ryousato 3:d55ebd20d750 618 }
ryousato 3:d55ebd20d750 619 else if(moji[0] == '\n'){count = 0;}
ryousato 3:d55ebd20d750 620 else if((moji[count] == '\r')) { // ②CRを受信した場合
ryousato 3:d55ebd20d750 621 moji[count] = '\0'; //末尾に終端文字を入れる
ryousato 3:d55ebd20d750 622 count = 0; //文字カウンタをリセット
ryousato 3:d55ebd20d750 623 if(strcmp(moji,"b")==0 || strcmp(moji,"q")==0){break;}
ryousato 3:d55ebd20d750 624 for(int i=0; i<3; i++){suuji[i] = 0;}
ryousato 3:d55ebd20d750 625 for(int i=0; i<3; i++){
ryousato 3:d55ebd20d750 626 suuji[i] = moji[i];
ryousato 3:d55ebd20d750 627 suuji[i] -= 48;
ryousato 3:d55ebd20d750 628 }
ryousato 3:d55ebd20d750 629 for(int i=0; i<3; i++){moji[i] = '0';}
ryousato 3:d55ebd20d750 630 if(suuji[0]>=0&&suuji[0]<=9){
ryousato 3:d55ebd20d750 631 if(suuji[1]>=0&&suuji[1]<=9){
ryousato 3:d55ebd20d750 632 if(suuji[2]>=0&&suuji[2]<=9){
ryousato 3:d55ebd20d750 633 suuji[0] *= 100;
ryousato 3:d55ebd20d750 634 suuji[1] *= 10;
ryousato 3:d55ebd20d750 635 }
ryousato 3:d55ebd20d750 636 else{
ryousato 3:d55ebd20d750 637 suuji[0] *= 10;
ryousato 3:d55ebd20d750 638 suuji[2] = 0;
ryousato 3:d55ebd20d750 639 }
ryousato 3:d55ebd20d750 640 }
ryousato 3:d55ebd20d750 641 else{
ryousato 3:d55ebd20d750 642 suuji[1] = 0;
ryousato 3:d55ebd20d750 643 suuji[2] = 0;
ryousato 3:d55ebd20d750 644 }
ryousato 3:d55ebd20d750 645 }
ryousato 3:d55ebd20d750 646 else{serial.printf("\r\n\r\n NG!\r\n"); break;}
ryousato 3:d55ebd20d750 647
ryousato 3:d55ebd20d750 648 wa = suuji[0]+suuji[1]+suuji[2];
ryousato 3:d55ebd20d750 649
ryousato 3:d55ebd20d750 650 incdec(incr,wa,CorF,mode);
ryousato 3:d55ebd20d750 651
ryousato 3:d55ebd20d750 652 }
ryousato 3:d55ebd20d750 653 else count++; // 文字カウンタに1加算
ryousato 3:d55ebd20d750 654 }
ryousato 3:d55ebd20d750 655 } //numモード2
ryousato 3:d55ebd20d750 656 if(strcmp(moji,"b")==0){
ryousato 3:d55ebd20d750 657 serial.printf("\r\n return\r\n");
ryousato 3:d55ebd20d750 658 break; //ループ5ブレイク
ryousato 3:d55ebd20d750 659 }
ryousato 3:d55ebd20d750 660 else if(strcmp(moji,"q")==0){break;}
ryousato 3:d55ebd20d750 661 } //ループ5
ryousato 3:d55ebd20d750 662 if(strcmp(moji,"q")==0){break;} //ループ5→4ブレイク
ryousato 3:d55ebd20d750 663 } //ループ4
ryousato 3:d55ebd20d750 664 if(strcmp(moji,"b")==0){
ryousato 3:d55ebd20d750 665 serial.printf("\r\n return\r\n");
ryousato 3:d55ebd20d750 666 break; //ループ4→3ブレイク
ryousato 3:d55ebd20d750 667 }
ryousato 3:d55ebd20d750 668 else if(strcmp(moji,"q")==0){break;} //ループ4→3ブレイク
ryousato 3:d55ebd20d750 669 } //if文
ryousato 3:d55ebd20d750 670 } //ループ3
ryousato 3:d55ebd20d750 671 if(strcmp(moji,"q")==0){break;} //ループ3→2ブレイク
ryousato 3:d55ebd20d750 672 } //ループ2
ryousato 3:d55ebd20d750 673 if(strcmp(moji,"q")==0){
ryousato 3:d55ebd20d750 674 serial.printf("\r\n quit\r\n");
ryousato 3:d55ebd20d750 675 break; //ループ2→1ブレイク
ryousato 3:d55ebd20d750 676 }
ryousato 3:d55ebd20d750 677 } //ループ1
ryousato 3:d55ebd20d750 678
ryousato 3:d55ebd20d750 679 serial.printf("\r\n MANUAL_ADJ END");
ryousato 3:d55ebd20d750 680 }
ryousato 3:d55ebd20d750 681
ryousato 3:d55ebd20d750 682 /******************************************************************************/
ryousato 3:d55ebd20d750 683 //タイマー割込み https://monoist.atmarkit.co.jp/mn/articles/1506/19/news001_2.html
ryousato 3:d55ebd20d750 684 /******************************************************************************/
ryousato 3:d55ebd20d750 685 /*
ryousato 3:d55ebd20d750 686 void attime(){
ryousato 3:d55ebd20d750 687 led1 = !led1;
ryousato 3:d55ebd20d750 688 }
ryousato 3:d55ebd20d750 689 */
ryousato 3:d55ebd20d750 690 /******************************************************************************/
ryousato 3:d55ebd20d750 691 //タイマー割込み
ryousato 3:d55ebd20d750 692 //オフセット補正したActualVrefを求める (平均値を出しているだけ)
ryousato 3:d55ebd20d750 693 /******************************************************************************/
ryousato 3:d55ebd20d750 694 void AVrefcal(){
ryousato 3:d55ebd20d750 695 led1 = !led1;
ryousato 3:d55ebd20d750 696
ryousato 3:d55ebd20d750 697 if(mode_p == 1){AD_val = AD_TRANS_IN.read();}
ryousato 3:d55ebd20d750 698 else if(mode_p==2 || mode_p==3){AD_val = AD_CT_IN.read();}
ryousato 3:d55ebd20d750 699
ryousato 3:d55ebd20d750 700 AD_val = AD_val * Vcc; //(val)
ryousato 3:d55ebd20d750 701 AD_flag = 1;
ryousato 3:d55ebd20d750 702
ryousato 3:d55ebd20d750 703 //serial.printf("\r\n AD_val = %f",AD_val);
ryousato 2:5e6613f149d4 704 }
ryousato 2:5e6613f149d4 705
ryousato 3:d55ebd20d750 706 ////////////////////////////
ryousato 3:d55ebd20d750 707 //サンプリング ActualVref
ryousato 3:d55ebd20d750 708 //mode 1:TRANS 2:CT1 3:CT2
ryousato 3:d55ebd20d750 709 ////////////////////////////
ryousato 3:d55ebd20d750 710 void offsetcal(int mode){
ryousato 3:d55ebd20d750 711 AD_count = 0;
ryousato 3:d55ebd20d750 712 AD_flag = 0;
ryousato 3:d55ebd20d750 713 AD_val = 0;
ryousato 3:d55ebd20d750 714 AD_val_sum = 0;
ryousato 3:d55ebd20d750 715
ryousato 3:d55ebd20d750 716 mode_p = mode;
ryousato 3:d55ebd20d750 717 if(mode == 1){coilEN2 = 0;} //TRANS_OUTをAD入力方向へ切替え
ryousato 3:d55ebd20d750 718 else if(mode == 2){coilEN3 = 0; coilEN4 = 0;} //CT1_OUT1と2をAD入力方向へ切替え
ryousato 3:d55ebd20d750 719 else if(mode == 3){coilEN3 = 0; coilEN4 = 1;} //CT1_OUT1と2をAD入力方向へ切替え
ryousato 3:d55ebd20d750 720
ryousato 3:d55ebd20d750 721 wait(0.05);
ryousato 3:d55ebd20d750 722
ryousato 5:5d7483b46cda 723
ryousato 5:5d7483b46cda 724 //timerint.attach(&AVrefcal,0.020408); //49Hz
ryousato 5:5d7483b46cda 725 timerint.attach(&AVrefcal,0.008); //125Hz
ryousato 3:d55ebd20d750 726
ryousato 3:d55ebd20d750 727 timecount.start();
ryousato 3:d55ebd20d750 728
ryousato 3:d55ebd20d750 729 while(1){
ryousato 5:5d7483b46cda 730 if(AD_count < 250 && AD_flag == 1){ //サンプリング数0~Nで、サンプル取得されたとき
ryousato 3:d55ebd20d750 731 AD_count ++;
ryousato 3:d55ebd20d750 732 AD_val_sum += AD_val;
ryousato 3:d55ebd20d750 733 AD_flag = 0;
ryousato 3:d55ebd20d750 734 if(AD_count == 0){timecount.start();} //0~Nのサンプリング時間計測用スタート時
ryousato 5:5d7483b46cda 735 else if(AD_count == 250){ //0~Nのサンプリング時間計測用ストップ時
ryousato 3:d55ebd20d750 736 timecount.stop();
ryousato 6:91eec3396ee9 737 //serial.printf("\r\n t = %f",timecount.read()); //計測時間表示
ryousato 3:d55ebd20d750 738 timecount.reset();
ryousato 3:d55ebd20d750 739 }
ryousato 3:d55ebd20d750 740 }
ryousato 5:5d7483b46cda 741 else if(AD_count < 250 && AD_flag == 0){} //サンプリング数0~Nで、サンプル取得されてないとき
ryousato 3:d55ebd20d750 742 else{ //サンプリング完了時
ryousato 3:d55ebd20d750 743 Vref = AD_val_sum / AD_count;
ryousato 3:d55ebd20d750 744 ActualVref[mode_p] = Vref; //格納
ryousato 4:e69f73c66598 745 serial.printf("\r\n Vref%d = %f",mode_p,ActualVref[mode_p]);
ryousato 3:d55ebd20d750 746 break;
ryousato 3:d55ebd20d750 747 }
ryousato 3:d55ebd20d750 748 }
ryousato 3:d55ebd20d750 749 timerint.detach();
ryousato 3:d55ebd20d750 750 led1 = 0;
ryousato 3:d55ebd20d750 751 }
ryousato 3:d55ebd20d750 752
ryousato 4:e69f73c66598 753 void dispVref(){
ryousato 4:e69f73c66598 754 serial.printf("\r\n TRANS_Vref = %f",ActualVref[1]);
ryousato 4:e69f73c66598 755 serial.printf("\r\n CT1___Vref = %f",ActualVref[2]);
ryousato 4:e69f73c66598 756 serial.printf("\r\n CT2___Vref = %f",ActualVref[3]);
ryousato 3:d55ebd20d750 757 }
ryousato 3:d55ebd20d750 758 /******************************************************************************/
ryousato 3:d55ebd20d750 759 //タイマー割込み
ryousato 3:d55ebd20d750 760 //AD変換によりVrmsを求める
ryousato 3:d55ebd20d750 761 /******************************************************************************/
ryousato 3:d55ebd20d750 762 //タイマー割込み実行関数
ryousato 3:d55ebd20d750 763 void timerAD(){
ryousato 3:d55ebd20d750 764 led1 = !led1;
ryousato 4:e69f73c66598 765 //serial.printf("\r\n mode_p = %d",mode_p);
ryousato 4:e69f73c66598 766 //serial.printf("\r\n ActualVref = %f",ActualVref[mode_p]);
ryousato 3:d55ebd20d750 767
ryousato 3:d55ebd20d750 768 if(mode_p == 1){AD_val = AD_TRANS_IN.read();}
ryousato 3:d55ebd20d750 769 else if(mode_p==2 || mode_p==3){AD_val = AD_CT_IN.read();}
ryousato 3:d55ebd20d750 770
ryousato 3:d55ebd20d750 771 //serial.printf("\r\n AD_val = %f",AD_val);
ryousato 3:d55ebd20d750 772
ryousato 3:d55ebd20d750 773 AD_val *= Vcc;
ryousato 3:d55ebd20d750 774 AD_val -= ActualVref[mode_p];
ryousato 3:d55ebd20d750 775 //serial.printf("\r\n AD_val*Vcc-Vref = %f",AD_val);
ryousato 3:d55ebd20d750 776 AD_val *= AD_val;
ryousato 3:d55ebd20d750 777 AD_flag = 1;
ryousato 3:d55ebd20d750 778
ryousato 3:d55ebd20d750 779 //serial.printf("\r\n AD_val = %f",AD_val);
ryousato 3:d55ebd20d750 780 }
ryousato 3:d55ebd20d750 781 ////////////////////////////
ryousato 3:d55ebd20d750 782 //サンプリング Vrms
ryousato 3:d55ebd20d750 783 //mode 1:TRANS 2:CT1 3:CT2
ryousato 3:d55ebd20d750 784 ////////////////////////////
ryousato 3:d55ebd20d750 785 void ADVrms(int mode){
ryousato 3:d55ebd20d750 786 AD_count = 0;
ryousato 3:d55ebd20d750 787 AD_flag = 0;
ryousato 3:d55ebd20d750 788 AD_val = 0;
ryousato 3:d55ebd20d750 789 AD_val_sum = 0;
ryousato 3:d55ebd20d750 790
ryousato 3:d55ebd20d750 791 mode_p = mode;
ryousato 3:d55ebd20d750 792 if(mode == 1){coilEN2 = 0;} //TRANS_OUTをAD入力方向へ切替え
ryousato 3:d55ebd20d750 793 else if(mode == 2){coilEN3 = 0; coilEN4 = 0;} //CT1_OUT1をAD入力方向へ切替え
ryousato 3:d55ebd20d750 794 else if(mode == 3){coilEN3 = 0; coilEN4 = 1;} //CT1_OUT2をAD入力方向へ切替え
ryousato 3:d55ebd20d750 795
ryousato 3:d55ebd20d750 796 wait(0.05);
ryousato 3:d55ebd20d750 797
ryousato 5:5d7483b46cda 798 // timerint.attach(&timerAD,0.020408);
ryousato 5:5d7483b46cda 799 timerint.attach(&timerAD,0.008); //125Hz
ryousato 3:d55ebd20d750 800
ryousato 3:d55ebd20d750 801 timecount.start();
ryousato 3:d55ebd20d750 802
ryousato 3:d55ebd20d750 803 while(1){
ryousato 5:5d7483b46cda 804 if(AD_count < 250 && AD_flag == 1){ //サンプリング数0~Nで、サンプル取得されたとき
ryousato 3:d55ebd20d750 805 AD_count ++;
ryousato 3:d55ebd20d750 806 AD_val_sum += AD_val;
ryousato 3:d55ebd20d750 807 AD_flag = 0;
ryousato 3:d55ebd20d750 808 if(AD_count == 0){timecount.start();} //0~Nのサンプリング時間計測用スタート時
ryousato 5:5d7483b46cda 809 else if(AD_count == 250){ //0~Nのサンプリング時間計測用ストップ時
ryousato 3:d55ebd20d750 810 timecount.stop();
ryousato 3:d55ebd20d750 811 //serial.printf("\r\n t = %f",timecount.read());
ryousato 3:d55ebd20d750 812 timecount.reset();
ryousato 3:d55ebd20d750 813 }
ryousato 3:d55ebd20d750 814 }
ryousato 5:5d7483b46cda 815 else if(AD_count < 250 && AD_flag == 0){}//サンプリング数0~Nで、サンプル取得されてないとき
ryousato 3:d55ebd20d750 816 else{ //サンプリング完了時
ryousato 3:d55ebd20d750 817 AD_val_sum /= AD_count;
ryousato 3:d55ebd20d750 818 Vrms = sqrtf(AD_val_sum);
ryousato 3:d55ebd20d750 819 //serial.printf("\r\n AD_val_sum = %f",AD_val_sum);
ryousato 3:d55ebd20d750 820 serial.printf("\r\n Vrms = %f",Vrms);
ryousato 3:d55ebd20d750 821 break;
ryousato 3:d55ebd20d750 822 }
ryousato 3:d55ebd20d750 823 }
ryousato 3:d55ebd20d750 824 timerint.detach();
ryousato 3:d55ebd20d750 825 led1 = 0;
ryousato 2:5e6613f149d4 826 }
ryousato 2:5e6613f149d4 827
ryousato 3:d55ebd20d750 828 //デバッグ用
ryousato 3:d55ebd20d750 829 void att(int mode){
ryousato 3:d55ebd20d750 830 mode_p = mode;
ryousato 5:5d7483b46cda 831 //timerint.attach(&timerAD,0.020408); //サンプリング数=49 20.4ms周期
ryousato 5:5d7483b46cda 832 timerint.attach(&timerAD,0.008);
ryousato 3:d55ebd20d750 833 }
ryousato 3:d55ebd20d750 834 void det(){timerint.detach();}
ryousato 3:d55ebd20d750 835
ryousato 3:d55ebd20d750 836 /******************************************************************************/
ryousato 6:91eec3396ee9 837 //自動調整(コマンド)
ryousato 3:d55ebd20d750 838 //TRANS_OUT設定範囲 : AC 50~138V
ryousato 3:d55ebd20d750 839 //CT1,2_OUT設定範囲 : AC 10~120A
ryousato 3:d55ebd20d750 840 /******************************************************************************/
ryousato 6:91eec3396ee9 841 void auto_adj(int mode, float setval){
ryousato 6:91eec3396ee9 842
ryousato 6:91eec3396ee9 843 int adjnum = 0; //コマンド判定フラグ
ryousato 6:91eec3396ee9 844
ryousato 6:91eec3396ee9 845 //設定範囲判定 と Vrms換算
ryousato 6:91eec3396ee9 846 if(mode == 1) {
ryousato 6:91eec3396ee9 847 if(setval >= 50 && setval <= 138) {
ryousato 6:91eec3396ee9 848 setval = setval * 0.12 * 0.196078; //0.12:トランス比 0.196078:分圧抵抗比
ryousato 6:91eec3396ee9 849 //serial.printf("\r\n %f",setval);
ryousato 6:91eec3396ee9 850 setval /= 2;
ryousato 6:91eec3396ee9 851 setval /= sqrtf(2);
ryousato 6:91eec3396ee9 852 serial.printf("\r\n setval = %f",setval);
ryousato 6:91eec3396ee9 853 } else {
ryousato 6:91eec3396ee9 854 serial.printf("\r\n\r\n NG!\r\n");
ryousato 6:91eec3396ee9 855 adjnum = 1;
ryousato 6:91eec3396ee9 856 }
ryousato 6:91eec3396ee9 857 } else if(mode==2 || mode==3) {
ryousato 6:91eec3396ee9 858 if(setval >= 10 && setval <= 120) {
ryousato 6:91eec3396ee9 859 if(setval >= 61 && setval <= 120) {
ryousato 6:91eec3396ee9 860 SCT_AMP = 1;
ryousato 6:91eec3396ee9 861 CTrange = 1;
ryousato 6:91eec3396ee9 862 }
ryousato 6:91eec3396ee9 863 if(CTrange == 0) {
ryousato 6:91eec3396ee9 864 setval = setval / 3000 * 10 * 5.666667; //3000:CT比 10:終端抵抗 5.666667:分圧抵抗比
ryousato 6:91eec3396ee9 865 } else if(CTrange == 1) {
ryousato 6:91eec3396ee9 866 setval = setval / 3000 * 10 * 2.833333; //3000:CT比 10:終端抵抗 2.833333:分圧抵抗比
ryousato 6:91eec3396ee9 867 }
ryousato 6:91eec3396ee9 868 serial.printf("\r\n setval = %f",setval);
ryousato 6:91eec3396ee9 869 } else {
ryousato 6:91eec3396ee9 870 serial.printf("\r\n\r\n NG!\r\n");
ryousato 6:91eec3396ee9 871 adjnum = 1;
ryousato 6:91eec3396ee9 872 }
ryousato 6:91eec3396ee9 873 } else {
ryousato 6:91eec3396ee9 874 serial.printf("\r\n\r\n NG!\r\n");
ryousato 6:91eec3396ee9 875 adjnum = 1;
ryousato 6:91eec3396ee9 876 }
ryousato 6:91eec3396ee9 877
ryousato 6:91eec3396ee9 878 int adjcount = 0; //ループ2上限変数
ryousato 6:91eec3396ee9 879
ryousato 6:91eec3396ee9 880 while(1) { //ループ2
ryousato 6:91eec3396ee9 881 if(adjnum == 1) {
ryousato 6:91eec3396ee9 882 serial.printf("\r\n\r\n COMMAND ERROR!");
ryousato 6:91eec3396ee9 883 break; //ループ2ブレイク
ryousato 6:91eec3396ee9 884 } else if(adjcount >= 15) { //ループ2上限値
ryousato 6:91eec3396ee9 885 serial.printf("\r\n\r\n ERROR!\r\n");
ryousato 6:91eec3396ee9 886 break; //ループ2ブレイク
ryousato 6:91eec3396ee9 887 }
ryousato 6:91eec3396ee9 888
ryousato 6:91eec3396ee9 889 ADVrms(mode); //現在のVrms値
ryousato 6:91eec3396ee9 890
ryousato 6:91eec3396ee9 891 diff = setval - Vrms; //差分
ryousato 6:91eec3396ee9 892 //serial.printf("\r\n diff = %f",diff);
ryousato 6:91eec3396ee9 893
ryousato 6:91eec3396ee9 894 //増減方向判定
ryousato 6:91eec3396ee9 895 if(diff > 0) {
ryousato 6:91eec3396ee9 896 incr = 1; //増
ryousato 6:91eec3396ee9 897 } else if(diff < 0) {
ryousato 6:91eec3396ee9 898 incr = 0; //減
ryousato 6:91eec3396ee9 899 diff *= -1; //絶対値
ryousato 6:91eec3396ee9 900 } else if(diff == 0) {
ryousato 6:91eec3396ee9 901 break; //差分無し ループ2ブレイク
ryousato 6:91eec3396ee9 902 }
ryousato 6:91eec3396ee9 903 serial.printf("\r\n diff = %f",diff);
ryousato 6:91eec3396ee9 904 serial.printf("\r\n incr = %d",incr);
ryousato 6:91eec3396ee9 905
ryousato 6:91eec3396ee9 906
ryousato 6:91eec3396ee9 907 //粗、微 読み取り
ryousato 6:91eec3396ee9 908 ADDR(mode * 2); //TRANS粗調整POT
ryousato 6:91eec3396ee9 909 int read_val_Coarse = spi.write(0x0C00);
ryousato 6:91eec3396ee9 910 read_val_Coarse &= 0x00FF;
ryousato 6:91eec3396ee9 911
ryousato 6:91eec3396ee9 912 wait(0.001);
ryousato 6:91eec3396ee9 913
ryousato 6:91eec3396ee9 914 ADDR(mode * 2 - 1); //TRANS微調整POT
ryousato 6:91eec3396ee9 915 int read_val_Fine = spi.write(0x0C00);
ryousato 6:91eec3396ee9 916 read_val_Fine &= 0x00FF;
ryousato 6:91eec3396ee9 917
ryousato 6:91eec3396ee9 918 //serial.printf("\r\n read_val_Coarse = %d",read_val_Coarse);
ryousato 6:91eec3396ee9 919 //serial.printf("\r\n read_val_Fine = %d",read_val_Fine);
ryousato 6:91eec3396ee9 920
ryousato 3:d55ebd20d750 921
ryousato 6:91eec3396ee9 922 if(mode == 1) {
ryousato 6:91eec3396ee9 923 //粗・微 調整判定
ryousato 6:91eec3396ee9 924 float diffref_C = 0.000412 / 255 * read_val_Fine + 0.0032;
ryousato 6:91eec3396ee9 925 float diffref_F = 0.000412 / 255 * read_val_Coarse + 0.000165;
ryousato 6:91eec3396ee9 926 float diffcom = diffref_C * 1.5;
ryousato 6:91eec3396ee9 927 //serial.printf("\r\n diffref_C = %f",diffref_C);
ryousato 6:91eec3396ee9 928 //serial.printf("\r\n diffref_F = %f",diffref_F);
ryousato 6:91eec3396ee9 929 //serial.printf("\r\n diffcom = %f",diffcom);
ryousato 6:91eec3396ee9 930 if(diff >= diffcom) {
ryousato 6:91eec3396ee9 931 CorF = 2; //粗
ryousato 6:91eec3396ee9 932 } else if(diff < diffcom) {
ryousato 6:91eec3396ee9 933 CorF = 1; //微
ryousato 6:91eec3396ee9 934 if(diff < 0.001) {
ryousato 6:91eec3396ee9 935 break; //差分微小 ループ2ブレイク(通常最終ゴール)
ryousato 6:91eec3396ee9 936 }
ryousato 6:91eec3396ee9 937 }
ryousato 6:91eec3396ee9 938 serial.printf("\r\n CorF = %d",CorF);
ryousato 6:91eec3396ee9 939
ryousato 6:91eec3396ee9 940 //調整tap値算出
ryousato 6:91eec3396ee9 941 if(CorF == 2) {
ryousato 6:91eec3396ee9 942 val = diff / diffref_C;
ryousato 6:91eec3396ee9 943 } else if(CorF == 1) {
ryousato 6:91eec3396ee9 944 val = diff / diffref_F;
ryousato 6:91eec3396ee9 945 }
ryousato 6:91eec3396ee9 946 serial.printf("\r\n tap(val) = %d",val);
ryousato 6:91eec3396ee9 947 } else if(mode==2 || mode==3) {
ryousato 6:91eec3396ee9 948 if(CTrange == 0) { //60Aのとき
ryousato 6:91eec3396ee9 949 //粗・微 調整判定
ryousato 6:91eec3396ee9 950 float diffref_C = 0.001966 / 255 * read_val_Fine + 0.00885;
ryousato 7:7d0d98e0ae48 951 float diffref_F = 0.001966 / 255 * read_val_Coarse + 0.0001;
ryousato 6:91eec3396ee9 952 float diffcom = diffref_C * 1.5;
ryousato 6:91eec3396ee9 953 //serial.printf("\r\n diffref_C = %f",diffref_C);
ryousato 6:91eec3396ee9 954 //serial.printf("\r\n diffref_F = %f",diffref_F);
ryousato 6:91eec3396ee9 955 //serial.printf("\r\n diffcom = %f",diffcom);
ryousato 6:91eec3396ee9 956 if(diff >= diffcom) {
ryousato 6:91eec3396ee9 957 CorF = 2; //粗
ryousato 6:91eec3396ee9 958 } else if(diff < diffcom) {
ryousato 6:91eec3396ee9 959 CorF = 1; //微
ryousato 6:91eec3396ee9 960 if(diff < 0.002) {
ryousato 6:91eec3396ee9 961 break; //差分微小 ループ2ブレイク(通常最終ゴール)
ryousato 6:91eec3396ee9 962 }
ryousato 6:91eec3396ee9 963 }
ryousato 6:91eec3396ee9 964 serial.printf("\r\n CorF = %d",CorF);
ryousato 6:91eec3396ee9 965
ryousato 6:91eec3396ee9 966 //調整tap値算出
ryousato 6:91eec3396ee9 967 if(CorF == 2) {
ryousato 6:91eec3396ee9 968 val = diff / diffref_C;
ryousato 6:91eec3396ee9 969 } else if(CorF == 1) {
ryousato 6:91eec3396ee9 970 val = diff / diffref_F;
ryousato 6:91eec3396ee9 971 }
ryousato 6:91eec3396ee9 972 serial.printf("\r\n tap(val) = %d",val);
ryousato 6:91eec3396ee9 973 } else if(CTrange == 1) { //120Aのとき
ryousato 6:91eec3396ee9 974 //粗・微 調整判定
ryousato 6:91eec3396ee9 975 float diffref_C = 0.000983 / 255 * read_val_Fine + 0.0044;
ryousato 7:7d0d98e0ae48 976 float diffref_F = 0.000983 / 255 * read_val_Coarse + 0.000049;
ryousato 6:91eec3396ee9 977 float diffcom = diffref_C * 1.5;
ryousato 6:91eec3396ee9 978 //serial.printf("\r\n diffref_C = %f",diffref_C);
ryousato 6:91eec3396ee9 979 //serial.printf("\r\n diffref_F = %f",diffref_F);
ryousato 6:91eec3396ee9 980 //serial.printf("\r\n diffcom = %f",diffcom);
ryousato 6:91eec3396ee9 981 if(diff >= diffcom) {
ryousato 6:91eec3396ee9 982 CorF = 2; //粗
ryousato 6:91eec3396ee9 983 } else if(diff < diffcom) {
ryousato 6:91eec3396ee9 984 CorF = 1; //微
ryousato 6:91eec3396ee9 985 if(diff < 0.002) {
ryousato 6:91eec3396ee9 986 break; //差分微小 ループ2ブレイク(通常最終ゴール)
ryousato 6:91eec3396ee9 987 }
ryousato 6:91eec3396ee9 988 }
ryousato 6:91eec3396ee9 989 serial.printf("\r\n CorF = %d",CorF);
ryousato 6:91eec3396ee9 990
ryousato 6:91eec3396ee9 991 //調整tap値算出
ryousato 6:91eec3396ee9 992 if(CorF == 2) {
ryousato 6:91eec3396ee9 993 val = diff / diffref_C;
ryousato 6:91eec3396ee9 994 } else if(CorF == 1) {
ryousato 6:91eec3396ee9 995 val = diff / diffref_F;
ryousato 6:91eec3396ee9 996 }
ryousato 6:91eec3396ee9 997 serial.printf("\r\n tap(val) = %d",val);
ryousato 6:91eec3396ee9 998 }
ryousato 6:91eec3396ee9 999 }
ryousato 6:91eec3396ee9 1000 //ワイパー位置移動
ryousato 6:91eec3396ee9 1001 incdec(incr, val, CorF, mode);
ryousato 6:91eec3396ee9 1002
ryousato 6:91eec3396ee9 1003 adjcount ++;
ryousato 6:91eec3396ee9 1004
ryousato 6:91eec3396ee9 1005 } //ループ2
ryousato 6:91eec3396ee9 1006
ryousato 6:91eec3396ee9 1007 if(mode==1) {
ryousato 6:91eec3396ee9 1008 coilEN2 = 1; //TRANS_OUTを外部出力へ切替え
ryousato 6:91eec3396ee9 1009 } else if(mode==2 || mode==3) {
ryousato 6:91eec3396ee9 1010 coilEN3 = 1; //CT1_OUT1と2を外部出力へ切替え
ryousato 6:91eec3396ee9 1011 coilEN4 = 0;
ryousato 6:91eec3396ee9 1012 }
ryousato 6:91eec3396ee9 1013
ryousato 6:91eec3396ee9 1014 serial.printf("\r\n ADJ END");
ryousato 6:91eec3396ee9 1015 }
ryousato 6:91eec3396ee9 1016
ryousato 6:91eec3396ee9 1017 /******************************************************************************/
ryousato 6:91eec3396ee9 1018 //自動調整(モード)
ryousato 6:91eec3396ee9 1019 //TRANS_OUT設定範囲 : AC 50~138V
ryousato 6:91eec3396ee9 1020 //CT1,2_OUT設定範囲 : AC 10~120A
ryousato 6:91eec3396ee9 1021 /******************************************************************************/
ryousato 6:91eec3396ee9 1022 void auto_adj_mode(int mode){
ryousato 6:91eec3396ee9 1023
ryousato 3:d55ebd20d750 1024 ///////////////////////////////////////////////////////////////////////////////
ryousato 3:d55ebd20d750 1025 POTini(mode); //POTを初期値に設定
ryousato 3:d55ebd20d750 1026 ///////////////////////////////////////////////////////////////////////////////
ryousato 3:d55ebd20d750 1027
ryousato 3:d55ebd20d750 1028 //'60A' or '120A'
ryousato 3:d55ebd20d750 1029 if(mode == 2 || mode == 3){
ryousato 3:d55ebd20d750 1030 serial.printf("\r\n Select range mode. Type '60A' or '120A'.");
ryousato 3:d55ebd20d750 1031 while(1){
ryousato 3:d55ebd20d750 1032 if(serial.readable()) { // 受信確認
ryousato 3:d55ebd20d750 1033 moji[count] = serial.getc(); //キーボード入力文字を1文字ずつmojiに代入
ryousato 3:d55ebd20d750 1034 serial.printf("%c", moji[count]); //シリアル出力表示
ryousato 3:d55ebd20d750 1035
ryousato 3:d55ebd20d750 1036 if(count == 5 ){ // ①文字数が既定の個数になった場合
ryousato 3:d55ebd20d750 1037 moji[5] = '\0'; // 末尾に終端文字を入れる
ryousato 3:d55ebd20d750 1038 serial.printf("\r\n\r\n ERROR!\r\n");
ryousato 3:d55ebd20d750 1039 count = 0; // 文字カウンタをリセット
ryousato 3:d55ebd20d750 1040 }
ryousato 3:d55ebd20d750 1041
ryousato 3:d55ebd20d750 1042 else if(moji[0] == '\n'){count = 0;}
ryousato 3:d55ebd20d750 1043
ryousato 3:d55ebd20d750 1044 else if((moji[count] == '\r')) { // ②CRを受信した場合
ryousato 3:d55ebd20d750 1045 moji[count] = '\0'; //末尾に終端文字を入れる
ryousato 3:d55ebd20d750 1046 count = 0; //文字カウンタをリセット
ryousato 3:d55ebd20d750 1047 if (strcmp(moji, "60A") == 0){
ryousato 3:d55ebd20d750 1048 SCT_AMP = 0; //CT入力アンプ 60Aレベル切替え
ryousato 5:5d7483b46cda 1049 CTrange = 0;
ryousato 3:d55ebd20d750 1050 break;}
ryousato 3:d55ebd20d750 1051 else if(strcmp(moji, "120A") == 0){
ryousato 3:d55ebd20d750 1052 SCT_AMP = 1; //CT入力アンプ 120Aレベル切替え
ryousato 5:5d7483b46cda 1053 CTrange = 1;
ryousato 3:d55ebd20d750 1054 break;}
ryousato 3:d55ebd20d750 1055 else serial.printf("\r\n\r\n NG!\r\n");
ryousato 3:d55ebd20d750 1056 }
ryousato 3:d55ebd20d750 1057 else count++; // 文字カウンタに1加算
ryousato 3:d55ebd20d750 1058 }
ryousato 3:d55ebd20d750 1059 }
ryousato 3:d55ebd20d750 1060 serial.printf("\r\n OK");
ryousato 3:d55ebd20d750 1061 } //'60A' or '120A'
ryousato 3:d55ebd20d750 1062
ryousato 3:d55ebd20d750 1063 while(1) { //ループ1
ryousato 3:d55ebd20d750 1064 int adjnum = 0;
ryousato 3:d55ebd20d750 1065
ryousato 3:d55ebd20d750 1066 //シリアル表示
ryousato 3:d55ebd20d750 1067 if(mode == 1) {
ryousato 3:d55ebd20d750 1068 serial.printf("\r\n Type number AC [50-138] V. ('q' quit)");
ryousato 3:d55ebd20d750 1069 } else if(mode==2 || mode==3) {
ryousato 3:d55ebd20d750 1070 serial.printf("\r\n Type number AC [10-120] A. ('q' quit)\r\n (If 61~120A, range mode change 120A automatically.)");
ryousato 3:d55ebd20d750 1071 }
ryousato 3:d55ebd20d750 1072
ryousato 3:d55ebd20d750 1073 for(int i=0; i<3; i++) {
ryousato 3:d55ebd20d750 1074 moji[i] = '0'; //mojiを初期化
ryousato 3:d55ebd20d750 1075 }
ryousato 3:d55ebd20d750 1076
ryousato 3:d55ebd20d750 1077 while(1) { //adjnumループ
ryousato 3:d55ebd20d750 1078 if(serial.readable()) { // 受信確認
ryousato 3:d55ebd20d750 1079 moji[count] = serial.getc(); //キーボード入力文字を1文字ずつmojiに代入
ryousato 3:d55ebd20d750 1080 serial.printf("%c", moji[count]); //シリアル出力表示
ryousato 3:d55ebd20d750 1081
ryousato 3:d55ebd20d750 1082 if(count == 4 ) { // ①文字数が既定の個数になった場合
ryousato 3:d55ebd20d750 1083 moji[4] = '\0'; // 末尾に終端文字を入れる
ryousato 3:d55ebd20d750 1084 serial.printf("\r\n\r\n ERROR!\r\n");
ryousato 3:d55ebd20d750 1085 count = 0; // 文字カウンタをリセット
ryousato 3:d55ebd20d750 1086 } else if(moji[0] == '\n') {
ryousato 3:d55ebd20d750 1087 count = 0;
ryousato 3:d55ebd20d750 1088 } else if((moji[count] == '\r')) { // ②CRを受信した場合
ryousato 3:d55ebd20d750 1089 moji[count] = '\0'; //末尾に終端文字を入れる
ryousato 3:d55ebd20d750 1090 count = 0; //文字カウンタをリセット
ryousato 3:d55ebd20d750 1091 if(strcmp(moji,"q")==0) {
ryousato 3:d55ebd20d750 1092 break;
ryousato 3:d55ebd20d750 1093 }
ryousato 3:d55ebd20d750 1094 for(int i=0; i<3; i++) {
ryousato 3:d55ebd20d750 1095 suuji[i] = 0; //suujiを初期化
ryousato 3:d55ebd20d750 1096 }
ryousato 3:d55ebd20d750 1097 for(int i=0; i<3; i++) {
ryousato 3:d55ebd20d750 1098 suuji[i] = moji[i];
ryousato 3:d55ebd20d750 1099 suuji[i] -= 48; //ASCII → 10進
ryousato 3:d55ebd20d750 1100 }
ryousato 3:d55ebd20d750 1101 for(int i=0; i<3; i++) {
ryousato 3:d55ebd20d750 1102 moji[i] = '0'; //mojiを初期化
ryousato 3:d55ebd20d750 1103 }
ryousato 3:d55ebd20d750 1104
ryousato 3:d55ebd20d750 1105 //数字であるか判定
ryousato 3:d55ebd20d750 1106 if(suuji[0]>=0 && suuji[0]<=9) {
ryousato 3:d55ebd20d750 1107 if(suuji[1]>=0&&suuji[1]<=9) {
ryousato 3:d55ebd20d750 1108 if(suuji[2]>=0&&suuji[2]<=9) {
ryousato 3:d55ebd20d750 1109 suuji[0] *= 100;
ryousato 3:d55ebd20d750 1110 suuji[1] *= 10;
ryousato 3:d55ebd20d750 1111 } else {
ryousato 3:d55ebd20d750 1112 suuji[0] *= 10;
ryousato 3:d55ebd20d750 1113 suuji[2] = 0;
ryousato 3:d55ebd20d750 1114 }
ryousato 3:d55ebd20d750 1115 } else {
ryousato 3:d55ebd20d750 1116 suuji[1] = 0;
ryousato 3:d55ebd20d750 1117 suuji[2] = 0;
ryousato 3:d55ebd20d750 1118 }
ryousato 3:d55ebd20d750 1119 } else {
ryousato 3:d55ebd20d750 1120 serial.printf("\r\n\r\n NG!\r\n");
ryousato 3:d55ebd20d750 1121 adjnum = 1;
ryousato 3:d55ebd20d750 1122 break; //adjnumループ ブレイク
ryousato 3:d55ebd20d750 1123 }
ryousato 3:d55ebd20d750 1124
ryousato 3:d55ebd20d750 1125 setval = suuji[0]+suuji[1]+suuji[2];
ryousato 3:d55ebd20d750 1126
ryousato 3:d55ebd20d750 1127 //設定範囲判定 と Vrms換算
ryousato 3:d55ebd20d750 1128 if(mode == 1){
ryousato 3:d55ebd20d750 1129 if(setval >= 50 && setval <= 138){
ryousato 3:d55ebd20d750 1130 setval = setval * 0.12 * 0.196078; //0.12:トランス比 0.196078:分圧抵抗比
ryousato 3:d55ebd20d750 1131 //serial.printf("\r\n %f",setval);
ryousato 3:d55ebd20d750 1132 setval /= 2;
ryousato 3:d55ebd20d750 1133 setval /= sqrtf(2);
ryousato 3:d55ebd20d750 1134 serial.printf("\r\n setval = %f",setval);
ryousato 3:d55ebd20d750 1135 break; //adjnumループ ブレイク
ryousato 3:d55ebd20d750 1136 }
ryousato 3:d55ebd20d750 1137 else{
ryousato 3:d55ebd20d750 1138 serial.printf("\r\n\r\n NG!\r\n");
ryousato 3:d55ebd20d750 1139 adjnum = 1;
ryousato 3:d55ebd20d750 1140 break; //adjnumループ ブレイク
ryousato 3:d55ebd20d750 1141 }
ryousato 3:d55ebd20d750 1142 }
ryousato 3:d55ebd20d750 1143 else if(mode==2 || mode==3){
ryousato 3:d55ebd20d750 1144 if(setval >= 10 && setval <= 120){
ryousato 5:5d7483b46cda 1145 if(setval >= 61 && setval <= 120){SCT_AMP = 1; CTrange = 1;}
ryousato 5:5d7483b46cda 1146 if(CTrange == 0){
ryousato 5:5d7483b46cda 1147 setval = setval / 3000 * 10 * 5.666667; //3000:CT比 10:終端抵抗 5.666667:分圧抵抗比
ryousato 5:5d7483b46cda 1148 }
ryousato 5:5d7483b46cda 1149 else if(CTrange == 1){
ryousato 5:5d7483b46cda 1150 setval = setval / 3000 * 10 * 2.833333; //3000:CT比 10:終端抵抗 2.833333:分圧抵抗比
ryousato 5:5d7483b46cda 1151 }
ryousato 3:d55ebd20d750 1152 serial.printf("\r\n setval = %f",setval);
ryousato 3:d55ebd20d750 1153 break; //adjnumループ ブレイク
ryousato 3:d55ebd20d750 1154 }
ryousato 3:d55ebd20d750 1155 else{
ryousato 3:d55ebd20d750 1156 serial.printf("\r\n\r\n NG!\r\n");
ryousato 3:d55ebd20d750 1157 adjnum = 1;
ryousato 3:d55ebd20d750 1158 break; //adjnumループ ブレイク
ryousato 3:d55ebd20d750 1159 }
ryousato 3:d55ebd20d750 1160 }
ryousato 3:d55ebd20d750 1161 } else count++; // 文字カウンタに1加算
ryousato 3:d55ebd20d750 1162 } //if
ryousato 3:d55ebd20d750 1163 } //adjnumループ
ryousato 3:d55ebd20d750 1164 if(adjnum==0 || strcmp(moji,"q")==0){break;} //ループ1ブレイク
ryousato 3:d55ebd20d750 1165 } //ループ1
ryousato 3:d55ebd20d750 1166
ryousato 3:d55ebd20d750 1167 int adjcount = 0; //ループ2上限変数
ryousato 3:d55ebd20d750 1168
ryousato 3:d55ebd20d750 1169 while(1){ //ループ2
ryousato 3:d55ebd20d750 1170 if(strcmp(moji,"q")==0){
ryousato 3:d55ebd20d750 1171 serial.printf("\r\n quit");
ryousato 3:d55ebd20d750 1172 break; //ループ2ブレイク
ryousato 3:d55ebd20d750 1173 }
ryousato 4:e69f73c66598 1174 else if(adjcount >= 15){ //ループ2上限値
ryousato 3:d55ebd20d750 1175 serial.printf("\r\n\r\n ERROR!\r\n");
ryousato 3:d55ebd20d750 1176 break; //ループ2ブレイク
ryousato 3:d55ebd20d750 1177 }
ryousato 3:d55ebd20d750 1178
ryousato 3:d55ebd20d750 1179 ADVrms(mode); //現在のVrms値
ryousato 3:d55ebd20d750 1180
ryousato 3:d55ebd20d750 1181 diff = setval - Vrms; //差分
ryousato 3:d55ebd20d750 1182 //serial.printf("\r\n diff = %f",diff);
ryousato 3:d55ebd20d750 1183
ryousato 3:d55ebd20d750 1184 //増減方向判定
ryousato 3:d55ebd20d750 1185 if(diff > 0){incr = 1;} //増
ryousato 3:d55ebd20d750 1186 else if(diff < 0){
ryousato 3:d55ebd20d750 1187 incr = 0; //減
ryousato 3:d55ebd20d750 1188 diff *= -1; //絶対値
ryousato 3:d55ebd20d750 1189 }
ryousato 3:d55ebd20d750 1190 else if(diff == 0){break;} //差分無し ループ2ブレイク
ryousato 3:d55ebd20d750 1191 serial.printf("\r\n diff = %f",diff);
ryousato 3:d55ebd20d750 1192 serial.printf("\r\n incr = %d",incr);
ryousato 5:5d7483b46cda 1193
ryousato 5:5d7483b46cda 1194
ryousato 5:5d7483b46cda 1195 //粗、微 読み取り
ryousato 5:5d7483b46cda 1196 ADDR(mode * 2); //TRANS粗調整POT
ryousato 5:5d7483b46cda 1197 int read_val_Coarse = spi.write(0x0C00);
ryousato 5:5d7483b46cda 1198 read_val_Coarse &= 0x00FF;
ryousato 5:5d7483b46cda 1199
ryousato 5:5d7483b46cda 1200 wait(0.001);
ryousato 5:5d7483b46cda 1201
ryousato 5:5d7483b46cda 1202 ADDR(mode * 2 - 1); //TRANS微調整POT
ryousato 5:5d7483b46cda 1203 int read_val_Fine = spi.write(0x0C00);
ryousato 5:5d7483b46cda 1204 read_val_Fine &= 0x00FF;
ryousato 3:d55ebd20d750 1205
ryousato 5:5d7483b46cda 1206 //serial.printf("\r\n read_val_Coarse = %d",read_val_Coarse);
ryousato 5:5d7483b46cda 1207 //serial.printf("\r\n read_val_Fine = %d",read_val_Fine);
ryousato 5:5d7483b46cda 1208
ryousato 5:5d7483b46cda 1209
ryousato 5:5d7483b46cda 1210 if(mode == 1){
ryousato 5:5d7483b46cda 1211 //粗・微 調整判定
ryousato 5:5d7483b46cda 1212 float diffref_C = 0.000412 / 255 * read_val_Fine + 0.0032;
ryousato 5:5d7483b46cda 1213 float diffref_F = 0.000412 / 255 * read_val_Coarse + 0.000165;
ryousato 5:5d7483b46cda 1214 float diffcom = diffref_C * 1.5;
ryousato 5:5d7483b46cda 1215 //serial.printf("\r\n diffref_C = %f",diffref_C);
ryousato 5:5d7483b46cda 1216 //serial.printf("\r\n diffref_F = %f",diffref_F);
ryousato 5:5d7483b46cda 1217 //serial.printf("\r\n diffcom = %f",diffcom);
ryousato 5:5d7483b46cda 1218 if(diff >= diffcom){CorF = 2;} //粗
ryousato 5:5d7483b46cda 1219 else if(diff < diffcom){
ryousato 5:5d7483b46cda 1220 CorF = 1; //微
ryousato 5:5d7483b46cda 1221 if(diff < 0.001){break;}//差分微小 ループ2ブレイク(通常最終ゴール)
ryousato 5:5d7483b46cda 1222 }
ryousato 5:5d7483b46cda 1223 serial.printf("\r\n CorF = %d",CorF);
ryousato 5:5d7483b46cda 1224
ryousato 5:5d7483b46cda 1225 //調整tap値算出
ryousato 5:5d7483b46cda 1226 if(CorF == 2){val = diff / diffref_C;}
ryousato 5:5d7483b46cda 1227 else if(CorF == 1){val = diff / diffref_F;}
ryousato 5:5d7483b46cda 1228 serial.printf("\r\n tap(val) = %d",val);
ryousato 3:d55ebd20d750 1229 }
ryousato 5:5d7483b46cda 1230 else if(mode==2 || mode==3){
ryousato 5:5d7483b46cda 1231 if(CTrange == 0){ //60Aのとき
ryousato 5:5d7483b46cda 1232 //粗・微 調整判定
ryousato 5:5d7483b46cda 1233 float diffref_C = 0.001966 / 255 * read_val_Fine + 0.00885;
ryousato 5:5d7483b46cda 1234 float diffref_F = 0.001966 / 255 * read_val_Coarse + 0.000145;
ryousato 5:5d7483b46cda 1235 float diffcom = diffref_C * 1.5;
ryousato 5:5d7483b46cda 1236 serial.printf("\r\n diffref_C = %f",diffref_C);
ryousato 5:5d7483b46cda 1237 serial.printf("\r\n diffref_F = %f",diffref_F);
ryousato 5:5d7483b46cda 1238 serial.printf("\r\n diffcom = %f",diffcom);
ryousato 5:5d7483b46cda 1239 if(diff >= diffcom){CorF = 2;} //粗
ryousato 5:5d7483b46cda 1240 else if(diff < diffcom){
ryousato 5:5d7483b46cda 1241 CorF = 1; //微
ryousato 6:91eec3396ee9 1242 if(diff < 0.002){break;}//差分微小 ループ2ブレイク(通常最終ゴール)
ryousato 5:5d7483b46cda 1243 }
ryousato 5:5d7483b46cda 1244 serial.printf("\r\n CorF = %d",CorF);
ryousato 3:d55ebd20d750 1245
ryousato 5:5d7483b46cda 1246 //調整tap値算出
ryousato 5:5d7483b46cda 1247 if(CorF == 2){val = diff / diffref_C;}
ryousato 5:5d7483b46cda 1248 else if(CorF == 1){val = diff / diffref_F;}
ryousato 5:5d7483b46cda 1249 serial.printf("\r\n tap(val) = %d",val);
ryousato 5:5d7483b46cda 1250 }
ryousato 5:5d7483b46cda 1251 else if(CTrange == 1){ //120Aのとき
ryousato 5:5d7483b46cda 1252 //粗・微 調整判定
ryousato 5:5d7483b46cda 1253 float diffref_C = 0.000983 / 255 * read_val_Fine + 0.0044;
ryousato 5:5d7483b46cda 1254 float diffref_F = 0.000983 / 255 * read_val_Coarse + 0.0000993;
ryousato 5:5d7483b46cda 1255 float diffcom = diffref_C * 1.5;
ryousato 7:7d0d98e0ae48 1256 //serial.printf("\r\n diffref_C = %f",diffref_C);
ryousato 7:7d0d98e0ae48 1257 //serial.printf("\r\n diffref_F = %f",diffref_F);
ryousato 7:7d0d98e0ae48 1258 //serial.printf("\r\n diffcom = %f",diffcom);
ryousato 5:5d7483b46cda 1259 if(diff >= diffcom){CorF = 2;} //粗
ryousato 5:5d7483b46cda 1260 else if(diff < diffcom){
ryousato 5:5d7483b46cda 1261 CorF = 1; //微
ryousato 6:91eec3396ee9 1262 if(diff < 0.002){break;}//差分微小 ループ2ブレイク(通常最終ゴール)
ryousato 5:5d7483b46cda 1263 }
ryousato 5:5d7483b46cda 1264 serial.printf("\r\n CorF = %d",CorF);
ryousato 3:d55ebd20d750 1265
ryousato 5:5d7483b46cda 1266 //調整tap値算出
ryousato 5:5d7483b46cda 1267 if(CorF == 2){val = diff / diffref_C;}
ryousato 5:5d7483b46cda 1268 else if(CorF == 1){val = diff / diffref_F;}
ryousato 5:5d7483b46cda 1269 serial.printf("\r\n tap(val) = %d",val);
ryousato 5:5d7483b46cda 1270 }
ryousato 5:5d7483b46cda 1271 }
ryousato 3:d55ebd20d750 1272 //ワイパー位置移動
ryousato 3:d55ebd20d750 1273 incdec(incr, val, CorF, mode);
ryousato 3:d55ebd20d750 1274
ryousato 3:d55ebd20d750 1275 adjcount ++;
ryousato 3:d55ebd20d750 1276
ryousato 3:d55ebd20d750 1277 } //ループ2
ryousato 3:d55ebd20d750 1278
ryousato 5:5d7483b46cda 1279 if(mode==1){coilEN2 = 1;} //TRANS_OUTを外部出力へ切替え
ryousato 5:5d7483b46cda 1280 else if(mode==2 || mode==3){coilEN3 = 1; coilEN4 = 0;} //CT1_OUT1と2を外部出力へ切替え
ryousato 3:d55ebd20d750 1281
ryousato 3:d55ebd20d750 1282 serial.printf("\r\n ADJ END");
ryousato 3:d55ebd20d750 1283 }
ryousato 3:d55ebd20d750 1284
ryousato 4:e69f73c66598 1285 void Vswitch(int a){
ryousato 4:e69f73c66598 1286 coilEN5 = a;
ryousato 4:e69f73c66598 1287 serial.printf("\r\n OK");
ryousato 4:e69f73c66598 1288 }
ryousato 4:e69f73c66598 1289 void Fswitch(int a){
ryousato 4:e69f73c66598 1290 coilEN1 = a;
ryousato 4:e69f73c66598 1291 serial.printf("\r\n OK");
ryousato 4:e69f73c66598 1292 }
ryousato 4:e69f73c66598 1293 void Tswitch(int a){
ryousato 4:e69f73c66598 1294 coilEN2 = a;
ryousato 4:e69f73c66598 1295 serial.printf("\r\n OK");
ryousato 4:e69f73c66598 1296 }
ryousato 4:e69f73c66598 1297 void Cswitch(int a,int b){
ryousato 4:e69f73c66598 1298 coilEN3 = a;
ryousato 4:e69f73c66598 1299 coilEN4 = b;
ryousato 4:e69f73c66598 1300 serial.printf("\r\n OK");
ryousato 4:e69f73c66598 1301 }
ryousato 5:5d7483b46cda 1302 void Rswitch(int a){
ryousato 5:5d7483b46cda 1303 SCT_AMP = a;
ryousato 6:91eec3396ee9 1304 CTrange = a;
ryousato 5:5d7483b46cda 1305 serial.printf("\r\n OK");
ryousato 5:5d7483b46cda 1306 }
ryousato 4:e69f73c66598 1307
ryousato 3:d55ebd20d750 1308 /******************************************************************************/
ryousato 3:d55ebd20d750 1309 //シリアル入力受付 [メイン]
ryousato 3:d55ebd20d750 1310 /******************************************************************************/
ryousato 0:df1e1f84ded8 1311 void serial_inout(){
ryousato 0:df1e1f84ded8 1312 if(serial.readable()) { // 受信確認
ryousato 0:df1e1f84ded8 1313 moji[count] = serial.getc(); //キーボード入力文字を1文字ずつmojiに代入
ryousato 3:d55ebd20d750 1314 serial.printf("%c", moji[count]); //シリアル出力表示
ryousato 3:d55ebd20d750 1315 // serial.printf("%c(%d)", moji[count],count); //シリアル出力表示
ryousato 0:df1e1f84ded8 1316
ryousato 0:df1e1f84ded8 1317 if(count == 31 ){ // ①文字数が既定の個数になった場合
ryousato 0:df1e1f84ded8 1318 moji[31] = '\0'; // 末尾に終端文字を入れる
ryousato 0:df1e1f84ded8 1319 count = 0; // 文字カウンタをリセット
ryousato 3:d55ebd20d750 1320 serial.printf("\r\n\r\n ERROR!");
ryousato 0:df1e1f84ded8 1321 }
ryousato 0:df1e1f84ded8 1322
ryousato 1:88f0bc1e1aff 1323 else if(moji[0] == '\n'){count = 0;}
ryousato 0:df1e1f84ded8 1324
ryousato 0:df1e1f84ded8 1325 else if((moji[count] == '\r')) { // ②CRを受信した場合
ryousato 3:d55ebd20d750 1326 moji[count] = '\0'; //末尾に終端文字を入れる
ryousato 3:d55ebd20d750 1327 count = 0; //文字カウンタをリセット
ryousato 3:d55ebd20d750 1328 if (strcmp(moji, "cmd") == 0){helpwrite();} //コマンド一覧表示
ryousato 3:d55ebd20d750 1329 else if(strcmp(moji, "help") == 0){helpwrite();} //コマンド一覧表示
ryousato 3:d55ebd20d750 1330 else if(strcmp(moji, "?") == 0){helpwrite();} //コマンド一覧表示
ryousato 3:d55ebd20d750 1331 else if(strcmp(moji, "initial") == 0){initial();} //初期化
ryousato 4:e69f73c66598 1332
ryousato 4:e69f73c66598 1333 else if(strcmp(moji, "V_OFF") == 0){Vswitch(0);} //±5V,±15Vオフ
ryousato 4:e69f73c66598 1334 else if(strcmp(moji, "V_ON") == 0){Vswitch(1);} //±5V,±15Vオン
ryousato 4:e69f73c66598 1335 else if(strcmp(moji, "50Hz") == 0){Fswitch(0);} //周波数切替
ryousato 4:e69f73c66598 1336 else if(strcmp(moji, "60Hz") == 0){Fswitch(1);} //周波数切替
ryousato 4:e69f73c66598 1337 else if(strcmp(moji, "TRANS_OUT_ADINT") == 0){Tswitch(0);} //TRANS_OUT内部AD入力
ryousato 4:e69f73c66598 1338 else if(strcmp(moji, "TRANS_OUT_EXT") == 0){Tswitch(1);} //TRANS_OUT外部出力
ryousato 4:e69f73c66598 1339 else if(strcmp(moji, "CT1_OUT_ADINT") == 0){Cswitch(0,0);} //CT1_OUT内部AD入力
ryousato 4:e69f73c66598 1340 else if(strcmp(moji, "CT2_OUT_ADINT") == 0){Cswitch(0,1);} //CT2_OUT内部AD入力
ryousato 4:e69f73c66598 1341 else if(strcmp(moji, "CT_OUT_EXT") == 0){Cswitch(1,0);} //CT1,2_OUT外部出力
ryousato 5:5d7483b46cda 1342 else if(strcmp(moji, "CTrange_60A") == 0){Rswitch(0);} //CT入力アンプゲイン60A
ryousato 5:5d7483b46cda 1343 else if(strcmp(moji, "CTrange_120A") == 0){Rswitch(0);} //CT入力アンプゲイン120A
ryousato 4:e69f73c66598 1344
ryousato 4:e69f73c66598 1345 else if(strcmp(moji, "TRANS_offset") == 0){offsetcal(1);} //TRANS_OUT ADオフセット補正
ryousato 4:e69f73c66598 1346 else if(strcmp(moji, "CT1_offset") == 0){offsetcal(2);} //CT1_OUT ADオフセット補正
ryousato 4:e69f73c66598 1347 else if(strcmp(moji, "CT2_offset") == 0){offsetcal(3);} //CT2_OUT ADオフセット補正
ryousato 4:e69f73c66598 1348 else if(strcmp(moji, "dispVref") == 0){dispVref();} //各Vref表示
ryousato 6:91eec3396ee9 1349 else if(strcmp(moji, "TRANS_ADJ_100V") == 0){auto_adj(1,100);} //TRANS_OUTを設定
ryousato 6:91eec3396ee9 1350 else if(strcmp(moji, "CT1_ADJ_60A") == 0){auto_adj(2,60);} //CT1を設定
ryousato 6:91eec3396ee9 1351 else if(strcmp(moji, "CT2_ADJ_60A") == 0){auto_adj(3,60);} //CT2を設定
ryousato 6:91eec3396ee9 1352 else if(strcmp(moji, "TRANS_ADJ_MODE") == 0){auto_adj_mode(1);} //TRANS_OUT調整モードに移行
ryousato 6:91eec3396ee9 1353 else if(strcmp(moji, "CT1_ADJ_MODE") == 0){auto_adj_mode(2);} //CT1_OUT調整モードに移行
ryousato 6:91eec3396ee9 1354 else if(strcmp(moji, "CT2_ADJ_MODE") == 0){auto_adj_mode(3);} //CT2_OUT調整モードに移行
ryousato 3:d55ebd20d750 1355 else if(strcmp(moji, "MANUAL_TRANS_ADJ") == 0){manual_adj(1);} //TRANS_OUT手動調整モードに移行
ryousato 3:d55ebd20d750 1356 else if(strcmp(moji, "MANUAL_CT1_ADJ") == 0){manual_adj(2);} //CT1_OUT手動調整モードに移行
ryousato 3:d55ebd20d750 1357 else if(strcmp(moji, "MANUAL_CT2_ADJ") == 0){manual_adj(3);} //CT1_OU2手動調整モードに移行
ryousato 3:d55ebd20d750 1358
ryousato 3:d55ebd20d750 1359 //デバッグ用
ryousato 2:5e6613f149d4 1360 else if(strcmp(moji, "TCON") == 0){TCON();}
ryousato 2:5e6613f149d4 1361 else if(strcmp(moji, "TCONread") == 0){TCONread();}
ryousato 2:5e6613f149d4 1362 else if(strcmp(moji, "read") == 0){read();}
ryousato 3:d55ebd20d750 1363 else if(strcmp(moji, "write00") == 0){write00();}
ryousato 3:d55ebd20d750 1364 else if(strcmp(moji, "write7F") == 0){write7F();}
ryousato 3:d55ebd20d750 1365 else if(strcmp(moji, "writeFF") == 0){writeFF();}
ryousato 2:5e6613f149d4 1366 else if(strcmp(moji, "WLAT") == 0){WLAT();}
ryousato 3:d55ebd20d750 1367 else if(strcmp(moji, "CS0") == 0){CS(0);}
ryousato 3:d55ebd20d750 1368 else if(strcmp(moji, "CS1") == 0){CS(1);}
ryousato 3:d55ebd20d750 1369 else if(strcmp(moji, "AD1") == 0){AD(1);}
ryousato 3:d55ebd20d750 1370 else if(strcmp(moji, "AD2") == 0){AD(2);}
ryousato 3:d55ebd20d750 1371 else if(strcmp(moji, "TENinc") == 0){TENinc();}
ryousato 3:d55ebd20d750 1372 else if(strcmp(moji, "att1") == 0){att(1);}
ryousato 3:d55ebd20d750 1373 else if(strcmp(moji, "att2") == 0){att(2);}
ryousato 3:d55ebd20d750 1374 else if(strcmp(moji, "att3") == 0){att(3);}
ryousato 3:d55ebd20d750 1375 else if(strcmp(moji, "det") == 0){det();}
ryousato 3:d55ebd20d750 1376 else if(strcmp(moji, "AD1_Vrms") == 0){ADVrms(1);}
ryousato 3:d55ebd20d750 1377 else if(strcmp(moji, "AD2_Vrms") == 0){ADVrms(2);}
ryousato 3:d55ebd20d750 1378 else if(strcmp(moji, "AD3_Vrms") == 0){ADVrms(3);}
ryousato 5:5d7483b46cda 1379 else if(strcmp(moji, "ADDR1") == 0){ADDR(1);}
ryousato 5:5d7483b46cda 1380 else if(strcmp(moji, "ADDR2") == 0){ADDR(2);}
ryousato 5:5d7483b46cda 1381 else if(strcmp(moji, "ADDR3") == 0){ADDR(3);}
ryousato 5:5d7483b46cda 1382 else if(strcmp(moji, "ADDR4") == 0){ADDR(4);}
ryousato 5:5d7483b46cda 1383 else if(strcmp(moji, "ADDR5") == 0){ADDR(5);}
ryousato 5:5d7483b46cda 1384 else if(strcmp(moji, "ADDR6") == 0){ADDR(6);}
ryousato 5:5d7483b46cda 1385
ryousato 4:e69f73c66598 1386
ryousato 3:d55ebd20d750 1387 else serial.printf("\r\n\r\n NG!\r\n");
ryousato 0:df1e1f84ded8 1388 }
ryousato 3:d55ebd20d750 1389 else count++; // 文字カウンタに1加算
ryousato 0:df1e1f84ded8 1390 }
ryousato 0:df1e1f84ded8 1391 }
ryousato 0:df1e1f84ded8 1392
ryousato 3:d55ebd20d750 1393 /******************************************************************************/
ryousato 3:d55ebd20d750 1394 //メインプログラム
ryousato 3:d55ebd20d750 1395 /******************************************************************************/
ryousato 0:df1e1f84ded8 1396 int main() {
ryousato 3:d55ebd20d750 1397 pAVrefcal = &ActualVref[0];
ryousato 3:d55ebd20d750 1398 pmode = &mode_p;
ryousato 6:91eec3396ee9 1399 pCTrange = &CTrange;
ryousato 6:91eec3396ee9 1400
ryousato 3:d55ebd20d750 1401 led1 = 1;
ryousato 3:d55ebd20d750 1402 wait(0.2);
ryousato 0:df1e1f84ded8 1403 setup();
ryousato 3:d55ebd20d750 1404 initial();
ryousato 4:e69f73c66598 1405 offsetcal(1);
ryousato 4:e69f73c66598 1406 offsetcal(2);
ryousato 4:e69f73c66598 1407 offsetcal(3);
ryousato 6:91eec3396ee9 1408 auto_adj(1,100);
ryousato 6:91eec3396ee9 1409 auto_adj(2,60);
ryousato 6:91eec3396ee9 1410 auto_adj(3,60);
ryousato 4:e69f73c66598 1411 coilEN2 = 1; //TRANS_OUT出力
ryousato 4:e69f73c66598 1412 coilEN3 = 1; //CT1,2_OUT出力
ryousato 4:e69f73c66598 1413 coilEN4 = 0;
ryousato 4:e69f73c66598 1414 led1 = 0;
ryousato 2:5e6613f149d4 1415 serialstart();
ryousato 2:5e6613f149d4 1416
ryousato 3:d55ebd20d750 1417 //*(volatile int *)0x4004402C = 0x2; // (レジスタ値を直接入力) アドレス0x4004402Cに値を代入
ryousato 3:d55ebd20d750 1418 //*(volatile int *)0x4004402C;
ryousato 3:d55ebd20d750 1419 //serial.printf( "data in 0x4004402C is 0x%08X\n", *(volatile int *)0x4004402C ); // アドレス0x4004402Cの値を表示
ryousato 3:d55ebd20d750 1420
ryousato 0:df1e1f84ded8 1421 while(1){
ryousato 0:df1e1f84ded8 1422 serial_inout();
ryousato 0:df1e1f84ded8 1423 }
ryousato 3:d55ebd20d750 1424
ryousato 0:df1e1f84ded8 1425
ryousato 3:d55ebd20d750 1426 }