第一次下载不需要注释程序了

master
zrg 2021-12-10 15:02:37 +08:00
parent 51fcd53374
commit 8f0318f85b
2 changed files with 38 additions and 39 deletions

View File

@ -40,28 +40,10 @@
1. 前往灯哥开源[FOCgit](https://gitee.com/ream_d/Deng-s-foc-controller)下载Arduino开发环境~~也可自行下载Arduino并安装SimpleFOC~~并打开本项目内的Arduino内的main烧录程序到ESP32。
2. 打开本项目内的`python_gui`内的`可执行文件_main`内的**main.exe**并连接上WIFIESP32。点击设置开始调参。
![Image text](image/tiaocan.gif)
3. K值可以用滑块调整拖动滑块就会发送参数命令但是调整到合适值之后需要自行在Arduino的main中修改再烧录一次
3. 第一次使用需要把在初始化中读取eeprom的数据给注释掉。因为在程序初始的时候eeprom是没有数据的就导致读取时候是NAN。然后wifi发送NAN会有问题就无法通过上位机发数据给esp32了。
![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**份,命令是**字符串**,滑动滑块发送**字符串** + **数值**
4. 滑条:最左边输入框为滑块下限,右边是滑块上限,滑条等分成**200**份,命令是**字符串**,滑动滑块发送**字符串** + **数值**
比如让平衡角度为90度则输入TA90并且会存入eeprom的位置0中 注wifi发送**命令不能过快**因为每次都会保存进eepromK参数没有保存到EEPROM所以可以使用滑条调整。

View File

@ -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); }
#else
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_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); }
@ -134,24 +134,47 @@ void setup() {
delay(1000);
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("START",do_START);
comm.add("MOTOR",do_MOTOR);
comm.add("SV",do_SV);
comm.add("SA",do_SA);
target_angle = EEPROM.readFloat(0);
swing_up_voltage = EEPROM.readFloat(4);
swing_up_angle = EEPROM.readFloat(8);
#if FLAG_V
#if FLAG_V //电压模式
comm.add("K11",do_K11);
comm.add("K12",do_K12);
comm.add("K13",do_K13);
comm.add("K21",do_K21);
comm.add("K22",do_K22);
comm.add("K23",do_K23);
#else
#else //速度模式
comm.add("VP1",do_vp1);
comm.add("VI1",do_vi1);
comm.add("VP2",do_vp2);
@ -163,12 +186,6 @@ swing_up_angle = EEPROM.readFloat(8);
comm.add("K41",do_K41);
comm.add("K42",do_K42);
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
// kalman mpu6050 init
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
#if 0
#if 1
//Serial.print(gyroZangle);Serial.print("\t");
Serial.print(kalAngleZ);Serial.print("\t");