20200823_Motacon2020_ver5_kikkawa
Dependencies: mbed FatFileSystemCpp INA226_abc BLDCmotorDriver_20200821_motacon_ver4
main.cpp@0:3e0c71851fee, 2020-08-03 (annotated)
- Committer:
- MPPT51
- Date:
- Mon Aug 03 03:20:27 2020 +0000
- Revision:
- 0:3e0c71851fee
- Child:
- 1:47c28ece54ea
abc
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MPPT51 | 0:3e0c71851fee | 1 | /* |
MPPT51 | 0:3e0c71851fee | 2 | Motacon 20200803 ver.2 |
MPPT51 | 0:3e0c71851fee | 3 | ver.1: ブラシレスモータ(BLDC), USBメモリ書き込み, LM61(インバータ温度測定), INA226(インバータ電流電圧測定), CAN |
MPPT51 | 0:3e0c71851fee | 4 | ver.2 まともなプログラムになるように努力中 |
MPPT51 | 0:3e0c71851fee | 5 | */ |
MPPT51 | 0:3e0c71851fee | 6 | #include "mbed.h" |
MPPT51 | 0:3e0c71851fee | 7 | #include "MSCFileSystem.h" //USBメモリ操作のため |
MPPT51 | 0:3e0c71851fee | 8 | #include "INA226.hpp" //INA226操作のため |
MPPT51 | 0:3e0c71851fee | 9 | #include "RateLimiter.h" //モータ加減速調整のため |
MPPT51 | 0:3e0c71851fee | 10 | #include "BLDCmotorDriver.h"//BLDC操作のため |
MPPT51 | 0:3e0c71851fee | 11 | |
MPPT51 | 0:3e0c71851fee | 12 | /*定数の設定*/ |
MPPT51 | 0:3e0c71851fee | 13 | #define Vin1_LENGTH 20 //要素数(個数指定用の定数) |
MPPT51 | 0:3e0c71851fee | 14 | #define Cin1_LENGTH 20 //要素数(個数指定用の定数) |
MPPT51 | 0:3e0c71851fee | 15 | #define Vout1_LENGTH 20 //要素数(個数指定用の定数) |
MPPT51 | 0:3e0c71851fee | 16 | #define Cout1_LENGTH 20 //要素数(個数指定用の定数) |
MPPT51 | 0:3e0c71851fee | 17 | #define temp1_LENGTH 20 //要素数(個数指定用の定数) |
MPPT51 | 0:3e0c71851fee | 18 | #define temp2_LENGTH 20 //要素数(個数指定用の定数) |
MPPT51 | 0:3e0c71851fee | 19 | |
MPPT51 | 0:3e0c71851fee | 20 | /*基本の設定*/ |
MPPT51 | 0:3e0c71851fee | 21 | Serial pc(USBTX, USBRX); |
MPPT51 | 0:3e0c71851fee | 22 | DigitalOut myled(LED1); // |
MPPT51 | 0:3e0c71851fee | 23 | DigitalOut led2(LED2); // |
MPPT51 | 0:3e0c71851fee | 24 | DigitalOut led3(LED3); // |
MPPT51 | 0:3e0c71851fee | 25 | bool flagPrintf = 0; //main関数でのprintf処理のためのフラグ |
MPPT51 | 0:3e0c71851fee | 26 | Ticker ticker1; //割り込み設定用 |
MPPT51 | 0:3e0c71851fee | 27 | |
MPPT51 | 0:3e0c71851fee | 28 | /*BLDC設定*/ |
MPPT51 | 0:3e0c71851fee | 29 | Timer timer; //回転数計算用タイマ設定 |
MPPT51 | 0:3e0c71851fee | 30 | BLDCmotorDriver M(p26, p24, p22, p25, p23, p21, p14, p17, p18, LED1); |
MPPT51 | 0:3e0c71851fee | 31 | AnalogIn Pot(p20); |
MPPT51 | 0:3e0c71851fee | 32 | InterruptIn HS_p16(p16); |
MPPT51 | 0:3e0c71851fee | 33 | InterruptIn DIRECTION_SW(p8); |
MPPT51 | 0:3e0c71851fee | 34 | void initBLDC(); //BLDCの初期設定を行う関数 |
MPPT51 | 0:3e0c71851fee | 35 | float rpm = 0, speed = 0; |
MPPT51 | 0:3e0c71851fee | 36 | double dc = 0.0; |
MPPT51 | 0:3e0c71851fee | 37 | bool direction = 0;//方向を決める |
MPPT51 | 0:3e0c71851fee | 38 | int begin, end; // |
MPPT51 | 0:3e0c71851fee | 39 | int HS_timer = 0; //速度検出のために使う変数 |
MPPT51 | 0:3e0c71851fee | 40 | int HS_timer1 = 0; //速度検出のために使う変数 |
MPPT51 | 0:3e0c71851fee | 41 | int reset_cnt = 0; //Timerをリセットするために使うカウンタ |
MPPT51 | 0:3e0c71851fee | 42 | |
MPPT51 | 0:3e0c71851fee | 43 | /*CANの設定*/ |
MPPT51 | 0:3e0c71851fee | 44 | CAN canSlave(p30, p29); //CANのピン設定 |
MPPT51 | 0:3e0c71851fee | 45 | void initCAN(); //CANの初期設定を行う関数 |
MPPT51 | 0:3e0c71851fee | 46 | int forSend = 0; //データ送信時に一時的に使用する変数 |
MPPT51 | 0:3e0c71851fee | 47 | bool CANsendOK = 0; //CAN受信完了時,セットする(mainでのprintfのため) |
MPPT51 | 0:3e0c71851fee | 48 | CANMessage msgSlave; //CAN送信用 |
MPPT51 | 0:3e0c71851fee | 49 | unsigned int canSlaveID = 0x10; //canSlaveの初期IDを0x10に設定 (モタコン:0x10, ) |
MPPT51 | 0:3e0c71851fee | 50 | void Handler_canSlaveSend(); |
MPPT51 | 0:3e0c71851fee | 51 | |
MPPT51 | 0:3e0c71851fee | 52 | /*INA226設定*/ //GNDGND(G-G):0x80, Vs+Vs+(1-1):0x8A, SDASDA(D-D):0x94, SCLSCL(C-C):0x9E, GNDVs+(G-1):0x82 |
MPPT51 | 0:3e0c71851fee | 53 | I2C i2c(p28,p27); |
MPPT51 | 0:3e0c71851fee | 54 | INA226 VCmonitor1(i2c,0x9E); //GNDGND(G-G)に設定したINA226がVCmonitor1(1台目) |
MPPT51 | 0:3e0c71851fee | 55 | INA226 VCmonitor2(i2c,0x94); //Vs+Vs+(1-1)に設定したINA226がVCmonitor2(2台目) |
MPPT51 | 0:3e0c71851fee | 56 | void initINA226(); //INA226の初期設定を行う関数 |
MPPT51 | 0:3e0c71851fee | 57 | unsigned short val; |
MPPT51 | 0:3e0c71851fee | 58 | double V,C,Vin1,Cin1,Vout1,Cout1; |
MPPT51 | 0:3e0c71851fee | 59 | int count = 1; //INA226動作確認用カウンタ |
MPPT51 | 0:3e0c71851fee | 60 | float data_Vin1[Vin1_LENGTH] = {0.0, 0.0, 0.0, 0.0, 0.0}; //一時的データ格納配列 |
MPPT51 | 0:3e0c71851fee | 61 | float data_Cin1[Cin1_LENGTH] = {0.0, 0.0, 0.0, 0.0, 0.0}; //一時的データ格納配列 |
MPPT51 | 0:3e0c71851fee | 62 | float data_Vout1[Vout1_LENGTH] = {0.0, 0.0, 0.0, 0.0, 0.0}; //一時的データ格納配列 |
MPPT51 | 0:3e0c71851fee | 63 | float data_Cout1[Cout1_LENGTH] = {0.0, 0.0, 0.0, 0.0, 0.0}; //一時的データ格納配列 |
MPPT51 | 0:3e0c71851fee | 64 | void get_VCin1(void); |
MPPT51 | 0:3e0c71851fee | 65 | void get_VCout1(void); |
MPPT51 | 0:3e0c71851fee | 66 | |
MPPT51 | 0:3e0c71851fee | 67 | /*温度測定(LM61)設定*/ |
MPPT51 | 0:3e0c71851fee | 68 | AnalogIn LM61(p15); ////set p15 to analog input to read LM61 sensor's voltage output |
MPPT51 | 0:3e0c71851fee | 69 | float temp1 = 0.0, temp2 = 0.0; |
MPPT51 | 0:3e0c71851fee | 70 | void get_temp(void); //温度取得する関数 |
MPPT51 | 0:3e0c71851fee | 71 | float data_temp1[temp1_LENGTH] = {0.0, 0.0, 0.0, 0.0, 0.0}; //一時的データ格納配列 |
MPPT51 | 0:3e0c71851fee | 72 | float data_temp2[temp2_LENGTH] = {0.0, 0.0, 0.0, 0.0, 0.0}; //一時的データ格納配列 |
MPPT51 | 0:3e0c71851fee | 73 | |
MPPT51 | 0:3e0c71851fee | 74 | /*ADCのピン設定*/ //also setting unused analog input pins to digital outputs reduces A/D noise a bit //see http://mbed.org/users/chris/notebook/Getting-best-ADC-performance/ |
MPPT51 | 0:3e0c71851fee | 75 | DigitalOut P19(p19); |
MPPT51 | 0:3e0c71851fee | 76 | |
MPPT51 | 0:3e0c71851fee | 77 | /*USBメモリの設定*/ |
MPPT51 | 0:3e0c71851fee | 78 | MSCFileSystem msc("usb"); // Mount flash drive under the name "msc" |
MPPT51 | 0:3e0c71851fee | 79 | void write_toMSC(void); //MSC=USBメモリ |
MPPT51 | 0:3e0c71851fee | 80 | FILE *fp; //ファイルの設定 |
MPPT51 | 0:3e0c71851fee | 81 | |
MPPT51 | 0:3e0c71851fee | 82 | //Timer timer; //処理時間測定用タイマ デバッグに使用する |
MPPT51 | 0:3e0c71851fee | 83 | int n = 0; //移動平均算出に使うカウンタ |
MPPT51 | 0:3e0c71851fee | 84 | |
MPPT51 | 0:3e0c71851fee | 85 | /*時間割り込み関数*/ |
MPPT51 | 0:3e0c71851fee | 86 | void handler_0t2s(){ //0.2秒毎の割り込み |
MPPT51 | 0:3e0c71851fee | 87 | if( direction == 0 ){ //正回転 |
MPPT51 | 0:3e0c71851fee | 88 | dc = Pot.read(); |
MPPT51 | 0:3e0c71851fee | 89 | } |
MPPT51 | 0:3e0c71851fee | 90 | if( direction == 1 ){ //逆回転 |
MPPT51 | 0:3e0c71851fee | 91 | dc = -1 * Pot.read(); |
MPPT51 | 0:3e0c71851fee | 92 | } |
MPPT51 | 0:3e0c71851fee | 93 | reset_cnt++; |
MPPT51 | 0:3e0c71851fee | 94 | if( reset_cnt >= 6000 ){ |
MPPT51 | 0:3e0c71851fee | 95 | timer.reset(); |
MPPT51 | 0:3e0c71851fee | 96 | reset_cnt = 0; |
MPPT51 | 0:3e0c71851fee | 97 | } |
MPPT51 | 0:3e0c71851fee | 98 | //flagPrintf = 1; |
MPPT51 | 0:3e0c71851fee | 99 | } |
MPPT51 | 0:3e0c71851fee | 100 | /*ホールセンサの立ち上がりから立ち上がりまでの時間計測する関数*/ |
MPPT51 | 0:3e0c71851fee | 101 | void handler_HS(){ |
MPPT51 | 0:3e0c71851fee | 102 | if( HS_timer == 0 ){ |
MPPT51 | 0:3e0c71851fee | 103 | begin = timer.read_us(); |
MPPT51 | 0:3e0c71851fee | 104 | HS_timer1 = 0; |
MPPT51 | 0:3e0c71851fee | 105 | } |
MPPT51 | 0:3e0c71851fee | 106 | if( HS_timer == 1 ){ |
MPPT51 | 0:3e0c71851fee | 107 | end = timer.read_us(); |
MPPT51 | 0:3e0c71851fee | 108 | HS_timer1 = 1; |
MPPT51 | 0:3e0c71851fee | 109 | } |
MPPT51 | 0:3e0c71851fee | 110 | if( HS_timer1 == 0 ){ |
MPPT51 | 0:3e0c71851fee | 111 | HS_timer = 1; |
MPPT51 | 0:3e0c71851fee | 112 | } |
MPPT51 | 0:3e0c71851fee | 113 | if( HS_timer1 == 1 ){ |
MPPT51 | 0:3e0c71851fee | 114 | HS_timer = 0; |
MPPT51 | 0:3e0c71851fee | 115 | rpm = 3750 / (abs(end - begin) * 0.001); |
MPPT51 | 0:3e0c71851fee | 116 | speed = rpm * 0.10518; |
MPPT51 | 0:3e0c71851fee | 117 | } |
MPPT51 | 0:3e0c71851fee | 118 | } |
MPPT51 | 0:3e0c71851fee | 119 | /*Directionスイッチの割り込み 進行方向切り替え*/ |
MPPT51 | 0:3e0c71851fee | 120 | void handler_directionSW(){ |
MPPT51 | 0:3e0c71851fee | 121 | if( dc <= 0 ){ |
MPPT51 | 0:3e0c71851fee | 122 | direction = !direction; |
MPPT51 | 0:3e0c71851fee | 123 | } |
MPPT51 | 0:3e0c71851fee | 124 | } |
MPPT51 | 0:3e0c71851fee | 125 | /*CANでデータを送信する関数*/ |
MPPT51 | 0:3e0c71851fee | 126 | void Handler_canSlaveSend() { |
MPPT51 | 0:3e0c71851fee | 127 | forSend = (int)(V/100); |
MPPT51 | 0:3e0c71851fee | 128 | msgSlave.data[0] = forSend / 100; //forSend / 100 = 15あまり43 となり,答えの方がデータ格納される |
MPPT51 | 0:3e0c71851fee | 129 | msgSlave.data[1] = forSend % 100; //forSend / 100 = 15あまり43 となり,あまりの方がデータ格納される |
MPPT51 | 0:3e0c71851fee | 130 | |
MPPT51 | 0:3e0c71851fee | 131 | forSend = (int)(C/10); //mAで取得した値を10で割り、char2分割で送り切れるようにする。(例: 測定電流が199.99Aのとき,C=199900.00となるため,forSend=19990となり,199と90で分割することで送信できる) |
MPPT51 | 0:3e0c71851fee | 132 | msgSlave.data[2] = forSend / 100; //forSend / 100 = 5あまり54 となり,答えの方がデータ格納される |
MPPT51 | 0:3e0c71851fee | 133 | msgSlave.data[3] = forSend % 100; //forSend % 100 = 5あまり54 となり,あまりの方がデータ格納される |
MPPT51 | 0:3e0c71851fee | 134 | |
MPPT51 | 0:3e0c71851fee | 135 | forSend = (int)(speed*10); //speed * 10 = 856.5だが,intにするため,856が代入される |
MPPT51 | 0:3e0c71851fee | 136 | msgSlave.data[4] = forSend / 100; //forSend / 100 = 8あまり56 となり,8がデータ格納される |
MPPT51 | 0:3e0c71851fee | 137 | msgSlave.data[5] = forSend % 100; //forSend % 100 = 8あまり56 となり,56がデータ格納される |
MPPT51 | 0:3e0c71851fee | 138 | |
MPPT51 | 0:3e0c71851fee | 139 | forSend = (int)(dc*100); //dc * 100 = 95 |
MPPT51 | 0:3e0c71851fee | 140 | msgSlave.data[6] = forSend; //charの最大値である255以下になるため,そのままデータ格納される |
MPPT51 | 0:3e0c71851fee | 141 | |
MPPT51 | 0:3e0c71851fee | 142 | if(canSlave.write(msgSlave)){ //格納したデータを送信する |
MPPT51 | 0:3e0c71851fee | 143 | CANsendOK = 1; |
MPPT51 | 0:3e0c71851fee | 144 | } |
MPPT51 | 0:3e0c71851fee | 145 | } |
MPPT51 | 0:3e0c71851fee | 146 | /*CAN通信相手から送信要求がきたとき実行される*/ |
MPPT51 | 0:3e0c71851fee | 147 | void Handler_canSlaveRecieve(){ //CANの通信相手から,送信要求がきたときに実行される関数 |
MPPT51 | 0:3e0c71851fee | 148 | if( canSlave.read( msgSlave ) ){ //msgに送られたデータが入る |
MPPT51 | 0:3e0c71851fee | 149 | led2 = !led2; |
MPPT51 | 0:3e0c71851fee | 150 | if( msgSlave.id == canSlaveID ){ //IDがcanSlaveIDであれば処理する |
MPPT51 | 0:3e0c71851fee | 151 | Handler_canSlaveSend(); //送信処理をする関数に飛ぶ |
MPPT51 | 0:3e0c71851fee | 152 | } |
MPPT51 | 0:3e0c71851fee | 153 | } |
MPPT51 | 0:3e0c71851fee | 154 | } |
MPPT51 | 0:3e0c71851fee | 155 | /*電圧と電流測定する関数*/ |
MPPT51 | 0:3e0c71851fee | 156 | void get_VCin1(){ |
MPPT51 | 0:3e0c71851fee | 157 | if((VCmonitor1.getVoltage(&V) == 0) && (VCmonitor1.getCurrent(&C) == 0)){ //1台目INA226の電圧電流測定 |
MPPT51 | 0:3e0c71851fee | 158 | Vin1 -= data_Vin1[n]; //移動平均処理 |
MPPT51 | 0:3e0c71851fee | 159 | Cin1 -= data_Cin1[n]; //移動平均処理 |
MPPT51 | 0:3e0c71851fee | 160 | data_Vin1[n] = V/Vin1_LENGTH; //移動平均処理 |
MPPT51 | 0:3e0c71851fee | 161 | data_Cin1[n] = C/Cin1_LENGTH; //移動平均処理 |
MPPT51 | 0:3e0c71851fee | 162 | Vin1 += data_Vin1[n]; //移動平均処理 |
MPPT51 | 0:3e0c71851fee | 163 | Cin1 += data_Cin1[n]; //移動平均処理 |
MPPT51 | 0:3e0c71851fee | 164 | pc.printf("\n%d, Vin1: %f, Cin1: %f\n",count,Vin1,Cin1); |
MPPT51 | 0:3e0c71851fee | 165 | } |
MPPT51 | 0:3e0c71851fee | 166 | } |
MPPT51 | 0:3e0c71851fee | 167 | /*温度測定する関数*/ |
MPPT51 | 0:3e0c71851fee | 168 | void get_temp(){ |
MPPT51 | 0:3e0c71851fee | 169 | temp1 -= data_temp1[n]; //移動平均処理 |
MPPT51 | 0:3e0c71851fee | 170 | data_temp1[n] = ( ((LM61*3.3)-0.600)*100.0 ) / temp1_LENGTH; //移動平均処理 |
MPPT51 | 0:3e0c71851fee | 171 | temp1 += data_temp1[n]; //移動平均処理 |
MPPT51 | 0:3e0c71851fee | 172 | pc.printf("temp1:%5.2F C temp2:%5.2F C \n\r", temp1, temp2); |
MPPT51 | 0:3e0c71851fee | 173 | } |
MPPT51 | 0:3e0c71851fee | 174 | void write_toMSC(){ |
MPPT51 | 0:3e0c71851fee | 175 | if ( (fp= fopen( "/usb/MPPT.csv", "a")) == NULL ){ //ファイルを開く, aは上書きの命令(ファイルが存在しなければ新規作成する) |
MPPT51 | 0:3e0c71851fee | 176 | pc.printf("USB error\r\n"); |
MPPT51 | 0:3e0c71851fee | 177 | exit(1); |
MPPT51 | 0:3e0c71851fee | 178 | } |
MPPT51 | 0:3e0c71851fee | 179 | pc.printf("USB file write!\r\n"); |
MPPT51 | 0:3e0c71851fee | 180 | //timer.start(); //書き込み時間測定開始 |
MPPT51 | 0:3e0c71851fee | 181 | fprintf(fp,"%f,%f,%f,%f,%f,%f\n", Vin1, Cin1, Vout1, Vout1, temp1, temp2); //ファイル書き込み |
MPPT51 | 0:3e0c71851fee | 182 | //timer.stop(); //書き込み時間測定終了 |
MPPT51 | 0:3e0c71851fee | 183 | fclose(fp); //ファイルを閉じる |
MPPT51 | 0:3e0c71851fee | 184 | //pc.printf("write time :%f\n\n\n",timer.read()); |
MPPT51 | 0:3e0c71851fee | 185 | } |
MPPT51 | 0:3e0c71851fee | 186 | |
MPPT51 | 0:3e0c71851fee | 187 | /*INA226の初期設定*/ |
MPPT51 | 0:3e0c71851fee | 188 | void initINA226(){ |
MPPT51 | 0:3e0c71851fee | 189 | // 1台目の設定 |
MPPT51 | 0:3e0c71851fee | 190 | if ( !VCmonitor1.isExist() ){ |
MPPT51 | 0:3e0c71851fee | 191 | pc.printf("VCmonitor1 INA226 Not Found.\n"); |
MPPT51 | 0:3e0c71851fee | 192 | } |
MPPT51 | 0:3e0c71851fee | 193 | val = 0; |
MPPT51 | 0:3e0c71851fee | 194 | if ( VCmonitor1.rawRead(0x00,&val) != 0){ |
MPPT51 | 0:3e0c71851fee | 195 | pc.printf("VCmonitor1 INA226 Read Error\n"); |
MPPT51 | 0:3e0c71851fee | 196 | } |
MPPT51 | 0:3e0c71851fee | 197 | pc.printf("VCmonitor1 Reg 0x00 : 0x%04x\r\n",val); |
MPPT51 | 0:3e0c71851fee | 198 | VCmonitor1.setCurrentCalibration(); |
MPPT51 | 0:3e0c71851fee | 199 | } |
MPPT51 | 0:3e0c71851fee | 200 | /*CANの初期設定*/ |
MPPT51 | 0:3e0c71851fee | 201 | void initCAN(){ |
MPPT51 | 0:3e0c71851fee | 202 | canSlave.attach(&Handler_canSlaveRecieve, CAN::RxIrq); //CAN受信割り込みの設定 |
MPPT51 | 0:3e0c71851fee | 203 | msgSlave.id = canSlaveID; //CAN送信側(slave)のIDを決定 |
MPPT51 | 0:3e0c71851fee | 204 | msgSlave.len = 7; //CAN送信側で送るデータのバイト数 |
MPPT51 | 0:3e0c71851fee | 205 | } |
MPPT51 | 0:3e0c71851fee | 206 | void initBLDC(){ |
MPPT51 | 0:3e0c71851fee | 207 | timer.start(); //回転数計算用タイマスタート |
MPPT51 | 0:3e0c71851fee | 208 | DIRECTION_SW.mode(PullUp); //directionスイッチのモード設定 |
MPPT51 | 0:3e0c71851fee | 209 | DIRECTION_SW.fall(&handler_directionSW); //directionスイッチの立ち上がり割り込み設定 |
MPPT51 | 0:3e0c71851fee | 210 | DIRECTION_SW.rise(&handler_directionSW); //directionスイッチの立ち下がり割り込み設定 どちらも同じ関数に飛ぶ |
MPPT51 | 0:3e0c71851fee | 211 | led3 = DIRECTION_SW.read(); |
MPPT51 | 0:3e0c71851fee | 212 | // HS_p16.rise(&handler_HS); //ホールセンサ立ち上がり割り込み設定 |
MPPT51 | 0:3e0c71851fee | 213 | } |
MPPT51 | 0:3e0c71851fee | 214 | |
MPPT51 | 0:3e0c71851fee | 215 | /*メイン関数*/ |
MPPT51 | 0:3e0c71851fee | 216 | int main() |
MPPT51 | 0:3e0c71851fee | 217 | { |
MPPT51 | 0:3e0c71851fee | 218 | initINA226(); //INA226の初期設定 |
MPPT51 | 0:3e0c71851fee | 219 | initCAN(); |
MPPT51 | 0:3e0c71851fee | 220 | initBLDC(); //BLDC制御のための初期設定 |
MPPT51 | 0:3e0c71851fee | 221 | ticker1.attach(&handler_0t2s, 0.3); //0.3秒毎に飛ぶ「handler_0t3s」関数 |
MPPT51 | 0:3e0c71851fee | 222 | |
MPPT51 | 0:3e0c71851fee | 223 | while(1) { |
MPPT51 | 0:3e0c71851fee | 224 | get_VCin1(); //Vipm(IPMへの入力電圧)とCipm(IPMへの入力電流)を取得 |
MPPT51 | 0:3e0c71851fee | 225 | get_temp(); //温度測定 |
MPPT51 | 0:3e0c71851fee | 226 | // write_toMSC(); //データをUSBメモリに保存 |
MPPT51 | 0:3e0c71851fee | 227 | |
MPPT51 | 0:3e0c71851fee | 228 | n++; |
MPPT51 | 0:3e0c71851fee | 229 | if( n >= Vin1_LENGTH ){ //カウンタがサンプル数を超えたら,0に戻り,移動平均算出を続ける |
MPPT51 | 0:3e0c71851fee | 230 | n = 0; |
MPPT51 | 0:3e0c71851fee | 231 | } |
MPPT51 | 0:3e0c71851fee | 232 | |
MPPT51 | 0:3e0c71851fee | 233 | M.setDutyCycle(dc); //モータを駆動する関数 引数dcは,PWMのデューティ比 |
MPPT51 | 0:3e0c71851fee | 234 | flagPrintf = 1; |
MPPT51 | 0:3e0c71851fee | 235 | if( flagPrintf ){ //flagPrntfが1なら,以下を処理する |
MPPT51 | 0:3e0c71851fee | 236 | flagPrintf = 0; |
MPPT51 | 0:3e0c71851fee | 237 | pc.printf("Duty Cycle: %1.2f, Sector: %d\n\r",dc, M.getSector()); |
MPPT51 | 0:3e0c71851fee | 238 | pc.printf("Toggle the led takes %d us\n", abs(end - begin)); |
MPPT51 | 0:3e0c71851fee | 239 | pc.printf("%f rpm\n",rpm); |
MPPT51 | 0:3e0c71851fee | 240 | pc.printf("%f km/h\n",speed); |
MPPT51 | 0:3e0c71851fee | 241 | pc.printf("V,%f,C,%f\n",V,C); |
MPPT51 | 0:3e0c71851fee | 242 | } |
MPPT51 | 0:3e0c71851fee | 243 | /* |
MPPT51 | 0:3e0c71851fee | 244 | if( CANsendOK ) { |
MPPT51 | 0:3e0c71851fee | 245 | CANsendOK = 0; |
MPPT51 | 0:3e0c71851fee | 246 | printf("Data in msgSlave.data[0] : %d\n\r", msgSlave.data[0]); //CANで送信したデータをそのまま表示 |
MPPT51 | 0:3e0c71851fee | 247 | printf("Data in msgSlave.data[1] : %d\n\r", msgSlave.data[1]); //上に同じ |
MPPT51 | 0:3e0c71851fee | 248 | printf("Data in msgSlave.data[2] : %d\n\r", msgSlave.data[2]); //上に同じ |
MPPT51 | 0:3e0c71851fee | 249 | printf("Data in msgSlave.data[3] : %d\n\r", msgSlave.data[3]); //上に同じ |
MPPT51 | 0:3e0c71851fee | 250 | printf("Data in msgSlave.data[4] : %d\n\r", msgSlave.data[4]); //上に同じ |
MPPT51 | 0:3e0c71851fee | 251 | printf("Data in msgSlave.data[5] : %d\n\r", msgSlave.data[5]); //上に同じ |
MPPT51 | 0:3e0c71851fee | 252 | printf("Data in msgSlave.data[6] : %d\n\r", msgSlave.data[6]); //上に同じ |
MPPT51 | 0:3e0c71851fee | 253 | printf("\n\r"); |
MPPT51 | 0:3e0c71851fee | 254 | } |
MPPT51 | 0:3e0c71851fee | 255 | */ |
MPPT51 | 0:3e0c71851fee | 256 | } |
MPPT51 | 0:3e0c71851fee | 257 | } |