普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 7256|回复: 2

求助,四线双极性步进电机细分的问题

 关闭 [复制链接]

1

主题

2

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2015-12-8 15:47:00 | 显示全部楼层 |阅读模式
资料里的程序是这样的
#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();  //步进电机运行
       
  }

}
求解
unsigned char TableA[] = { 0XF7,0XFB,0XF3};         //A线圈细分表
unsigned char TableB[] = { 0XeF,0XdF,0XcF};         //B线圈细分表
这两个数组是怎么得来的,如果要512细分或者256细分,又该怎样写?
回复

使用道具 举报

139

主题

382

帖子

1531

积分

金牌会员

Rank: 6Rank: 6

积分
1531
发表于 2015-12-8 19:02:52 | 显示全部楼层
你仔细看就会发现数组里面的数据其实是对应8位引脚,在适当的时候选择适当的元素操作。就行LED用P1来控制小灯的一样
回复 支持 反对

使用道具 举报

1

主题

2

帖子

9

积分

新手上路

Rank: 1

积分
9
 楼主| 发表于 2015-12-8 23:11:15 | 显示全部楼层
scholarship 发表于 2015-12-8 19:02
你仔细看就会发现数组里面的数据其实是对应8位引脚,在适当的时候选择适当的元素操作。就行LED用P1来控制小 ...

P1口依次对应的PH1到I12,最后两个引脚没有接。在用数组赋值之前,先给PH1低电平,然后用数组的时候不是又给PH1高电平了吗?还有就是用数组的时候不是给所有P1口的都同时重新赋值了吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-5-2 02:26 , Processed in 0.092431 second(s), 30 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

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