四相八位步进电机

本文详细介绍了如何控制四相八位步进电机,通过八种不同的时序状态驱动电机走完一行384个点。代码示例展示了使用LB1836M电机驱动芯片进行电机控制的过程,通过改变GPIO口状态实现电机的精确移动。

 

上图为八相位时序状态图,步进电机的时序状态转换为:1001--1000--1100--0100--0110--0010--0011--0001--1001,为反序循环,并且每四个状态驱动步进电机走"one dot line",即一个点高度的整行,我使用的打印机为富士通的FTP-628MCL101,一行为384个点,所以每四个状态位步进电机走1*384个点。

下面贴上我的步进电机控制部分的代码:

for(j=0;j<steps;j++) //steps为步进电机走的点的数量

{

//一下四个GPIO口为电机驱动芯片LB1836M的输入

cur_pa = ((*(RP)GPIO_PORTG_DATA)&0x800)>>11;

cur_paa = ((*(RP)GPIO_PORTG_DATA)&0x1000)>>12;

cur_pb = ((*(RP)GPIO_PORTF_DATA)&0x004)>>2;

cur_pbb = ((*(RP)GPIO_PORTF_DATA)&0x008)>>3;

 

//在八个状态位之间循环

if(cur_pa==0x01 && cur_pb==0x00 && cur_paa==0x00 && cur_pbb==0x01)

{

cur_pa = 0x01;

cur_pb = 0x00;

cur_paa = 0x00;

cur_pbb = 0x00;

 

goto lf_move_step;

}

else if(cur_pa==0x01 && cur_pb==0x00 && cur_paa==0x00 && cur_pbb==0x00)

{

cur_pa = 0x01;

cur_pb = 0x01;

cur_paa = 0x00;

cur_pbb = 0x00;

 

goto lf_move_step;

}

else if(cur_pa==0x01 && cur_pb==0x01 && cur_paa==0x00 && cur_pbb==0x00)

{

cur_pa = 0x00;

cur_pb = 0x01;

cur_paa = 0x00;

cur_pbb = 0x00;

 

goto lf_move_step;

}

else if(cur_pa==0x00 && cur_pb==0x01 && cur_paa==0x00 && cur_pbb==0x00)

{

cur_pa = 0x00;

cur_pb = 0x01;

cur_paa = 0x01;

cur_pbb = 0x00;

 

goto lf_move_step;

}

else if(cur_pa==0x00 && cur_pb==0x01 && cur_paa==0x01 && cur_pbb==0x00)

{

cur_pa = 0x00;

cur_pb = 0x00;

cur_paa = 0x01;

cur_pbb = 0x00;

 

goto lf_move_step;

}

else if(cur_pa==0x00 && cur_pb==0x00 && cur_paa==0x01 && cur_pbb==0x00)

{

cur_pa = 0x00;

cur_pb = 0x00;

cur_paa = 0x01;

cur_pbb = 0x01;

 

goto lf_move_step;

}

else if(cur_pa==0x00 && cur_pb==0x00 && cur_paa==0x01 && cur_pbb==0x01)

{

cur_pa = 0x00;

cur_pb = 0x00;

cur_paa = 0x00;

cur_pbb = 0x01;

 

goto lf_move_step;

}

else if(cur_pa==0x00 && cur_pb==0x00 && cur_paa==0x00 && cur_pbb==0x01)

{

cur_pa = 0x01;

cur_pb = 0x00;

cur_paa = 0x00;

cur_pbb = 0x01;

 

goto lf_move_step;

}

else 

{

cur_pa = 0x01;

cur_pb = 0x00;

cur_paa = 0x00;

cur_pbb = 0x01;

 

goto lf_move_step;

}

 

//输出信号控制电机

lf_move_step:

if(cur_pa == 1)

set_port_high(CR_M_PA);

else

set_port_low(CR_M_PA);

 

if(cur_pb == 1)

set_port_high(CR_M_PB);

else

set_port_low(CR_M_PB);

 

if(cur_paa == 1)

set_port_high(CR_M_PAA);

else

set_port_low(CR_M_PAA);

 

if(cur_pbb == 1)

set_port_high(CR_M_PBB);

else

set_port_low(CR_M_PBB);

评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值