Maxon无刷直流电机学习分享

本人采用的是607325的无刷直流电机和607513的编码器,以及STM32的RS232作为MCU与电机的通讯。
以下的内容作为刚开始接触Maxon电机可以学习一下,大佬就不必看了。

  1. 第一步,准备好相关文档
    EPOS4-Application-Notes-Collection(应用字典)-En
    EPOS4-Firmware-Specification(固件手册)-En
    EPOS4-Firmware-Version-Readme-En.
    EPOS4-Module-Compact-50-15-Hardware-Reference-En
    EPOS-Command-Library-En
    EPOS-IDX-Setup-Release-Notes-En
    EPOS控制器概述
    EPOS4-Communication-Guide(连接向导)-En
    EPOS4使用手册
    各个文档的使用顺序可以参照Maxon给出的建议:
    在这里插入图片描述

  2. 选择适合的运行模式(PPM、PVM、HMM、CSP、CSV、CST)
    1、 Profile Position Mode (PPM)(位置模式)
    首先先配置参数:
    其中在这里插入图片描述
    这些参数都是限制参数,具体怎么配置可以打开EPOS4-Firmware-Specification(固件手册)-En,找到上图,并点击上图的箭头,找到相应的指令。
    接下来就是使用控制字等命令参数;
    在这里插入图片描述
    在这里插入图片描述
    “控制字”在不用的模式有不同的定义,使用“控制字”这个命令可以设置好相关位的定义可以使能电机、失能电机、停止电机(失能电机跟停止电机可是不一样的,失能电机是使电机停止工作,而停止模式时,电机还在工作,只不过电机速度为0而已)。
    2、PVM(速度模式)接下来其他几种都是差不多的使用方法,这边我就不过多赘述了。(反正就是选择运行模式+配置参数+运行参数(命令参数))

  3. 使用示范,本人使用的是RS232通讯,PVM模式
    1、首先先根据EPOS4-Module-Compact-50-15-Hardware-Reference连接好各接口
    u8 Buf3[14]={0x90,0x02,0x68,0x04,0x0D,0x60,0x60,0x00,0x03,0x00,0x00,0x00,0xD1,0x5B};//设置PVM模式
    u8 Buf3[14]={0x90,0x02,0x68,0x04,0x0D,0x60,0x60,0x00,0x03,0x00,0x00,0x00,0xD1,0x5B};//设置PVM模式
    u8 Buf4[14]={0x90,0x02,0x68,0x04,0x0D,0x40,0x60,0x00,0x06,0x00,0x00,0x00,0x49,0xCB};//去使能
    u8 Buf5[14]={0x90,0x02,0x68,0x04,0x0D,0x40,0x60,0x00,0x0F,0x00,0x00,0x00,0xD8,0x55};//使能
    int Buf6[14]={0x90,0x02,0x68,0x04,0x0D,0xFF,0x60,0x00,0x14,0x00,0x00,0x00,0xD5,0x84};//设置目标转速20rpm
    u8 Buf7[14]={0x90,0x02,0x68,0x04,0x0D,0x40,0x60,0x00,0x0F,0x01,0x00,0x00,0x6C,0x23};//Halt(使maxon电机停止运转)
    以设置PVM模式为例, 其中 90 02 表示同步帧,其中 DLE 值为 0x90,STX 值为 0x02 ,68 表示写对象的 OpCode, 04 表示数据长度, 0D表示 Node-ID, 60 60 表示对象的 Index, 00 表示对象的 Sub-Index, 03 00 00 00 表示数据内容, BA 09 表示 CRC 校验(校验算法可参考《EPOS4 Communication Guide》或者网上查找相关计算软件)
    以上的这些代码是我在STM32MCU上的代码,用于控制Maxon电机,其中CRC校验可以直接在STM32上面算
    u16 CalcCRC(u8* pDataArray, int ArrayLength)
    {
    u16 i;
    u16 crc=0x0000;
    while(ArrayLength–)
    {
    crc^=(u16)(*pDataArray++) << 8;
    for(i=0;i<8;++i)
    {
    if(crc & 0x8000)
    crc=(crc << 1) ^ 0x1021;
    else
    crc <<= 1;
    }
    }
    return crc;
    }
    这个代码可以用于STM32计算CRC校验码,上面的有些固定代码,我没用CRC校验,除了改变速度采用CRC校验,这样的话执行速度就比较快。

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值