whatcanitbe 发表于 2013-11-5 22:52:57

四个电机,相同的动作函数集,想重写,如何改进?

原先的架构
//motor1.h
void motor1_init();
void motor1_reset();
void motor1_move(s32 mPulse, u32 mSpeed);
void motor1_moveabs(s32 mPulse, u32 mSpeed);
void motor1_moveguide(u32 mSpeed);
void motor1_interrupt();

//motor1.c
void motor1_init()
{
}

void motor1_reset()
{
}

void motor1_move(s32 mPulse, u32 mSpeed)
{
}

void motor1_moveabs(s32 mPulse, u32 mSpeed)
{
}

void motor1_moveguide(u32 mSpeed)
{
}

void motor1_interrupt()
{
}

//motor2.h
void motor2_init();
void motor2_reset();
void motor2_move(s32 mPulse, u32 mSpeed);
void motor2_moveabs(s32 mPulse, u32 mSpeed);
void motor2_moveguide(u32 mSpeed);
void motor2_interrupt();

//motor2.c
void motor2_init()
{
}

void motor2_reset()
{
}

void motor2_move(s32 mPulse, u32 mSpeed)
{
}

void motor2_moveabs(s32 mPulse, u32 mSpeed)
{
}

void motor2_moveguide(u32 mSpeed)
{
}

void motor2_interrupt()
{
}

...

想仿照MCX314函数库实现这个样子的架构
//motor.h
void motor_sel(...);            /*选择运动轴*/
void motor_dir(...);
void motor_speed(...);
void motor_acc(...);
void motor_dec(...);

void motor_home(...);
void motor_move(...);          /*相对运动*/
void motor_moveabs(...);   /*绝对运动*/
void motor_move2(...)         /*两轴插补*/
void motor_move3(...)         /*三轴插补*/
...

//motor.c
void motor_sel(...)            /*选择运动轴*/
{
}

void motor_reset(...)
{
}

void motor_move(...)          /*相对运动*/
{
}

void motor_moveabs(...)   /*绝对运动*/
{
}

void motor_move2(...)         /*两轴插补*/
{
}

void motor_move3(...)         /*三轴插补*/
{
}
...

调用像这样子0:X轴   1:Y轴2:Z轴   3:U轴
void main
{
   //初始化
   motor_sel(0, 1, 2, 3);
   motor_dir(0, 0, 0, 0);                                  /*0:正方向,1:反方向*/
   motor_speed(2000, 2000, 2000, 2000);      /*2000Hz*/
   motor_acc(10000, 10000, 10000, 10000);    /*加速度*/
   motor_dec(10000, 10000, 10000, 10000);    /*减速度*/

   //X轴复位
   motor_sel(0);
   motor_home();

   //Z轴复位
   motor_sel(2);
   motor_home();

   //U轴运转2000脉冲
   motor_sel(3);
   motor_move(2000);

   //XY两轴插补(0, 0)=>(40, 60)
   motor_sel(0, 1);
   motor_move(40, 60);

   //XYU三轴插补(0, 0,0)=>(40, 60, 80)
   motor_sel(0, 1, 3);
   motor_move(40, 60, 80);
}

但具体用C语言怎么实现想的不是很明白?有想法的说说

还有一种想法是将电机用C语言实现类的概念
//cmotor.h
//cmotor.c

调用时先实例化
cmotormotor1, motor2, motor3, motor4;
但是实现插补之类的比较不能统一cmotor类到里面去

看看谁能帮忙统一一下






页: [1]
查看完整版本: 四个电机,相同的动作函数集,想重写,如何改进?