111
Dependencies: yezhong_main_controller_copy mbed1-dev
main.cpp
- Committer:
- yezhong
- Date:
- 2022-02-22
- Revision:
- 7:d1b09098579b
- Parent:
- 6:902ba9999d6c
- Child:
- 8:1ab9699af5ae
File content as of revision 7:d1b09098579b:
#include "mbed.h" #include <cstring> #include "math_ops.h" #include "leg_message.h" #include "CAN.h" #include "used_leg_message.h" #include "data_pc.h" #include "data_board.h" #include "mode.h" #include "data_command.h" #include "Moving_Average.h" #include "CAN3.h" #include "mcp2515.h" #include <sstream> #include <algorithm> //////////////////////////////////////////////////////////////////////////////// // 框架搭建完毕 // //////////////////////////////////////////////////////////////////////////////// int main() { Timer t; //float a=PI/8; //float j=0.558,P=0; ////////////////////////初始化////////////////////////////////////// pc.baud(115200); //串口打印信息 U2 pc.attach(&serial_pc_isr); //foot.baud(115200); //接收鞋垫信息 U1 // foot.attach(&serial_board_isr); // command.baud(115200); //485通信 U3 // command.attach(&serial_command_isr); zitai_foot.baud(115200); //U4 zitai_foot.attach(&serial_zitai_foot_isr); pf_can.frequency(800000); pf_can.filter(CAN_ID<<21, 0xFFE00004, CANStandard, 0); pf_rxMsg.len = 6; pf_txMsg.len = 8; pf_txMsg.id = 0x01; df_can.frequency(800000); df_can.filter(CAN_ID<<21, 0xFFE00004, CANStandard, 0); df_rxMsg.len = 6; df_txMsg.len = 8; df_txMsg.id = 0x02; df1_rxMsg.len = 6; df1_txMsg.len =8; df1_txMsg.id =0x03; df1_can.frequency(800000); NVIC_SetPriority(USART1_IRQn, 1); // command中断优先级高于board //NVIC_SetPriority(USART3_IRQn, 3); /////////////////////////////////////position/////////////////////////////////////////// wait(8); Zero(&pf_txMsg); // EnterSPEEDMode(&pf_txMsg); //Zero(&df_txMsg); // EnterSPEEDMode(&df_txMsg); Zero(&df1_txMsg); EnterSPEEDMode(&df1_txMsg); EnterPositionMode(&pf_txMsg); //EnterPositionMode(&df_txMsg); EnterPositionMode(&df1_txMsg); //EnterMotorMode(&pf_txMsg); //EnterMotorMode(&df_txMsg); //EnterMotorMode(&df1_txMsg); while(1) { pf_can.read(pf_rxMsg); unpack_reply(pf_rxMsg, &a_state); wait_us(10); df_can.read(df_rxMsg); unpack_reply(df_rxMsg, &a_state); wait_us(10); df1_can.read(&df1_rxMsg); unpack_reply(df1_rxMsg, &a_state); float pfp = a_state.pf.p; // 从CAN获得的当前位置 float pfv = a_state.pf.v; float pft = a_state.pf.t; float dfp = a_state.df.p; float dfv = a_state.df.v; float dft = a_state.df.t; float df1p = a_state.df1.p; float df1v = a_state.df1.v; float df1t = a_state.df1.t; ///////////////////////pf拉力////////////////////////// La_pf_real = LaLi_pf.read()*3.3f*1000; //读取电压值;单位为mV; pf_filter = Moving_Average(10, Ffilter_pf, La_pf_real); F_pf=0.1125f*pf_filter+2.141f; //F_pf=0.1139*pf_filter; La_df_real = LaLi_df.read(); La_df1_real = LaLi_df1.read(); //pc.printf("%.3fa%.3f\r\n",F_pf,pfp); //拉力 //pc.printf("%.3f\r\n",dfp); //wait(0.1); // pc.printf("%.3f--%.3f--%.3f==================%.3f--%.3f--%.3f\n",pfkp,pfkv,pfkt,dfp,dfv,dft); // pc.printf("%.4f,%.3f,%.3f,%.4f,%.3f,%.4f\n",pfkp,pfkv,pfkt,a_control.pf.p_des,j,P); //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); //pc.printf("%.3fa%.3f\n\r",df1p,a_control.df1.p_des); /////////////////////////////////////////////////trajectory///////////////////////////////////////////////////// /* j=j+0.001; 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); if(j>=0.558&&j<=0.85) { a_control.pf.p_des=P; a_control.pf.v_des=0; a_control.pf.kp=80; a_control.pf.kd=0; a_control.pf.t_ff=0; } PackAll(); WriteAll(); */ t.start(); t.read(); /* if(t.read()<2) { a_control.pf.p_des=-PI/32; a_control.pf.v_des=0; a_control.pf.kp=10; a_control.pf.kd=5; a_control.pf.t_ff=0; } if(t.read()>2&&t.read()<4) { a_control.pf.p_des=0; a_control.pf.v_des=0; a_control.pf.kp=10; a_control.pf.kd=5; a_control.pf.t_ff=0; } */ a_control.pf.p_des=PI/32; a_control.pf.v_des=0; a_control.pf.kp=10; a_control.pf.kd=5; a_control.pf.t_ff=0; a_control.df.p_des=PI/4; a_control.df.v_des=0; a_control.df.kp=10; a_control.df.kd=5; a_control.df.t_ff=0; if(t.read()<2) { a_control.df1.p_des=PI/4; a_control.df1.v_des=0; a_control.df1.kp=30; a_control.df1.kd=5; a_control.df1.t_ff=0; } if(t.read()>2&&t.read()<4) { a_control.df1.p_des=PI/8; a_control.df1.v_des=0; a_control.df1.kp=35; a_control.df1.kd=5; a_control.df1.t_ff=0; } /* if(t.read()>4&&t.read()<6) { t.reset(); } */ PackAll(); WriteAll(); /////////////////////////////////////position/////////////////////////////////////////// /* a_control.pf.p_des=PI/8; a_control.pf.v_des=0; a_control.pf.kp=10; a_control.pf.kd=0; a_control.pf.t_ff=0; PackAll(); WriteAll(); */ /* t.start(); t.read(); if(t.read()<2) { a_control.pf.p_des=a; a_control.pf.v_des=0; a_control.pf.kp=10; a_control.pf.kd=0; a_control.pf.t_ff=0; } if(t.read()>3) { t.reset(); Zero(&PF_can); a=-a; } PackAll(); WriteAll(); */ ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////velocity/////////////////////////////////////////////// /* t.start(); t.read(); a_control.pf.p_des=0; a_control.pf.v_des=-500*2*3.14/60/50; a_control.pf.kp=10; a_control.pf.kd=5; a_control.pf.t_ff=0; a_control.df.p_des=0; a_control.df.v_des=-500*2*3.14/60/50; a_control.df.kp=10; a_control.df.kd=5; a_control.df.t_ff=0; a_control.df1.p_des=0; a_control.df1.v_des=500*2*3.14/60/50; //a_control.df1.v_des=(500*2*3.14/60/50)*sin(0.5f*t); a_control.df1.kp=10; a_control.df1.kd=5; a_control.df1.t_ff=0; PackAll(); WriteAll(); */ //////////////////////////////////////////////////////////////////////////////////////////////// } }