foc/README.md

163 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode 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.

# V3自平衡莱洛三角形可充电RGB版
### 更新日志
2023/5/25V3升级明细相比V2因为电机无货原因请制作V3版本
1. 将2715电机更改为存量大且自带磁环的3205无限位款电机感谢“初心不变”提供创意
2. 将AS5600模块插接方案更改为MT6701焊接方案最大可能地避免了磁铁不对中、磁铁与磁编距离原因导致的PP check fail问题
3. 将600mAh电池更改为800mAh电池将12V转5V DCDC电路Ti方案、5V转3.3V LDO方案全部改为国产DCDC方案增加续航35%以上;
4. 充电电路将电流限制为1A避免极端环境下充电电感过热问题降低了电池自放电满电待机时间由一周增加至至少一个月
5. 调整了电机PID参数使用的3205电机运行更平稳
6. 设计了电池安装板,从背后看不露电池,更加美观;
### 项目介绍
自平衡莱洛三角形无刷驱动使用EG2133使用esp32-arduino的simplefoc驱动。
`程序附件都在`gitee [https://gitee.com/coll45/foc](https://gitee.com/coll45/foc)
![V3](./image/v3image.jpg)
图片中间为立创彩色丝印版本左右为最终V3版本磁编码器集成到pcb中心。均可以摇摆平衡使用3205电机
- cn3300充电部分设计充电截至电压12.72V考虑到电池内阻最终充满电压为12.43V充电电流0.5A电感电流1A。充电功率为5W`(充电会电感部分会烫,但不至于烧毁电路)`
- 电机可以适配3205无刷电机`(之前使用的电机GB2204\2715均已缺货)`
### 1 制作说明
gitee文件夹中V3有`自平衡莱洛三角形V3_BOM.xlsx`元器件请根据自己选择PCB空板还是SMT自行购买
[原理图以及PCB图链接](https://oshwhub.com/45coll/lai-luo-san-jiao-xing-3205-ban-ben-you-hua-bu-fen-dian-lu)
1. 在立创开源链接中,点击`在编辑器中打开`进入EDA页面双击对应的PCB上方导航栏找到-制造-PCB制板文件gerber-生成gerber-一键PCB/SMT下单。一定要进编辑器有遇到过开源链接的bom和真实bom对不上的情况
2. 在下单页面中下单对应的pcb如需SMT机器贴片可以选需要SMT不选SMT会得到PCB空板
3. 焊接是基本功,最好是有风枪+烙铁的情况下尝试制作。
4. 焊接有焊接助手,在`立创专业版点开对应的PCB`,上方工具栏-焊接辅助工具
SMT注意
- 选择需要SMT完成下单之后进入订单界面。SMT分板定位孔选择-嘉立创添加BOM与坐标清单选择-用我自己的BOM和坐标导出文件选择-立创EDA。
- 需要上传的坐标文件和bom都是在`EDA页面`-莱洛三角形PCB-制造-物料清单BOM和坐标文件中导出。
- 进入BOM匹配之后左上角贴片数量选择-做5贴2因为莱洛三角形制作一个需要两个PCB板一个有元器件一个空板贴片层-只贴顶层,产品类型-经济型,坐标文件生成方式-单板
- 强烈建议删除所有**扩展库以及推荐库**后打板
- SMT下单完成之后只需购买smt删除部分的元器件比如扩展库和推荐库
### 2 硬件特性
| 说明 | 参数 |
|--------------|-------------------------------------------------------|
| 莱洛三角形尺寸 | 100*100 mm |
| 动量轮尺寸 | 80*80 mm |
| 电池*3 | 厚x长x宽:7.9mmx25mmx40mm 规格内均可 |
| 输入电压 | 3.7v锂电池*3 |
| 充电电压 | 5V 从Type-C口输入 |
| 充电芯片CN3300 | 5V输入,最大1A充电电流 |
| 均衡芯片CM1010-A | 电池电压超过4.25V之后开始放电 |
| 主控芯片 | ESP-WROOM-32 |
| 电机驱动芯片EG2133 | 引脚:32, 33, 25 |
| 稳压芯片MT2492 | 输出5V和3.3V |
| MT6701 编码器 | SDA-23 SCL-5 |
| MPU6050六轴传感器 | SDA-19 SCL-18 |
| RGB灯-WS2812 | 使用GPIO16控制 |
| LED指示灯 | 功能 |
|-------------|-------------------------------------|
| LED1 | 串口指示灯ESP32发送串口数据时会亮起 |
| LED2 | 充电完成指示灯亮起表示充电完成充到亮起可能需要2-3小时 |
| LED30 | 充电指示灯,亮起表示正在充电 |
| LED3 | typec的5V输入指示灯 接typec一定亮 |
| LED4 | 3.3v指示灯 电池输入12v输出3.3V |
| LED5 | 由GPIO4控制电池电压低于9.5V时以1HZ频率闪烁 |
| LED27\28\29 | 均衡指示灯亮起表示该电池电压高于4.25V正在通过22欧姆电阻放电中 |
| 触摸盘 | 功能 |
|-------|---------------------------------------|
| 单击时长 | 100ms以上 |
| 长按时长 | 800ms以上 |
| 点赞触摸盘 | GPOI13-Touch4-单击:开关RGB灯长按开关wifi和电机 |
| 投币触摸盘 | GPOI15-Touch3-单击增加RGB灯亮度长按下一个RGB灯效 |
| 收藏触摸盘 | GPOI2-Touch2-单击减少RGB灯亮度长按上一个RGB灯效 |
### 3 使用说明
1. 下载完本git所有文件后打开文件夹V3/bin/flash_download_tool_3.9.2.exe
2. 打开flash_download_tool后选择chip Type "ESP32",然后点OK在第五行选择target.bin烧录到0x000位置![bin](./image/bin.png)
3. 使用CH340下载器将下载器的TXD\RXD\GND用杜邦线引出对准PCB的ESP32正上方的GND\TXD\RXD接法为TXD-RXD\RXD-TXD\GND-GND
4. PCB焊好后打开电源同时按住BOOT和RESET按钮先松开RESET然后松开BOOT进入下载模式后点START开始程序烧录
5. 如需修改参数长按点赞触摸盘可以打开wifi并停止电机。
6. 打开本项目内的`python_gui`内的`可执行文件_main`内的**main.exe**并连接上WIFIESP32 。点击设置开始调参。
7. 连接成功后点击disable然后逆时针拨动动量轮查看上位机中V参数是否为正值。注意如果<font color='red'> 逆时针转为为负值 </font>那么需要将电机线任意两线互换。
![Image text](./image/tiaocan.gif)
8. 如果电机不能正常运行可以,点击上位机中最下方的<font color='red'> 测试部分 </font>,打开电压或者速度测试,滑动滑条,查看电机能否正常运行。如还不能请检测硬件电路部分。
9. 如果不能摇摆直立推荐调整的参数为TA、SA、SV
10. K值可以用滑块调整拖动滑块就会发送参数命令但是调整到合适值之后需要自行在Arduino的main中修改再烧录一次
11. 滑条:最左边输入框为滑块下限,右边是滑块上限,滑条等分成**200**份,命令是**字符串**,滑动滑块发送**字符串** + **数值**
12. arduino文件夹为环境可以自行修改代码编译
比如让平衡角度为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电路制作变得非常便利
### 5 Ctrl+C +V参考
Arduino上的控制算法是原作者的LQR无刷驱动为立创开源的EG2133方案。
Python的GUI是以SimpleFOC的SimpleFOCStudio为基础添加wifi功能。
V2的充电电路是在立创广场开源的《CN3300 4串电池组板》方案基础上改的3串锂电池
PCB以及原理图技术支持——muyan
wifi效果以及按键面修复代码作者——muyan
1. 原作者基于LQR控制器的自平衡莱洛三角形[BV19v411n7mN](https://www.bilibili.com/video/BV19v411n7mN)
2. muyan立创链接[https://oshwhub.com/muyan2020?tab=project&page=1](https://oshwhub.com/muyan2020?tab=project&page=1)
3. muyan git链接[https://gitee.com/muyan3000](https://gitee.com/muyan3000)
4. EG2133驱动参考[https://oshwhub.com/acmetech-lceda/minifoc](https://oshwhub.com/acmetech-lceda/minifoc)
5. 灯哥开源FOC [https://gitee.com/ream_d/Deng-s-foc-controller](https://gitee.com/ream_d/Deng-s-foc-controller)
6. CN3300 4串电池组板[https://oshwhub.com/583703056a/dian-chi-zu-ban_copy_copy](https://oshwhub.com/583703056a/dian-chi-zu-ban_copy_copy)
7. Arduino环境提供者[https://github.com/kaliCYH](https://github.com/kaliCYH)
### 6 有用的地方
1. Arduino的程序中的command.h、command.cpp可以支持任意的字符串输入。在其他项目中一样可以用无论是wifi接收到的字符串数据或者是串口的字符串数据。
2. GUI上位机可以在其他wifi项目中可以继续使用用来调参还是很方便。
### 7 交流群
1. 45coll电子交流群:824113552(已满)
2. 45coll电子交流2群:587563225