基于Simple FOC 和 ESP32的双路FOC控制器
简介
基于ESP32的双路FOC控制器,代码采用开源的SimpleFOC,实现双路无刷电机的矢量控制。
简介:基于ESP32的双路FOC控制器,代码采用开源的SimpleFOC,实现双路无刷电机的矢量控制。开源协议
:GPL 3.0
描述
-----------------------------------------------------------------------------------------------------------
2021.07.14 Update:
我的配套的驱动板也开源啦!感兴趣的筒子们快来!
<双路无刷FOC驱动_ESP32扩展板>
https://oshwhub.com/zdldcyy/l6234-shuang-lu-wu-shua-qu-dong_esp32-kuo-zhan-ban
-----------------------------------------------------------------------------------------------------------
基于ESP32的双路FOC控制器,代码采用开源的SimpleFOC,实现双路无刷电机的矢量控制。支持两路IIC编码器,两路SPI编码器,同时两路IIC还可以复用为两路ABZ编码器!
准备用在自己的无刷四足机器人上的。控制器和驱动器分开设计,采用板卡对插的方式,方便后期更换更大电流的驱动板。配套的驱动板稍晚些也会发出来~
欢迎关注我的b站,板子的用法和部分代码也会在B站上更新,可以直接扫上面渲染图上的二维码直达我的主页吼吼~
我的B站:https://space.bilibili.com/423507600
SimpleFOC官网:https://simplefoc.com/
------------------------------------华丽分割~---------------------------------------
简单介绍下板子设计,双层PCB,主控用的是esp32-wroom,淘宝上现在12块钱一个很便宜(对没错,stm32我就是针对你了)。带有Type-c usb转串口通讯,且带有自动下载电路,不需要手动按两个按键啦!两边是标准的2.54的10pin排针,很便宜也很好买。而且上面的信号是对称分布的,你可以正面插入,也可以从后面插入,哎呀反正就是什么姿势都可以的啦!
偷偷告诉你,嫌整体高度高的话还可以选择背靠背贴身插入(老脸都不要了!)
板子下方的四个连接器是编码器接口,从左至右分别为I2C1, SPI1, SPI0, I2C0. 这两个I2C是相互独立的两路,互不干扰,也就是说同时接两个as5600也没问题(众所周知,as5600的单I2C地址很坑)。注意这两个I2C我都没有加外部上拉,因为我的磁编码器板子都是加了上拉的,所以不在主板上加了,而且esp32 本身就可以设置上拉,更没必要了。
剩下两个中间的接口是spi接口,这两个是共用一个spi口的,两个cs使能。这样就可以同时使用两个spi接口的编码器了,比如后面开源的TLE5012B,后期还会开源MA730,都可以直接使用。
什么? 你说你只有ABZ输出的编码器?这。。。这也完全没问题啊, 得益于esp32 的IO全自定义功能,两个I2C接口可以在软件里直接改成ABZ输入,这样就可以直接接ABZ的编码器了,就问你贴心不贴心!
还有,I2C0 和SPI都用的arduino默认pin脚,代码里都不用指明I2C/SPI使用的pin脚,直接召唤函数就行,简直比你妈还贴心有木有!
顺便在这分享下我开源的磁编码器,都放在立创开源广场了:
2. TLE5012B 磁编码器,SPI & ABZ/UVW输出
3. MA730高速磁编码器,支持SPI & ABZ & SSI & PWM接口
排母边上还有一个3pin(新版改为2pin)的小连接器,是CAN通讯接口,预留后面用的,暂时还没测试,一直用的uart接口。有能力的同学可以测试下,我还没用过CAN。。
-------------------------------再次割割---------------------------------------
使用/测试注意点:
1. Type-c usb转串口我只设计了一边有用(因为layout不方便),所以插上去电脑没识别串口的话就转个向再插进去就可以了。还预留了uart接口直接接出,在usb口背面,可以通过这个口和其他板子通讯和供电。 2021.07.09更新:新板子把两边都连上了,不用担心插错的问题了欧耶~
2. 板子的电源输入有两个源,一个是驱动板的电源(12V~24V)通过排针到主板,再经过DCDC & LDO转成5V & 3.3V;二是通过usb的5v给板子供电,两个可以同时连接,有个二极管保护usb防止倒灌电流。
3. 用驱动板的12V/24V作为电源时,需注意D2这个TVS二极管,目前设计上用的12V的TVS,要用24V电源的话需要换成24V的tvs管子。
测试代码有问题的话可以用我b站上的代码先试一下。
#可怜的第一版,上电没几次就GG了,默哀0.1s~
---------------------------------------------------------------------------------------------------------------------------
2021.06.01——目前板子已验证的功能:
1. 两路AS5600 I2C接口编码器通讯。
2. 两路UVW编码器输入。
3. 两个4010无刷电机的开环速度,位置,电压控制;两个电机闭环速度,电压,位置控制。
4. 单路无刷电机的电流环控制,另一路可能驱动板有点问题,还没搞好。
------------------------------------------------------------------------------------------------------------------
2021.06.28——板子的I2C和spi接口添加了滤波器和匹配电阻设计,为了解决编码器线缆过长时(我的编码器线长30cm。。。)会有干扰导致数据出错的问题
板子已经在路上了,验证好之后我会传上来,附件里的还是旧的gerber,暂时先不要下载。
---------------------------------------------------------------------------------------------------------------------------
2021.07.09更新:
1. 上面设计的滤波电路测试下来效果不错,ABZ输入的信号再也没有乱七八糟的波动了。如果当I2C接口用的话需要注意一点下图中的C4和C8两个电容,如果你的编码器的线很长的话可能要把这两个拆掉。这个和I2C的协议规则有关。I2c规定总线的寄生电容值不超过400pf,寄生电容高了的话会影响信号上升沿时间,导致速度下降,或者出错。另外,降低上拉电阻的阻值也可以提升I2C的上升/下降沿时间,要根据自己的速率要求(低速100KHz,高速400kHz)来考虑。
2. Spi接口还未测试,编码器可能被家里的猫叼走了。。。
--------------------------------------------------------------------------------------------------------------------
2021.07.14 Update:
小更新,测试了SPI编码器MA730,可以用。
另外,我的配套的驱动板也开源啦!感兴趣的筒子们快来!
<双路无刷FOC驱动_ESP32扩展板>
https://oshwhub.com/zdldcyy/l6234-shuang-lu-wu-shua-qu-dong_esp32-kuo-zhan-ban
-----------------------------------------------------------------------------------------------------------------------
2021.09.05 Update:
增加了IBOM,方便自己smt的同学。用浏览器打开html文件即可
-----------------------------------------------------------------------------------------------------------------------
后续会上传测试视频,有变动会继续更新。
#后续就连着我的狗腿子一起测试啦,有兴趣的来b站一起讨论。
声明:本电路板仅个人兴趣开发,不对任何bug,炸板,烧电容负责,有问题可以反馈,毕竟我也不是渣男。
此致
解散!
文档
PCB
评论