TOUTEKI
Dependencies: mbed QEI2 UnderBody Filter
main.cpp@6:7afdc6a81566, 2019-03-08 (annotated)
- Committer:
- sink
- Date:
- Fri Mar 08 07:29:25 2019 +0000
- Revision:
- 6:7afdc6a81566
- Parent:
- 5:869dc702b923
- Child:
- 7:24a3e797e7a8
ver2
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
e5118069 | 0:d46cb1df87f1 | 1 | #include "mbed.h" |
e5118069 | 0:d46cb1df87f1 | 2 | #include "QEI.h" |
e5118069 | 1:94e15665b69f | 3 | #include "Filter.h" |
sink | 6:7afdc6a81566 | 4 | #include "string" |
sink | 6:7afdc6a81566 | 5 | #include "define.h" |
sink | 6:7afdc6a81566 | 6 | #include "RoboClaw.h" |
e5118069 | 0:d46cb1df87f1 | 7 | |
e5118069 | 0:d46cb1df87f1 | 8 | Ticker timer; |
e5118069 | 0:d46cb1df87f1 | 9 | Timer T; |
sink | 6:7afdc6a81566 | 10 | /*QEI Enc2(p7,p8,NC,RESOLUTION,&T,QEI::X4_ENCODING); |
e5118069 | 1:94e15665b69f | 11 | QEI Enc3(p5,p6,NC,RESOLUTION,&T,QEI::X4_ENCODING); |
sink | 6:7afdc6a81566 | 12 | QEI Enc (p12,p11,NC,RESOLUTION,&T,QEI::X4_ENCODING);*/ |
sink | 6:7afdc6a81566 | 13 | RoboClaw MD(115200,p9,p10); |
e5118069 | 3:de0b5dc55627 | 14 | Serial Saber(p13,p14); |
e5118069 | 3:de0b5dc55627 | 15 | Serial pc(USBTX,USBRX); |
sink | 6:7afdc6a81566 | 16 | RawSerial Master(p28,p27,115200);//(tx,rx,baud); |
e5118069 | 1:94e15665b69f | 17 | Filter velfilter(INT_TIME); |
e5118069 | 0:d46cb1df87f1 | 18 | |
sink | 6:7afdc6a81566 | 19 | DigitalOut fet1(p22);//shagai把持 |
sink | 6:7afdc6a81566 | 20 | DigitalOut fet2(p21);//shagai押出 |
sink | 6:7afdc6a81566 | 21 | DigitalOut fet3(p23);//shagaiハンド昇降 |
e5118069 | 0:d46cb1df87f1 | 22 | |
sink | 6:7afdc6a81566 | 23 | DigitalIn limit1(p15);//shagaiハンドlimit |
e5118069 | 2:965cba546262 | 24 | DigitalIn limit2(p16); |
sink | 6:7afdc6a81566 | 25 | //SENSのどっちか減るかも |
sink | 6:7afdc6a81566 | 26 | DigitalIn SENS1(p18);//shagai検出 |
e5118069 | 1:94e15665b69f | 27 | DigitalIn SENS2(p17); |
e5118069 | 1:94e15665b69f | 28 | |
sink | 6:7afdc6a81566 | 29 | DigitalIn G_limit1(p9);//gerege limit |
e5118069 | 5:869dc702b923 | 30 | DigitalIn G_limit2(p10); |
e5118069 | 5:869dc702b923 | 31 | |
e5118069 | 2:965cba546262 | 32 | int cmd,A; |
e5118069 | 2:965cba546262 | 33 | int SA1,B_SA1,LIM1,LIM2; |
e5118069 | 2:965cba546262 | 34 | int S1,S2; |
e5118069 | 1:94e15665b69f | 35 | |
e5118069 | 1:94e15665b69f | 36 | float angle,pre_angle,SOKUDO,e_D,pre_e_D,ed_D,ei_D,e_V,ed_V,pre_e_V,bcmd; |
e5118069 | 1:94e15665b69f | 37 | float goal_D=0,Kp=5,Ki=0.01,Kd=0.1; |
e5118069 | 4:017c55052d44 | 38 | float Ksp2 = 6.5, Ksd2 = 0.4; |
e5118069 | 4:017c55052d44 | 39 | float Ksp3 = 6.5, Ksd3 = 0.4; |
e5118069 | 1:94e15665b69f | 40 | |
sink | 6:7afdc6a81566 | 41 | //float encount,b_encount; |
e5118069 | 1:94e15665b69f | 42 | |
sink | 6:7afdc6a81566 | 43 | char mode = 0x00; |
sink | 6:7afdc6a81566 | 44 | /*int cmd2 = 0; |
e5118069 | 0:d46cb1df87f1 | 45 | int cmd3 = 0; |
e5118069 | 0:d46cb1df87f1 | 46 | |
e5118069 | 0:d46cb1df87f1 | 47 | float spd2=0; |
e5118069 | 0:d46cb1df87f1 | 48 | float spd3=0; |
e5118069 | 0:d46cb1df87f1 | 49 | |
e5118069 | 0:d46cb1df87f1 | 50 | float spd_err2=0; |
e5118069 | 0:d46cb1df87f1 | 51 | float spd_err3=0; |
e5118069 | 0:d46cb1df87f1 | 52 | |
e5118069 | 1:94e15665b69f | 53 | int tmp1; |
e5118069 | 1:94e15665b69f | 54 | int tmp2; |
sink | 6:7afdc6a81566 | 55 | */ |
sink | 6:7afdc6a81566 | 56 | double filtered_ref_qpps; |
e5118069 | 0:d46cb1df87f1 | 57 | |
e5118069 | 5:869dc702b923 | 58 | int G_LIM1=0,G_LIM2=0; |
e5118069 | 5:869dc702b923 | 59 | |
e5118069 | 5:869dc702b923 | 60 | int G_cmd; |
e5118069 | 5:869dc702b923 | 61 | |
sink | 6:7afdc6a81566 | 62 | int limit_MD(int qpps,int max_qpps){ |
sink | 6:7afdc6a81566 | 63 | if (qpps > max_qpps) qpps = max_qpps; |
sink | 6:7afdc6a81566 | 64 | else if (-qpps < -max_qpps) qpps = -max_qpps; |
sink | 6:7afdc6a81566 | 65 | return qpps; |
sink | 6:7afdc6a81566 | 66 | } |
e5118069 | 5:869dc702b923 | 67 | |
sink | 6:7afdc6a81566 | 68 | void robo_serial(int adrs, int qpps1, int qpps2){ |
sink | 6:7afdc6a81566 | 69 | MD.SpeedM1(adrs,qpps1); |
sink | 6:7afdc6a81566 | 70 | MD.SpeedM2(adrs,qpps2); |
e5118069 | 0:d46cb1df87f1 | 71 | } |
sink | 6:7afdc6a81566 | 72 | |
sink | 6:7afdc6a81566 | 73 | void Saber_Serial (int adrs, int rot, int cmd){ |
sink | 6:7afdc6a81566 | 74 | Saber.putc(adrs); |
sink | 6:7afdc6a81566 | 75 | Saber.putc(rot); |
sink | 6:7afdc6a81566 | 76 | Saber.putc(abs(cmd)); |
sink | 6:7afdc6a81566 | 77 | Saber.putc((adrs + rot + abs(cmd)) & 0b01111111); |
e5118069 | 5:869dc702b923 | 78 | } |
e5118069 | 5:869dc702b923 | 79 | |
sink | 6:7afdc6a81566 | 80 | /*void Slave_tx(char tx_mode){ //処理の終了を送る |
sink | 6:7afdc6a81566 | 81 | Master.printf("%c",tx_mode); |
sink | 6:7afdc6a81566 | 82 | Master.printf("%c",tx_mode); |
sink | 6:7afdc6a81566 | 83 | Master.printf("\n"); |
sink | 6:7afdc6a81566 | 84 | }*/ |
sink | 6:7afdc6a81566 | 85 | |
sink | 6:7afdc6a81566 | 86 | void Slave_rx() { //処理内容を受け取る |
sink | 6:7afdc6a81566 | 87 | static string rx_mode = ""; |
sink | 6:7afdc6a81566 | 88 | char rx_c = Master.getc(); |
sink | 6:7afdc6a81566 | 89 | |
sink | 6:7afdc6a81566 | 90 | if (rx_c == '\n') { |
sink | 6:7afdc6a81566 | 91 | if (rx_mode.size() == 2){ |
sink | 6:7afdc6a81566 | 92 | if (rx_mode[0] == rx_mode[1]){ |
sink | 6:7afdc6a81566 | 93 | mode = rx_mode[1]; //モード切替 |
sink | 6:7afdc6a81566 | 94 | }} |
sink | 6:7afdc6a81566 | 95 | rx_mode = ""; |
sink | 6:7afdc6a81566 | 96 | } |
sink | 6:7afdc6a81566 | 97 | |
sink | 6:7afdc6a81566 | 98 | else { |
sink | 6:7afdc6a81566 | 99 | if (rx_mode.size() > 2) rx_mode = ""; |
sink | 6:7afdc6a81566 | 100 | rx_mode += rx_c; |
sink | 6:7afdc6a81566 | 101 | } |
sink | 6:7afdc6a81566 | 102 | //pc.printf("%x\n",mode); |
sink | 6:7afdc6a81566 | 103 | } |
e5118069 | 0:d46cb1df87f1 | 104 | |
e5118069 | 0:d46cb1df87f1 | 105 | void timer_warikomi() |
e5118069 | 1:94e15665b69f | 106 | { |
sink | 6:7afdc6a81566 | 107 | static int qpps1 = 0; |
sink | 6:7afdc6a81566 | 108 | static int qpps2 = 0; |
sink | 6:7afdc6a81566 | 109 | static int ref_qpps1 = 0; |
sink | 6:7afdc6a81566 | 110 | static int ref_qpps2 = 0; |
e5118069 | 1:94e15665b69f | 111 | |
e5118069 | 2:965cba546262 | 112 | LIM1=!limit1.read(); |
e5118069 | 2:965cba546262 | 113 | LIM2=!limit2.read(); |
e5118069 | 2:965cba546262 | 114 | S1=SENS1.read(); |
e5118069 | 0:d46cb1df87f1 | 115 | S2=SENS2.read(); |
sink | 6:7afdc6a81566 | 116 | static char slave_mode = 0x00; |
sink | 6:7afdc6a81566 | 117 | static int spd_count = 0; |
sink | 6:7afdc6a81566 | 118 | /*encount=Enc.getPulses()-b_encount; |
e5118069 | 2:965cba546262 | 119 | |
e5118069 | 2:965cba546262 | 120 | float ppr = 1.0; |
e5118069 | 0:d46cb1df87f1 | 121 | |
e5118069 | 0:d46cb1df87f1 | 122 | static float pre_spd2 = 0.0; |
e5118069 | 0:d46cb1df87f1 | 123 | static float pre_spd3 = 0.0; |
e5118069 | 0:d46cb1df87f1 | 124 | |
e5118069 | 0:d46cb1df87f1 | 125 | static float pre_err2 = 0.0; |
e5118069 | 0:d46cb1df87f1 | 126 | static float pre_err3 = 0.0; |
e5118069 | 0:d46cb1df87f1 | 127 | |
e5118069 | 2:965cba546262 | 128 | static float ref_spd = 0.0; |
e5118069 | 2:965cba546262 | 129 | |
e5118069 | 4:017c55052d44 | 130 | static int lim_cmd2 = 87; |
e5118069 | 2:965cba546262 | 131 | static int lim_cmd3 = 92; |
e5118069 | 2:965cba546262 | 132 | |
sink | 6:7afdc6a81566 | 133 | static int count = 0; |
sink | 6:7afdc6a81566 | 134 | static int count3 = 0; |
e5118069 | 2:965cba546262 | 135 | |
e5118069 | 2:965cba546262 | 136 | angle=(float)(encount)*(360.0/48.0)/4.0; |
e5118069 | 2:965cba546262 | 137 | SOKUDO=(angle-pre_angle)/INT_TIME; |
e5118069 | 2:965cba546262 | 138 | |
e5118069 | 2:965cba546262 | 139 | e_D=(goal_D-angle); |
e5118069 | 2:965cba546262 | 140 | ed_D=(e_D-pre_e_D)/INT_TIME; |
e5118069 | 2:965cba546262 | 141 | ei_D+=(e_D+pre_e_D)*INT_TIME/2.0; |
e5118069 | 2:965cba546262 | 142 | |
e5118069 | 2:965cba546262 | 143 | cmd=(int)((e_D*Kp)+(ed_D*Kd)+(ei_D*Ki)); |
e5118069 | 2:965cba546262 | 144 | |
e5118069 | 2:965cba546262 | 145 | float encount2 = Enc2.getPulses(); |
e5118069 | 2:965cba546262 | 146 | float encount3 = Enc3.getPulses(); |
e5118069 | 2:965cba546262 | 147 | |
e5118069 | 2:965cba546262 | 148 | float rot_sp2 = encount2/MULTIPLU/ppr; |
e5118069 | 2:965cba546262 | 149 | spd2 = (rot_sp2 - pre_spd2)/INT_TIME/(48*4); |
e5118069 | 2:965cba546262 | 150 | float rot_sp3 = encount3/MULTIPLU/ppr; |
e5118069 | 2:965cba546262 | 151 | spd3 = (rot_sp3 - pre_spd3)/INT_TIME/(48*4); |
e5118069 | 0:d46cb1df87f1 | 152 | |
e5118069 | 2:965cba546262 | 153 | spd_err2 = filtered_ref_spd - spd2; |
e5118069 | 2:965cba546262 | 154 | float spd_d2 = (spd_err2 - pre_err2)/INT_TIME; |
e5118069 | 2:965cba546262 | 155 | tmp1 = (int)((spd_err2 * Ksp2) + (spd_d2 * Ksd2)); |
e5118069 | 2:965cba546262 | 156 | if(tmp1>=127)tmp1=127; |
e5118069 | 2:965cba546262 | 157 | if(tmp1<=-127)tmp1=-127; |
e5118069 | 2:965cba546262 | 158 | cmd2 += tmp1; |
e5118069 | 0:d46cb1df87f1 | 159 | |
e5118069 | 2:965cba546262 | 160 | spd_err3 = filtered_ref_spd - spd3; |
e5118069 | 2:965cba546262 | 161 | float spd_d3 = (spd_err3 - pre_err3)/INT_TIME; |
e5118069 | 2:965cba546262 | 162 | tmp2 = (int)((spd_err3 * Ksp3) + (spd_d3 * Ksd3)); |
e5118069 | 2:965cba546262 | 163 | if(tmp2>=127)tmp2=127; |
e5118069 | 2:965cba546262 | 164 | if(tmp2<=-127)tmp2=-127; |
e5118069 | 2:965cba546262 | 165 | cmd3 += tmp2; |
e5118069 | 2:965cba546262 | 166 | |
e5118069 | 2:965cba546262 | 167 | if (cmd2 > lim_cmd2) cmd2 = lim_cmd2; |
e5118069 | 2:965cba546262 | 168 | if (cmd2 < -lim_cmd2) cmd2 = -lim_cmd2; |
e5118069 | 2:965cba546262 | 169 | |
e5118069 | 2:965cba546262 | 170 | if (cmd3 > lim_cmd3) cmd3 = lim_cmd3; |
sink | 6:7afdc6a81566 | 171 | if (cmd3 < -lim_cmd3) cmd3 = -lim_cmd3;*/ |
sink | 6:7afdc6a81566 | 172 | |
sink | 6:7afdc6a81566 | 173 | |
e5118069 | 3:de0b5dc55627 | 174 | |
sink | 6:7afdc6a81566 | 175 | G_LIM1=!G_limit1.read();//pullupなので逆 |
sink | 6:7afdc6a81566 | 176 | G_LIM2=!G_limit2.read();//pullupなので逆 |
sink | 6:7afdc6a81566 | 177 | |
sink | 6:7afdc6a81566 | 178 | switch (mode) { |
sink | 6:7afdc6a81566 | 179 | case 0x99: |
e5118069 | 0:d46cb1df87f1 | 180 | break; |
sink | 6:7afdc6a81566 | 181 | |
sink | 6:7afdc6a81566 | 182 | case 0x10://初期化処理 |
sink | 6:7afdc6a81566 | 183 | ref_qpps1 = 0.0; |
sink | 6:7afdc6a81566 | 184 | ref_qpps2 = 0.0; |
sink | 6:7afdc6a81566 | 185 | |
sink | 6:7afdc6a81566 | 186 | break; |
sink | 6:7afdc6a81566 | 187 | |
sink | 6:7afdc6a81566 | 188 | case 0x20://ハンド降下 |
sink | 6:7afdc6a81566 | 189 | //goal_D=125; |
e5118069 | 0:d46cb1df87f1 | 190 | if(S1==0&&S2==0){ |
e5118069 | 3:de0b5dc55627 | 191 | fet1=1; |
e5118069 | 0:d46cb1df87f1 | 192 | A=1; |
e5118069 | 0:d46cb1df87f1 | 193 | } |
sink | 6:7afdc6a81566 | 194 | break; |
sink | 6:7afdc6a81566 | 195 | |
sink | 6:7afdc6a81566 | 196 | case 0x30://ハンド上昇 |
sink | 6:7afdc6a81566 | 197 | |
sink | 6:7afdc6a81566 | 198 | break; |
sink | 6:7afdc6a81566 | 199 | |
sink | 6:7afdc6a81566 | 200 | case 0x40://geregeハンド |
sink | 6:7afdc6a81566 | 201 | G_cmd=120; |
sink | 6:7afdc6a81566 | 202 | if(G_LIM1){ |
sink | 6:7afdc6a81566 | 203 | G_cmd=0; |
sink | 6:7afdc6a81566 | 204 | } |
sink | 6:7afdc6a81566 | 205 | break; |
e5118069 | 0:d46cb1df87f1 | 206 | |
sink | 6:7afdc6a81566 | 207 | case 0x50://geregeハンド |
sink | 6:7afdc6a81566 | 208 | G_cmd=-120; |
sink | 6:7afdc6a81566 | 209 | if(G_LIM2){ |
sink | 6:7afdc6a81566 | 210 | G_cmd=0; |
sink | 6:7afdc6a81566 | 211 | slave_mode = 0x55; |
sink | 6:7afdc6a81566 | 212 | } |
sink | 6:7afdc6a81566 | 213 | break; |
sink | 6:7afdc6a81566 | 214 | |
sink | 6:7afdc6a81566 | 215 | case 0x60://shagai発射 |
sink | 6:7afdc6a81566 | 216 | ref_qpps1 = REF_QPPS1; |
sink | 6:7afdc6a81566 | 217 | ref_qpps2 = REF_QPPS2; |
sink | 6:7afdc6a81566 | 218 | if (qpps1 == REF_QPPS1 && qpps2 == REF_QPPS2) { |
sink | 6:7afdc6a81566 | 219 | spd_count++; |
e5118069 | 0:d46cb1df87f1 | 220 | } |
e5118069 | 0:d46cb1df87f1 | 221 | break; |
sink | 6:7afdc6a81566 | 222 | |
sink | 6:7afdc6a81566 | 223 | case 0x90://全停止 |
sink | 6:7afdc6a81566 | 224 | ref_qpps1 = 0.0; |
sink | 6:7afdc6a81566 | 225 | ref_qpps2 = 0.0; |
sink | 6:7afdc6a81566 | 226 | //cmd = 0; |
sink | 6:7afdc6a81566 | 227 | G_cmd = 0; |
e5118069 | 1:94e15665b69f | 228 | break; |
sink | 6:7afdc6a81566 | 229 | |
sink | 6:7afdc6a81566 | 230 | default://何もしない |
sink | 6:7afdc6a81566 | 231 | break; |
sink | 6:7afdc6a81566 | 232 | } |
e5118069 | 5:869dc702b923 | 233 | |
sink | 6:7afdc6a81566 | 234 | //Slave_tx(slave_mode); |
sink | 6:7afdc6a81566 | 235 | //二次遅れ系 |
sink | 6:7afdc6a81566 | 236 | if(qpps1>=QPPS_HIGH_RANGE1 && ref_qpps1 == REF_QPPS1) qpps1=ref_qpps1; |
sink | 6:7afdc6a81566 | 237 | else if(qpps1<=QPPS_HIGH_STOP && ref_qpps1 == 0) qpps1=0; |
sink | 6:7afdc6a81566 | 238 | else qpps1 = velfilter.SecondOrderLag((double)ref_qpps1); |
sink | 6:7afdc6a81566 | 239 | if(qpps2>=QPPS_HIGH_RANGE2 && ref_qpps2 == REF_QPPS2) qpps2=ref_qpps2; |
sink | 6:7afdc6a81566 | 240 | else if(qpps2<=QPPS_HIGH_STOP && ref_qpps2 == 0) qpps2=0; |
sink | 6:7afdc6a81566 | 241 | else qpps2 = velfilter.SecondOrderLag((double)ref_qpps2); |
sink | 6:7afdc6a81566 | 242 | //ローラー強制停止 |
sink | 6:7afdc6a81566 | 243 | /*if (qpps <= 5.0 && ref_qpps == 0) { |
sink | 6:7afdc6a81566 | 244 | cmd3 = 0; |
sink | 6:7afdc6a81566 | 245 | }*/ |
sink | 6:7afdc6a81566 | 246 | //自動押し出し |
sink | 6:7afdc6a81566 | 247 | if (spd_count >= 40){ |
sink | 6:7afdc6a81566 | 248 | fet2 = 0; |
sink | 6:7afdc6a81566 | 249 | if (slave_mode != 0x60) spd_count = 0; |
sink | 6:7afdc6a81566 | 250 | } |
sink | 6:7afdc6a81566 | 251 | /* |
sink | 6:7afdc6a81566 | 252 | if(angle>=124 && goal_D >= 120){ |
sink | 6:7afdc6a81566 | 253 | cmd=0; |
sink | 6:7afdc6a81566 | 254 | goal_D = angle; |
sink | 6:7afdc6a81566 | 255 | } |
e5118069 | 5:869dc702b923 | 256 | |
sink | 6:7afdc6a81566 | 257 | if(angle <= 2 && goal_D <= 10) { |
sink | 6:7afdc6a81566 | 258 | cmd = 0; |
sink | 6:7afdc6a81566 | 259 | goal_D = angle; |
e5118069 | 4:017c55052d44 | 260 | } |
e5118069 | 1:94e15665b69f | 261 | |
e5118069 | 3:de0b5dc55627 | 262 | if(cmd>20) cmd=20; |
sink | 6:7afdc6a81566 | 263 | if(cmd<-15)cmd=-15; |
e5118069 | 1:94e15665b69f | 264 | |
sink | 6:7afdc6a81566 | 265 | if(cmd>=0) Saber_Serial (SABER_ADDR, 1, cmd); |
sink | 6:7afdc6a81566 | 266 | else Saber_Serial (SABER_ADDR, 0, cmd); |
sink | 6:7afdc6a81566 | 267 | */ |
sink | 6:7afdc6a81566 | 268 | qpps1 = limit_MD( qpps1, MAX_QPPS1); |
sink | 6:7afdc6a81566 | 269 | qpps2 = limit_MD( qpps2, MAX_QPPS2); |
e5118069 | 0:d46cb1df87f1 | 270 | |
sink | 6:7afdc6a81566 | 271 | robo_serial(ROBO_ADRS, qpps1, qpps2); |
e5118069 | 0:d46cb1df87f1 | 272 | |
sink | 6:7afdc6a81566 | 273 | if (G_cmd > 0) Saber_Serial (SABER_ADDR, 4, G_cmd); |
sink | 6:7afdc6a81566 | 274 | else Saber_Serial (SABER_ADDR, 5, G_cmd); |
sink | 6:7afdc6a81566 | 275 | /* |
sink | 6:7afdc6a81566 | 276 | if (cmd3 > 0) Saber_Serial (SB_ADRS, 0, cmd3); |
sink | 6:7afdc6a81566 | 277 | else Saber_Serial (SB_ADRS, 1, cmd3); |
sink | 6:7afdc6a81566 | 278 | |
sink | 6:7afdc6a81566 | 279 | if (cmd2 > 0) Saber_Serial (SB_ADRS, 4, cmd2); |
sink | 6:7afdc6a81566 | 280 | else Saber_Serial (SB_ADRS, 5, cmd2);*/ |
e5118069 | 0:d46cb1df87f1 | 281 | |
sink | 6:7afdc6a81566 | 282 | /*pre_spd2 = rot_sp2; |
sink | 6:7afdc6a81566 | 283 | pre_err2 = spd_err2; |
sink | 6:7afdc6a81566 | 284 | pre_spd3 = rot_sp3; |
sink | 6:7afdc6a81566 | 285 | pre_err3 = spd_err3; |
sink | 6:7afdc6a81566 | 286 | pre_e_D = e_D; |
sink | 6:7afdc6a81566 | 287 | pre_angle = angle; |
sink | 6:7afdc6a81566 | 288 | pre_e_V = e_V; |
sink | 6:7afdc6a81566 | 289 | B_SA1 = SA1;*/ |
e5118069 | 0:d46cb1df87f1 | 290 | } |
e5118069 | 0:d46cb1df87f1 | 291 | |
e5118069 | 0:d46cb1df87f1 | 292 | |
e5118069 | 0:d46cb1df87f1 | 293 | int main() { |
e5118069 | 1:94e15665b69f | 294 | Saber.baud(19200); |
e5118069 | 0:d46cb1df87f1 | 295 | pc.baud(9600); |
e5118069 | 3:de0b5dc55627 | 296 | fet1=0; |
e5118069 | 2:965cba546262 | 297 | fet2=1; |
sink | 6:7afdc6a81566 | 298 | fet3=0; |
e5118069 | 2:965cba546262 | 299 | |
e5118069 | 5:869dc702b923 | 300 | G_limit1.mode( PullUp ); // 内蔵プルアップを使う |
e5118069 | 5:869dc702b923 | 301 | G_limit2.mode( PullUp ); |
e5118069 | 5:869dc702b923 | 302 | |
e5118069 | 1:94e15665b69f | 303 | velfilter.setSecondOrderPara(1.0, 0.9, 0.0); |
e5118069 | 1:94e15665b69f | 304 | |
sink | 6:7afdc6a81566 | 305 | Master.attach(&Slave_rx, RawSerial::RxIrq); |
e5118069 | 0:d46cb1df87f1 | 306 | timer.attach(timer_warikomi,INT_TIME); |
e5118069 | 0:d46cb1df87f1 | 307 | |
e5118069 | 0:d46cb1df87f1 | 308 | while(1) { |
sink | 6:7afdc6a81566 | 309 | pc.printf("%lf\n", filtered_ref_qpps); |
e5118069 | 0:d46cb1df87f1 | 310 | } |
e5118069 | 1:94e15665b69f | 311 | } |