

Emm42_V4.x步进闭环驱动器是张大头智控为满足广大用户需求而自主研发的一款稳定可靠的产品,它是基于上一代Emm42_V3.6版本升级而来,不仅延续了其优秀的FOC矢量闭环控制算法,更在其传统的Dir/Step控制模式基础上拓展了通过UART、RS232、RS485、CAN等总线通讯方式来精准的控制电机,满足了更广大的用户需求,适合3D打印、写字机、雕刻机、PLC控制、机械臂、小车比赛等用户使用。

| 主板型号 | Emm42_V4.2 |
| 主控芯片 | 高性能32位ARM处理器 |
| 驱动电路 | 8个高品质MOS管组成双H桥驱动 |
| 传感器 | 工业级高精度16384线磁编码器 |
| 供电电压 | 7-28V |
| 工作电流 | 0-3000mA |
| 信号输入 | 3.3-24V支持共阳/共阴输入、支持PLC的NPN/PNP的24V输入 |
|
闭环反馈频率 | 力矩环20KHz+ 速度环10KHz+ 位置环10KHz+ |
| 最大脉冲频率 | 约120KHz |
| 最高转速 | 2200转+ |
| 最大打印速度 | 180-220mm/s |
| 控制精度 | 小于0.08° |
| 细分支持 | 1-256任意细分 |
| 串口功能 | 速度/位置模式控制、读取/修改参数 |
| 电机线序识别 | 有,线序识别更加准确 |
| 堵转检测 | 有,检测方式更加合理 |
| 恢复出厂设置 | 有 |
| 静音/震动 | 中低速超静音、超低震动 |
| 品名 | Emm42_V4.2 | Emm42_V3.6 |
|
外观 |
|
|
| 发布时间 | 2022年5月 | 2021年3月 |
| 处理器 | 高性能32位ARM处理器 | HC32L130F8UA(48MHz) |
|
闭环反馈频率
| 力矩环20KHz+ 速度环10KHz+ 位置环10KHz+ | 力矩环20KHz 速度环10KHz 位置环10KHz |
| 控制模式 | CAN/485/232/串口/脉冲 | 串口/脉冲 |
| 细分插补算法 | 算法效率提升5.2倍,改善转角 | 有 |
| 最高转速 | 2200转+ | 1000转+ |
| 最大打印速度 | 180-220mm/s | 150-180mm/s |
| 串口功能 | 速度/位置模式控制、读取/修改参数 | 读取参数、修改细分 |
| 通讯针座 | 通用2.54mm插针 | 2.0mm插针 |
| 通讯地址 | 1-247(0作为广播地址 ) | 0xE0-0xE9(无广播地址) |
| 通讯校验 | 可选0x6B、XOR、CRC-8三种 | 无 |
| 曲线加减速 | 有 | 无 |
| 速度档位 | 1279个 | 127个 |
| 电机位置 | 不使能用手转动,电机位置仍更新 | 不使能电机位置不更新 |



闭环PCBA安装完成后,首先要先空载通电对编码器进行校准,供电接线如下图所示:

或者

3D打印主板:直插3D打印转接板到主板,这样供电和信号线就都接好了
接好供电线后上电,闭环驱动板第一次上电会进行自检,可能会出现以下几种情况的提示,请按照相应的步骤进行操作:

电机线序调整方法:用牙签/镊子等尖物把短线6P一头端子戳出来,再按图中的另一种电机线序插回去,重新上电观察屏幕不再提示电机线序错误即可。



(注意:如果需要关闭电机,用手能够拧得动电机的功能,可以在En选项里设置为L,默认是Hold)






串口TTL多机通讯控制接线:

接线:RX接TX,TX接RX,Gnd接Gnd

RS232多机通讯控制接线:

接线:RX接RX,TX接TX,Gnd接Gnd

RS485多机通讯控制接线:

接线:RX接RX,TX接TX,Gnd接Gnd

CAN多机通讯控制接线:

接线:RX接RX,TX接TX,Gnd接Gnd

如上图所示,Emm42_V4.2步进闭环驱动有两种界面,一种是参数显示界面,另一种是菜单设置界面,它们之间相互切换的关系如下:
(1)按Enter按键,可以从参数显示界面切换到菜单设置界面;
(2)在菜单设置界面,按Next按键,可以向下选择下面一项菜单;按Enter按键,可以确认选择当前菜单,进入到选项里面,再按Enter按键,就是确认选择当前选项;
(3)长按Next按键1秒/确认选择Exit,可以从菜单设置界面返回参数显示界面。
参数显示界面一共有3行显示数据,分别是:
(1)360°: 电机转过的实时位置,在不使能下用手转动电机轴,位置仍更新;
(2)0.01err: 转动的位置误差角度,这是一个实时值,跟速度快慢有关系。
(3)0clk: 驱动板接收到的脉冲数,意味着你主板发送了多少个脉冲。
菜单功能:编码器校准
菜单选项:无
菜单作用:闭环模式下对编码器进行线性化插值和电角度对齐,可以提高编码器的线性精度,校准前请确保电机类型(MotType菜单)选择正确,并且确保电机空载校准;
菜单功能:步进电机类型选择
菜单选项:0.9°、1.8°
菜单作用:选择你的42步进电机类型,是0.9°步进电机,还是1.8°步进电机;
菜单功能:控制模式选择
菜单选项:CR_OPEN、CR_vFOC、CR_UART、CR_CAN(只有CAN套餐有这个选项)
菜单作用:选择一种控制模式运行:
菜单功能:设置开环模式的工作电流档位
菜单选项:0、200、400、...、3000
菜单作用:设置开环模式的工作电流档位,闭环模式会根据负载大小自动调整电流的大小,变电流技术。
菜单功能:设置细分步数
菜单选项:1、2、4、8、16、32、64、128、256
菜单作用:设置闭环驱动的细分,要与你的主板设置的细分相同,默认16细分。此外,常规细分1、2、4、8、16、32、64、128、256可以在菜单上修改,其他细分如67细分,需要通过串口/上位机发送命令进行修改;
菜单功能:设置En端口的有效电平
菜单选项:H、L、Hold
菜单作用:选择En端口的有效电平:
注意:En端口不接线情况下,En端口默认是高电平状态;
菜单功能:设置电机旋转的正方向
菜单选项:CW、CCW
菜单作用:选择一种电机旋转的正方向,对于3D打印用户来说,电机移动方向不对,可以在修改主板固件的情况下,修改这个选项来调整电机旋转的方向;
菜单功能:设置闭环电机接收脉冲的边沿检测方式
菜单选项:Rising、Falling、BothEdge
菜单作用:设置闭环电机接收脉冲的边沿检测方式,默认Rising(上升沿检测),可以修改为Falling(下降沿检测)或者BothEdge(双边沿检测)。
菜单功能:设置闭环电机接收脉冲的边沿检测方式
菜单选项:Rising、Falling、BothEdge
菜单作用:设置闭环电机接收脉冲的边沿检测方式,默认Rising(上升沿检测)。
菜单功能:启用/不启用闭环电机接收脉冲的缓冲器,缓冲器为128的长度
菜单选项:Disable、Enable
菜单作用:启用/不启用闭环电机接收脉冲的缓冲器,缓冲器为128的长度;
菜单功能:设置堵转保护功能
菜单选项:OnlySta、Enable
菜单作用:设置电机堵转后自动关闭,保护电机和闭环驱动器不受破坏;
菜单功能:设置内部256细分插补功能
菜单选项:Disable、Enable
菜单作用:使能(Enable)选项后,闭环驱动器会将你设置的当前细分值,如16细分,内部自动插补到最高256细分去运行,这将有效的减少电机低速运动时的震动和噪音;
菜单功能:设置串口TTL通讯波特率
菜单选项:Disable、9600、19200、25000、38400、57600、115200
菜单作用:设置串口TTL通讯波特率,默认是38400;
菜单功能:设置串口TTL多机通讯地址
菜单选项:1、2、3、4、5、6、7、8、9、10
菜单作用:设置串口TTL多机通讯地址,常规地址1-10可以在菜单上修改,其他地址如67地址,需要通过串口/上位机发送命令进行修改,支持1-247的地址,0为广播地址,发送命令时,如果地址为0,则所有连接到通讯上的闭环驱动都会执行该命令;
菜单功能:设置串口TTL通讯校验字
菜单选项:0x6B、XOR、CRC-8
菜单作用:设置串口TTL通讯校验字,用于在每条命令的最后加上一个字节的该校验字,保证通讯的准确。0x6B为固定校验字,XOR和CRC-8校验见“通讯控制”一节;
菜单功能:设置通讯控制协议
菜单选项:Custom
菜单作用:选择一种通讯控制协议,目前仅支持自定义协议,用于后面拓展支持更多的通讯协议,如Modbus等;
菜单功能:设置串口通讯位置控制指令,内部发送完成脉冲后,是否返回01 9F 6B
菜单选项:Disable、Enable
菜单作用:设置串口通讯位置控制指令,内部发送完成脉冲后,是否返回01 9F 6B,默认返回,指示闭环电机已经全部更新完成该位置控制指令。
菜单功能:设置单圈上电自动回零模式
菜单选项:Disable、DirMode、NearMode
菜单作用:Emm42_V4.0闭环驱动支持单圈上电自动回零功能,有下面两种模式;
注意:这是单圈上电自动回零,并非多圈,回零成功/失败,可通过通讯读取标志位;
菜单功能:设置单圈上电自动回零的零点
菜单选项:无
菜单作用:开启O_Mode后,需要通过该选项设置单圈上电自动回零的零点,设置成功后,会提示“Origin Set Done!”;
菜单功能:设置单圈上电自动回零的速度档位
菜单选项:1、2、3、4、5
菜单作用:选择一种单圈上电自动回零的速度档位,档位越大,回零速度越快,相应的自动回零时的扭矩就越少,默认是3档位的回零速度;
菜单功能:设置方向模式单圈上电自动回零的方向
菜单选项:CW、CCW
菜单作用:设置方向模式单圈上电自动回零的方向;
菜单功能:设置闭环驱动器内部的加速度
菜单选项:Disable、286、412、538、664、790、916、1042
菜单作用:电机运行过程中观察OLED屏幕的第2行误差数据变化,如果该数据一直在较大值上(8.多以上)跳动,可以将ACC增加至538或者更高,可以提高打印速度,但应该要确保XY轴的ACC选项值保持一样,并且不宜设置过大,令误差数据变化维持在6.多以下跳动比较合适;
5.2.2 CAN通讯菜单功能
菜单功能:设置CAN通讯数据帧的帧类型
菜单选项:Standard、Extended
菜单作用:设置CAN通讯数据帧的帧类型,Standard为标准帧,Extended为扩展帧;
菜单功能:设置CAN通讯数据帧的帧ID
菜单选项:1、2、3、4、5、6、7、8、9、10
菜单作用:设置CAN通讯数据帧的帧ID,类似于串口TTL通讯的地址;
菜单功能:设置CAN通讯数据帧的帧速率
菜单选项:50K、250K、500K、1MHz
菜单作用:设置CAN通讯数据帧的帧速率,类似于串口TTL通讯的波特率;
菜单功能:设置CAN通讯的校验字
菜单选项:0x6B、XOR、CRC-8
菜单作用:与串口TTL通讯的DatCheck功能一样,见主菜单“DatCheck”说明;
菜单功能:设置CAN通讯的控制协议
菜单选项:Custom
菜单作用:与串口TTL通讯的Protocol功能一样,见主菜单“Protocol”说明;
两相42步进电机,通常有0.9°和1.8°两种类型,后者最为常用。
以1.8°电机类型为例,1.8°是指步进电机的步距角,通俗的含义是,在不进行细分(即1细分)的情况下,发送1个脉冲,步进电机就转动一个步距角,即1.8°,因此,发送200个脉冲就可以让电机转动一圈,即200 × 1.8°= 360°。
然而,通常情况下,驱动器厂商为了减少步进电机运行时的震动和噪音,提高运行质量,都会采用细分驱动技术,也就是将一个步距角拆分成更小的角度去驱动和控制。例如16细分下,你需要发送16个脉冲才能让电机转动一个步距角1.8°,也就是说,16细分下,你发送1个脉冲,电机会转动1.8°/ 16 = 0.1125°,发送3200个脉冲,电机才会转动一圈。
步进电机的细分驱动技术,能够有效减少步进电机运行时的震动和噪音,并在一定程度上提高了精度,但受限于实际情况的影响,精度并不会随着细分数增大而继续提高。
脉冲信号,相当于控制器的一个IO取反两次,标准的脉冲信号如下图所示:

脉冲控制,简而言之,就是通过向闭环电机的Stp引脚发送脉冲来精确的控制电机运行的速度和角度。其中,可以通过改变脉冲周期T的持续时间来改变闭环电机运行过程中的速度,脉冲周期T的时间越短,闭环电机运行越快。其次,可以通过发送的脉冲数量来控制闭环电机最终运行的角度,以1.8°步进电机,16细分为例,就可以通过向闭环电机发送3200个脉冲来让电机旋转一圈。此外 ,如果需要控制电机的方向,可以通过控制Dir引脚的电平状态来控制,高电平一个方向,低电平就是另一个方向。另外,如果还想要控制闭环电机的使能状态,可以通过控制En引脚的电平状态来控制,对于Emm42闭环电机来说,控制En使能引脚的电平状态之前,需要先在En菜单选项里设置En端口的有效电平,以设置L为例,就是低电平有效的意思,那可以控制En引脚为低电平状态,闭环电机就处于使能状态,可以正常接收外部发送的方向和脉冲信号,如果控制En引脚为高电平状态,闭环电机就处于不使能状态,此时可以用手拧动电机轴,闭环电机也不会响应外部发送的方向和脉冲信号。脉冲控制如下图所示:
按照前面的章节安装并校准好Emm42闭环,再根据对应的接线图接好线路后 ,就可以对闭环电机进行通讯控制。
通讯控制是指使用另一个单片机/PLC板卡/电脑等上位机,通过发指令的形式对闭环电机进行控制,发指令又是指按照既定通讯协议的数据格式发送一串十六进制数据,发送的这一串十六进制数据就是一条命令。
Emm42闭环电机的通讯协议是自定义协议,通讯协议每一条命令的格式会在下面的章节分别给出,根据通讯协议对闭环电机下发不同的命令,就可以对其进行读取/修改系统参数,也可以进行速度/位置模式的控制。
使用串口通讯控制之前,需要先对闭环电机进行一些参数的设置:
首先,在Mode菜单中选择CR_UART,表示使用串口通讯进行控制;
接着,在UartBaud菜单中选择与你上位机相同的波特率,默认是38400;
再者,在UartAddr菜单中选择当前闭环电机的通讯地址,默认是1;
然后,在DatCheck菜单中选择通讯的校验方式,默认是固定校验,即0x6B;
最后,在Protocol菜单中选择一种通讯协议,当前仅支持自定义协议,暂不用设置;
设置完成后,就可以通过串口通讯的方式对Emm42闭环电机进行控制。例如,可以使用通用的串口助手软件,或者使用张大头智控提供的上位机软件,对Emm42闭环电机下发命令,如图所示:
串口助手:

上位机软件:

返回命令说明:
上位机向闭环电机下发命令后,它会根据不同的情况返回不同的命令:
注意:Emm42闭环电机可设置的地址为1-247,地址0作为广播地址,上位机以0地址下发命令后,所有连接到上位机的闭环电机都会执行这条命令,如果其中有地址为1的闭环电机,则它会返回命令,其他地址的闭环电机不返回命令。
下面以默认的设置,即通讯地址UartAddr为1,通讯校验DatCheck为0x6B为例,说明串口通讯协议中每一条命令的数据格式:
命令格式:地址 + 0x0E + 0x52 + 校验字节
命令示例:发送01 0E 52 6B
命令作用:只有触发了堵转保护功能后,下发该命令才有效,可以解除堵转保护;
命令格式:地址 + 0x30 + 校验字节
命令示例:发送01 30 6B
命令作用:读取位置传感器的数值,数据类型为uint16_t,范围为0-65535,例如返回01 23 15 6B后,上位机可以对数据进行拼接:
编码器数值 = (uint16_t)(
((uint16_t)0x23 << 8) |
((uint16_t)0x15 << 0)
);
命令格式:地址 + 0x33 + 校验字节
命令示例:发送01 33 6B
命令作用:读取输入脉冲的数值,即对应小屏幕上的第3行的数据,数据类型为
int32_t,范围为-2147483647-2147483647,例如返回01 14 63 33 51 6B后,上位机
可以对数据进行拼接:
输入脉冲数 = (int32_t)(
((int32_t)0x14 << 24) |
((int32_t)0x63 << 16) |
((int32_t)0x33 << 8) |
((int32_t)0x51 << 0)
);
命令格式:地址 + 0x36 + 校验字节
命令示例:发送01 36 6B
命令作用:读取电机的实时位置,即对应小屏幕上的第1行的数据,数据类型为int32_t,范围为-2147483647-2147483647,例如返回01 56 23 75 04 6B后,上位机可以对数据进行拼接:
电机位置 = (int32_t)(
((int32_t)0x56 << 24) |
((int32_t)0x23 << 16) |
((int32_t)0x75 << 8) |
((int32_t)0x04 << 0)
);
转换成角度的计算方式: 电机转过的角度 = (电机位置 * 360) / 65536;
命令格式:地址 + 0x39 + 校验字节
命令示例:发送01 39 6B
命令作用:读取电机设定位置与实际位置的差值,即对应小屏幕上的第2行的数据,
数据类型为int16_t,范围为-32767-32767,例如返回01 75 84 6B后,上位机可以对数据进行拼接:
位置误差 = (int16_t)(
((int16_t)0x75 << 8) |
((int16_t)0x84 << 0)
);
转换成角度的计算方式: 电机转过的角度 = (位置误差 * 360) / 65536;
命令格式:地址 + 0x3A + 校验字节
命令示例:发送01 3A 6B
命令作用:读取闭环电机的使能状态,数据类型为uint8_t,数值为00或01,例如:
返回01 00 6B表示闭环电机处于不使能状态;
返回01 01 6B表示闭环电机处于使能状态;
命令格式:地址 + 0x3E + 校验字节
命令示例:发送01 3E 6B
命令作用:读取闭环电机的堵转标志,数据类型为uint8_t,数值为00或01,例如:
返回01 00 6B表示闭环电机当前没发生堵转;
返回01 01 6B表示闭环电机当前处于堵转状态;
命令格式:地址 + 0x3F + 校验字节
命令示例:发送01 3F 6B
命令作用:读取闭环电机的堵转标志,数据类型为uint8_t,数值为00或01,例如:
返回01 00 6B表示上电时闭环电机触发单圈上电自动回零状态正常;
返回01 01 6B表示上电时闭环电机触发单圈上电自动回零状态不正常,如回零过程堵转、回零方向设置错误等;
命令格式:地址 + 0x84 + 细分值 + 校验字节
命令示例:发送01 84 10 6B
命令作用:修改当前细分步数为16,该命令可以将闭环电机当前的细分步数修改为1-256任意细分步数,例如:
发送01 84 00 6B修改闭环电机当前细分步数为256;
发送01 84 03 6B修改闭环电机当前细分步数为3;
发送01 84 FF 6B修改闭环电机当前细分步数为255;
命令格式:地址 + 0xAE + 串口通讯地址 + 校验字节
命令示例:发送01 AE 10 6B
命令作用:修改当前串口通讯地址为16,该命令可以将闭环电机当前的串口通讯地址修改为1-247任意数值,例如:
发送01 84 04 6B修改闭环电机当前串口通讯地址为4;
发送01 84 46 6B修改闭环电机当前串口通讯地址为70;
命令格式:地址 + 0xF3 + 使能状态 + 校验字节
命令示例:发送01 F3 00 6B
命令作用:控制闭环电机的使能状态,例如:
发送01 F3 00 6B可以控制闭环电机处于不使能状态;
发送01 F3 01 6B可以控制闭环电机处于使能状态;
命令格式:地址 + 0xF6 + 方向和速度(共用2个字节) + 加速度 + 校验字节
命令示例:发送01 F6 14 FF 00 6B
其中,0x14 0xFF两个字节表示方向和速度,最高的半字节0x1表示方向,剩下的0x4FF表示速度档位,最大为4FF,即1279个速度档位;方向和速度后面的字节0x00
表示加速度档位,即启动和停止时的曲线加减速档位,加速度值如果是0xFF,即255,则不启用曲线加减速功能,直接以指定的速度去运行。如果需要控制闭环电机停止,可以将速度档位设置为0发送命令,例如,发送01 F6 10 00 00 6B或01 F6 00 00 00 6B都可以使闭环电机停止运动。
命令作用:控制闭环电机按照设定的方向、速度和加速度进行一直旋转,加速度是指设置启动和停止时曲线加减速档位,可以减少电机启动和停止的震动,例如:
发送01 F6 12 FF 00 6B可以使闭环电机以逆时针方向,0x2FF速度档位,0x00加速度档位一直旋转;
发送01 F6 02 FF FF 6B可以使闭环电机以顺时针方向,0x2FF速度档位,0xFF加速度档位一直旋转;
发送01 F6 10 00 00 6B可以使闭环电机以0x00加速度档位缓慢停止;
发送01 F6 10 00 FF 6B可以使闭环电机立即停止;
命令格式:地址 + 0xFF + 存储/清除 + 校验字节
命令示例:发送01 FF C8 6B(存储)、发送01 FF CA 6B(清除)
命令作用:存储/清除闭环电机正反转,即速度模式当前运行的的方向/速度/加速度参数,存储后下次上电会按照这些参数自动运行,例如:
发送01 FF C8 6B存储闭环电机正反转,即速度模式当前的参数;
发送01 FF CA 6B清除闭环电机上一次存储的参数;
命令格式:
地址 + 0xFD + 方向和速度(2字节) + 加速度 + 脉冲数(3字节) + 校验字节
命令示例:01 FD 14 FF 00 00 0C 80 6B
其中,0x14 0xFF两个字节表示方向和速度,最高的半字节0x1表示方向,剩下的0x4FF表示速度档位,最大为4FF,即1279个速度档位;方向和速度后面的字节0x00表示加速度档位,即启动和停止时的曲线加减速档位,加速度值如果是0xFF,即255,则不启用曲线加减速功能,直接以指定的速度去运行。如果需要控制闭环电机缓慢停止,可以将速度档位设置为0,如果需要控制闭环电机立即停止,可以将速度档位设置为0,加速度档位设置为255;加速度档位后面的3个字节是脉冲数,例如16细分下发送3200个脉冲就可以让1.8°的电机转动一圈。
命令作用:控制闭环电机按照设定的方向、速度和加速度进行相对位置运动,例如:
发送01 FD 02 FF 00 00 0C 80 6B可以使闭环电机以顺时针方向,0x2FF速度档位,0x00加速度档位运动0x000C80个脉冲,即3200个脉冲;
发送01 FD 12 FF 45 00 19 00 6B可以使闭环电机以顺时针方向,0x2FF速度档位,0x45加速度档位运动0x001900个脉冲,即6400个脉冲;
发送01 FD 10 00 FF 00 19 00 6B可以使闭环电机缓慢停止(速度档位为0);
发送01 FD 12 FF FF 00 00 00 6B可以使闭环电机立即停止(脉冲为0,加速度为255);
注意:发送该命令后,闭环电机收到指令,会先返回01 02 6B的命令进行应答;紧接着,闭环电机内部更新完全部的脉冲(位置),会返回01 9F 6B的命令,表示闭环电机已经全部更新完脉冲(位置),如果不想返回,可在PcmdRet选项设置为Disable。
使用CAN通讯控制之前,需要先对闭环电机进行一些参数的设置:
首先,在Mode菜单中选择CR_CAN,表示使用CAN通讯进行控制;
接着,在CAN_FrTy菜单中选择与你上位机相同的帧类型,默认是标准帧类型;
再者,在CAN_FrID菜单中选择当前闭环电机的帧ID,默认是1;
接着,在CAN_Rate菜单中选择与你上位机相同的CAN通讯速率,默认是500K;
然后,在DatCheck菜单中选择通讯的校验方式,默认是固定校验,即0x6B;
最后,在Protocol菜单中选择一种通讯协议,当前仅支持自定义协议,暂不用设置;
设置完成后,就可以通过CAN通讯的方式对Emm42闭环电机进行控制。需要注意的是,在CAN通讯上,闭环电机返回命令时,除帧ID外,数据段的第一个字节仍是帧ID。
返回命令说明:
上位机向闭环电机下发命令后,它会根据不同的情况返回不同的命令:
注意:Emm42闭环电机可设置的帧ID为1-247,帧ID 0作为广播帧,上位机以0为帧ID下发命令后,所有连接到上位机的闭环电机都会执行这条命令,如果其中有帧ID为1的闭环电机,则它会返回命令,其他帧ID的闭环电机不返回命令。
下面以默认的设置,即帧ID CAN_FrID为1,通讯校验DatCheck为0x6B为例,说明CAN通讯协议中每一条命令的数据格式:
命令格式:硬件帧ID + 0x06 + 0x45 + 校验字节
命令示例:发送01(设置你的CAN通讯的硬件帧ID为01) 06 45 6B
命令作用:下发该命令后,可以触发闭环电机进行编码器校准,对应屏幕上的Cal;
命令格式:硬件帧ID + 0x0A + 0x6D + 校验字节
命令示例:发送01(设置你的CAN通讯的硬件帧ID为01) 0A 6D 6B
命令作用:下发该命令后,可以将闭环电机的当前电机位置清零,即设置为零点;
命令格式:硬件帧ID + 0x0E + 0x52 + 校验字节
命令示例:发送01(设置你的CAN通讯的硬件帧ID为01) 0E 52 6B
命令作用:只有触发了堵转保护功能后,下发该命令才有效,可以解除堵转保护;
命令格式:硬件帧ID + 0x30 + 校验字节
命令示例:发送01(设置你的CAN通讯的硬件帧ID为01) 30 6B
命令作用:读取位置传感器的数值,数据类型为uint16_t,范围为0-65535,例如
返回01 23 15 6B后,上位机可以对数据进行拼接:
编码器数值 = (uint16_t)(
((uint16_t)0x23 << 8) |
((uint16_t)0x15 << 0)
);
命令格式:硬件帧ID + 0x33 + 校验字节
命令示例:发送01(设置你的CAN通讯的硬件帧ID为01) 33 6B
命令作用:读取输入脉冲的数值,即对应小屏幕上的第3行的数据,数据类型为
int32_t,范围为-2147483647-2147483647,例如返回01 14 63 33 51 6B后,上位机可以对数据进行拼接:
输入脉冲数 = (int32_t)(
((int32_t)0x14 << 24) |
((int32_t)0x63 << 16) |
((int32_t)0x33 << 8) |
((int32_t)0x51 << 0)
);
命令格式:硬件帧ID + 0x36 + 校验字节
命令示例:发送01(设置你的CAN通讯的硬件帧ID为01) 36 6B
命令作用:读取电机的实时位置,即对应小屏幕上的第1行的数据,数据类型为int32_t,范围为-2147483647-2147483647,例如返回01 56 23 75 04 6B后,上位机可以对数据进行拼接:
电机位置 = (int32_t)(
((int32_t)0x56 << 24) |
((int32_t)0x23 << 16) |
((int32_t)0x75 << 8) |
((int32_t)0x04 << 0)
);
转换成角度的计算方式: 电机转过的角度 = (电机位置 * 360) / 65536;
命令格式:硬件帧ID + 0x39 + 校验字节
命令示例:发送01(设置你的CAN通讯的硬件帧ID为01) 39 6B
命令作用:读取电机设定位置与实际位置的差值,即对应小屏幕上的第2行的数据,
数据类型为int16_t,范围为-32767-32767,例如返回01 75 84 6B后,上位机可以对数据进行拼接:
位置误差 = (int16_t)(
((int16_t)0x75 << 8) |
((int16_t)0x84 << 0)
);
转换成角度的计算方式: 电机转过的角度 = (位置误差 * 360) / 65536;
命令格式:硬件帧ID + 0x3A + 校验字节
命令示例:发送01(设置你的CAN通讯的硬件帧ID为01) 3A 6B
命令作用:读取闭环电机的使能状态,数据类型为uint8_t,数值为00或01,例如:
返回01 00 6B表示闭环电机处于不使能状态;
返回01 01 6B表示闭环电机处于使能状态;
命令格式:硬件帧ID + 0x3E + 校验字节
命令示例:发送01(设置你的CAN通讯的硬件帧ID为01) 3E 6B
命令作用:读取闭环电机的堵转标志,数据类型为uint8_t,数值为00或01,例如:
返回01 00 6B表示闭环电机当前没发生堵转;
返回01 01 6B表示闭环电机当前处于堵转状态;
命令格式:硬件帧ID + 0x3F + 校验字节
命令示例:发送01(设置你的CAN通讯的硬件帧ID为01) 3F 6B
命令作用:读取闭环电机的堵转标志,数据类型为uint8_t,数值为00或01,例如:
返回01 00 6B表示上电时闭环电机触发单圈上电自动回零状态正常;
返回01 01 6B表示上电时闭环电机触发单圈上电自动回零状态不正常,如回零过程堵转、回零方向设置错误等;
命令格式:硬件帧ID + 0x84 + 细分值 + 校验字节
命令示例:发送01(设置你的CAN通讯的硬件帧ID为01) 84 10 6B
命令作用:修改当前细分步数为16,该命令可以将闭环电机当前的细分步数修改为1-256任意细分步数,例如:
发送01 84 00 6B修改闭环电机当前细分步数为256;
发送01 84 03 0x6B修改闭环电机当前细分步数为3;
发送01 84 FF 0x6B修改闭环电机当前细分步数为255;
命令格式:硬件帧ID + 0xAE + 串口通讯地址 + 校验字节
命令示例:发送01(设置你的CAN通讯的硬件帧ID为01) AE 10 6B
命令作用:修改当前串口通讯地址为16,该命令可以将闭环电机当前的串口通讯地址修改为1-247任意数值,例如:
发送01 84 04 6B修改闭环电机当前串口通讯地址为4;
发送01 84 46 6B修改闭环电机当前串口通讯地址为70;
命令格式:硬件帧ID + 0xF3 + 使能状态 + 校验字节
命令示例:发送01(设置你的CAN通讯的硬件帧ID为01) F3 00 6B
命令作用:控制闭环电机的使能状态,例如:
发送01 F3 00 6B可以控制闭环电机处于不使能状态;
发送01 F3 01 6B可以控制闭环电机处于使能状态;
命令格式:硬件帧ID + 0xF6 + 方向和速度(共用2个字节) + 加速度 + 校验字
命令示例:发送01(设置你的CAN通讯的硬件帧ID为01) F6 14 FF 00 6B
其中,0x14 0xFF两个字节表示方向和速度,最高的半字节0x1表示方向,剩下的0x4FF表示速度档位,最大为4FF,即1279个速度档位;方向和速度后面的字节0x00
表示加速度档位,即启动和停止时的曲线加减速档位,加速度值如果是0xFF,即255,则不启用曲线加减速功能,直接以指定的速度去运行。如果需要控制闭环电机停止,可以将速度档位设置为0发送命令,例如,发送01 F6 10 00 00 6B或01 F6 00 00 00 6B都可以使闭环电机停止运动。
命令作用:控制闭环电机按照设定的方向、速度和加速度进行一直旋转,加速度是指设置启动和停止时曲线加减速档位,可以减少电机启动和停止的震动,例如:
发送01 F6 12 FF 00 6B可以使闭环电机以逆时针方向,0x2FF速度档位,0x00加速度档位一直旋转;
发送01 F6 02 FF FF 6B可以使闭环电机以顺时针方向,0x2FF速度档位,0xFF加速度档位一直旋转;
发送01 F6 10 00 00 6B可以使闭环电机以0x00加速度档位缓慢停止;
发送01 F6 10 00 FF 6B可以使闭环电机立即停止;
命令格式:硬件帧ID + 0xFF + 存储/清除 + 校验字节
命令示例:
发送01(设置你的CAN通讯的硬件帧ID为01) FF C8 6B(存储)
发送01(设置你的CAN通讯的硬件帧ID为01) FF CA 6B(清除)
命令作用:存储/清除闭环电机正反转,即速度模式当前运行的的方向/速度/加速度参数,存储后下次上电会按照这些参数自动运行,例如:
发送01 FF C8 6B存储闭环电机正反转,即速度模式当前的参数;
发送01 FF CA 6B清除闭环电机上一次存储的参数;
命令格式:
硬件帧ID + 0xFD + 方向和速度(2字节) + 加速度 + 脉冲数(3字节) + 校验字
命令示例:01(设置你的CAN通讯的硬件帧ID为01) FD 14 FF 00 00 0C 80 6B
其中,0x14 0xFF两个字节表示方向和速度,最高的半字节0x1表示方向,剩下的0x4FF表示速度档位,最大为4FF,即1279个速度档位;方向和速度后面的字节0x00表示加速度档位,即启动和停止时的曲线加减速档位,加速度值如果是0xFF,即255,则不启用曲线加减速功能,直接以指定的速度去运行。如果需要控制闭环电机缓慢停止,可以将速度档位设置为0,如果需要控制闭环电机立即停止,可以将速度档位设置为0,加速度档位设置为255;加速度档位后面的3个字节是脉冲数,例如16细分下发送3200个脉冲就可以让1.8°的电机转动一圈。
命令作用:控制闭环电机按照设定的方向、速度和加速度进行相对位置运动,例如:
发送01 FD 02 FF 00 00 0C 80 6B可以使闭环电机以顺时针方向,0x2FF速度档位,0x00加速度档位运动0x000C80个脉冲,即3200个脉冲;
发送01 FD 12 FF 45 00 19 00 6B可以使闭环电机以顺时针方向,0x2FF速度档位,0x45加速度档位运动0x001900个脉冲,即6400个脉冲;
发送01 FD 10 00 FF 00 19 00 6B可以使闭环电机缓慢停止(速度档位为0);
发送01 FD 12 FF FF 00 00 00 6B可以使闭环电机立即停止(脉冲为0,加速度为255);
注意:发送该命令后,闭环电机收到指令,会先返回01 02 6B的命令进行应答;紧接着,闭环电机内部更新完全部的脉冲(位置),会返回01 9F 6B的命令,表示闭环电机已经全部更新完脉冲(位置),如果不想返回,可在PcmdRet选项设置为Disable。
按照前面章节安装好模块,接好线,并校准好闭环电机,确保闭环电机在闭环模式/串口模式/CAN模式下能够正常的工作。
首先,上电后先设置En选项为H,关闭电机;然后用手拧动电机到零点位置;
接着,设置O_Mode选项为DirMode方向回零模式(NearMode为就近回零模式)、设置O_Speed选项为3档为回零速度、设置O_Dir选项为CW顺时针回零方向;
然后,点击Set O设置当前位置为单圈零点。
紧接着,设置En选项为原来的Hold模式。
最后,断电,用手拧开电机轴到别处,重新上电,可观察到电机自动回到设置零点。
注意:如果屏幕显示"Back to", " Origin", "Fail!",回零失败,请将O_Dir选项设置为CCW,重新测试。

(1)请不要带电拔插6P的通讯线和4P的电机线,以免损坏闭环驱动器。
(2)上电校准电机的时候电机左右抖动,或者提示"Reverse", " Lookup", "Error!",请先断电,将A+A-或B+B-两根线对调一下,重新上电校准。
(3)闭环电机运行的时候,出现Err17.99°或抖动,请先断电,检查一下磁铁是否粘偏或粘歪,请重新粘平磁铁到电机轴中心,然后重新上电校准。
(4)串口通讯,用上位机发送指令,提示指令下发失败,请检查串口的接线方式:
(5)串口通讯,用上位机发送指令,提示指令参数错误,请将Mode选项改为CR_UART。
(6)3D打印模型倾斜,请确保XY两个轴都加装了闭环驱动,保证运行速度的一致性。
为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。问题1)我想知道rubyonrails是否有功能类似于primefaces的gem。我问的原因是如果您使用primefaces(http://www.primefaces.org/showcase-labs/ui/home.jsf),开发人员无需担心javascript或jquery的东西。据我所知,JSF是一个规范,基于规范的各种可用实现,prim
本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01 客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02 数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit
我们将我们的应用程序从Rails4.1.14升级到4.2.5.1并遇到了以下问题:string="SomeString"ar_model=SomeArModel.newar_model.some_attribute=string#nextlineistruefor4.1,butfailsfor4.2ar_model.some_attribute.object_id==string.object_id显然,对象setter会复制每个对象(如果我有一个数组,里面的每个对象也会被复制),我想知道,这是不是有意为之并且是某些新安全功能的一部分?更新我将ruby-2.2.2p95用于两个ra
我使用的是最新版本的Chrome(32.0.1700.107)和Chrome驱动程序(V2.8)。但是当我在Ruby中使用以下代码运行示例测试时:require'selenium-webdriver'WAIT=Selenium::WebDriver::Wait.new(timeout:100)$driver=Selenium::WebDriver.for:chrome$driver.manage.window.maximize$driver.navigate.to'https://www.google.co.in'defapps_hoverele_hover=$driver.find_
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。多年来,我一直在使用多种语言进行编程,并且认为自己总体上相当擅长。但是,我从未编写过任何自动化测试:没有单元测试,没有TDD,没有BDD,什么都没有。我已经尝试开始为我的项目编写适当的测试套件。我可以看到在进行任何更改后能够自动测试项目中所有代码的理论值(value)。我可以看到像RSpec和Mocha这样的测试框架应该如何使设置和运行所述测试变得相当容易
如果我在功能规范中调用url_for,它会返回一个以http://www.example.com/开头的绝对URL.Capybara会很乐意尝试加载该站点上的页面,但这与我的应用程序无关。以下是重现该问题的最少步骤:从这个Gemfile开始:source'https://rubygems.org'gem"sqlite3"gem"jquery-rails"gem"draper"gem"rails",'4.1.0'gem"therubyracer"gem"uglifier"gem"rspec-rails"gem"capybara"gem"poltergeist"gem"launchy"运行
我正在尝试为ChefRecipe编写一个库,以简化一些常见的搜索。例如,我希望能够在cookbook/libraries/library.rb中执行类似的操作,然后从同一Recipe中的Recipe中使用它:moduleExampledefself.search_attribute(attribute_name)returnsearch(:nodes,node[attribute_name])endend问题是,在Chef库文件中,node对象或search函数都不可用。似乎可以使用Chef::Search::Query.new().search(...)进行搜索,但我找不到任何可以访
在笔者前面有一篇文章《驱动开发:断链隐藏驱动程序自身》通过摘除驱动的链表实现了断链隐藏自身的目的,但此方法恢复时会触发PG会蓝屏,偶然间在网上找到了一个作者介绍的一种方法,觉得有必要详细分析一下他是如何实现的进程隐藏的,总体来说作者的思路是最终寻找到MiProcessLoaderEntry的入口地址,该函数的作用是将驱动信息加入链表和移除链表,运用这个函数即可动态处理驱动的添加和移除问题。MiProcessLoaderEntry(pDriverObject->DriverSection,1)添加MiProcessLoaderEntry(pDriverObject->DriverSection,
我以前在Laravel4上工作过,它有一个很棒的日志查看器工具laravellogviewer查看demo我正在寻找与Rubyonrails4.2非常相似的东西,如果你们知道Rails4.2的任何好的可视化日志记录GEM,请告诉我..从代码我需要记录不同的日志级别,这个工具应该直观地组织我的日志,谢谢.. 最佳答案 这应该可以帮助您入门https://github.com/shadabahmed/logstasher如其所说Thisgemisheavilyinspiredfromlograge,butit'sfocusedonone