ryou sato / Mbed 2 deprecated LPC11U35_CTswitch_relay

Dependencies:   mbed LPC11U35_MCP41HV51-503EST

Committer:
ryousato
Date:
Wed Sep 09 02:05:40 2020 +0000
Revision:
8:aea096edd536
Parent:
7:7d0d98e0ae48
Child:
9:0b3a7a9eed3e
200909

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 8:aea096edd536 117 serial.printf("\r\nCT_offset");
ryousato 8:aea096edd536 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 8:aea096edd536 717 if(mode == 1){coilEN2 = 1;} //TRANS_OUTを出力方向へ切替え
ryousato 8:aea096edd536 718 else if(mode == 2){coilEN3 = 1;} //CT1_OUT1と2を出力方向へ切替え
ryousato 8:aea096edd536 719 else if(mode == 3){coilEN3 = 1;} //CT1_OUT1と2を出力方向へ切替え
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 8:aea096edd536 745 if(mode_p == 2){ActualVref[3] = Vref;}
ryousato 4:e69f73c66598 746 serial.printf("\r\n Vref%d = %f",mode_p,ActualVref[mode_p]);
ryousato 3:d55ebd20d750 747 break;
ryousato 3:d55ebd20d750 748 }
ryousato 3:d55ebd20d750 749 }
ryousato 3:d55ebd20d750 750 timerint.detach();
ryousato 3:d55ebd20d750 751 led1 = 0;
ryousato 3:d55ebd20d750 752 }
ryousato 3:d55ebd20d750 753
ryousato 4:e69f73c66598 754 void dispVref(){
ryousato 4:e69f73c66598 755 serial.printf("\r\n TRANS_Vref = %f",ActualVref[1]);
ryousato 8:aea096edd536 756 serial.printf("\r\n CT_Vref = %f",ActualVref[2]);
ryousato 8:aea096edd536 757 // serial.printf("\r\n CT2___Vref = %f",ActualVref[3]);
ryousato 3:d55ebd20d750 758 }
ryousato 3:d55ebd20d750 759 /******************************************************************************/
ryousato 3:d55ebd20d750 760 //タイマー割込み
ryousato 3:d55ebd20d750 761 //AD変換によりVrmsを求める
ryousato 3:d55ebd20d750 762 /******************************************************************************/
ryousato 3:d55ebd20d750 763 //タイマー割込み実行関数
ryousato 3:d55ebd20d750 764 void timerAD(){
ryousato 3:d55ebd20d750 765 led1 = !led1;
ryousato 4:e69f73c66598 766 //serial.printf("\r\n mode_p = %d",mode_p);
ryousato 4:e69f73c66598 767 //serial.printf("\r\n ActualVref = %f",ActualVref[mode_p]);
ryousato 3:d55ebd20d750 768
ryousato 3:d55ebd20d750 769 if(mode_p == 1){AD_val = AD_TRANS_IN.read();}
ryousato 3:d55ebd20d750 770 else if(mode_p==2 || mode_p==3){AD_val = AD_CT_IN.read();}
ryousato 3:d55ebd20d750 771
ryousato 3:d55ebd20d750 772 //serial.printf("\r\n AD_val = %f",AD_val);
ryousato 3:d55ebd20d750 773
ryousato 3:d55ebd20d750 774 AD_val *= Vcc;
ryousato 3:d55ebd20d750 775 AD_val -= ActualVref[mode_p];
ryousato 3:d55ebd20d750 776 //serial.printf("\r\n AD_val*Vcc-Vref = %f",AD_val);
ryousato 3:d55ebd20d750 777 AD_val *= AD_val;
ryousato 3:d55ebd20d750 778 AD_flag = 1;
ryousato 3:d55ebd20d750 779
ryousato 3:d55ebd20d750 780 //serial.printf("\r\n AD_val = %f",AD_val);
ryousato 3:d55ebd20d750 781 }
ryousato 3:d55ebd20d750 782 ////////////////////////////
ryousato 3:d55ebd20d750 783 //サンプリング Vrms
ryousato 3:d55ebd20d750 784 //mode 1:TRANS 2:CT1 3:CT2
ryousato 3:d55ebd20d750 785 ////////////////////////////
ryousato 3:d55ebd20d750 786 void ADVrms(int mode){
ryousato 3:d55ebd20d750 787 AD_count = 0;
ryousato 3:d55ebd20d750 788 AD_flag = 0;
ryousato 3:d55ebd20d750 789 AD_val = 0;
ryousato 3:d55ebd20d750 790 AD_val_sum = 0;
ryousato 3:d55ebd20d750 791
ryousato 3:d55ebd20d750 792 mode_p = mode;
ryousato 3:d55ebd20d750 793 if(mode == 1){coilEN2 = 0;} //TRANS_OUTをAD入力方向へ切替え
ryousato 3:d55ebd20d750 794 else if(mode == 2){coilEN3 = 0; coilEN4 = 0;} //CT1_OUT1をAD入力方向へ切替え
ryousato 3:d55ebd20d750 795 else if(mode == 3){coilEN3 = 0; coilEN4 = 1;} //CT1_OUT2をAD入力方向へ切替え
ryousato 3:d55ebd20d750 796
ryousato 3:d55ebd20d750 797 wait(0.05);
ryousato 3:d55ebd20d750 798
ryousato 5:5d7483b46cda 799 // timerint.attach(&timerAD,0.020408);
ryousato 5:5d7483b46cda 800 timerint.attach(&timerAD,0.008); //125Hz
ryousato 3:d55ebd20d750 801
ryousato 3:d55ebd20d750 802 timecount.start();
ryousato 3:d55ebd20d750 803
ryousato 3:d55ebd20d750 804 while(1){
ryousato 5:5d7483b46cda 805 if(AD_count < 250 && AD_flag == 1){ //サンプリング数0~Nで、サンプル取得されたとき
ryousato 3:d55ebd20d750 806 AD_count ++;
ryousato 3:d55ebd20d750 807 AD_val_sum += AD_val;
ryousato 3:d55ebd20d750 808 AD_flag = 0;
ryousato 3:d55ebd20d750 809 if(AD_count == 0){timecount.start();} //0~Nのサンプリング時間計測用スタート時
ryousato 5:5d7483b46cda 810 else if(AD_count == 250){ //0~Nのサンプリング時間計測用ストップ時
ryousato 3:d55ebd20d750 811 timecount.stop();
ryousato 3:d55ebd20d750 812 //serial.printf("\r\n t = %f",timecount.read());
ryousato 3:d55ebd20d750 813 timecount.reset();
ryousato 3:d55ebd20d750 814 }
ryousato 3:d55ebd20d750 815 }
ryousato 5:5d7483b46cda 816 else if(AD_count < 250 && AD_flag == 0){}//サンプリング数0~Nで、サンプル取得されてないとき
ryousato 3:d55ebd20d750 817 else{ //サンプリング完了時
ryousato 3:d55ebd20d750 818 AD_val_sum /= AD_count;
ryousato 3:d55ebd20d750 819 Vrms = sqrtf(AD_val_sum);
ryousato 3:d55ebd20d750 820 //serial.printf("\r\n AD_val_sum = %f",AD_val_sum);
ryousato 3:d55ebd20d750 821 serial.printf("\r\n Vrms = %f",Vrms);
ryousato 3:d55ebd20d750 822 break;
ryousato 3:d55ebd20d750 823 }
ryousato 3:d55ebd20d750 824 }
ryousato 3:d55ebd20d750 825 timerint.detach();
ryousato 3:d55ebd20d750 826 led1 = 0;
ryousato 2:5e6613f149d4 827 }
ryousato 2:5e6613f149d4 828
ryousato 3:d55ebd20d750 829 //デバッグ用
ryousato 3:d55ebd20d750 830 void att(int mode){
ryousato 3:d55ebd20d750 831 mode_p = mode;
ryousato 5:5d7483b46cda 832 //timerint.attach(&timerAD,0.020408); //サンプリング数=49 20.4ms周期
ryousato 5:5d7483b46cda 833 timerint.attach(&timerAD,0.008);
ryousato 3:d55ebd20d750 834 }
ryousato 3:d55ebd20d750 835 void det(){timerint.detach();}
ryousato 3:d55ebd20d750 836
ryousato 3:d55ebd20d750 837 /******************************************************************************/
ryousato 6:91eec3396ee9 838 //自動調整(コマンド)
ryousato 3:d55ebd20d750 839 //TRANS_OUT設定範囲 : AC 50~138V
ryousato 3:d55ebd20d750 840 //CT1,2_OUT設定範囲 : AC 10~120A
ryousato 3:d55ebd20d750 841 /******************************************************************************/
ryousato 6:91eec3396ee9 842 void auto_adj(int mode, float setval){
ryousato 6:91eec3396ee9 843
ryousato 6:91eec3396ee9 844 int adjnum = 0; //コマンド判定フラグ
ryousato 6:91eec3396ee9 845
ryousato 6:91eec3396ee9 846 //設定範囲判定 と Vrms換算
ryousato 6:91eec3396ee9 847 if(mode == 1) {
ryousato 6:91eec3396ee9 848 if(setval >= 50 && setval <= 138) {
ryousato 6:91eec3396ee9 849 setval = setval * 0.12 * 0.196078; //0.12:トランス比 0.196078:分圧抵抗比
ryousato 6:91eec3396ee9 850 //serial.printf("\r\n %f",setval);
ryousato 6:91eec3396ee9 851 setval /= 2;
ryousato 6:91eec3396ee9 852 setval /= sqrtf(2);
ryousato 6:91eec3396ee9 853 serial.printf("\r\n setval = %f",setval);
ryousato 6:91eec3396ee9 854 } else {
ryousato 6:91eec3396ee9 855 serial.printf("\r\n\r\n NG!\r\n");
ryousato 6:91eec3396ee9 856 adjnum = 1;
ryousato 6:91eec3396ee9 857 }
ryousato 6:91eec3396ee9 858 } else if(mode==2 || mode==3) {
ryousato 6:91eec3396ee9 859 if(setval >= 10 && setval <= 120) {
ryousato 6:91eec3396ee9 860 if(setval >= 61 && setval <= 120) {
ryousato 6:91eec3396ee9 861 SCT_AMP = 1;
ryousato 6:91eec3396ee9 862 CTrange = 1;
ryousato 6:91eec3396ee9 863 }
ryousato 6:91eec3396ee9 864 if(CTrange == 0) {
ryousato 6:91eec3396ee9 865 setval = setval / 3000 * 10 * 5.666667; //3000:CT比 10:終端抵抗 5.666667:分圧抵抗比
ryousato 6:91eec3396ee9 866 } else if(CTrange == 1) {
ryousato 6:91eec3396ee9 867 setval = setval / 3000 * 10 * 2.833333; //3000:CT比 10:終端抵抗 2.833333:分圧抵抗比
ryousato 6:91eec3396ee9 868 }
ryousato 6:91eec3396ee9 869 serial.printf("\r\n setval = %f",setval);
ryousato 6:91eec3396ee9 870 } else {
ryousato 6:91eec3396ee9 871 serial.printf("\r\n\r\n NG!\r\n");
ryousato 6:91eec3396ee9 872 adjnum = 1;
ryousato 6:91eec3396ee9 873 }
ryousato 6:91eec3396ee9 874 } else {
ryousato 6:91eec3396ee9 875 serial.printf("\r\n\r\n NG!\r\n");
ryousato 6:91eec3396ee9 876 adjnum = 1;
ryousato 6:91eec3396ee9 877 }
ryousato 6:91eec3396ee9 878
ryousato 6:91eec3396ee9 879 int adjcount = 0; //ループ2上限変数
ryousato 6:91eec3396ee9 880
ryousato 6:91eec3396ee9 881 while(1) { //ループ2
ryousato 6:91eec3396ee9 882 if(adjnum == 1) {
ryousato 6:91eec3396ee9 883 serial.printf("\r\n\r\n COMMAND ERROR!");
ryousato 6:91eec3396ee9 884 break; //ループ2ブレイク
ryousato 6:91eec3396ee9 885 } else if(adjcount >= 15) { //ループ2上限値
ryousato 6:91eec3396ee9 886 serial.printf("\r\n\r\n ERROR!\r\n");
ryousato 6:91eec3396ee9 887 break; //ループ2ブレイク
ryousato 6:91eec3396ee9 888 }
ryousato 6:91eec3396ee9 889
ryousato 6:91eec3396ee9 890 ADVrms(mode); //現在のVrms値
ryousato 6:91eec3396ee9 891
ryousato 6:91eec3396ee9 892 diff = setval - Vrms; //差分
ryousato 6:91eec3396ee9 893 //serial.printf("\r\n diff = %f",diff);
ryousato 6:91eec3396ee9 894
ryousato 6:91eec3396ee9 895 //増減方向判定
ryousato 6:91eec3396ee9 896 if(diff > 0) {
ryousato 6:91eec3396ee9 897 incr = 1; //増
ryousato 6:91eec3396ee9 898 } else if(diff < 0) {
ryousato 6:91eec3396ee9 899 incr = 0; //減
ryousato 6:91eec3396ee9 900 diff *= -1; //絶対値
ryousato 6:91eec3396ee9 901 } else if(diff == 0) {
ryousato 6:91eec3396ee9 902 break; //差分無し ループ2ブレイク
ryousato 6:91eec3396ee9 903 }
ryousato 6:91eec3396ee9 904 serial.printf("\r\n diff = %f",diff);
ryousato 6:91eec3396ee9 905 serial.printf("\r\n incr = %d",incr);
ryousato 6:91eec3396ee9 906
ryousato 6:91eec3396ee9 907
ryousato 6:91eec3396ee9 908 //粗、微 読み取り
ryousato 6:91eec3396ee9 909 ADDR(mode * 2); //TRANS粗調整POT
ryousato 6:91eec3396ee9 910 int read_val_Coarse = spi.write(0x0C00);
ryousato 6:91eec3396ee9 911 read_val_Coarse &= 0x00FF;
ryousato 6:91eec3396ee9 912
ryousato 6:91eec3396ee9 913 wait(0.001);
ryousato 6:91eec3396ee9 914
ryousato 6:91eec3396ee9 915 ADDR(mode * 2 - 1); //TRANS微調整POT
ryousato 6:91eec3396ee9 916 int read_val_Fine = spi.write(0x0C00);
ryousato 6:91eec3396ee9 917 read_val_Fine &= 0x00FF;
ryousato 6:91eec3396ee9 918
ryousato 6:91eec3396ee9 919 //serial.printf("\r\n read_val_Coarse = %d",read_val_Coarse);
ryousato 6:91eec3396ee9 920 //serial.printf("\r\n read_val_Fine = %d",read_val_Fine);
ryousato 6:91eec3396ee9 921
ryousato 3:d55ebd20d750 922
ryousato 6:91eec3396ee9 923 if(mode == 1) {
ryousato 6:91eec3396ee9 924 //粗・微 調整判定
ryousato 6:91eec3396ee9 925 float diffref_C = 0.000412 / 255 * read_val_Fine + 0.0032;
ryousato 6:91eec3396ee9 926 float diffref_F = 0.000412 / 255 * read_val_Coarse + 0.000165;
ryousato 6:91eec3396ee9 927 float diffcom = diffref_C * 1.5;
ryousato 6:91eec3396ee9 928 //serial.printf("\r\n diffref_C = %f",diffref_C);
ryousato 6:91eec3396ee9 929 //serial.printf("\r\n diffref_F = %f",diffref_F);
ryousato 6:91eec3396ee9 930 //serial.printf("\r\n diffcom = %f",diffcom);
ryousato 6:91eec3396ee9 931 if(diff >= diffcom) {
ryousato 6:91eec3396ee9 932 CorF = 2; //粗
ryousato 6:91eec3396ee9 933 } else if(diff < diffcom) {
ryousato 6:91eec3396ee9 934 CorF = 1; //微
ryousato 6:91eec3396ee9 935 if(diff < 0.001) {
ryousato 6:91eec3396ee9 936 break; //差分微小 ループ2ブレイク(通常最終ゴール)
ryousato 6:91eec3396ee9 937 }
ryousato 6:91eec3396ee9 938 }
ryousato 6:91eec3396ee9 939 serial.printf("\r\n CorF = %d",CorF);
ryousato 6:91eec3396ee9 940
ryousato 6:91eec3396ee9 941 //調整tap値算出
ryousato 6:91eec3396ee9 942 if(CorF == 2) {
ryousato 6:91eec3396ee9 943 val = diff / diffref_C;
ryousato 6:91eec3396ee9 944 } else if(CorF == 1) {
ryousato 6:91eec3396ee9 945 val = diff / diffref_F;
ryousato 6:91eec3396ee9 946 }
ryousato 6:91eec3396ee9 947 serial.printf("\r\n tap(val) = %d",val);
ryousato 6:91eec3396ee9 948 } else if(mode==2 || mode==3) {
ryousato 6:91eec3396ee9 949 if(CTrange == 0) { //60Aのとき
ryousato 6:91eec3396ee9 950 //粗・微 調整判定
ryousato 6:91eec3396ee9 951 float diffref_C = 0.001966 / 255 * read_val_Fine + 0.00885;
ryousato 7:7d0d98e0ae48 952 float diffref_F = 0.001966 / 255 * read_val_Coarse + 0.0001;
ryousato 6:91eec3396ee9 953 float diffcom = diffref_C * 1.5;
ryousato 6:91eec3396ee9 954 //serial.printf("\r\n diffref_C = %f",diffref_C);
ryousato 6:91eec3396ee9 955 //serial.printf("\r\n diffref_F = %f",diffref_F);
ryousato 6:91eec3396ee9 956 //serial.printf("\r\n diffcom = %f",diffcom);
ryousato 6:91eec3396ee9 957 if(diff >= diffcom) {
ryousato 6:91eec3396ee9 958 CorF = 2; //粗
ryousato 6:91eec3396ee9 959 } else if(diff < diffcom) {
ryousato 6:91eec3396ee9 960 CorF = 1; //微
ryousato 6:91eec3396ee9 961 if(diff < 0.002) {
ryousato 6:91eec3396ee9 962 break; //差分微小 ループ2ブレイク(通常最終ゴール)
ryousato 6:91eec3396ee9 963 }
ryousato 6:91eec3396ee9 964 }
ryousato 6:91eec3396ee9 965 serial.printf("\r\n CorF = %d",CorF);
ryousato 6:91eec3396ee9 966
ryousato 6:91eec3396ee9 967 //調整tap値算出
ryousato 6:91eec3396ee9 968 if(CorF == 2) {
ryousato 6:91eec3396ee9 969 val = diff / diffref_C;
ryousato 6:91eec3396ee9 970 } else if(CorF == 1) {
ryousato 6:91eec3396ee9 971 val = diff / diffref_F;
ryousato 6:91eec3396ee9 972 }
ryousato 6:91eec3396ee9 973 serial.printf("\r\n tap(val) = %d",val);
ryousato 6:91eec3396ee9 974 } else if(CTrange == 1) { //120Aのとき
ryousato 6:91eec3396ee9 975 //粗・微 調整判定
ryousato 6:91eec3396ee9 976 float diffref_C = 0.000983 / 255 * read_val_Fine + 0.0044;
ryousato 7:7d0d98e0ae48 977 float diffref_F = 0.000983 / 255 * read_val_Coarse + 0.000049;
ryousato 6:91eec3396ee9 978 float diffcom = diffref_C * 1.5;
ryousato 6:91eec3396ee9 979 //serial.printf("\r\n diffref_C = %f",diffref_C);
ryousato 6:91eec3396ee9 980 //serial.printf("\r\n diffref_F = %f",diffref_F);
ryousato 6:91eec3396ee9 981 //serial.printf("\r\n diffcom = %f",diffcom);
ryousato 6:91eec3396ee9 982 if(diff >= diffcom) {
ryousato 6:91eec3396ee9 983 CorF = 2; //粗
ryousato 6:91eec3396ee9 984 } else if(diff < diffcom) {
ryousato 6:91eec3396ee9 985 CorF = 1; //微
ryousato 6:91eec3396ee9 986 if(diff < 0.002) {
ryousato 6:91eec3396ee9 987 break; //差分微小 ループ2ブレイク(通常最終ゴール)
ryousato 6:91eec3396ee9 988 }
ryousato 6:91eec3396ee9 989 }
ryousato 6:91eec3396ee9 990 serial.printf("\r\n CorF = %d",CorF);
ryousato 6:91eec3396ee9 991
ryousato 6:91eec3396ee9 992 //調整tap値算出
ryousato 6:91eec3396ee9 993 if(CorF == 2) {
ryousato 6:91eec3396ee9 994 val = diff / diffref_C;
ryousato 6:91eec3396ee9 995 } else if(CorF == 1) {
ryousato 6:91eec3396ee9 996 val = diff / diffref_F;
ryousato 6:91eec3396ee9 997 }
ryousato 6:91eec3396ee9 998 serial.printf("\r\n tap(val) = %d",val);
ryousato 6:91eec3396ee9 999 }
ryousato 6:91eec3396ee9 1000 }
ryousato 6:91eec3396ee9 1001 //ワイパー位置移動
ryousato 6:91eec3396ee9 1002 incdec(incr, val, CorF, mode);
ryousato 6:91eec3396ee9 1003
ryousato 6:91eec3396ee9 1004 adjcount ++;
ryousato 6:91eec3396ee9 1005
ryousato 6:91eec3396ee9 1006 } //ループ2
ryousato 6:91eec3396ee9 1007
ryousato 6:91eec3396ee9 1008 if(mode==1) {
ryousato 6:91eec3396ee9 1009 coilEN2 = 1; //TRANS_OUTを外部出力へ切替え
ryousato 6:91eec3396ee9 1010 } else if(mode==2 || mode==3) {
ryousato 6:91eec3396ee9 1011 coilEN3 = 1; //CT1_OUT1と2を外部出力へ切替え
ryousato 6:91eec3396ee9 1012 coilEN4 = 0;
ryousato 6:91eec3396ee9 1013 }
ryousato 6:91eec3396ee9 1014
ryousato 6:91eec3396ee9 1015 serial.printf("\r\n ADJ END");
ryousato 6:91eec3396ee9 1016 }
ryousato 6:91eec3396ee9 1017
ryousato 6:91eec3396ee9 1018 /******************************************************************************/
ryousato 6:91eec3396ee9 1019 //自動調整(モード)
ryousato 6:91eec3396ee9 1020 //TRANS_OUT設定範囲 : AC 50~138V
ryousato 6:91eec3396ee9 1021 //CT1,2_OUT設定範囲 : AC 10~120A
ryousato 6:91eec3396ee9 1022 /******************************************************************************/
ryousato 6:91eec3396ee9 1023 void auto_adj_mode(int mode){
ryousato 6:91eec3396ee9 1024
ryousato 3:d55ebd20d750 1025 ///////////////////////////////////////////////////////////////////////////////
ryousato 3:d55ebd20d750 1026 POTini(mode); //POTを初期値に設定
ryousato 3:d55ebd20d750 1027 ///////////////////////////////////////////////////////////////////////////////
ryousato 3:d55ebd20d750 1028
ryousato 3:d55ebd20d750 1029 //'60A' or '120A'
ryousato 3:d55ebd20d750 1030 if(mode == 2 || mode == 3){
ryousato 3:d55ebd20d750 1031 serial.printf("\r\n Select range mode. Type '60A' or '120A'.");
ryousato 3:d55ebd20d750 1032 while(1){
ryousato 3:d55ebd20d750 1033 if(serial.readable()) { // 受信確認
ryousato 3:d55ebd20d750 1034 moji[count] = serial.getc(); //キーボード入力文字を1文字ずつmojiに代入
ryousato 3:d55ebd20d750 1035 serial.printf("%c", moji[count]); //シリアル出力表示
ryousato 3:d55ebd20d750 1036
ryousato 3:d55ebd20d750 1037 if(count == 5 ){ // ①文字数が既定の個数になった場合
ryousato 3:d55ebd20d750 1038 moji[5] = '\0'; // 末尾に終端文字を入れる
ryousato 3:d55ebd20d750 1039 serial.printf("\r\n\r\n ERROR!\r\n");
ryousato 3:d55ebd20d750 1040 count = 0; // 文字カウンタをリセット
ryousato 3:d55ebd20d750 1041 }
ryousato 3:d55ebd20d750 1042
ryousato 3:d55ebd20d750 1043 else if(moji[0] == '\n'){count = 0;}
ryousato 3:d55ebd20d750 1044
ryousato 3:d55ebd20d750 1045 else if((moji[count] == '\r')) { // ②CRを受信した場合
ryousato 3:d55ebd20d750 1046 moji[count] = '\0'; //末尾に終端文字を入れる
ryousato 3:d55ebd20d750 1047 count = 0; //文字カウンタをリセット
ryousato 3:d55ebd20d750 1048 if (strcmp(moji, "60A") == 0){
ryousato 3:d55ebd20d750 1049 SCT_AMP = 0; //CT入力アンプ 60Aレベル切替え
ryousato 5:5d7483b46cda 1050 CTrange = 0;
ryousato 3:d55ebd20d750 1051 break;}
ryousato 3:d55ebd20d750 1052 else if(strcmp(moji, "120A") == 0){
ryousato 3:d55ebd20d750 1053 SCT_AMP = 1; //CT入力アンプ 120Aレベル切替え
ryousato 5:5d7483b46cda 1054 CTrange = 1;
ryousato 3:d55ebd20d750 1055 break;}
ryousato 3:d55ebd20d750 1056 else serial.printf("\r\n\r\n NG!\r\n");
ryousato 3:d55ebd20d750 1057 }
ryousato 3:d55ebd20d750 1058 else count++; // 文字カウンタに1加算
ryousato 3:d55ebd20d750 1059 }
ryousato 3:d55ebd20d750 1060 }
ryousato 3:d55ebd20d750 1061 serial.printf("\r\n OK");
ryousato 3:d55ebd20d750 1062 } //'60A' or '120A'
ryousato 3:d55ebd20d750 1063
ryousato 3:d55ebd20d750 1064 while(1) { //ループ1
ryousato 3:d55ebd20d750 1065 int adjnum = 0;
ryousato 3:d55ebd20d750 1066
ryousato 3:d55ebd20d750 1067 //シリアル表示
ryousato 3:d55ebd20d750 1068 if(mode == 1) {
ryousato 3:d55ebd20d750 1069 serial.printf("\r\n Type number AC [50-138] V. ('q' quit)");
ryousato 3:d55ebd20d750 1070 } else if(mode==2 || mode==3) {
ryousato 3:d55ebd20d750 1071 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 1072 }
ryousato 3:d55ebd20d750 1073
ryousato 3:d55ebd20d750 1074 for(int i=0; i<3; i++) {
ryousato 3:d55ebd20d750 1075 moji[i] = '0'; //mojiを初期化
ryousato 3:d55ebd20d750 1076 }
ryousato 3:d55ebd20d750 1077
ryousato 3:d55ebd20d750 1078 while(1) { //adjnumループ
ryousato 3:d55ebd20d750 1079 if(serial.readable()) { // 受信確認
ryousato 3:d55ebd20d750 1080 moji[count] = serial.getc(); //キーボード入力文字を1文字ずつmojiに代入
ryousato 3:d55ebd20d750 1081 serial.printf("%c", moji[count]); //シリアル出力表示
ryousato 3:d55ebd20d750 1082
ryousato 3:d55ebd20d750 1083 if(count == 4 ) { // ①文字数が既定の個数になった場合
ryousato 3:d55ebd20d750 1084 moji[4] = '\0'; // 末尾に終端文字を入れる
ryousato 3:d55ebd20d750 1085 serial.printf("\r\n\r\n ERROR!\r\n");
ryousato 3:d55ebd20d750 1086 count = 0; // 文字カウンタをリセット
ryousato 3:d55ebd20d750 1087 } else if(moji[0] == '\n') {
ryousato 3:d55ebd20d750 1088 count = 0;
ryousato 3:d55ebd20d750 1089 } else if((moji[count] == '\r')) { // ②CRを受信した場合
ryousato 3:d55ebd20d750 1090 moji[count] = '\0'; //末尾に終端文字を入れる
ryousato 3:d55ebd20d750 1091 count = 0; //文字カウンタをリセット
ryousato 3:d55ebd20d750 1092 if(strcmp(moji,"q")==0) {
ryousato 3:d55ebd20d750 1093 break;
ryousato 3:d55ebd20d750 1094 }
ryousato 3:d55ebd20d750 1095 for(int i=0; i<3; i++) {
ryousato 3:d55ebd20d750 1096 suuji[i] = 0; //suujiを初期化
ryousato 3:d55ebd20d750 1097 }
ryousato 3:d55ebd20d750 1098 for(int i=0; i<3; i++) {
ryousato 3:d55ebd20d750 1099 suuji[i] = moji[i];
ryousato 3:d55ebd20d750 1100 suuji[i] -= 48; //ASCII → 10進
ryousato 3:d55ebd20d750 1101 }
ryousato 3:d55ebd20d750 1102 for(int i=0; i<3; i++) {
ryousato 3:d55ebd20d750 1103 moji[i] = '0'; //mojiを初期化
ryousato 3:d55ebd20d750 1104 }
ryousato 3:d55ebd20d750 1105
ryousato 3:d55ebd20d750 1106 //数字であるか判定
ryousato 3:d55ebd20d750 1107 if(suuji[0]>=0 && suuji[0]<=9) {
ryousato 3:d55ebd20d750 1108 if(suuji[1]>=0&&suuji[1]<=9) {
ryousato 3:d55ebd20d750 1109 if(suuji[2]>=0&&suuji[2]<=9) {
ryousato 3:d55ebd20d750 1110 suuji[0] *= 100;
ryousato 3:d55ebd20d750 1111 suuji[1] *= 10;
ryousato 3:d55ebd20d750 1112 } else {
ryousato 3:d55ebd20d750 1113 suuji[0] *= 10;
ryousato 3:d55ebd20d750 1114 suuji[2] = 0;
ryousato 3:d55ebd20d750 1115 }
ryousato 3:d55ebd20d750 1116 } else {
ryousato 3:d55ebd20d750 1117 suuji[1] = 0;
ryousato 3:d55ebd20d750 1118 suuji[2] = 0;
ryousato 3:d55ebd20d750 1119 }
ryousato 3:d55ebd20d750 1120 } else {
ryousato 3:d55ebd20d750 1121 serial.printf("\r\n\r\n NG!\r\n");
ryousato 3:d55ebd20d750 1122 adjnum = 1;
ryousato 3:d55ebd20d750 1123 break; //adjnumループ ブレイク
ryousato 3:d55ebd20d750 1124 }
ryousato 3:d55ebd20d750 1125
ryousato 3:d55ebd20d750 1126 setval = suuji[0]+suuji[1]+suuji[2];
ryousato 3:d55ebd20d750 1127
ryousato 3:d55ebd20d750 1128 //設定範囲判定 と Vrms換算
ryousato 3:d55ebd20d750 1129 if(mode == 1){
ryousato 3:d55ebd20d750 1130 if(setval >= 50 && setval <= 138){
ryousato 3:d55ebd20d750 1131 setval = setval * 0.12 * 0.196078; //0.12:トランス比 0.196078:分圧抵抗比
ryousato 3:d55ebd20d750 1132 //serial.printf("\r\n %f",setval);
ryousato 3:d55ebd20d750 1133 setval /= 2;
ryousato 3:d55ebd20d750 1134 setval /= sqrtf(2);
ryousato 3:d55ebd20d750 1135 serial.printf("\r\n setval = %f",setval);
ryousato 3:d55ebd20d750 1136 break; //adjnumループ ブレイク
ryousato 3:d55ebd20d750 1137 }
ryousato 3:d55ebd20d750 1138 else{
ryousato 3:d55ebd20d750 1139 serial.printf("\r\n\r\n NG!\r\n");
ryousato 3:d55ebd20d750 1140 adjnum = 1;
ryousato 3:d55ebd20d750 1141 break; //adjnumループ ブレイク
ryousato 3:d55ebd20d750 1142 }
ryousato 3:d55ebd20d750 1143 }
ryousato 3:d55ebd20d750 1144 else if(mode==2 || mode==3){
ryousato 3:d55ebd20d750 1145 if(setval >= 10 && setval <= 120){
ryousato 5:5d7483b46cda 1146 if(setval >= 61 && setval <= 120){SCT_AMP = 1; CTrange = 1;}
ryousato 5:5d7483b46cda 1147 if(CTrange == 0){
ryousato 5:5d7483b46cda 1148 setval = setval / 3000 * 10 * 5.666667; //3000:CT比 10:終端抵抗 5.666667:分圧抵抗比
ryousato 5:5d7483b46cda 1149 }
ryousato 5:5d7483b46cda 1150 else if(CTrange == 1){
ryousato 5:5d7483b46cda 1151 setval = setval / 3000 * 10 * 2.833333; //3000:CT比 10:終端抵抗 2.833333:分圧抵抗比
ryousato 5:5d7483b46cda 1152 }
ryousato 3:d55ebd20d750 1153 serial.printf("\r\n setval = %f",setval);
ryousato 3:d55ebd20d750 1154 break; //adjnumループ ブレイク
ryousato 3:d55ebd20d750 1155 }
ryousato 3:d55ebd20d750 1156 else{
ryousato 3:d55ebd20d750 1157 serial.printf("\r\n\r\n NG!\r\n");
ryousato 3:d55ebd20d750 1158 adjnum = 1;
ryousato 3:d55ebd20d750 1159 break; //adjnumループ ブレイク
ryousato 3:d55ebd20d750 1160 }
ryousato 3:d55ebd20d750 1161 }
ryousato 3:d55ebd20d750 1162 } else count++; // 文字カウンタに1加算
ryousato 3:d55ebd20d750 1163 } //if
ryousato 3:d55ebd20d750 1164 } //adjnumループ
ryousato 3:d55ebd20d750 1165 if(adjnum==0 || strcmp(moji,"q")==0){break;} //ループ1ブレイク
ryousato 3:d55ebd20d750 1166 } //ループ1
ryousato 3:d55ebd20d750 1167
ryousato 3:d55ebd20d750 1168 int adjcount = 0; //ループ2上限変数
ryousato 3:d55ebd20d750 1169
ryousato 3:d55ebd20d750 1170 while(1){ //ループ2
ryousato 3:d55ebd20d750 1171 if(strcmp(moji,"q")==0){
ryousato 3:d55ebd20d750 1172 serial.printf("\r\n quit");
ryousato 3:d55ebd20d750 1173 break; //ループ2ブレイク
ryousato 3:d55ebd20d750 1174 }
ryousato 4:e69f73c66598 1175 else if(adjcount >= 15){ //ループ2上限値
ryousato 3:d55ebd20d750 1176 serial.printf("\r\n\r\n ERROR!\r\n");
ryousato 3:d55ebd20d750 1177 break; //ループ2ブレイク
ryousato 3:d55ebd20d750 1178 }
ryousato 3:d55ebd20d750 1179
ryousato 3:d55ebd20d750 1180 ADVrms(mode); //現在のVrms値
ryousato 3:d55ebd20d750 1181
ryousato 3:d55ebd20d750 1182 diff = setval - Vrms; //差分
ryousato 3:d55ebd20d750 1183 //serial.printf("\r\n diff = %f",diff);
ryousato 3:d55ebd20d750 1184
ryousato 3:d55ebd20d750 1185 //増減方向判定
ryousato 3:d55ebd20d750 1186 if(diff > 0){incr = 1;} //増
ryousato 3:d55ebd20d750 1187 else if(diff < 0){
ryousato 3:d55ebd20d750 1188 incr = 0; //減
ryousato 3:d55ebd20d750 1189 diff *= -1; //絶対値
ryousato 3:d55ebd20d750 1190 }
ryousato 3:d55ebd20d750 1191 else if(diff == 0){break;} //差分無し ループ2ブレイク
ryousato 3:d55ebd20d750 1192 serial.printf("\r\n diff = %f",diff);
ryousato 3:d55ebd20d750 1193 serial.printf("\r\n incr = %d",incr);
ryousato 5:5d7483b46cda 1194
ryousato 5:5d7483b46cda 1195
ryousato 5:5d7483b46cda 1196 //粗、微 読み取り
ryousato 5:5d7483b46cda 1197 ADDR(mode * 2); //TRANS粗調整POT
ryousato 5:5d7483b46cda 1198 int read_val_Coarse = spi.write(0x0C00);
ryousato 5:5d7483b46cda 1199 read_val_Coarse &= 0x00FF;
ryousato 5:5d7483b46cda 1200
ryousato 5:5d7483b46cda 1201 wait(0.001);
ryousato 5:5d7483b46cda 1202
ryousato 5:5d7483b46cda 1203 ADDR(mode * 2 - 1); //TRANS微調整POT
ryousato 5:5d7483b46cda 1204 int read_val_Fine = spi.write(0x0C00);
ryousato 5:5d7483b46cda 1205 read_val_Fine &= 0x00FF;
ryousato 3:d55ebd20d750 1206
ryousato 5:5d7483b46cda 1207 //serial.printf("\r\n read_val_Coarse = %d",read_val_Coarse);
ryousato 5:5d7483b46cda 1208 //serial.printf("\r\n read_val_Fine = %d",read_val_Fine);
ryousato 5:5d7483b46cda 1209
ryousato 5:5d7483b46cda 1210
ryousato 5:5d7483b46cda 1211 if(mode == 1){
ryousato 5:5d7483b46cda 1212 //粗・微 調整判定
ryousato 5:5d7483b46cda 1213 float diffref_C = 0.000412 / 255 * read_val_Fine + 0.0032;
ryousato 5:5d7483b46cda 1214 float diffref_F = 0.000412 / 255 * read_val_Coarse + 0.000165;
ryousato 5:5d7483b46cda 1215 float diffcom = diffref_C * 1.5;
ryousato 5:5d7483b46cda 1216 //serial.printf("\r\n diffref_C = %f",diffref_C);
ryousato 5:5d7483b46cda 1217 //serial.printf("\r\n diffref_F = %f",diffref_F);
ryousato 5:5d7483b46cda 1218 //serial.printf("\r\n diffcom = %f",diffcom);
ryousato 5:5d7483b46cda 1219 if(diff >= diffcom){CorF = 2;} //粗
ryousato 5:5d7483b46cda 1220 else if(diff < diffcom){
ryousato 5:5d7483b46cda 1221 CorF = 1; //微
ryousato 5:5d7483b46cda 1222 if(diff < 0.001){break;}//差分微小 ループ2ブレイク(通常最終ゴール)
ryousato 5:5d7483b46cda 1223 }
ryousato 5:5d7483b46cda 1224 serial.printf("\r\n CorF = %d",CorF);
ryousato 5:5d7483b46cda 1225
ryousato 5:5d7483b46cda 1226 //調整tap値算出
ryousato 5:5d7483b46cda 1227 if(CorF == 2){val = diff / diffref_C;}
ryousato 5:5d7483b46cda 1228 else if(CorF == 1){val = diff / diffref_F;}
ryousato 5:5d7483b46cda 1229 serial.printf("\r\n tap(val) = %d",val);
ryousato 3:d55ebd20d750 1230 }
ryousato 5:5d7483b46cda 1231 else if(mode==2 || mode==3){
ryousato 5:5d7483b46cda 1232 if(CTrange == 0){ //60Aのとき
ryousato 5:5d7483b46cda 1233 //粗・微 調整判定
ryousato 5:5d7483b46cda 1234 float diffref_C = 0.001966 / 255 * read_val_Fine + 0.00885;
ryousato 5:5d7483b46cda 1235 float diffref_F = 0.001966 / 255 * read_val_Coarse + 0.000145;
ryousato 5:5d7483b46cda 1236 float diffcom = diffref_C * 1.5;
ryousato 5:5d7483b46cda 1237 serial.printf("\r\n diffref_C = %f",diffref_C);
ryousato 5:5d7483b46cda 1238 serial.printf("\r\n diffref_F = %f",diffref_F);
ryousato 5:5d7483b46cda 1239 serial.printf("\r\n diffcom = %f",diffcom);
ryousato 5:5d7483b46cda 1240 if(diff >= diffcom){CorF = 2;} //粗
ryousato 5:5d7483b46cda 1241 else if(diff < diffcom){
ryousato 5:5d7483b46cda 1242 CorF = 1; //微
ryousato 6:91eec3396ee9 1243 if(diff < 0.002){break;}//差分微小 ループ2ブレイク(通常最終ゴール)
ryousato 5:5d7483b46cda 1244 }
ryousato 5:5d7483b46cda 1245 serial.printf("\r\n CorF = %d",CorF);
ryousato 3:d55ebd20d750 1246
ryousato 5:5d7483b46cda 1247 //調整tap値算出
ryousato 5:5d7483b46cda 1248 if(CorF == 2){val = diff / diffref_C;}
ryousato 5:5d7483b46cda 1249 else if(CorF == 1){val = diff / diffref_F;}
ryousato 5:5d7483b46cda 1250 serial.printf("\r\n tap(val) = %d",val);
ryousato 5:5d7483b46cda 1251 }
ryousato 5:5d7483b46cda 1252 else if(CTrange == 1){ //120Aのとき
ryousato 5:5d7483b46cda 1253 //粗・微 調整判定
ryousato 5:5d7483b46cda 1254 float diffref_C = 0.000983 / 255 * read_val_Fine + 0.0044;
ryousato 5:5d7483b46cda 1255 float diffref_F = 0.000983 / 255 * read_val_Coarse + 0.0000993;
ryousato 5:5d7483b46cda 1256 float diffcom = diffref_C * 1.5;
ryousato 7:7d0d98e0ae48 1257 //serial.printf("\r\n diffref_C = %f",diffref_C);
ryousato 7:7d0d98e0ae48 1258 //serial.printf("\r\n diffref_F = %f",diffref_F);
ryousato 7:7d0d98e0ae48 1259 //serial.printf("\r\n diffcom = %f",diffcom);
ryousato 5:5d7483b46cda 1260 if(diff >= diffcom){CorF = 2;} //粗
ryousato 5:5d7483b46cda 1261 else if(diff < diffcom){
ryousato 5:5d7483b46cda 1262 CorF = 1; //微
ryousato 6:91eec3396ee9 1263 if(diff < 0.002){break;}//差分微小 ループ2ブレイク(通常最終ゴール)
ryousato 5:5d7483b46cda 1264 }
ryousato 5:5d7483b46cda 1265 serial.printf("\r\n CorF = %d",CorF);
ryousato 3:d55ebd20d750 1266
ryousato 5:5d7483b46cda 1267 //調整tap値算出
ryousato 5:5d7483b46cda 1268 if(CorF == 2){val = diff / diffref_C;}
ryousato 5:5d7483b46cda 1269 else if(CorF == 1){val = diff / diffref_F;}
ryousato 5:5d7483b46cda 1270 serial.printf("\r\n tap(val) = %d",val);
ryousato 5:5d7483b46cda 1271 }
ryousato 5:5d7483b46cda 1272 }
ryousato 3:d55ebd20d750 1273 //ワイパー位置移動
ryousato 3:d55ebd20d750 1274 incdec(incr, val, CorF, mode);
ryousato 3:d55ebd20d750 1275
ryousato 3:d55ebd20d750 1276 adjcount ++;
ryousato 3:d55ebd20d750 1277
ryousato 3:d55ebd20d750 1278 } //ループ2
ryousato 3:d55ebd20d750 1279
ryousato 5:5d7483b46cda 1280 if(mode==1){coilEN2 = 1;} //TRANS_OUTを外部出力へ切替え
ryousato 5:5d7483b46cda 1281 else if(mode==2 || mode==3){coilEN3 = 1; coilEN4 = 0;} //CT1_OUT1と2を外部出力へ切替え
ryousato 3:d55ebd20d750 1282
ryousato 3:d55ebd20d750 1283 serial.printf("\r\n ADJ END");
ryousato 3:d55ebd20d750 1284 }
ryousato 3:d55ebd20d750 1285
ryousato 4:e69f73c66598 1286 void Vswitch(int a){
ryousato 4:e69f73c66598 1287 coilEN5 = a;
ryousato 4:e69f73c66598 1288 serial.printf("\r\n OK");
ryousato 4:e69f73c66598 1289 }
ryousato 4:e69f73c66598 1290 void Fswitch(int a){
ryousato 4:e69f73c66598 1291 coilEN1 = a;
ryousato 4:e69f73c66598 1292 serial.printf("\r\n OK");
ryousato 4:e69f73c66598 1293 }
ryousato 4:e69f73c66598 1294 void Tswitch(int a){
ryousato 4:e69f73c66598 1295 coilEN2 = a;
ryousato 4:e69f73c66598 1296 serial.printf("\r\n OK");
ryousato 4:e69f73c66598 1297 }
ryousato 4:e69f73c66598 1298 void Cswitch(int a,int b){
ryousato 4:e69f73c66598 1299 coilEN3 = a;
ryousato 4:e69f73c66598 1300 coilEN4 = b;
ryousato 4:e69f73c66598 1301 serial.printf("\r\n OK");
ryousato 4:e69f73c66598 1302 }
ryousato 5:5d7483b46cda 1303 void Rswitch(int a){
ryousato 5:5d7483b46cda 1304 SCT_AMP = a;
ryousato 6:91eec3396ee9 1305 CTrange = a;
ryousato 5:5d7483b46cda 1306 serial.printf("\r\n OK");
ryousato 5:5d7483b46cda 1307 }
ryousato 4:e69f73c66598 1308
ryousato 3:d55ebd20d750 1309 /******************************************************************************/
ryousato 3:d55ebd20d750 1310 //シリアル入力受付 [メイン]
ryousato 3:d55ebd20d750 1311 /******************************************************************************/
ryousato 0:df1e1f84ded8 1312 void serial_inout(){
ryousato 0:df1e1f84ded8 1313 if(serial.readable()) { // 受信確認
ryousato 0:df1e1f84ded8 1314 moji[count] = serial.getc(); //キーボード入力文字を1文字ずつmojiに代入
ryousato 3:d55ebd20d750 1315 serial.printf("%c", moji[count]); //シリアル出力表示
ryousato 3:d55ebd20d750 1316 // serial.printf("%c(%d)", moji[count],count); //シリアル出力表示
ryousato 0:df1e1f84ded8 1317
ryousato 0:df1e1f84ded8 1318 if(count == 31 ){ // ①文字数が既定の個数になった場合
ryousato 0:df1e1f84ded8 1319 moji[31] = '\0'; // 末尾に終端文字を入れる
ryousato 0:df1e1f84ded8 1320 count = 0; // 文字カウンタをリセット
ryousato 3:d55ebd20d750 1321 serial.printf("\r\n\r\n ERROR!");
ryousato 0:df1e1f84ded8 1322 }
ryousato 0:df1e1f84ded8 1323
ryousato 1:88f0bc1e1aff 1324 else if(moji[0] == '\n'){count = 0;}
ryousato 0:df1e1f84ded8 1325
ryousato 0:df1e1f84ded8 1326 else if((moji[count] == '\r')) { // ②CRを受信した場合
ryousato 3:d55ebd20d750 1327 moji[count] = '\0'; //末尾に終端文字を入れる
ryousato 3:d55ebd20d750 1328 count = 0; //文字カウンタをリセット
ryousato 3:d55ebd20d750 1329 if (strcmp(moji, "cmd") == 0){helpwrite();} //コマンド一覧表示
ryousato 3:d55ebd20d750 1330 else if(strcmp(moji, "help") == 0){helpwrite();} //コマンド一覧表示
ryousato 3:d55ebd20d750 1331 else if(strcmp(moji, "?") == 0){helpwrite();} //コマンド一覧表示
ryousato 3:d55ebd20d750 1332 else if(strcmp(moji, "initial") == 0){initial();} //初期化
ryousato 4:e69f73c66598 1333
ryousato 4:e69f73c66598 1334 else if(strcmp(moji, "V_OFF") == 0){Vswitch(0);} //±5V,±15Vオフ
ryousato 4:e69f73c66598 1335 else if(strcmp(moji, "V_ON") == 0){Vswitch(1);} //±5V,±15Vオン
ryousato 4:e69f73c66598 1336 else if(strcmp(moji, "50Hz") == 0){Fswitch(0);} //周波数切替
ryousato 4:e69f73c66598 1337 else if(strcmp(moji, "60Hz") == 0){Fswitch(1);} //周波数切替
ryousato 4:e69f73c66598 1338 else if(strcmp(moji, "TRANS_OUT_ADINT") == 0){Tswitch(0);} //TRANS_OUT内部AD入力
ryousato 4:e69f73c66598 1339 else if(strcmp(moji, "TRANS_OUT_EXT") == 0){Tswitch(1);} //TRANS_OUT外部出力
ryousato 4:e69f73c66598 1340 else if(strcmp(moji, "CT1_OUT_ADINT") == 0){Cswitch(0,0);} //CT1_OUT内部AD入力
ryousato 4:e69f73c66598 1341 else if(strcmp(moji, "CT2_OUT_ADINT") == 0){Cswitch(0,1);} //CT2_OUT内部AD入力
ryousato 4:e69f73c66598 1342 else if(strcmp(moji, "CT_OUT_EXT") == 0){Cswitch(1,0);} //CT1,2_OUT外部出力
ryousato 5:5d7483b46cda 1343 else if(strcmp(moji, "CTrange_60A") == 0){Rswitch(0);} //CT入力アンプゲイン60A
ryousato 5:5d7483b46cda 1344 else if(strcmp(moji, "CTrange_120A") == 0){Rswitch(0);} //CT入力アンプゲイン120A
ryousato 4:e69f73c66598 1345
ryousato 4:e69f73c66598 1346 else if(strcmp(moji, "TRANS_offset") == 0){offsetcal(1);} //TRANS_OUT ADオフセット補正
ryousato 8:aea096edd536 1347 else if(strcmp(moji, "CT_offset") == 0){offsetcal(2);} //CT_OUT ADオフセット補正
ryousato 8:aea096edd536 1348 // else if(strcmp(moji, "CT2_offset") == 0){offsetcal(3);} //CT2_OUT ADオフセット補正
ryousato 4:e69f73c66598 1349 else if(strcmp(moji, "dispVref") == 0){dispVref();} //各Vref表示
ryousato 6:91eec3396ee9 1350 else if(strcmp(moji, "TRANS_ADJ_100V") == 0){auto_adj(1,100);} //TRANS_OUTを設定
ryousato 6:91eec3396ee9 1351 else if(strcmp(moji, "CT1_ADJ_60A") == 0){auto_adj(2,60);} //CT1を設定
ryousato 6:91eec3396ee9 1352 else if(strcmp(moji, "CT2_ADJ_60A") == 0){auto_adj(3,60);} //CT2を設定
ryousato 6:91eec3396ee9 1353 else if(strcmp(moji, "TRANS_ADJ_MODE") == 0){auto_adj_mode(1);} //TRANS_OUT調整モードに移行
ryousato 6:91eec3396ee9 1354 else if(strcmp(moji, "CT1_ADJ_MODE") == 0){auto_adj_mode(2);} //CT1_OUT調整モードに移行
ryousato 6:91eec3396ee9 1355 else if(strcmp(moji, "CT2_ADJ_MODE") == 0){auto_adj_mode(3);} //CT2_OUT調整モードに移行
ryousato 3:d55ebd20d750 1356 else if(strcmp(moji, "MANUAL_TRANS_ADJ") == 0){manual_adj(1);} //TRANS_OUT手動調整モードに移行
ryousato 3:d55ebd20d750 1357 else if(strcmp(moji, "MANUAL_CT1_ADJ") == 0){manual_adj(2);} //CT1_OUT手動調整モードに移行
ryousato 3:d55ebd20d750 1358 else if(strcmp(moji, "MANUAL_CT2_ADJ") == 0){manual_adj(3);} //CT1_OU2手動調整モードに移行
ryousato 3:d55ebd20d750 1359
ryousato 3:d55ebd20d750 1360 //デバッグ用
ryousato 2:5e6613f149d4 1361 else if(strcmp(moji, "TCON") == 0){TCON();}
ryousato 2:5e6613f149d4 1362 else if(strcmp(moji, "TCONread") == 0){TCONread();}
ryousato 2:5e6613f149d4 1363 else if(strcmp(moji, "read") == 0){read();}
ryousato 3:d55ebd20d750 1364 else if(strcmp(moji, "write00") == 0){write00();}
ryousato 3:d55ebd20d750 1365 else if(strcmp(moji, "write7F") == 0){write7F();}
ryousato 3:d55ebd20d750 1366 else if(strcmp(moji, "writeFF") == 0){writeFF();}
ryousato 2:5e6613f149d4 1367 else if(strcmp(moji, "WLAT") == 0){WLAT();}
ryousato 3:d55ebd20d750 1368 else if(strcmp(moji, "CS0") == 0){CS(0);}
ryousato 3:d55ebd20d750 1369 else if(strcmp(moji, "CS1") == 0){CS(1);}
ryousato 3:d55ebd20d750 1370 else if(strcmp(moji, "AD1") == 0){AD(1);}
ryousato 3:d55ebd20d750 1371 else if(strcmp(moji, "AD2") == 0){AD(2);}
ryousato 3:d55ebd20d750 1372 else if(strcmp(moji, "TENinc") == 0){TENinc();}
ryousato 3:d55ebd20d750 1373 else if(strcmp(moji, "att1") == 0){att(1);}
ryousato 3:d55ebd20d750 1374 else if(strcmp(moji, "att2") == 0){att(2);}
ryousato 3:d55ebd20d750 1375 else if(strcmp(moji, "att3") == 0){att(3);}
ryousato 3:d55ebd20d750 1376 else if(strcmp(moji, "det") == 0){det();}
ryousato 3:d55ebd20d750 1377 else if(strcmp(moji, "AD1_Vrms") == 0){ADVrms(1);}
ryousato 3:d55ebd20d750 1378 else if(strcmp(moji, "AD2_Vrms") == 0){ADVrms(2);}
ryousato 3:d55ebd20d750 1379 else if(strcmp(moji, "AD3_Vrms") == 0){ADVrms(3);}
ryousato 5:5d7483b46cda 1380 else if(strcmp(moji, "ADDR1") == 0){ADDR(1);}
ryousato 5:5d7483b46cda 1381 else if(strcmp(moji, "ADDR2") == 0){ADDR(2);}
ryousato 5:5d7483b46cda 1382 else if(strcmp(moji, "ADDR3") == 0){ADDR(3);}
ryousato 5:5d7483b46cda 1383 else if(strcmp(moji, "ADDR4") == 0){ADDR(4);}
ryousato 5:5d7483b46cda 1384 else if(strcmp(moji, "ADDR5") == 0){ADDR(5);}
ryousato 5:5d7483b46cda 1385 else if(strcmp(moji, "ADDR6") == 0){ADDR(6);}
ryousato 5:5d7483b46cda 1386
ryousato 4:e69f73c66598 1387
ryousato 3:d55ebd20d750 1388 else serial.printf("\r\n\r\n NG!\r\n");
ryousato 0:df1e1f84ded8 1389 }
ryousato 3:d55ebd20d750 1390 else count++; // 文字カウンタに1加算
ryousato 0:df1e1f84ded8 1391 }
ryousato 0:df1e1f84ded8 1392 }
ryousato 0:df1e1f84ded8 1393
ryousato 3:d55ebd20d750 1394 /******************************************************************************/
ryousato 3:d55ebd20d750 1395 //メインプログラム
ryousato 3:d55ebd20d750 1396 /******************************************************************************/
ryousato 0:df1e1f84ded8 1397 int main() {
ryousato 3:d55ebd20d750 1398 pAVrefcal = &ActualVref[0];
ryousato 3:d55ebd20d750 1399 pmode = &mode_p;
ryousato 6:91eec3396ee9 1400 pCTrange = &CTrange;
ryousato 6:91eec3396ee9 1401
ryousato 3:d55ebd20d750 1402 led1 = 1;
ryousato 3:d55ebd20d750 1403 wait(0.2);
ryousato 0:df1e1f84ded8 1404 setup();
ryousato 3:d55ebd20d750 1405 initial();
ryousato 4:e69f73c66598 1406 offsetcal(1);
ryousato 4:e69f73c66598 1407 offsetcal(2);
ryousato 8:aea096edd536 1408 // offsetcal(3);
ryousato 6:91eec3396ee9 1409 auto_adj(1,100);
ryousato 6:91eec3396ee9 1410 auto_adj(2,60);
ryousato 6:91eec3396ee9 1411 auto_adj(3,60);
ryousato 4:e69f73c66598 1412 coilEN2 = 1; //TRANS_OUT出力
ryousato 4:e69f73c66598 1413 coilEN3 = 1; //CT1,2_OUT出力
ryousato 4:e69f73c66598 1414 coilEN4 = 0;
ryousato 4:e69f73c66598 1415 led1 = 0;
ryousato 2:5e6613f149d4 1416 serialstart();
ryousato 2:5e6613f149d4 1417
ryousato 3:d55ebd20d750 1418 //*(volatile int *)0x4004402C = 0x2; // (レジスタ値を直接入力) アドレス0x4004402Cに値を代入
ryousato 3:d55ebd20d750 1419 //*(volatile int *)0x4004402C;
ryousato 3:d55ebd20d750 1420 //serial.printf( "data in 0x4004402C is 0x%08X\n", *(volatile int *)0x4004402C ); // アドレス0x4004402Cの値を表示
ryousato 3:d55ebd20d750 1421
ryousato 0:df1e1f84ded8 1422 while(1){
ryousato 0:df1e1f84ded8 1423 serial_inout();
ryousato 0:df1e1f84ded8 1424 }
ryousato 3:d55ebd20d750 1425
ryousato 0:df1e1f84ded8 1426
ryousato 3:d55ebd20d750 1427 }