1

Dependencies:   mcp2515 mbed-dev-f303

Committer:
yezhong
Date:
Tue Mar 22 02:03:58 2022 +0000
Revision:
7:1ab9699af5ae
Parent:
6:d1b09098579b
1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
panzhan 0:d80c66cb1b3a 1 #include "mbed.h"
panzhan 0:d80c66cb1b3a 2 #include <cstring>
panzhan 0:d80c66cb1b3a 3 #include "math_ops.h"
panzhan 0:d80c66cb1b3a 4 #include "leg_message.h"
panzhan 0:d80c66cb1b3a 5 #include "CAN.h"
panzhan 0:d80c66cb1b3a 6 #include "used_leg_message.h"
panzhan 0:d80c66cb1b3a 7 #include "data_pc.h"
panzhan 0:d80c66cb1b3a 8 #include "data_board.h"
panzhan 0:d80c66cb1b3a 9 #include "mode.h"
panzhan 0:d80c66cb1b3a 10 #include "data_command.h"
yezhong 4:2503c88a564f 11 #include "Moving_Average.h"
yezhong 4:2503c88a564f 12
yezhong 6:d1b09098579b 13
yezhong 4:2503c88a564f 14 #include "CAN3.h"
yezhong 4:2503c88a564f 15 #include "mcp2515.h"
yezhong 4:2503c88a564f 16 #include <sstream>
yezhong 4:2503c88a564f 17 #include <algorithm>
panzhan 0:d80c66cb1b3a 18
panzhan 0:d80c66cb1b3a 19
panzhan 0:d80c66cb1b3a 20 ////////////////////////////////////////////////////////////////////////////////
panzhan 0:d80c66cb1b3a 21 // 框架搭建完毕 //
panzhan 0:d80c66cb1b3a 22 ////////////////////////////////////////////////////////////////////////////////
yezhong 4:2503c88a564f 23
panzhan 0:d80c66cb1b3a 24
panzhan 0:d80c66cb1b3a 25
panzhan 0:d80c66cb1b3a 26 int main()
panzhan 0:d80c66cb1b3a 27 {
yezhong 4:2503c88a564f 28 Timer t;
yezhong 3:940a9e40d327 29 //float a=PI/8;
yezhong 3:940a9e40d327 30 //float j=0.558,P=0;
yezhong 4:2503c88a564f 31
yezhong 4:2503c88a564f 32
panzhan 0:d80c66cb1b3a 33 ////////////////////////初始化//////////////////////////////////////
yezhong 6:d1b09098579b 34 pc.baud(115200); //串口打印信息 U2
panzhan 0:d80c66cb1b3a 35 pc.attach(&serial_pc_isr);
panzhan 0:d80c66cb1b3a 36
yezhong 6:d1b09098579b 37 //foot.baud(115200); //接收鞋垫信息 U1
yezhong 6:d1b09098579b 38 // foot.attach(&serial_board_isr);
panzhan 0:d80c66cb1b3a 39
yezhong 6:d1b09098579b 40 // command.baud(115200); //485通信 U3
yezhong 2:cd74a8cb03b0 41 // command.attach(&serial_command_isr);
panzhan 0:d80c66cb1b3a 42
yezhong 6:d1b09098579b 43 zitai_foot.baud(115200); //U4
yezhong 6:d1b09098579b 44 zitai_foot.attach(&serial_zitai_foot_isr);
yezhong 5:902ba9999d6c 45
yezhong 5:902ba9999d6c 46
yezhong 4:2503c88a564f 47 pf_can.frequency(800000);
yezhong 2:cd74a8cb03b0 48 pf_can.filter(CAN_ID<<21, 0xFFE00004, CANStandard, 0);
yezhong 2:cd74a8cb03b0 49 pf_rxMsg.len = 6;
yezhong 4:2503c88a564f 50 pf_txMsg.len = 8;
yezhong 4:2503c88a564f 51 pf_txMsg.id = 0x01;
yezhong 2:cd74a8cb03b0 52
yezhong 4:2503c88a564f 53 df_can.frequency(800000);
yezhong 2:cd74a8cb03b0 54 df_can.filter(CAN_ID<<21, 0xFFE00004, CANStandard, 0);
yezhong 2:cd74a8cb03b0 55 df_rxMsg.len = 6;
yezhong 4:2503c88a564f 56 df_txMsg.len = 8;
yezhong 4:2503c88a564f 57 df_txMsg.id = 0x02;
yezhong 4:2503c88a564f 58
yezhong 4:2503c88a564f 59 df1_rxMsg.len = 6;
yezhong 4:2503c88a564f 60 df1_txMsg.len =8;
yezhong 4:2503c88a564f 61 df1_txMsg.id =0x03;
yezhong 4:2503c88a564f 62 df1_can.frequency(800000);
yezhong 2:cd74a8cb03b0 63
yezhong 6:d1b09098579b 64 NVIC_SetPriority(USART1_IRQn, 1); // command中断优先级高于board
yezhong 6:d1b09098579b 65 //NVIC_SetPriority(USART3_IRQn, 3);
yezhong 6:d1b09098579b 66
yezhong 6:d1b09098579b 67
yezhong 6:d1b09098579b 68
yezhong 2:cd74a8cb03b0 69 /////////////////////////////////////position///////////////////////////////////////////
yezhong 7:1ab9699af5ae 70 wait(4);
yezhong 4:2503c88a564f 71 Zero(&pf_txMsg);
yezhong 7:1ab9699af5ae 72 //EnterSPEEDMode(&pf_txMsg);
yezhong 7:1ab9699af5ae 73 EnterPositionMode(&pf_txMsg);
yezhong 4:2503c88a564f 74
yezhong 4:2503c88a564f 75 //Zero(&df_txMsg);
yezhong 4:2503c88a564f 76 // EnterSPEEDMode(&df_txMsg);
yezhong 7:1ab9699af5ae 77 //EnterPositionMode(&df_txMsg);
yezhong 7:1ab9699af5ae 78
yezhong 4:2503c88a564f 79
yezhong 4:2503c88a564f 80 Zero(&df1_txMsg);
yezhong 7:1ab9699af5ae 81 // EnterSPEEDMode(&df1_txMsg);
yezhong 7:1ab9699af5ae 82 EnterPositionMode(&df1_txMsg);
yezhong 4:2503c88a564f 83
yezhong 4:2503c88a564f 84
yezhong 4:2503c88a564f 85 //EnterMotorMode(&pf_txMsg);
yezhong 4:2503c88a564f 86 //EnterMotorMode(&df_txMsg);
yezhong 4:2503c88a564f 87 //EnterMotorMode(&df1_txMsg);
yezhong 4:2503c88a564f 88
panzhan 1:a71791b81b8a 89
panzhan 0:d80c66cb1b3a 90
panzhan 0:d80c66cb1b3a 91
panzhan 0:d80c66cb1b3a 92 while(1) {
yezhong 7:1ab9699af5ae 93
yezhong 2:cd74a8cb03b0 94 pf_can.read(pf_rxMsg);
yezhong 2:cd74a8cb03b0 95 unpack_reply(pf_rxMsg, &a_state);
panzhan 0:d80c66cb1b3a 96 wait_us(10);
yezhong 2:cd74a8cb03b0 97 df_can.read(df_rxMsg);
yezhong 2:cd74a8cb03b0 98 unpack_reply(df_rxMsg, &a_state);
yezhong 4:2503c88a564f 99 wait_us(10);
yezhong 4:2503c88a564f 100 df1_can.read(&df1_rxMsg);
yezhong 4:2503c88a564f 101 unpack_reply(df1_rxMsg, &a_state);
panzhan 0:d80c66cb1b3a 102
yezhong 4:2503c88a564f 103 float pfp = a_state.pf.p; // 从CAN获得的当前位置
yezhong 4:2503c88a564f 104 float pfv = a_state.pf.v;
yezhong 4:2503c88a564f 105 float pft = a_state.pf.t;
panzhan 0:d80c66cb1b3a 106
yezhong 4:2503c88a564f 107 float dfp = a_state.df.p;
yezhong 4:2503c88a564f 108 float dfv = a_state.df.v;
yezhong 4:2503c88a564f 109 float dft = a_state.df.t;
yezhong 4:2503c88a564f 110
yezhong 4:2503c88a564f 111 float df1p = a_state.df1.p;
yezhong 4:2503c88a564f 112 float df1v = a_state.df1.v;
yezhong 4:2503c88a564f 113 float df1t = a_state.df1.t;
yezhong 4:2503c88a564f 114
yezhong 4:2503c88a564f 115
yezhong 4:2503c88a564f 116
yezhong 4:2503c88a564f 117 ///////////////////////pf拉力//////////////////////////
yezhong 4:2503c88a564f 118 La_pf_real = LaLi_pf.read()*3.3f*1000; //读取电压值;单位为mV;
yezhong 4:2503c88a564f 119 pf_filter = Moving_Average(10, Ffilter_pf, La_pf_real);
yezhong 4:2503c88a564f 120 F_pf=0.1125f*pf_filter+2.141f;
yezhong 4:2503c88a564f 121 //F_pf=0.1139*pf_filter;
yezhong 4:2503c88a564f 122 La_df_real = LaLi_df.read();
yezhong 4:2503c88a564f 123 La_df1_real = LaLi_df1.read();
yezhong 3:940a9e40d327 124
yezhong 6:d1b09098579b 125 //pc.printf("%.3fa%.3f\r\n",F_pf,pfp); //拉力
yezhong 4:2503c88a564f 126
yezhong 4:2503c88a564f 127
yezhong 4:2503c88a564f 128 //pc.printf("%.3f\r\n",dfp);
yezhong 4:2503c88a564f 129 //wait(0.1);
yezhong 3:940a9e40d327 130 // pc.printf("%.3f--%.3f--%.3f==================%.3f--%.3f--%.3f\n",pfkp,pfkv,pfkt,dfp,dfv,dft);
yezhong 3:940a9e40d327 131 // pc.printf("%.4f,%.3f,%.3f,%.4f,%.3f,%.4f\n",pfkp,pfkv,pfkt,a_control.pf.p_des,j,P);
yezhong 4:2503c88a564f 132 //pc.printf("%.3fa%.3fa%.3fa%.3fa%.3fa%.3f\n\r",pfv,dfv,df1v,a_control.pf.v_des,a_control.df.v_des,a_control.df1.v_des);
yezhong 4:2503c88a564f 133 //pc.printf("%.3fa%.3f\n\r",df1p,a_control.df1.p_des);
yezhong 3:940a9e40d327 134 /////////////////////////////////////////////////trajectory/////////////////////////////////////////////////////
yezhong 3:940a9e40d327 135 /*
yezhong 3:940a9e40d327 136 j=j+0.001;
yezhong 3:940a9e40d327 137 P=0.33+(-0.2148)*cos((j+0.1)*10.44)+(-0.1549)*sin((j+0.1)*10.44)+(-0.07744)*cos(2*(j+0.1)*10.44)+(-0.04255)*sin(2*(j+0.1)*10.44);
yezhong 3:940a9e40d327 138 if(j>=0.558&&j<=0.85)
yezhong 3:940a9e40d327 139 {
yezhong 3:940a9e40d327 140 a_control.pf.p_des=P;
yezhong 3:940a9e40d327 141 a_control.pf.v_des=0;
yezhong 3:940a9e40d327 142 a_control.pf.kp=80;
yezhong 3:940a9e40d327 143 a_control.pf.kd=0;
yezhong 3:940a9e40d327 144 a_control.pf.t_ff=0;
yezhong 3:940a9e40d327 145 }
yezhong 3:940a9e40d327 146
yezhong 3:940a9e40d327 147
yezhong 3:940a9e40d327 148 PackAll();
yezhong 3:940a9e40d327 149 WriteAll();
yezhong 3:940a9e40d327 150 */
yezhong 4:2503c88a564f 151 t.start();
yezhong 4:2503c88a564f 152 t.read();
yezhong 4:2503c88a564f 153 /*
yezhong 4:2503c88a564f 154
yezhong 4:2503c88a564f 155 if(t.read()<2)
yezhong 4:2503c88a564f 156 {
yezhong 4:2503c88a564f 157 a_control.pf.p_des=-PI/32;
yezhong 4:2503c88a564f 158 a_control.pf.v_des=0;
yezhong 4:2503c88a564f 159 a_control.pf.kp=10;
yezhong 4:2503c88a564f 160 a_control.pf.kd=5;
yezhong 4:2503c88a564f 161 a_control.pf.t_ff=0;
yezhong 4:2503c88a564f 162 }
yezhong 4:2503c88a564f 163 if(t.read()>2&&t.read()<4)
yezhong 4:2503c88a564f 164 {
yezhong 4:2503c88a564f 165 a_control.pf.p_des=0;
yezhong 4:2503c88a564f 166 a_control.pf.v_des=0;
yezhong 4:2503c88a564f 167 a_control.pf.kp=10;
yezhong 4:2503c88a564f 168 a_control.pf.kd=5;
yezhong 4:2503c88a564f 169 a_control.pf.t_ff=0;
yezhong 4:2503c88a564f 170 }
yezhong 4:2503c88a564f 171 */
yezhong 7:1ab9699af5ae 172 a_control.pf.p_des=0;
yezhong 7:1ab9699af5ae 173 a_control.pf.v_des=-500*2*3.14/60/50;
yezhong 4:2503c88a564f 174 a_control.pf.kp=10;
yezhong 4:2503c88a564f 175 a_control.pf.kd=5;
yezhong 4:2503c88a564f 176 a_control.pf.t_ff=0;
yezhong 4:2503c88a564f 177
yezhong 4:2503c88a564f 178
yezhong 4:2503c88a564f 179
yezhong 4:2503c88a564f 180 a_control.df.p_des=PI/4;
yezhong 4:2503c88a564f 181 a_control.df.v_des=0;
yezhong 4:2503c88a564f 182 a_control.df.kp=10;
yezhong 4:2503c88a564f 183 a_control.df.kd=5;
yezhong 4:2503c88a564f 184 a_control.df.t_ff=0;
yezhong 4:2503c88a564f 185
yezhong 7:1ab9699af5ae 186 if(t.read()<13)
yezhong 4:2503c88a564f 187 {
yezhong 7:1ab9699af5ae 188 a_control.df1.p_des=6*PI;
yezhong 4:2503c88a564f 189 a_control.df1.v_des=0;
yezhong 4:2503c88a564f 190 a_control.df1.kp=30;
yezhong 4:2503c88a564f 191 a_control.df1.kd=5;
yezhong 4:2503c88a564f 192 a_control.df1.t_ff=0;
yezhong 4:2503c88a564f 193 }
yezhong 4:2503c88a564f 194
yezhong 7:1ab9699af5ae 195 if(t.read()>13&&t.read()<26)
yezhong 4:2503c88a564f 196 {
yezhong 7:1ab9699af5ae 197 a_control.df1.p_des=0;
yezhong 4:2503c88a564f 198 a_control.df1.v_des=0;
yezhong 7:1ab9699af5ae 199 a_control.df1.kp=10;
yezhong 4:2503c88a564f 200 a_control.df1.kd=5;
yezhong 4:2503c88a564f 201 a_control.df1.t_ff=0;
yezhong 4:2503c88a564f 202 }
yezhong 4:2503c88a564f 203 /*
yezhong 4:2503c88a564f 204 if(t.read()>4&&t.read()<6)
yezhong 4:2503c88a564f 205 {
yezhong 4:2503c88a564f 206 t.reset();
yezhong 4:2503c88a564f 207 }
yezhong 4:2503c88a564f 208 */
yezhong 4:2503c88a564f 209
yezhong 4:2503c88a564f 210 PackAll();
yezhong 4:2503c88a564f 211 WriteAll();
yezhong 4:2503c88a564f 212
yezhong 4:2503c88a564f 213
yezhong 4:2503c88a564f 214
yezhong 4:2503c88a564f 215
yezhong 4:2503c88a564f 216
yezhong 4:2503c88a564f 217
yezhong 4:2503c88a564f 218
panzhan 0:d80c66cb1b3a 219
yezhong 3:940a9e40d327 220
yezhong 3:940a9e40d327 221 /////////////////////////////////////position///////////////////////////////////////////
yezhong 3:940a9e40d327 222 /*
yezhong 3:940a9e40d327 223 a_control.pf.p_des=PI/8;
yezhong 3:940a9e40d327 224 a_control.pf.v_des=0;
yezhong 3:940a9e40d327 225 a_control.pf.kp=10;
yezhong 3:940a9e40d327 226 a_control.pf.kd=0;
yezhong 3:940a9e40d327 227 a_control.pf.t_ff=0;
yezhong 3:940a9e40d327 228 PackAll();
yezhong 3:940a9e40d327 229 WriteAll();
yezhong 3:940a9e40d327 230 */
yezhong 3:940a9e40d327 231
yezhong 3:940a9e40d327 232 /*
yezhong 3:940a9e40d327 233 t.start();
yezhong 3:940a9e40d327 234 t.read();
yezhong 4:2503c88a564f 235
yezhong 3:940a9e40d327 236 if(t.read()<2)
yezhong 3:940a9e40d327 237 {
yezhong 3:940a9e40d327 238 a_control.pf.p_des=a;
yezhong 3:940a9e40d327 239 a_control.pf.v_des=0;
yezhong 3:940a9e40d327 240 a_control.pf.kp=10;
yezhong 3:940a9e40d327 241 a_control.pf.kd=0;
yezhong 3:940a9e40d327 242 a_control.pf.t_ff=0;
yezhong 3:940a9e40d327 243 }
yezhong 3:940a9e40d327 244 if(t.read()>3)
yezhong 3:940a9e40d327 245 {
yezhong 3:940a9e40d327 246 t.reset();
yezhong 3:940a9e40d327 247 Zero(&PF_can);
yezhong 3:940a9e40d327 248 a=-a;
yezhong 3:940a9e40d327 249 }
yezhong 3:940a9e40d327 250
yezhong 3:940a9e40d327 251 PackAll();
yezhong 3:940a9e40d327 252 WriteAll();
yezhong 3:940a9e40d327 253
yezhong 3:940a9e40d327 254 */
yezhong 3:940a9e40d327 255
yezhong 3:940a9e40d327 256
yezhong 3:940a9e40d327 257
yezhong 3:940a9e40d327 258
yezhong 3:940a9e40d327 259 /////////////////////////////////////////////////////////////////////////////////////////////
panzhan 0:d80c66cb1b3a 260
panzhan 0:d80c66cb1b3a 261 ///////////////////////////////////////velocity///////////////////////////////////////////////
yezhong 4:2503c88a564f 262 /*
yezhong 4:2503c88a564f 263 t.start();
yezhong 4:2503c88a564f 264 t.read();
yezhong 4:2503c88a564f 265
panzhan 0:d80c66cb1b3a 266
yezhong 3:940a9e40d327 267 a_control.pf.p_des=0;
yezhong 4:2503c88a564f 268 a_control.pf.v_des=-500*2*3.14/60/50;
yezhong 4:2503c88a564f 269 a_control.pf.kp=10;
yezhong 3:940a9e40d327 270 a_control.pf.kd=5;
yezhong 3:940a9e40d327 271 a_control.pf.t_ff=0;
yezhong 3:940a9e40d327 272
yezhong 3:940a9e40d327 273 a_control.df.p_des=0;
yezhong 4:2503c88a564f 274 a_control.df.v_des=-500*2*3.14/60/50;
yezhong 4:2503c88a564f 275 a_control.df.kp=10;
yezhong 3:940a9e40d327 276 a_control.df.kd=5;
yezhong 3:940a9e40d327 277 a_control.df.t_ff=0;
yezhong 4:2503c88a564f 278
yezhong 4:2503c88a564f 279 a_control.df1.p_des=0;
yezhong 4:2503c88a564f 280 a_control.df1.v_des=500*2*3.14/60/50;
yezhong 4:2503c88a564f 281 //a_control.df1.v_des=(500*2*3.14/60/50)*sin(0.5f*t);
yezhong 4:2503c88a564f 282 a_control.df1.kp=10;
yezhong 4:2503c88a564f 283 a_control.df1.kd=5;
yezhong 4:2503c88a564f 284 a_control.df1.t_ff=0;
yezhong 3:940a9e40d327 285 PackAll();
yezhong 3:940a9e40d327 286 WriteAll();
yezhong 4:2503c88a564f 287 */
panzhan 0:d80c66cb1b3a 288 ////////////////////////////////////////////////////////////////////////////////////////////////
panzhan 0:d80c66cb1b3a 289 }
panzhan 0:d80c66cb1b3a 290 }