Skip to content

CDFOC 中文说明

dukelec edited this page Sep 27, 2024 · 19 revisions

cdfoc_v4

插头型号: RS-485: molex 5264 (4 pin x 2), motor: molex 5264 (3 pin), sensor: sh1.0 (10 pin)

下载此项目:

git clone --recurse-submodules https://github.com/dukelec/cdfoc

cdfoc_motor

功能框图

block_diagram

GUI 工具

CDBUS GUI 工具: https://github.com/dukelec/cdbus_gui

cdbus_gui_index

打开 CDBUS GUI 主页面后,在 Serial 第一个输入框输入 Available 列表中的目标串口字符串(COMx 或者 ttyACMx)。 (也可以是 0483:5740 等任何可以区分串口的字符串片段。)

Serial 第二个输入框是目标波特率,使用 cdbus bridge 的时候,这里的波特率会被忽略,真实的波特率需要在 cdbus bridge 的配置页面进行配置。 (之所以要单独配置 cdbus bridge 的波特率,是因为 cdbus 支持双速率,而传统的波特率设置只能设置单一的波特率。)

使用 cdbus bridge 的时候,此处波特率设置为一个特殊值 0xcdcd,可以让 bridge 进入配置模式,按照上图,打开 Devices 下面第一个 Open Window 即可配置 bridge。 如果设置的是其它值,无论是 115200 还是 0xcdcc,bridge 都会进入透传模式(透传的前提是数据包符合 cdbus 帧定义)。

bridge 在透传模式下,打开 Devices 下面第二个 Open Window,即可进入 cdfoc 电机的配置页面。 (同一个地址只能打开一个页面,如果之前有打开 bridge 配置页面,要先关闭。)

接通电源后,先向 state 写入 5,然后向 tc_pos 写入目标位置,电机就会转动。

cdbus_gui

修改配置后,往 save_conf 写 1 保存配置到 flash。
如果需要恢复默认配置,修改 magic_code 为其它值,保存到 flash,然后重新上电即可。

波形调试:

plot

通讯协议

除了寄存器列表有区别,协议本身和 CDSTEP 相同,请参见:https://github.com/dukelec/cdstep

操作方法

state 寄存器写入不同数字代表不同模式,在不同模式之间切换时,需要先写 0 返回空闲模式。

校准模式(state = 1)

校准时,电机请不要带负载。

确定 motor_poles

先为 cali_current 设置合适的值,建议偏小一点,以防电机过热。

然后写 1 至 state 进入拖动模式,此时电机部分线圈持续通恒定电流(请尽快完成后续操作,然后写 0 到 state,以防电机过热)。

记下电机初始位置,然后用手转动电机,看电机跳跃多少次回到初始位置,跳跃次数写入到 motor_poles,然后写 1 到 save_conf 保存。

校准编码器

dbg_en 写 1,确保可以在 GUI 界面看到调试打印。

先为 cali_current 设置合适的值,建议偏大一点,让电机锁定更准确,同时要以防电机过热。

然后写 1 至 state 进入拖动模式,此时电机部分线圈持续通恒定电流(请尽快完成后续操作,以防电机过热)。

写 1 至 cali_run 开始校准,电机线圈依次通电,电机先顺时针转一圈,再逆时针转一圈,最后打印计算出来的编码器偏移值,将其写入 bias_encoder,最后保存即可。

写 1 至 state 后,要尽快写 1 至 cali_run,这样可以让线圈轮流通电,分担个别线圈的压力。

如果校准时,电机不是先顺时针旋转(编码器数值增加),则需要调换电机的任意两根接线,改变电机转动方向。

力矩模式(state = 2)

写 2 至 state 进入力矩模式,或称电流模式。

然后往 cal_current 写入合适电流值即可让电机转动。

电流单位为 12bits ADC 的 LSB 数值。

速度模式(state = 3)

state 写 3 进入速度模式。

然后往 cal_speed 写入合适速度值即可让电机转动。

电机一圈划分 0x10000 单位,位置写入此单位数据,譬如从 0 走到 0x10000 就是一整圈。
速度的单位是:多少位置单位 / 秒。

位置模式(state = 5)

state 写 5 进入位置模式

然后往 tc_postc_speedtc_accel 写入合适值即可。

另外,默认可以使用快速通道的命令更新这些参数。

state 模式 4 是不带加减速的位置模式,一般不使用。

命令示范

state 本身的地址是 0x0240,长度 1 个字节,那么上电后锁舵并进入位置模式,发送以下数据到端口 5 即可:

20  40 02  05

20 是子命令 write40 02 是地址 0x0240 的小端格式(除非特別说明,否则都是用小端),05 是写入数值。

完整的包含 CRC 的命令为(主机地址默认为 0,电机地址默认为 0xfe,第 3 字节为数据长度,最后两个字节为 CRC,同 Modbus CRC):

00 fe 05  05 20  40 02  05  58 e6

完整的回复包为:

fe 00 01  40  crc_l crc_h

其中 0x40 表示没有错误,更多内容请参见 CDSTEP 和 CDNET 的说明。

快速读写命令

qxchg_set 默认只用了一个元素,指向 tc_pos, tc_speedtc_accel 这 3 个表项所在的区域,
如果需要修改目标位置参数 tc_pos 为 0,向 端口 6 写数据 20 00 00 00 00 即可(20 是子命令号)。
如果需要同时修改目标位置和目标速度,譬如位置改为 0x00010000,速度改为 0x00005000,则写入 20 00 00 01 00 00 50 00 00.

运行到 0 度,含 CRC 的完整命令:

00 fe 06  06 20  00 00 00 00  63 99

运行到 180 度,含 CRC 的完整命令:
(一圈 0x10000 个单位,180 度为 0x8000)

00 fe 06  06 20  00 80 00 00  62 71

运行到第 5 圈的位置,同时发送速度值(0x00140000 编码器单位/秒,或 14 圈每秒),含 CRC 的完整命令:

00 fe 0a  06 20  00 00 05 00  00 00 14 00  fe 6e

以上三个命令的返回数据示范:

fe 00 0b  40  xx xx xx xx yy yy yy yy  crc_l crc_h

其中 0x40 表示没有错误,xxyyqxchg_ret 定义的返回 cal_pos 等 8 字节数据。

连接 SWD 调试器 和 串口调试

img_v3_02et_3980b339-e4c9-4fa5-bed3-2254a76f318g

如图,不用焊接,歪一点别住即可

一般使用 485 接口调试,很少需要使用 SWD 口调试器 和 串口调试

Clone this wiki locally