triangle/README.md

133 lines
8.3 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 自平衡莱洛三角形可充电版
#### 介绍
**在B站[“基于LQR控制器的自平衡莱洛三角形”](https://www.bilibili.com/video/BV19v411n7mN)基础上添加了充电模块**
主控芯片使用ESP32并配置了调参上位机可以很方便的通过wifi无线调参。无刷控制使用灯哥开源FOC。制作出一个方便复刻的自平衡莱洛三角形在桌面上作为一个摆件还是非常不错的
[展示视频](https://www.bilibili.com/video/BV1b3411x7za)
![Image text](image/show.png)
使用灯哥开源FOC2.0板测试
13*13cm立创紫PCB
10*10cm最终版本
#### 1 软件架构
自平衡控制为LQR算法输出期望**速度**,使动量轮**加速运动**从而控制三角形左右方向。并且代码的调参都可以通过连接ESP32的wifi调整。具体特性如下
- **基于 Arduino**:运行在 ESP32 Arduino 上
- **自带测试模式**:电压测试和速度测试,可以单独输出电压让电机转动,也可以设置指定速度让电机保持速度
![Image text](image/gui.gif)
#### 2 硬件特性
| 说明 | 参数 |
| ---------------- |---------------------- |
| 莱洛三角形尺寸 | 100*100 mm |
|动量轮尺寸|80*80 mm|
|电池*3 |厚x长x宽:7.9mmx25mmx40mm 规格内均可|
| 输入电压 | 3.7v锂电池*3|
|充电电压| 5V 从Type-C口输入|
|充电芯片CS5095|5V输入,最大1.2A充电电流|
|串口芯片CH340C|需要<font color='red'> 打开开关 </font>才能下载|
| 主控芯片 | ESP-WROOM-32 |
|电机驱动芯片L6234PD|引脚:32, 33, 25, 22; 22为enable|
| AS5600 编码器 |SDA-23 SCL-5  芯片要离磁铁有<font color='red'> 2mm以上高度 </font>|
| MPU6050六轴传感器 | SDA-19 SCL-18 |
#### 3 使用说明
1. 下载完本git所以文件后打开arduino文件夹解压arduino.7z完成之后双击运行esp32_package_1.0.6.exe安装esp32库环境。注意若之前有安装过arduino请将路径`C:\Users\用户名\AppData\Local\`的Arduino15文件夹和`此电脑\文档`内的Arduino<font color='red'> 删除 </font>~~也可自行下载Arduino并安装SimpleFOC~~)(但是可能会版本不对电机不动)
2. 打开解压后的arduino文件夹内的arduino.exe导航栏-文件-打开。选择arduino\main里面的main.ino
3. 烧录程序到ESP32选择工具-开发板-esp32 Arduino-ESP32 Dev module然后连接USB口选择对应的com口编译上传。
1.  <font color='red'> 如无法正常编译 </font>
1. 可能与原有arduino冲突请查看使用说明第一条
2. 文件夹路径含有非法字符可以把Arduino移动到硬盘根目录下如D:\Arduino
4. 打开本项目内的`python_gui`内的`可执行文件_main`内的**main.exe**并连接上WIFIESP32 密码12345678。点击设置开始调参。
5. 连接成功后点击disable然后逆时针拨动动量轮查看上位机中V参数是否为正值。注意如果<font color='red'> 逆时针转为为负值 </font>那么需要将电机线任意两线互换。
![Image text](image/tiaocan.gif)
6. 如果电机不能正常运行可以,点击上位机中最下方的<font color='red'> 测试部分 </font>,打开电压或者速度测试,滑动滑条,查看电机能否正常运行。如还不能请检测硬件电路部分。
7. 如果不能摇摆直立推荐调整的参数为TA、SA、SV
8. K值可以用滑块调整拖动滑块就会发送参数命令但是调整到合适值之后需要自行在Arduino的main中修改再烧录一次
9. 滑条:最左边输入框为滑块下限,右边是滑块上限,滑条等分成**200**份,命令是**字符串**,滑动滑块发送**字符串** + **数值**
比如让平衡角度为90度则输入TA90并且会存入eeprom的位置0中 注wifi发送**命令不能过快**因为每次都会保存进eepromK参数没有保存到EEPROM所以可以使用滑条调整。
| 参数命令 | 说明 |
| ---------------- |---------------------- |
| TA | target_angle平衡角度 例如TA89.3 设置平衡角度89.3|
| SV | swing_up_voltage摇摆电压 左右摇摆的电压,越大越快到平衡态,但是过大会翻过头|
|SA|swing_up_angle摇摆角度 离平衡角度还有几度时候,切换到自平衡控制|
|VP1|速度环的PID的P1是稳定在平衡角度之前的P值|
|VI1|速度环的PID的I1是稳定在平衡角度之前的I值|
|VP2|速度环的PID的P2是稳定后的P值|
|VI2|速度环的PID的I2是稳定后的I值|
|K为LQR参数|**3和4**是速度控制稳定前和后|
|K3**1**|LQR的参数1稳定前的角度差值|
|K3**2**|LQR的参数2稳定前的左右倾倒加速度|
|K3**3**|LQR的参数3稳定前的当前速度|
|K4**1**|LQR的参数1稳定后的角度差值|
|K4**2**|LQR的参数2稳定后的左右倾倒加速度|
|K4**3**|LQR的参数3稳定后的当前速度|
LQR算法解释当三角形向←倾斜时需要产生向→的力回正。
在电压控制下回正力F直接和输出电压值挂钩向←倾斜电机提供正电压V动量轮向**左加速转动**产生向右的力F。
`期望电压 = 角度差值x参数1 + 左右倾倒加速度x参数2 + 当前速度x参数3`
在速度控制下回正力F和动量轮转速加速度a有关F = ma向←倾斜电机需要向**左加速转动**产生向右的力F。
`期望速度 = 角度差值x参数1 + 左右倾倒加速度x参数2 + 当前速度x参数3`
两者区别电压和速度控制都可以实现平衡但因为使用simpleFOC控制电机转速无法无限加速本电机实验最高转速180转电压到上限12v。
使用电压控制会遇到电机一下子就到了转速上限就不能提供稳定的力F参数调起来比较困难。
速度控制可以在偏差变大的时候根据期望速度产生最大电压12v并且不会超过电机最高转速。
#### 4 硬件设计
使用立创EDA绘制电路原理图LaserMaker绘制莱洛三角形和动量轮有激光切割机可以事先切割结构作为参考。将绘制完的图形导入到立创EDA中可作为PCB的外框。丝印图案分别是**Gawr Gura**、**ouro kronii** ~~helicopter~~
LaserMaker绘制的plt在**莱洛三角结构**文件夹内,需要重新绘制电路图可以使用
感谢嘉立创的PCB制板使DIY电路制作变得非常便利点击下方超链接可以前往嘉立创进行PCB制板
[莱洛三角形PCB](https://oshwhub.com/45coll/zi-ping-heng-di-lai-luo-san-jiao_10-10-ban-ben)
[动量轮](https://oshwhub.com/45coll/lai-luo-san-jiao-dong-liang-lun)
具体需要购买的物品在**物料清单.xlsx**中,如果缺货请自行某宝更换
#### 5 Ctrl+C +V参考
Arduino上的控制算法是原作者的LQR无刷电机控制是灯哥开源FOC。电机控制引脚定义与传感器定义和灯哥开源FOC控制板2.0版一样。
Python的GUI是SimpleFOC的SimpleFOCStudio。
充电电路是立创广场开源的CS5095充电方案。
1. 原作者基于LQR控制器的自平衡莱洛三角形[BV19v411n7mN](https://www.bilibili.com/video/BV19v411n7mN)
2. 灯哥开源FOC [https://gitee.com/ream_d/Deng-s-foc-controller](https://gitee.com/ream_d/Deng-s-foc-controller)
3. 充电芯片电路[https://oshwhub.com/Aknice/cs5095e-san-jie-li-dian-chi-sheng-ya-chong-dian-dian-lu](https://oshwhub.com/Aknice/cs5095e-san-jie-li-dian-chi-sheng-ya-chong-dian-dian-lu)
4. Arduino环境提供者[https://github.com/kaliCYH](https://github.com/kaliCYH)
#### 6 有用的地方
1. Arduino的程序中的command.h、command.cpp可以支持任意的字符串输入。在其他项目中一样可以用无论是wifi接收到的字符串数据或者是串口的字符串数据。
2. GUI上位机可以在其他wifi项目中可以继续使用用来调参还是很方便。
#### 7 未解之谜
问题1在传感器读取当前角度pitch在0和360来回切换时候卡尔曼滤波值会慢慢变化得到的值无法反映正确的当前角度。导致有一个面无法摇摆平衡。
问题2摇摆到平衡态时参数不太好时可能会摇摆过头或者一直左右摇摆不能到平衡态。就算调好参数也会偶尔发生摇摆过头现象。
#### 8 交流Q群
45coll电子交流QQ群**824113552**
欢迎交流与沟通
群文件内有PCB、元器件下单以及软件安装的教程视频