论坛元老
 
- 积分
- 3347
- 金钱
- 3347
- 注册时间
- 2013-4-10
- 在线时间
- 333 小时
|
发表于 2016-4-17 00:13:43
|
显示全部楼层
给我一100个积分就行了, 我不收钱, 帮你搞一个!!!
还有你没有说明, 如果只是控制电机正反转, 这个比较简单,但按你的说明,程序相差很大,
比如,你有带驱动器, 哪只要给电机脉冲方向信号就行了, 脉冲速度快慢代表电机的速度, 方向就是一高低电平, 一般高电平正转,低电平反转
但如果你没有驱动器 哪还要知道你的电机是4线的或是6线的, 是两相驱动还是4相驱动, 是单极性或是又极性, ,需不要要加减速, 一堆问题呢!
如果用6线电机, 单极性驱动,C51的代码可以这 样写
/***************************************************************************************************
函数名:步进电机正反转一步
调 用:MOTOR()
参 数:Mot=0,电机反转一步 ,Mot=1电机正转
返回值:无
结 果:电机走一步
***************************************************************************************************/
void MOTOR(void){ //步进电机正反转一步子程序
code unsigned char MOTOR_DB[]={0x00,0xb0,0x90,0xd0,0x50,0x70,0x60,0xe0,0xa0,0x00};//定义电机输出编码
unsigned char i;
MOIC=0; //开电机电流
i=0; //电机输出编码初值设00
CBB=10; //设减小电机电流时间设为10
if(Mot==1)Mo_data++;
else{if(Mo_data!=0)Mo_data--;}//如果电机反转,并且当前电机坐标不小于1时,坐标减一
while(1)
{
if(Mot)Motor_t ++;//当前电机输出编码加一指向下一编码
else Motor_t --;//电机输出编码减一
i=MOTOR_DB[Motor_t]; //取电机输出编码
if(i!=0)break;
else{
if(Mot)Motor_t=0;
else Motor_t=9;
}
}
i=i&0xf8; //屏蔽低3位,高5位不变
M_data=M_data&0x07;//屏蔽P1口的高5位,低3位不变
M_data=M_data|i; //高5位送P1口,P1口的低3位不变
}
调用这个函数一次, 电机走一步, 程序是 6线小电机, 输出OI接个 2003这类的芯片就行了, 半步方式,
所以,老兄你的要求要说清楚! 哪些有偿的就算了, 我不用收费,就希望给个枳分, |
|