This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320F28069M电机位置控制

Other Parts Discussed in Thread: TMS320F28069M

1、   目前使用的MCU为TMS320F28069M,使用proj_lab13d.c自动售卖机例程,实现A、B、C三个预设位置控制。

        状态、变量、条件、转换、操作等定义如下:

STPOSPLAN_setCfgArray(stObj->posPlanHandle, &stPosPlanCfgArray[0],sizeof(stPosPlanCfgArray), STATE_ACTS, STATE_CONDS, STATE_VARS, NUM_TRANS, NUM_STATES);

STPOSPLAN_setCfg(stObj->posPlanHandle, _IQ(ST_SAMPLE_TIME), false);

/* 停止状态,当前的状态认为是起始状态,之后的状态是相对这个状态的 */
STPOSPLAN_setCfgHaltState(stObj->posPlanHandle, 0, 0, velMax, accMax,jrkMax, 1000L);

/* 设置电机会发生的动作 */

STPOSPLAN_addCfgState(stObj->posPlanHandle, 0, 0, 00L);/* STATE INIT */
STPOSPLAN_addCfgState(stObj->posPlanHandle, 12, _IQ(0.5), 00L);/* STATE A->B */
STPOSPLAN_addCfgState(stObj->posPlanHandle, 12, _IQ(0.5), 00L);/* STATE B->C */
STPOSPLAN_addCfgState(stObj->posPlanHandle, -12, _IQ(-0.5), 00L);/* STATE C->B */
STPOSPLAN_addCfgState(stObj->posPlanHandle, -12, _IQ(-0.5), 00L);/* STATE B->A */

/* 设置变量 */
STPOSPLAN_addCfgVar(stObj->posPlanHandle, ST_VAR_INOUT, STATE_COND_VAR_INIT);/* Var to comp */

/* 添加条件与变量的关系
STPOSPLAN_addCfgCond(stObj->posPlanHandle, STATE_COND_VAR_COND, ST_COMP_EQ, COND_INIT_DB, 0);
STPOSPLAN_addCfgCond(stObj->posPlanHandle, STATE_COND_VAR_COND, ST_COMP_EQ, COND_BA_AB, 0);
STPOSPLAN_addCfgCond(stObj->posPlanHandle, STATE_COND_VAR_COND, ST_COMP_EQ, COND_AB_BC, 0);
STPOSPLAN_addCfgCond(stObj->posPlanHandle, STATE_COND_VAR_COND, ST_COMP_EQ, COND_CB_BC, 0);
STPOSPLAN_addCfgCond(stObj->posPlanHandle, STATE_COND_VAR_COND, ST_COMP_EQ, COND_BC_CB, 0);
STPOSPLAN_addCfgCond(stObj->posPlanHandle, STATE_COND_VAR_COND, ST_COMP_EQ, COND_CB_BA, 0);
STPOSPLAN_addCfgCond(stObj->posPlanHandle, STATE_COND_VAR_COND, ST_COMP_EQ, COND_AB_BA, 0);

/* 添加转换
STPOSPLAN_addCfgTran(stObj->posPlanHandle, STATE_INIT, STATE_A_B, ST_COND_NC, 0, 0, velLim, accLim, decLim, jrkLim);
STPOSPLAN_addCfgTran(stObj->posPlanHandle, STATE_B_A, STATE_A_B, ST_COND_FC, STATE_BA_AB, 0, velLim, accLim, decLim, jrkLim); 
STPOSPLAN_addCfgTran(stObj->posPlanHandle, STATE_A_B, STATE_B_C, ST_COND_FC, STATE_AB_BC, 0, velLim, accLim, decLim, jrkLim); 
STPOSPLAN_addCfgTran(stObj->posPlanHandle, STATE_C_B, STATE_B_C, ST_COND_FC, STATE_CB_BC, 0, velLim, accLim, decLim, jrkLim);
STPOSPLAN_addCfgTran(stObj->posPlanHandle, STATE_B_C, STATE_C_B, ST_COND_FC, STATE_BC_CB, 0, velLim, accLim, decLim, jrkLim); 
STPOSPLAN_addCfgTran(stObj->posPlanHandle, STATE_C_B, STATE_B_A, ST_COND_FC, STATE_CB_BA, 0, velLim, accLim, decLim, jrkLim); Item0
STPOSPLAN_addCfgTran(stObj->posPlanHandle, STATE_A_B, STATE_B_A, ST_COND_FC, STATE_AB_BA, 0, velLim, accLim, decLim, jrkLim); Item0

/* 操作 */
STPOSPLAN_addCfgAct(stObj->posPlanHandle, STATE_A_B, ST_COND_NC, 0, 0, STATE_COND_VAR_STATES, ST_ACT_EQ, STATE_A_B,ST_ACT_ENTR); 
STPOSPLAN_addCfgAct(stObj->posPlanHandle, STATE_B_C, ST_COND_NC, 0, 0, STATE_COND_VAR_STATES, ST_ACT_EQ, STATE_B_C,ST_ACT_ENTR); 
STPOSPLAN_addCfgAct(stObj->posPlanHandle, STATE_C_B, ST_COND_NC, 0, 0, STATE_COND_VAR_STATES, ST_ACT_EQ, STATE_C_B,ST_ACT_ENTR); 
STPOSPLAN_addCfgAct(stObj->posPlanHandle, STATE_B_A, ST_COND_NC, 0, 0, STATE_COND_VAR_STATES, ST_ACT_EQ, STATE_B_A,ST_ACT_ENTR); 

以上定义可以实现A、B、C三个位置间的转换,但是目前有个需求即在A->B运动过程中任意位置停止,之后再按原序列运行。

例如:由A向B运动过程中下发停止命令gMotorVars.SpinTAC.PosPlanRun = ST_PLAN_PAUSE,停止位置设为D点,请问再次下发ST_PLAN_START命令是否支持D->B的运动?

2、  采用STPOSPLAN_setCfgState去在线修改状态间步数,修改时报错:1 SpinTAC Plan 正在运行 运行配置前让 SpinTAC Plan 进入空闲状态 。

        根据位置规划转化条件:ST_PLAN_BUSY -> ST_PLAN_IDLE需满足转换条件:RES == false 并且 ENB ==True 并且 DON == true

        操作ENB==false即可,在满足条件的情况下我按上述操作后直接转化为ST_PLAN_HALT,进一步转化为ST_PLAN_WAIT状态了,

        请问什么原因所致?

3、  if (STPOSMOVE_getStatus(stObj->posMoveHandle) == ST_MOVE_IDLE) 

         { STPOSPLAN_setUnitProfDone(stObj->posPlanHandle, true);}   

      请问在满足RES == false 并且 ENB ==True的条件下执行上面条件语句后 位置规划状态是否应该有变化,还是就应该一直是ST_PLAN_BUSY状态?

4、请问是否有支持暂停位置计划的例程可供参考?谢谢!