FOC(电机矢量控制)串口通信协议

1、SCI通信模式配置

波特率921600,不校验,8个字符长度,1个停止位。

RX FIFO中断深度1TX FIFO中断深度0.

2、收发流程

(1)先收上位机发来的数据

如果帧头是AA或者BB或者55,则接收数据。

RecData_ctrl_tmp[0],放置帧头;

RecData_ctrl_tmp[1]~ [7],放置数据;

RecData_ctrl_tmp[8],放置校验和;

2)数据拼接

Rec_mode.Head = RecData_ctrl_tmp[0],放置帧头

如果帧头是AA55:工作模式

Rec_mode.Data0=RecData_ctrl_tmp[1][2][3]; //数据(暂未用)

Rec_mode.Data1=RecData_ctrl_tmp[4][5][6];  //数据

temp = (int32)(([4]*65536) + ([5]*256) + [6]);

Rec_mode.Data1 = temp*0.01-10000;

Rec_mode.CmdMode=RecData_ctrl_tmp[7];  //[7]是工作模式

如果帧头是BB:参数配置模式

 Rec_mode.FrameCnt = RecData_ctrl_tmp[2];  //帧计数

 Rec_mode.ParaSet  = RecData_ctrl_tmp[3];  //指令

Rec_mode.CmdMode  = 0x04;    //参数配置时应停机

根据Rec_mode.ParaSet对不同的参数进行调整。

3)解析上位机指令

根据Rec_mode.CmdMode选择执行不同的流程。(0电流环,1速度环,2位置环,3停机,4参数配置,并将模式回传给上位机Snd_mode.CmdModeFdb)。Rec_mode.Data1为上位机发来的具体指令值。

4)选择需要监测的数据

Snd_mode.Data0Data1Data2 Data3

可以将需要监测的数据赋给Data0Data1Data2Data3,就能将数据传送给上位机,并保存下来,利用Matlab进行分析。

(5)数据处理

如果收到的帧头是55

SndData_ctrl_tmp[0]=0x55;

SndData_ctrl_tmp[1] = Snd_mode.CmdModeFdb;  //工作模式回传

SndData_ctrl_tmp[2] = Snd_mode.FaultStatus; //故障模式回传

ftemp1=(short)(Snd_mode.Data0 *100.0); SndData_ctrl_tmp[3]=(ftemp1>>8)&0x00FF;  //高8位放在[3]

SndData_ctrl_tmp[4]=ftemp1&0xFF;

[5\6]Data1,[7\8]Data2,[9\10]Data3,[9\10]未用。

SndData_ctrl_tmp[13]放数据[1]~[12]的校验和。

如果收到的帧头是AABB

SndData_ctrl_tmp[0] = 0xCC;

[1]~ [9]放PI参数 

SndData_ctrl_tmp[10] = Snd_mode.FaultStatus;故障码

SndData_ctrl_tmp[11] = Rec_mode.FrameCnt;  调参次数

SndData_ctrl_tmp[12] = Snd_mode.CmdModeFdb; //工作模式回传

SndData_ctrl_tmp[13]放数据[1]~[12]的校验和。

6)回传数据

每1ms,向上位机回传SndData_ctrl_tmp[1]~[14]

程序中设计的标志位,比如Rec_mode.flag_NewSnd_mode.flag_New等,是为了让数据传送有条不紊的进行,即以下几个流程按顺序执行。

    scic_ctrl_RecData();    //从测控串口接收数据

    RecData_Ctrl_Update();  //接收数据更新

    Message_Ctrl_Decode();  //数据解码

    Message_Ctrl_Encode();  //要发送的数据及回传数据编码

SndData_Ctrl_Update();  //发送数据更新

以上即为DSP程序中的通信部分,上位机中的代码和这个模式一模一样,学习时只需要掌握这个原理,就可以很方便的将代码移植到自己的程序中,实现电机运行过程数据的监控、分析,这对学习很有帮助。

最终版的代码我弄了串口和CAN控制,可以多电机协同控制,比如说做个12自由度的四足机器人~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值