第一次下载不需要注释程序了
parent
51fcd53374
commit
8f0318f85b
24
README.md
24
README.md
|
@ -40,28 +40,10 @@
|
||||||
|
|
||||||
1. 前往灯哥开源[FOCgit](https://gitee.com/ream_d/Deng-s-foc-controller)下载Arduino开发环境(~~也可自行下载Arduino并安装SimpleFOC~~)并打开本项目内的Arduino内的main,烧录程序到ESP32。
|
1. 前往灯哥开源[FOCgit](https://gitee.com/ream_d/Deng-s-foc-controller)下载Arduino开发环境(~~也可自行下载Arduino并安装SimpleFOC~~)并打开本项目内的Arduino内的main,烧录程序到ESP32。
|
||||||
2. 打开本项目内的`python_gui`内的`可执行文件_main`内的**main.exe**并连接上WIFI:ESP32。点击设置开始调参。
|
2. 打开本项目内的`python_gui`内的`可执行文件_main`内的**main.exe**并连接上WIFI:ESP32。点击设置开始调参。
|
||||||
|
![Image text](image/tiaocan.gif)
|
||||||
|
3. K值可以用滑块调整,拖动滑块就会发送参数命令,但是调整到合适值之后需要自行在Arduino的main中修改再烧录一次
|
||||||
|
|
||||||
3. 第一次使用需要把在初始化中读取eeprom的数据给注释掉。因为在程序初始的时候eeprom是没有数据的,就导致读取时候是NAN。然后wifi发送NAN会有问题,就无法通过上位机发数据给esp32了。
|
4. 滑条:最左边输入框为滑块下限,右边是滑块上限,滑条等分成**200**份,命令是**字符串**,滑动滑块发送**字符串** + **数值**
|
||||||
|
|
||||||
![Image text](image/frist.png)
|
|
||||||
|
|
||||||
4. 输入一些初始值到eeprom中:
|
|
||||||
|
|
||||||
| 参数命令 | 说明 |
|
|
||||||
| ---------------- |---------------------- |
|
|
||||||
|TA89.3|角度|
|
|
||||||
|SV1.8|摇摆电压|
|
|
||||||
|SA20|摇摆角度|
|
|
||||||
|VI120|平衡前FOC速度环的I为20|
|
|
||||||
|VP10.5|平衡前FOC速度环的P为0.5|
|
|
||||||
|VI210|平衡后FOC速度环的I为10|
|
|
||||||
|VP20.2|平衡后FOC速度环的P为0.2|
|
|
||||||
|
|
||||||
![调参](image/tiaocan.gif)
|
|
||||||
|
|
||||||
5. K值可以用滑块调整,拖动滑块就会发送参数命令,但是调整到合适值之后需要自行在Arduino的main中修改再烧录一次
|
|
||||||
|
|
||||||
6. 滑条:最左边输入框为滑块下限,右边是滑块上限,滑条等分成**200**份,命令是**字符串**,滑动滑块发送**字符串** + **数值**
|
|
||||||
|
|
||||||
比如让平衡角度为90度,则输入:TA90,并且会存入eeprom的位置0中 注:wifi发送**命令不能过快**,因为每次都会保存进eeprom,K参数没有保存到EEPROM所以可以使用滑条调整。
|
比如让平衡角度为90度,则输入:TA90,并且会存入eeprom的位置0中 注:wifi发送**命令不能过快**,因为每次都会保存进eeprom,K参数没有保存到EEPROM所以可以使用滑条调整。
|
||||||
|
|
||||||
|
|
|
@ -103,7 +103,7 @@ void do_K22(char* cmd) { comm.scalar(&LQR_K2_2, cmd); }
|
||||||
void do_K23(char* cmd) { comm.scalar(&LQR_K2_3, cmd); }
|
void do_K23(char* cmd) { comm.scalar(&LQR_K2_3, cmd); }
|
||||||
#else
|
#else
|
||||||
void do_vp1(char* cmd) { comm.scalar(&v_p_1, cmd); EEPROM.writeFloat(12, v_p_1);}
|
void do_vp1(char* cmd) { comm.scalar(&v_p_1, cmd); EEPROM.writeFloat(12, v_p_1);}
|
||||||
void do_vi1(char* cmd) { comm.scalar(&v_i_1, cmd);EEPROM.writeFloat(16, v_p_1); }
|
void do_vi1(char* cmd) { comm.scalar(&v_i_1, cmd);EEPROM.writeFloat(16, v_i_1); }
|
||||||
void do_vp2(char* cmd) { comm.scalar(&v_p_2, cmd); EEPROM.writeFloat(20, v_p_2);}
|
void do_vp2(char* cmd) { comm.scalar(&v_p_2, cmd); EEPROM.writeFloat(20, v_p_2);}
|
||||||
void do_vi2(char* cmd) { comm.scalar(&v_i_2, cmd);EEPROM.writeFloat(24, v_i_2); }
|
void do_vi2(char* cmd) { comm.scalar(&v_i_2, cmd);EEPROM.writeFloat(24, v_i_2); }
|
||||||
void do_tv(char* cmd) { comm.scalar(&target_velocity, cmd); }
|
void do_tv(char* cmd) { comm.scalar(&target_velocity, cmd); }
|
||||||
|
@ -134,24 +134,47 @@ void setup() {
|
||||||
delay(1000);
|
delay(1000);
|
||||||
ESP.restart();
|
ESP.restart();
|
||||||
}
|
}
|
||||||
|
// eeprom 读取
|
||||||
|
float nan = EEPROM.readFloat(0);
|
||||||
|
if(isnan(nan))
|
||||||
|
{
|
||||||
|
Serial.println("frist write");
|
||||||
|
EEPROM.writeFloat(0, target_angle);
|
||||||
|
EEPROM.writeFloat(4, swing_up_voltage);
|
||||||
|
EEPROM.writeFloat(8, swing_up_angle);
|
||||||
|
EEPROM.writeFloat(12, v_p_1);
|
||||||
|
EEPROM.writeFloat(16, v_i_1);
|
||||||
|
EEPROM.writeFloat(20, v_p_2);
|
||||||
|
EEPROM.writeFloat(24, v_i_2);
|
||||||
|
EEPROM.commit();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
target_angle = EEPROM.readFloat(0);
|
||||||
|
swing_up_voltage = EEPROM.readFloat(4);
|
||||||
|
swing_up_angle = EEPROM.readFloat(8);
|
||||||
|
v_p_1 = EEPROM.readFloat(12);
|
||||||
|
v_i_1 = EEPROM.readFloat(16);
|
||||||
|
v_p_2 = EEPROM.readFloat(20);
|
||||||
|
v_i_2 = EEPROM.readFloat(24);
|
||||||
|
motor.PID_velocity.P = v_p_1;
|
||||||
|
motor.PID_velocity.I = v_i_1;
|
||||||
|
}
|
||||||
//命令设置
|
//命令设置
|
||||||
comm.add("TA",do_TA);
|
comm.add("TA",do_TA);
|
||||||
comm.add("START",do_START);
|
comm.add("START",do_START);
|
||||||
comm.add("MOTOR",do_MOTOR);
|
comm.add("MOTOR",do_MOTOR);
|
||||||
comm.add("SV",do_SV);
|
comm.add("SV",do_SV);
|
||||||
comm.add("SA",do_SA);
|
comm.add("SA",do_SA);
|
||||||
target_angle = EEPROM.readFloat(0);
|
|
||||||
swing_up_voltage = EEPROM.readFloat(4);
|
#if FLAG_V //电压模式
|
||||||
swing_up_angle = EEPROM.readFloat(8);
|
|
||||||
#if FLAG_V
|
|
||||||
comm.add("K11",do_K11);
|
comm.add("K11",do_K11);
|
||||||
comm.add("K12",do_K12);
|
comm.add("K12",do_K12);
|
||||||
comm.add("K13",do_K13);
|
comm.add("K13",do_K13);
|
||||||
comm.add("K21",do_K21);
|
comm.add("K21",do_K21);
|
||||||
comm.add("K22",do_K22);
|
comm.add("K22",do_K22);
|
||||||
comm.add("K23",do_K23);
|
comm.add("K23",do_K23);
|
||||||
#else
|
#else //速度模式
|
||||||
comm.add("VP1",do_vp1);
|
comm.add("VP1",do_vp1);
|
||||||
comm.add("VI1",do_vi1);
|
comm.add("VI1",do_vi1);
|
||||||
comm.add("VP2",do_vp2);
|
comm.add("VP2",do_vp2);
|
||||||
|
@ -163,12 +186,6 @@ swing_up_angle = EEPROM.readFloat(8);
|
||||||
comm.add("K41",do_K41);
|
comm.add("K41",do_K41);
|
||||||
comm.add("K42",do_K42);
|
comm.add("K42",do_K42);
|
||||||
comm.add("K43",do_K43);
|
comm.add("K43",do_K43);
|
||||||
v_p_1 = EEPROM.readFloat(12);
|
|
||||||
v_i_1 = EEPROM.readFloat(16);
|
|
||||||
v_p_2 = EEPROM.readFloat(20);
|
|
||||||
v_i_2 = EEPROM.readFloat(24);
|
|
||||||
motor.PID_velocity.P = v_p_1;
|
|
||||||
motor.PID_velocity.I = v_i_1;
|
|
||||||
#endif
|
#endif
|
||||||
// kalman mpu6050 init
|
// kalman mpu6050 init
|
||||||
Wire.begin(19, 18,400000);// Set I2C frequency to 400kHz
|
Wire.begin(19, 18,400000);// Set I2C frequency to 400kHz
|
||||||
|
@ -337,7 +354,7 @@ if (abs(pendulum_angle) < swing_up_angle) // if angle small enough stabilize 0.5
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
#if 0
|
#if 1
|
||||||
|
|
||||||
//Serial.print(gyroZangle);Serial.print("\t");
|
//Serial.print(gyroZangle);Serial.print("\t");
|
||||||
Serial.print(kalAngleZ);Serial.print("\t");
|
Serial.print(kalAngleZ);Serial.print("\t");
|
||||||
|
|
Loading…
Reference in New Issue