找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1349|回复: 1
收起左侧

42步进电机设置速度,及键控正反转的单片机代码问题。

[复制链接]
ID:575020 发表于 2019-8-3 11:11 | 显示全部楼层 |阅读模式
用stc89c52rc连接l298n驱动42步进电机,连线图如下,in1-4接p1口,按键接p2口,out1-4分别接电机1346脚,2和5脚是空的,1-4和3-6为电机2个线圈。
线路图4.jpg


网上下了些代码,纯正反转代码下到单片机里,基本正常,键控正反转,电机就经常卡死、抖动,代码如下,不知有什么问题没,还有电机转速较慢,看代码里有延时参数,搞不懂y、i、j、k都是什么意思,改小了也容易出问题,还有我看不同人的代码,电机相同拍数参数都不一样,4拍和8拍哪个好,有啥区别?
现在要求按1键正传,2键反转,3键正传3圈后再反转3圈(实际要求11圈),我已经研究好几天了,希望高手能不吝宝贵时间,稍微指教一下。

#include<reg52.h>  
code unsigned char Frun[8]={ 0x0e,0x0c,0x0d,0x09,0x0b,0x03,0x07,0x06};
code unsigned char Zrun[8]={ 0x03,0x0b,0x09,0x0d,0x0c,0x0e,0x06,0x07};
unsigned char a,b,s,i,j,k;
unsigned char z,y;
sbit KEY1=P2^0;
sbit KEY2=P2^1;
sbit KEY3=P2^2;
void delay(i)//延时函数
{
for(j=0;j<i;j++)
for(k=0;k<80;k++);
}
main()
{
        //按键正传
{
        y=2;            //定义延时时间,时间越长电机转速越慢反之则快        
        if(KEY1==0)
{
        for(z=0;z<8;z++)
{
        P1=Zrun[z];
        delay(y);
}
}
}
        //按键反传
{
        y=2;            //定义延时时间,时间越长电机转速越慢反之则快        
        if(KEY2==0)
{
        for(z=0;z<8;z++)
{
        P1=Frun[z];
        delay(y);
}
}
}
        //按键正传3圈然后反转3圈
{
y=2;            //定义延时时间,时间越长电机转速越慢反之则快
a=150;    //正传3圈
b=150;    //反传3圈
if(KEY3==0)
{
while(a--)
{
for(z=0;z<8;z++)
{
P1=Zrun[z];
delay(y);
}
}
}

{
while(b--)
{
for(z=0;z<8;z++)
{
P1=Frun[z];
delay(y);
}
}
}

}
}


回复

使用道具 举报

ID:575020 发表于 2019-8-4 12:47 | 显示全部楼层
试了好多次,转速始终上不去,而且力矩还很小,转起来,手都能捏停。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表