Mr. Deng

Deng FOC是适用于三相无刷直流电机和永
磁同步电机的高集成度FOC驱动器。
Deng FOC驱动器支持驱动大电流电机,
可以实现FOC位置、速度、力矩闭环控
制。
基于功能强大、性能稳定的开源项目ODrive,
我们进一步优化电路、缩小体积,优化接口,
提高驱动器整体的可扩展性。
编码器方面则支持ABZ模式和SPI模式
(板载),并能够实时检测驱动器温度。
Deng FOC预留了多种接口,包括USB
CAN、UART以及FPC串口接口(可实
现屏幕显示或无线控制),让大家尽可 能自由开发。
更重要的是,我们也进一步压缩成本,
致力于打造性价比最高,大家都能一起
来玩的高性能FOC电机驱动器!
输入电压 12V-24V
工作电流 30A
峰值电流 50A
支持电机类型 直流无刷电机
尺寸 42mm*42mm
制动方式 功率耗散电阻
板载编码器类型 AS5047P
支持编码器信号 ABI SPI PWM HALL
USB CAN UART Step/Dir
a b
通信接口
模拟输入
SWD程序下载/调试
其他
电源指示VCC
DRV故障状态指示(nFault)
Pin1 Pin3 Pin5 Pin7
UART.TX Step 数字输入
Pin2 Pin4 Pin6 Pin8 UART.RX Dir 数字输入
每块Deng FOC发货前都经过仔细的外观检
查以及例程测试,因此一般都不会出现问题, 但在包装运输过程中难免可能会产生损伤,
因此建议收到后在上电前进行一般检查。
【使用前检查】完成后,就可以开始准备后 文所述的硬件进行首次的上电检测。
硬件清单
✓ Deng FOC
✓ 12V-24V DC直流稳压源
第一步 接入Type-C数据线,板上蓝灯(电源
指示灯)和红灯(DRV故障指示灯)
✓ Type-C 数据线 (注意区分
数据线和充电线)
✓ 1.14寸LCD显示屏(可选)
耗散电阻(可选)
往外拉出,按照下图的方向插入屏幕排线,确
第一步 接入DC_BUS电源(先
插入XT30接口,再打开 电源开关),红灯熄灭。
Odrivetool是python的一个模块,可以用来
配置和调试odrive和Deng FOC。在使用它 之前,需要先配置好python
第二步 检查稳压电路的输出5V,以及数字供电3.3V 和模拟供电3.3V
已安装好可以跳过这一步。我们推荐使用 anaconda,因为他包含了很多工具,并且 用虚拟环境配置不至于弄乱原有的环境。
以下以安装anaconda为例:
下载anaconda
https://www.anaconda.com/products/ individual ,选择适合自己的版本。这里
选择的是64-Bit Graphical Installer
(477 MB)
C 注意要取消勾选“Add Anaconda to my PATH environment Variable
B 选择安 装路径:
未完,接后页……
Anaconda Prompt(Anaconda3),
输入“conda info”验证是否安装成功。
配置环境变量。
详情见右页
控制面板->系统和安全->系统->高级系统设
置->环境变量->用户变量->PATH 中添加
anaconda的安装目录的Scripts文件夹。查
看自己安装anaconda的路径,找到Scripts
文件夹,我这里的路径是(anaconda安装路
径)\Scripts。
B
conda create -n python39 python=3.9
conda activate python39
C 安装 odrivetool
pip install odrive==0.5.1.post0
pip install pywin32 == 225
Repalce Driver
D 下拉菜单中,选择 Odrive 3.5 Native Interface(Interface 2)
C 在 Python39 环境中连接 odrivetool,
输入命令:odrivetool
D 出现 ”Connected to ODrive xx as odrv0”,代表连接成功。
A 插入USB,板上的蓝灯亮起
B 激活环境(
电机轴粘上磁铁:(磁铁必须为 径向磁铁 ,
硬件清单
✓ Deng FOC ✓ 电机
✓ ABI编码器(带板载编码器
型忽略)
✓ 12V-24V 直流电源
✓ Type-C 数据线
✓ 1.14寸LCD显示屏(可选)
✓ 耗散电阻(可选)
❖
已随板附赠)
若使用的是板载编码器型,固定DengFOC
板子和电机,使DengFOC背面的编码器对
准磁铁,间隔1-3mm左右。
❖ 若使用的是外接编码器型,则固定编码器
模块和电机,使编码器芯片对准磁铁,同
样距离1-3mm左右。
odrv0.erase_configuration()
连接成功的提示:
开始新的配置前建议清除现有配置,在 odrivetool上执行指令:
Deng FOC 准备了 python 程序可以一
键配置参数和校准。在程序的开头说明
并定义了所需的基本参数可按实际情况
修改,运行后即可配置所有参数,并进 行校准。
针对不同电机,主要 需要设置耗散电阻
值、制动回流电流值、电机的极对数,
KV值以及编码器的位置读取模式、CPR
值(暂时只支持选择 AS5047P 的ABI 模
式和 SPI 模式)。其他参数可详细参考
5.2部分及第六章。程序中参数设置的位
置如右图:
A 在终端中激活 4.1 中安装 odrive
的 python 环境
B 在 python 程序所在的目录下运行
程序
C ABI模式下按照提示进行参数配置
需要使用AS5047P 的 SPI 模式,则需
要按照一下步骤执行:
码器以及进入闭环模式,然后保存设置, 重启。
第一步:执行程序
不再次配置参数,而是进行校准步骤。
根据实际情况修改以下参数(具体的参数说 明可以看第6章)
按照所使用的电机修改具体参数。以
SUNNYSKY
另外,因为外接编码器仅支持ABI
模式,所以如果需要配置其他的编码器,
也可以使用上面的”5047_ABI”进行配
置,修改相应的cpr等参数即可。
在控制器设置中,首先设置如速度限制的 基本参数:
需要说明的是,AS5047P-ABI模
式每次上电必须进行运动校准,而使用
AS5047P-SPI的优势在于可以选择只要
校准一次编码器,后续上电就可以不进
行编码器运动校准,缩短的校准时间,
避免校准运动对其他部件的影响。但使
用AS5047P-SPI会比较容易出错。
Deng FOC可以实现电机的速度/位置/力 矩运动控制,每种运动控制支持多种输入 模式,如直接输入,爬升模式等。每种模 式会有对应的参数配置,如梯形轨迹的位 置模式下需要设置梯形轨迹的速度限制, 梯形轨迹的加减速度限制等。
进行配置,分别包括:
5:力矩爬升模式
一键配置和校准程序已经包含了电机的校
准的程序。在首次使用某种电机时或清除
配置后,必须进行校准。
校准程序包括分别执行的电机的校准、编 码器校准,以及电机位置闭环测试,如下:
校准程序同样默认保存了不同的编码 器读取模式下不同的开机启动流程。
编码器读取模式为ABI模式时,上电开
机时必须进行编码器校准,所以所设
置的开机模式为电机预校准 (即无
“哔”一声),开机校准编码器(即
开机校准后电机会来回转一下0),然
后进去位置闭环模式。
编码器读取模式为SPI绝对编码器模式时,
在首次使用时校准过一次后,后续则不
不再需要重新校准编码器,所以所设计
的开机模式为开机校准电机(即“哔”
一声),预校准编码器(即不会来回
转),然后进入位置闭环模式。
设置位置直接或梯形轨迹位置模式,运行一键 配置程序并校准完电机后,打开在 conda 中
打开 odrivetool,输入
odrv0.axis0.controller.input_pos = [位置目标值]
实现位置控制,同时可以在屏幕上看到实时变化。
设置速度直接或速度爬升模式,运行一键配置
程序并校准完电机后,打开在 conda 中打开
odrivetool,输入
odrv0.axis0.controller.input_vel = [速度目标值]
实现转速控制,同时可以在屏幕上看到实时变化。
设置力矩直接或力矩爬升置模式,运行一键配 置程序并校准完电机后,打开在 conda 中打
开 odrivetool,输入
odrv0.axis0.controller.input_torque = [位置目标值]
实现力矩控制,同时可以在屏幕上看到实时变化。
Deng FOC 可以通过 ODrive Tool,对
axis0进行参数配置。
odrv0.config.enable_brake_resistor
如果要使用耗散电阻,就将其设置为
True。用电池电源的话一般可以不设置。
如果不想使用,保持为默认值即可。另外 因为接线和端子可能也会存在一些电阻,
所以如果刹车时有什么问题,可以试试将 这个参数增加0.05Ω。
odrv0.config.dc_max_positive_current[A]
odrv0.config.brake_resistance [Ω]
odrv0.config.dc_max_negative_current[A] 即电源可以吸收的最大电流值。
一般为负值。默认保守设置为10mA。
如果在用功率电阻的情况下出现
DC_BUS_OVER_REGEN_CURRENT 的错误,就稍微提高这个参数。
源的话,就将这个参数设置为电源的安
全范围内,这个时候该参数应该高于电
机的电流限制+电流限制余量。
odrv0.config. dc_bus_undervoltage_trip_level [V]
odrv0.config. dc_bus_overvoltage_trip_level [V]
Deng FOC支持电压范围是12-24V,建议
设置为26V。
odrv0.config.max_regen_current[A]
如果用的是直流稳压源,不具备回收电能,
就配置为0。如果是电池供电,可以按照电
池实际承受的回流电流进行设置。高于该
参数的回流电流会由耗散电阻消耗掉。
odrv0.axis0.motor.config.pole_pairs
电机的磁极数除以2。
odrv0.axis0.motor.config.motor_type
目前支持两种类型:
❖大电流电机
MOTOR_TYPE_HIGH_CURRENT
❖云台电机
MOTOR_TYPE_GIMBAL
注意:不要在非云台电机上选择
MOTOR_TYPE_GIMBAL,可能导致电机
或者Deng FOC过热。
❖如果100mA的电流噪声对电机来说
算“小”的,那就可以选择大电流电机
❖如果100mA的电流噪声对电机来说
算“大”,同时电机转速不需要很高,
电机内阻大于1Ω,就选云台电机
好后,再修改合适的电机电流限制。(注意: 电机电流和电源电流并不是一回事,简单来 说电机的转速越高,电源电流和电机电流就 越接近)。
odrv0.axis0.motor.config.torque_constant
通常设置为8.27/KV值,这是每1A电流流到
电机所产生的力矩的比值。如果你想以电流A
为单位设置力矩,就将此参数设置为1。
odrv0.axis0.motor.config.calibration_current [A] 设置最大的校准电流。如果电机有负载,设 太小电机不够力去旋转校准,就需要加大校 准电流来实现完整正确的电机校准。
odrv0.axis0.motor.config.current_lim [A].
odrv0.axis0.motor.config.resistance_calib_max_voltage[V] 电机相电阻小,该参数设太高就会导致过流保护 的错误。具体可以通过欧姆定律来大概设置。
odrv0.axis0.controller.config.vel_limit [turn/s].
odrv0.axis0.motor.config. requested_current_range[A]
odrv0.axis0.controller.config.control_mode
❖ 力矩控制
CONTROL_MODE_TORQUE_CONTROL
❖ 速度控制
CONTROL_MODE_VELOCITY_CONTROL
❖ 位置控制 CONTROL_MODE_POSITION_CONTROL
输入模式有很多种,以下列举常用的输入模式, 以及说明每种输入模式需要相应设置的参数:
❖ 关闭输入- INPUT_MODE_INACTIVE
❖ 直接控制- INPUT_MODE_PASSTHROUGH
在这种输入模式下,根据所设置的控制模式 control_mode来控制电机,指令包括
input_pos/input_vel/input_torque,输入指
令后电机直接运转至目标值。
❖ 速度爬升- INPUT_MODE_VEL_RAMP
这种输入模式下,驱动器需要在速度控制模式 下,并会从当前的速度值逐渐爬升/下降到输入
到 input_vel 的目标速度值。在这种模式下,
odrv0.axis0.controller.config.control_mode
需要配置
◼ 爬升速率
odrv0.axis0.controller.config.vel_ramp_rate[turn/sec]
◼ 负载惯量
odrv0.axis0.controller.config.inertia[Nm/(turn/s²)]
❖ 梯形轨迹- INPUT_MODE_TRAP_TRAJ 这种输入模式下,驱动器需要在
在这种模式下,需要配置
◼ 梯形轨迹下的速度限制
odrv0.axis0.trap_traj.config.vel_limit
◼ 梯形轨迹下的加速度限制
odrv0.axis0.trap_traj.config.accel_limit
◼ 梯形轨迹下的加速度限制
odrv0.axis0.trap_traj.config.dccel_limit
机按照加速
度变化轨迹为梯形,位置变化接近曲线。
❖ 力矩爬升- INPUT_MODE_TORQUE_RAMP
input_tor的目标速度值。在这种模式下,需要 配置
◼ 力矩爬升速度
odrv0.axis0.controller.config.torque_ramp_rate
odrv0.axis0.controller.config.vel_gain
odrv0.axis0.controller.config.vel_integrator_gain
odrv0.axis0.controller.config.pos_gain
odrv0.axis0.controller.config.pos_integrator_gain
七、常见问题及其解决
(1)LM5109损坏
(2)AUX_H和AUX_L短路
(3)功率耗散电路下管损坏
(4)逆变电路MOS管损坏
(1) 断电测量AUX_H和AUX_L是否短路,
短路则问题为AUX_H和AUX_L短路
(2) 若无问题,断电测量下管DS是否导通,
导通则问题为功率耗散电路下管损坏
(3) 若无问题,拆除耗散电路两只MOS管,
上电后依旧闪灭则问题为逆变电路故障,若
不再闪灭则问题为功率耗散电路故障
◼ 若依旧闪灭,则按组拆除逆变电路A/B/C三 相的上下管,直到不再闪灭,更换该组
MOS即可
◼ 若不再闪灭,同时测量耗散电路上管下管G
极信号,观察是否会导致上下管同时导通,
或更换耗散电路MOS管,若存在同时导通
的可能或者依旧闪灭,则问题为LM5109损
坏,更换LM5109即可
逆变电路MOS G极虚焊
(1)USB母座焊接问题
(2)CAN收发器损坏
(3)晶振损坏
(1) 测试USB母座DP与DM是否短接,测试
USB母座DM与DP、DM/DP与单片机
PA11/PA12之间的电阻,短路、阻值远大
于22Ω,则问题为USB母座焊接问题
(2) 使用示波器观察晶振是否起振,若未能
观察到8MHz的正弦波,则判定晶振损坏,
应尝试更换晶振,若问题依旧,应检查
VCC/AVCC是否为3.3V,若电压正常,则继 续更换晶振
(3) 使用VS code进行调试,调用堆栈为
“
MX_FREERTOS_Init”函数、
“
construct_objects”函数、
“MX_CAN1_Init”函数,问题定位至CAN
收发器损坏,更换CAN收发器即可
检查三相线与板子是否接触良好。
“ERROR_CPR_POLEPAIRS_MISMATCH”
LP5907
(1)电机极对数设置错误
(2)编码器模式或CPR设置错误
(3)使用SPI模式没有按照5.2配置
(4)电机磁铁距离编码器过远,要求距离为1-3mm
“ERROR_PHASE_RESISTANCE_OUT_OF_RANGE”
按照上述可能原因逐一排查。