介绍
大家好,这是我第一次写文章,可能有些方面处理的不好,希望大家谅解。最近撸了一块闭环电机驱动板。
准备后面用来做六轴机械臂项目。最近通过他的通信协议来开发他的SDK功能包。来实现直接通过串口通信控制。
硬件选择准备
在进行串口通信功能实现前,我们需要在对应界面选择上设置需要的选项。
Mode选择 CR_UART
UartBaud 根据通信波特率需要选择
UartAddr 根据需要的通信地址选择
SDK开发
即发送 e0 30,闭环控制器就会返回 e0 AB CD 这里ABCD未返回的0到F的参数,为 16进制 .
即返回的参数为:
angle=A*(16)^3+ B16^2+ C16+D;
std::array<float, 6> StepMotorControl::GetActualAngel()
{
int u_numm = 0;
long Para[ROBOTArm]={0};
int DataPara[ROBOTArm][4]={0};
int DataTwo[2]={0};
std::array<float, ROBOTArm> Angel = {0};
for (int i = 0; i < ROBOTArm; i++)
{
Sentdata[i][1] = 0x30;
}
for (int i = 0; i <= ROBOTArm; i++)
{
u_numm = 0;
SendData(i, 2);
while (Serial1xx.available() > 0)
{
Getdatas[i][u_numm] = (int)Serial1xx.read();
u_numm++;
}
}
for(int i = 0; i < ROBOTArm; i++)
{
mathAlgorithm::Turn10to16(Getdatas[i][1],DataTwo);
DataPara[i][0]=DataTwo[0];
DataPara[i][1]=DataTwo[1];
mathAlgorithm::Turn10to16(Getdatas[i][2],DataTwo);
DataPara[i][2]=DataTwo[0];
DataPara[i][3]=DataTwo[1];
}
for (int i = 0; i < 6; i++)
{
long ass=DataPara[i][0]*4096+DataPara[i][1]*256+DataPara[i][2]*16+DataPara[i][3];
Angel[i]=float(3.6*ass/655.35);
}
return Angel;
}
void StepMotorControl::SendData(char ModorID, char kk)
{
for (int i = 0; i < kk; i++)
{
Serial1xx.write(Sentdata[ModorID][i]);
}
}
void Turn10to16(int &HEX10,int *HEX16two)
{
HEX16two[0]=HEX10/16;
HEX16two[1]=HEX10%16;
}