老板想让我研发一款适用于农田的智能驾驶车。
原本以为我的工作是设计一个上位机,交流过后我发现,从电调到上位机自动驾驶算法都要我来完成。
这无疑是一个相当有技术含量的工作了。
现在AI的能力越来越强大,在AI的辅助下,即使是在完全不熟悉的领域中也能做出一番东西来的。
整体的计划我已经做好了,但要等我们的从零开始自动驾驶完结后复盘时再放出来。
在这一小节中,我们将着手于无刷电调的硬件设计。立创硬件开源平台是个好东西。
像我这样子的外行人即使是在AI的辅助下,面对从来没有做过的电机控制也是比较手足无措的。
本来以为会有一种专门控制无刷电机的芯片,但似乎无刷电机的控制需要使用单片机+程序来控制。
电机驱动
无刷电机有三相,给三相交替通入交流电使其旋转。
据了解,这种车的电机一个大概 100W 功率,硬件设计要求不会很高。
参考了一下,看到了两个方案:
三个BTN7960B:一颗芯片集成了“上桥 MOS + 下桥 MOS + 栅极驱动 + 过流/过温保护,电路极其简单
六个CRST045N10N:标准正统方案
但是BTN7960B是给直流有刷电机用的,不适合FOC快速开关,会很烫。于是毫无疑问采用CRST045N10N方案。
CRST045N10N耐压100V,电流120A,这对我们的100W绰绰有余。
假设电池电压24V,100W ÷ 24V ≈ 4A,于是我决定使用更便宜的NCE6080K,这个耐压60V,电流80A
于是通过控制这六个MOS管就可以控制三相线上的电流了。
MOS管驱动
但是MOS管如何驱动呢?
显然单片机推不动MOS管,于是需要有一个芯片帮助单片机驱动MOS管。
于是——EG2133。
EG2133需要一个4.5V-20V的供电,底边MOS管直接通过自身的供电推开,高边MOS管通过自举电路推开。
但据AI所说,EG2133的供电不可以太低,不然MOS管可能无法完全打开,于是我就通过一个LMR16006YDDCR开关降压到12V。
于是乎,单片机就能驱动MOS管了。
电流反馈
单片机需要知道每个线圈里流过的电流大小。
于是我们需要在每个线圈的底边传上一个极小的电阻,当有电流时,电阻两端会产生电压差,通过测试这个电压差,得知电流大小。
但是由于电阻极小,电压也极小,于是需要一个运算放大器,这里我使用一个四路SGM8584XS14G/TR。
询问AI的过程中突然感叹MCU好强大,能够在电流异常的一瞬间做出响应,避免产生问题。
磁编码器
一些小车的轮子很强,在不动的时候即使是受到外力推动,电机也能自动回到原本的位置。
大概是因为轮子上有某种编码器,有了编码器轮子的位置就闭环了。
这不是必须的,因为有前面的电流反馈,没有磁编码器的叫做无感FOC,但是无法做到锁定位置的效果。
这里我使用MT6816CT-ACD,SPI通信,安装在电路板背面,靠近无刷电机的一边。
到此,一切与无刷电机控制相关的就可以了。

MCU选择
MCU只做两件事情,控制无刷电机、与上位机通信,所以应当尽量压缩成本,选择尽量小且够用的MCU。
这里AI推荐我 GD32F303CBT6 ,它的优势:
高速ADC
有CAN总线控制器
Cortex-M4内核,有浮点运算单元
上位机通信
MCU有CAN总线控制器,所以我们就采用CAN通信了。
这样的电动机会有6个,这些电动机都需要与上位机相连。
本来是想星形连接的,但长差分信号末尾会出现反射,CAN天生不适合星形。
于是我决定采用这样的环形菊花链设计:

最终就得到了这样的成品:



























