找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6345|回复: 3
打印 上一主题 下一主题
收起左侧

求助解答步进电机抖动却无法转动的问题

[复制链接]
跳转到指定楼层
楼主
ID:589945 发表于 2019-8-10 10:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的问题是在做步进电机时出现的问题是这样的
1,在仿真中电机在转到一定角度后就开始抖动,不在转动,转动角度差别太大
2,在实物上电机一直在抖动,不转动。
求助解答,我的程序的问题在哪里


/***************/
#include <reg51.h>
#include "intrins.h"

typedef unsigned int u16;          
typedef unsigned char u8;
#define MotorData P1                    //步进电机控制接口定义
#define kai P2                               //2*2的矩阵按键
u8 phasecw[8] ={0x01, 0x05, 0x04, 0x06, 0x02, 0x0a, 0x08, 0x09};//顺时针转  
u8 phaseccw[8]={0x09,0x08, 0x0a, 0x02,0x06,0x04,0x05,0x01};//逆时针转
u8 speed;
u16 num=0;
//ms延时函数
void Delay_xms(u16 x)
{
u16 i,j;
for(i=0;i<x;i++)
  for(j=0;j<112;j++);
}      

void delay(u16 i)        //大概10us
{
        while(i--);
}
//顺时针转动
void MotorCW(void)
{
u16 i;
for(i=0;i<4;i++)
  {
   MotorData=phasecw[i];
   Delay_xms(speed);//转速调节
  }
}
void MotorCCW(void)
{
u16 i;
for(i=0;i<4;i++)
  {
   MotorData=phaseccw[i];
   Delay_xms(speed);//转速调节
  }
}

//停止转动
void MotorStop(void)
{
MotorData=0x00;
}
void kaiguan()                                                          //矩阵按键
{
        char a=0;
        kai=0x30;
        if(kai!=0x30)
        {
                delay(1000);
                if(kai!=0x30)
                {
                        kai=0x30;
                        switch(kai)
                        {
                                case(0X20):        num=2;break;
                                case(0X10):        num=0;break;
                        }
                       
                        kai=0x0c;
                        switch(kai)
                        {
                                case(0x04):        num=num+1;break;
                                case(0x08):        num=num+2;break;
                        }
                                while((a<50)&&(kai!=0x0c))
                                {
                                        delay(1000);
                                        a++;
                                }
                }
        }
}
//正转
void zhuan(int N)//每个N转2
{
u16 i;
Delay_xms(50);//等待系统稳定
speed=5;
   for(i=0;i<N;i++)
   MotorCW();  //顺时针转动
   MotorStop();
   Delay_xms(500);
}
void fzhuan (int N)//每个N转2
{
u16 i;
Delay_xms(50);//等待系统稳定
speed=5;
   for(i=0;i<N;i++)
   MotorCCW();  //顺时针转动
   MotorStop();
   Delay_xms(500);
}
void main ()
{  
while(1)
        {
           kaiguan();
           switch(num)
                        {
                                case(1):zhuan(256);break;
                                case(2):fzhuan(128);break;
                                case(3):zhuan(21);break;
                                case(4):fzhuan(21);break;
                        }
                        num=0;
}                 }

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:597048 发表于 2019-8-10 14:46 | 只看该作者
步进电机的信号需要4路信号依次发出
可以先查一下硬件上接的正确不  A+ A- B+ B-有没有接错
排除硬件以后  用示波器检测一下引脚上的波形  确定一下程序输出的波形是否正常
回复

使用道具 举报

板凳
ID:282095 发表于 2019-8-10 15:34 | 只看该作者
PWM调速
回复

使用道具 举报

地板
ID:299872 发表于 2019-8-11 02:39 来自手机 | 只看该作者
步子应该连续。比如走3个3步,应该是123 412 3412,二不是123 123 123
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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