找回密码
 立即注册

QQ登录

只需一步,快速开始

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

步进电机细分问题,求大神指点迷津

[复制链接]
跳转到指定楼层
楼主
ID:86177 发表于 2015-8-7 21:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

请问这细分表是怎么来的:?????
unsigned char TableA[] = { 0XF7,0XFB,0XF3};         //A线圈细分表
unsigned char TableB[] = { 0XeF,0XdF,0XcF};         //B线圈细分表

程序如下;


*************************************************************************************
*  标题:  步进电机试验四(采用2细分)                                                                                         *
*                                                                                                                                                                          *
*    通过本例程了解步进马达使用及驱动程序编写                                                                                 *
*;   单相四拍通电驱动时序:                                                          *
*;   正转: A/  B  A  B/                                                                                                                         *
*    反转: B/  A  B  A/                                                                                              *
*                                                                                                                                                                     *
*    UDN2916电流控制真值表:                                                                                                                 *
*          I0    I1        输出电流                                                                                                                 *
*          L            L                  最大                                                                                                                         *
*          H                L                  最大*2/3                                                                                                                 *
*          L                H                  最大*1/3                                                                                                                 *
*     H     H         0                                                                     *                                                                                 *
**************************************************************************************/  
#include "reg52.h"

#define speed 38
//Motor
sbit PH1 = P1^0;          //定义管脚
sbit PH2 = P1^1;
sbit I01 = P1^2;
sbit I11 = P1^3;
sbit I02 = P1^4;
sbit I12 = P1^5;
                                     
unsigned char TableA[] = { 0XF7,0XFB,0XF3};         //A线圈细分表
unsigned char TableB[] = { 0XeF,0XdF,0XcF};         //B线圈细分表

void delay(int time);

/***************************************
函数功能:产生单相四拍脉冲控制步进机 2细分
**************************************/
void Go()
{        char i ,temp;
     //A
    PH1 = 0;  //PH1为0 则A线圈为反向电流
        for(i = 0; i<3; i++)
        {  temp = P1;
           P1 = TableA[i];
           P1 = P1&temp;
           delay(1);
         }
       

        PH2 = 0;  //PH2为0 则B线圈为反向电流
        I02 = 1;
        I12 = 1;   //输出0

        delay(speed);
        //0
        PH1 = 0;  //PH1为0 则A线圈为反向电流
    I01 = 1;  //输出0
        I11 = 1;
       

        PH2 = 1;  //PH2为1 则B线圈为正电流
        for(i = 0; i<3; i++)
        {  temp = P1;
           P1 = TableB[i];
           P1 = P1&temp;
           delay(1);
         }

        delay(speed);
        //B
        PH1 = 1;   //PH1为1 则A线圈为正向电流
        for(i = 0; i<3; i++)
        {  temp = P1;
           P1 = TableA[i];
           P1 = P1&temp;
           delay(1);
         }

        PH2 = 1;  //PH2为1 则B线圈为正向电流
        I02 = 1;  //输出0
        I12 = 1;
                   ////
        delay(speed);
        //0
        PH1 = 1;   //PH1为1 则A线圈为正向电流
        I01 = 1;
        I11 = 1;
       

        PH2 = 0;   //PH2为0 则B线圈为反向电流
        for(i = 0; i<3; i++)
        {  temp = P1;
           P1 = TableB[i];
           P1 = P1&temp;
           delay(1);
         }
        delay(speed);


       
}
/*******************延时函数****************************/
void delay(int time)
{
  int i,j;

  for(j=0; j <= time; j++)
   for(i =0 ; i <= 120; i++);
}


void main()
{

  while(1)
  {

    Go();  //步进电机运行
       
  }

}


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

使用道具 举报

沙发
ID:86177 发表于 2015-8-7 21:34 | 只看该作者
求大神帮忙
回复

使用道具 举报

板凳
ID:86177 发表于 2015-8-7 22:38 | 只看该作者
我还想问问,多级细分怎么分??原理是什么??
回复

使用道具 举报

地板
ID:44267 发表于 2015-11-13 16:42 | 只看该作者

回帖奖励 +1

本论坛真是高手如云啊,让我们这些新长见识了
回复

使用道具 举报

5#
ID:103038 发表于 2016-1-13 11:57 | 只看该作者
最近也在看这个代码。没有高手能解释一下吗??
回复

使用道具 举报

6#
ID:106272 发表于 2016-12-5 22:14 | 只看该作者
我也想知道,高手来帮忙解释一下
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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