本文是对Platinum Maestro运动控制器使用的学习记录。
1. 控制模式
OPM402_PROFILE_POSITION_MODE:控制效果好。
OPM402_INTERPOLATED_POSITION_MODE:效果反而不好。
// a1.SetOpMode(OPM402_INTERPOLATED_POSITION_MODE);
// a1.SetOpMode(OPM402_CYCLIC_SYNC_POSITION_MODE);
// 效果好!!!!!!!
a1.SetOpMode(OPM402_PROFILE_POSITION_MODE);
//
// Waiting for Set Operation Mode
//
giXOpMode = a1.GetOpMode();
while ( giXOpMode != OPM402_PROFILE_POSITION_MODE )
{
giXOpMode = a1.GetOpMode();
}
2. 位置控制实现
工程师说:
位置环是不允许改速度命令的,可以改目标位置,速度环是可以改速度的
所以使用函数时,只给位置,速度给一个较大值并保持不变。
void MachineSequencesTimer()
{
giTimeFlag = FALSE;
//
ReadAllInputData();
// update target position.
// The sin() function in C ++ returns the sine value of the angle (parameter) expressed in radians.
gdbTarpos = (double)AMPLITUDE * sin( (double)(2 * PI * FREQUENCY * gitime / 1000) ) + OFFSET;
gdbTarvel = (double)AMPLITUDE * 2 * PI * FREQUENCY * cos((double)(2 * PI * FREQUENCY * gitime / 1000) );
/*
if ( gdbTarvel > 0.0 )
{
a1.m_fVelocity = gdbTarvel;
}else {
a1.m_eDirection = MC_NEGATIVE_DIRECTION;
a1.m_fVelocity = gdbTarvel * (-1.0);
}
*/
a1.MoveAbsolute(gdbTarpos, MC_ABORTING_MODE);
//
WriteAllOutputData();
return; // End of the sequences timer function. The function will be triggered again upon the next timer event.
}
控制效果:
采集数据,可以看出跟踪误差较小。
真的是太不容易了。感谢工程师!!!!!