- 时间过得好快啊,几周过去了。。。我的效率好低啊!
阳春布德泽。本是良辰美景,终是虚度光阴。
前言
- 开始进入硬件探索阶段。
- 虽然并不鼓励造轮子,但是想要深耕某一领域,从零开始还是必须要走的路,至少要做到能够基础入门。所以本次硬件会在已有的开源软硬件基础上,学习了解其运行过程和原理,然后实现复制,以后根据需要就能自行在此基础上进行升级探索。这样做的好处就是节省资金,因为没有参考的话,可能要打板多次才能实现他们已有的功能。
之前使用过多个开源无刷电机驱动器,比如 【灯哥开源】的 SimpleFOC驱动器、ODriver驱动器,以及【Makerbase】的 ODrive3.6 驱动器,但都是止步于使用和简单的看过原理图,没有深入了解过内部的程序实现、硬件实现。实际上,使用购买的硬件和提供的程序,完全能够满足我们的使用需求。但是为了深入探索和实现FOC,就算造不出轮子,也还是争取能够动手换个轮胎。
硬件相关
电机分类
电机有很多种类,基础概念可以参考相关资料 电机分类及应用
另外,了解电机驱动,必须要了解譬如 极对数、KV值等知识,具体可以参考【无刷直流电机基础知识总结】
BLDC电机驱动
BLDC即(Brushless Direct Current Motor)无刷直流电机,是后面我们主要使用到的一种电机。
BLDC电机由于其设计特性,需要将直流通过电子器件转换为交流的方式来驱动,驱动原理可以参考无刷直流电机控制简介,这种转换控制的方式需要特殊的算法实现:了解 BLDC 电机控制算法
实际上,推荐其他更基础和简单的介绍,比如:直流无刷电机(BLDC)基础知识,这里面提到的【FOC】算法,也是后面需要深入理解和实现的控制算法。
电机基础知识相关的视频资料:张飞实战电子-电机知识讲解
软件相关
FOC控制
目前BLDC控制还是有几种算法的,但后面主要使用FOC控制算法。
FOC有很多的资料,很多都是详细的图文加代码的教程:
FOC?看这篇文章就够了
FOC算法入门
使用的【灯哥开源】的硬件也有对应的算法教程视频:灯哥手把手教你写FOC算法 系列课程 ,这个教程主要使用了arduino环境。实际上,使用arduino环境可以很快的烧写他写好的示例代码,运行设备。但是此处为了深入学习FOC电机控制算法,我会使用C语言环境进行编写和测试。
以下是比较出名的开源FOC驱动体系,SimpleFOC和ODriver。
SimpleFOC
Simple FOC是国外无刷电机爱好者,创立的一个开源无刷电机FOC控制项目。
【SimpleFOC中文官网】
主要基于Arduino。
ODriver
- oDriver也是外国的基于FOC的开源作品,包含软硬件。经过多年发展,目前已经支持多种接口、多种传感器。支持实时绘制参数曲线等丰富功能。
【ODriver官网】
参考设备使用
1:设备介绍
此处使用的是【灯哥开源】的 【灯哥开源 双路无刷 微型FOC V3P 带电流环 深度改进SimpleFOC】开发板套装,包含 【FOC全能套装】和【2208电机套装】。
公司还有他家的【灯哥FOC ODrive大电流 深度改进高性能 ODrive单路 基于ODrive3.6 】版本和【Makerbase ODrive3.6 FOC BLDC 伺服 双电机控制器】,在应用层上都有完整的入门使用教程,跟着教程走即可。
使用他们的电机,按照教程调节参数即可,使用自己的电机,则需要根据电机参数自行配置设备参数。比如使用 【Makerbase】这款驱动器驱动一款大功率无刷电机时,走到最后一步时没调通,后续由于时间关系也没有继续调试。
这款设备主要使用ESP32为驱动核心,编程环境为【Arduino】
【ESP32】是一款偏重于物联网领域的高度集成和丰富外设的MCU(单片机),自带wifi和蓝牙(有些型号并不同时具备)。设备使用的ESP32的型号属于ESP32-D0WD,属于较早的型号,资源较多,应用丰富,最新的还有S、C、H等系列,可以自行在【乐鑫】官网查找和下载对应资料。
【Arduino】是一款便捷灵活、方便上手的开源电子原型平台,包含硬件(各种型号的Arduino板)和软件(ArduinoIDE),以及衍生的规范化的可拓展硬件,可以通过简单的插接和简单的编程代码就能实现丰富的应用,非常适合入门学习。由于其入门开销低、受众广泛、资源和教程较多、拓展简单等原因,在国内外都很受欢迎。
不过,并不推荐使用【ArduinoIDE】,因为它非常不好用,只适合敲一些简单的代码,无法实现追踪定位代码等一些必要的功能。可以使用【VisualCode】作为开发IDE来开发【Arduino】。但后面Arduino只作为体验设备所提供的例程来偶尔使用,所以此处不做过多介绍。后面会简单的介绍一下环境的安装。
2:设备资料
我们使用的这款设备是有不少教程资料的,资料如下:
【SimpleFOCDocs】
【灯哥手把手教你写FOC算法 系列课程】等,还有一些资料和参考代码都在卖家提供的QQ群文件中,可以自行搜索添加并下载。
设备运行测试
这款设备主要运行环境为【Arduino】,有官方的rduinoIDE,推荐使用VSCode来搭建Arduino环境,这个编辑器更适合人类。
因为后面写程序不会用到,所以此处不做过多介绍。但是为了体验示例代码,此处还是搭建一下环境,只简单介绍一下ArduinoIDE的搭建流程,至于VSCode的搭建流程,请自行实现。
可以到提供的QQ群下载资料,里面有搭建好环境的【ArduinoIDE】,可以直接使用。但是很大,下载很慢,所以此处展示一下如何自己搭建最小系统。教程在他们提供的文档中【SimpleFOCDocs】。
- 1:下载最新版:【Arduino官网下载地址】
- 2:在 【工具 -> 管理库】 中搜索并安装 【Simple FOC】库,然后就能在【文件->示例】中找到相关的示例代码
- 3:安装ESP32 2.0.4的库,方法如下:
- 在 【ArduinoIDE】的 【文件->首选项】 的 其他开发板管理器地址 中填入 【 https://espressif.github.io/arduino-esp32/package_esp32_dev_index.json 】,然后在 【工具->开发板->开发板管理器】中搜索 ESP32,选择2.0.4版本(目前最新版本是2.0.9,实测发现安装不通过)后安装。注意,这部分可能需要科学的上网(FQ)才能正确安装。
- 安装完成后,插上设备的ESP32的数据线到电脑上,在【工具->开发板->ESP32】中选择【WEMOS LOLIN32 Lite】,在【工具->端口】中选择正确的串口。可以任选一个simpleFOC的示例代码进行编译测试,编译通过即表示安装正确。也可以使用【灯哥开源】提供的示例代码进行编译下载测试了。具体的arduino使用过程不做赘述。
所用的这款FOC开发板提供如下开发源码:
按照教程,装好电机,接好线,供给合适的电源电压,即可进行烧录测试。此处电源使用的是正点原子的小型数字电源,供给16V电压。
比如烧录 7_双电机闭环位置力矩互控 ,即可实现旋转其中一个电机,另一个跟随转动。
从他的资料中,我们也可以简单的看出电机控制的几个重点:位置、速度、力矩,电流。
程序环境
IDE环境搭建
由于Arduino的特性,我不是很喜欢使用,所以后续我会先在当前购买的硬件基础上编写非Arduino的程序,并考虑移植,争取能够移植到其他MCU上。
关于ESP32的IDF原生C语言开发环境,可以参考我以前写过的有关ESP32的IDF环境的搭建教程【ESP32 环境搭建以及入门编程流程和体验-windows】,此教程编写的时间较早,可能与最新版本有些出入,请自行分辨。由于我的电脑上安装过环境(不是教程中的老版本,但也应该不是最新版本了),所以此处不再赘述。
由于官方的ESP-IDF开发框架是针对ESP系列独有的,无法移植,考虑到移植性,我会在程序中尽可能的再抽象一层,以方便后续移植使用(如果实在不行,后续就也使用ESP32作为驱动芯片,哈哈)
IDF框架
ESP-IDF 是乐鑫官方的物联网开发框架,适用于 ESP32、ESP32-S、ESP32-C 和 ESP32-H 系列 SoC。它基于 C/C++ 语言提供了一个自给自足的 SDK,方便用户在这些平台上开发通用应用程序。ESP-IDF 目前已服务支持数以亿计的物联网设备,并已开发构建了多种物联网产品,例如照明、消费电子大小家电、支付终端、工控等各类物联网设备。
有关ESP32的资源,包括手册、原理图、开发文档等都可以在【乐鑫官网】中找到,他们提供的资源还是很丰富的,比如官方的编程指南文档:
【IDF编程指南】
硬件分析:
学习和使用一款硬件设备,直接分析原理图是最快速的。购买的设备提供底板的原理图。
购买的驱动板是双路版本的,即能同时驱动两个电机,所以原理图上是两路的。
注意,下面分析的原理图出自【灯哥开源】的【 双路无刷 微型FOC V3P 】版本驱动板。
另外,关于硬件芯片的手册,请自行查找,此处不再放出。
电源部分
使用一款 最大28V输入电压、最大3A输出电流的DCDC稳压器 【TPS54331】来将外部电压转为5V,再由【AMS1117】转为3.3V。
电机驱动电路
使用两颗 EG2133栅极驱动专用芯片来驱动每路6个共计12个MOS管,实现电机运动的控制。
- EG2133 是一款高性价比的大功率 MOS 管、IGBT 管栅极驱动专用芯片,内部集成了逻辑信号输入处理电路、死区时控制电路、闭锁电路、电平位移电路、脉冲滤波电路及输出驱动电路。
- WSD3066DN33 :30V,50A,N沟道场效应管(MOSFET)。
MOS管两个一组,每路电机需要三组,实现电机换项的算法,具体实现原理可以参考之前提到的资料:
电流检测接口
使用每路两颗,共计4颗INA240芯片来获取电机的电流。也就是说,每路电机只检测两项电流就能得出需要的电流检测结果。
- INA240 器件是一款电压输出、电流检测放大器,具有增强型 PWM 抑制功能,可在独立于电源电压的 –4V至 80V 宽共模电压范围内检测分流器电阻上的压降。
各项接口
一个ESP32接口,两路引出的IIC接口和一路串口接口,两路三相电机接口。
ESP32使用的是 WEMOS Lite 1.0.0 模块。
两路IIC接口主要用于接外部编码器传感器,用于获取电机运动角度。设备配套的磁编码器型号是 AS5600 ,需要在电机的转动轴上粘一个圆形的磁铁配套使用。
- AS5600 是一个易于编程的磁性旋转位置传感器,具有高分辨率的12位模拟或PWM输出。这种非接触式系统测量一个直径磁化的轴上磁铁的绝对角度。
总结
至此,电机相关的基础知识和驱动知识了解完毕,可以开始FOC的实现了。
完成FOC的实现后,就可以真正的着手搭建机械臂了。
- 本文水平有限,内容很多词语由于知识水平问题不严谨或很离谱,但主要作为记录作用,希望以后的自己和路过的大神对必要的错误提出批评与指点,对可笑的错误请指出来,我会改正的。
- 另外,转载使用请注明作者和出处,不要删除文档中的关于作者的注释。
随梦,随心,随愿,恒执念,为梦执战,执战苍天! ------------------执念执战