• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

关于步进电机28BYJ-48转动求帮助

心晴的嘻哈马 2016-02-27 浏览量:1285

想求这个程序,预期希望电机每次转动90度,SPEED最好为1  ,有想法联系QQ1130011026

#include

sbit led=P1^0;

sbit A1=P2^0; //定义步进电机连接端口
sbit B1=P2^1;
sbit C1=P2^2;
sbit D1=P2^3;


#define uchar unsigned char
#define uint  unsigned int
#define Coil_A1 {A1=1;B1=0;C1=0;D1=0;}//A相通电,其他相断电
#define Coil_B1 {A1=0;B1=1;C1=0;D1=0;}//B相通电,其他相断电
#define Coil_C1 {A1=0;B1=0;C1=1;D1=0;}//C相通电,其他相断电
#define Coil_D1 {A1=0;B1=0;C1=0;D1=1;}//D相通电,其他相断电
#define Coil_AB1 {A1=1;B1=1;C1=0;D1=0;}//AB相通电,其他相断电
#define Coil_BC1 {A1=0;B1=1;C1=1;D1=0;}//BC相通电,其他相断电
#define Coil_CD1 {A1=0;B1=0;C1=1;D1=1;}//CD相通电,其他相断电
#define Coil_DA1 {A1=1;B1=0;C1=0;D1=1;}//D相通电,其他相断电
#define Coil_OFF {A1=0;B1=0;C1=0;D1=0;}//全部断电


void  zhengzhuan()
{
 unsigned int j=0;
 Speed=3;  
 led=0;//转动
  j=512; //旋转一周时间
Coil_OFF
while(j--)  //正向
 {         
    Coil_A1                //遇到Coil_A1  用{A1=1;B1=0;C1=0;D1=0;}代替
    DelayMs(Speed);         //改变这个参数可以调整电机转速 ,
                            //数字越小,转速越大,力矩越小
    Coil_B1
    DelayMs(Speed);
    Coil_C1
    DelayMs(Speed);
    Coil_D1
    DelayMs(Speed);
 }
}
void  fanzhuan()
{
 unsigned int j=0;
 Speed=3;  
 led=1;//反向
 Coil_OFF
 j=512;
 while(j--)//反向
 {
    Coil_D1                //遇到Coil_A1  用{A1=1;B1=0;C1=0;D1=0;}代替
    DelayMs(Speed);         //改变这个参数可以调整电机转速 ,
                        //数字越小,转速越大,力矩越小
    Coil_C1
    DelayMs(Speed);
    Coil_B1
    DelayMs(Speed);
    Coil_A1
    DelayMs(Speed);
 }
}
想求这个程序,预期希望电机每次转动90度,SPEED最好为1  ,有想法联系QQ1130011026 求大家帮忙

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案

其他答案 数量:14
  • 刚查了下资料,你的这个步进是四相八拍的电机,但是你程序里面控制是按四相四拍来控制的,你这个不会有问题么?





    你程序里这样写?

    • 发布于2016-02-27
    • 举报
    • 评论 0
    • 0
    • 0

  • 你应该调用后面这个四相八拍的吧?


    • 发布于2016-02-27
    • 举报
    • 评论 0
    • 0
    • 0

  • 好像我把概念弄混了,再仔细看看吧……
    • 发布于2016-02-27
    • 举报
    • 评论 0
    • 0
    • 0

  • 可以对整个P2口进行控制,不需要分别对每一个引脚控制,比如,你的代码中Coil_A1就可以写成P2=0x01,再根据不同的工作方式写相序表。
    • 发布于2016-02-27
    • 举报
    • 评论 0
    • 0
    • 0

  • 昨晚回去仔细查了下资料,看你这个步进电机,正常的步距角度是5.625°,但是他有1:64的减速比,也就是说,电机轴要转64圈,输出轴才会转一圈,也就是实际一个脉冲他只能转5.625/64°,你要想转90°的话,理论上应该需要的脉冲数是:P=90/(5.625/64)=1024,当然不排除电机本身的精度及丢步问题,这只是理论值,你程序中的Coil_A1即为一个脉冲。
    • 发布于2016-02-28
    • 举报
    • 评论 0
    • 0
    • 0

  • 把悬赏分给我吧,这个我最擅长,我的QQ就是我的用户名,加我,我会给你解答。
    • 发布于2016-02-28
    • 举报
    • 评论 0
    • 0
    • 0

  • 楼上好直接啊,要是你真能解决问题了,还希望能把解决的结果分享出来……
    • 发布于2016-02-28
    • 举报
    • 评论 0
    • 0
    • 0

  • 如果想商用,我可以提供完整解决方案,具体私聊。
    • 发布于2016-02-28
    • 举报
    • 评论 0
    • 0
    • 0

  • 不知道楼主的问题有没有人帮你解决了呢??
    • 发布于2016-02-29
    • 举报
    • 评论 0
    • 0
    • 0

  • 实在没时间帮你修改了,而且手上也没东西,调试也不方便,帮你找了个用定时器写的步进正反转的程序,看了下写的还不错,可以参考一下,希望能帮到你:

    • 发布于2016-02-29
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

关于步进电机28BYJ-48转动求帮助