黄工无刷电机学习
直播中

李秀珍

7年用户 965经验值
私信 关注
[问答]

请问光电开关如何控制步进电机正反转?

请问光电开关如何控制步进电机正反转?

回帖(1)

李正茂

2021-10-14 11:18:51
步进电机的正反转控制直接给方向引脚给高低电平即可。
光电开关被遮挡时,引号引脚输出高低电平


#include

#define uint unsigned int
***it motor = P1^0;//位定义电机脉冲信号端口
***it block = P1^1;  //位定义接收光电开关遮挡信号的端口
***it dir = P1^2;//位定义步进电机方向控制端口
***it WE = P2^7;
***it DU = P2^6;
***it beep = P2^3;
uint pp;

void InitTimer0(void)
{
        TMOD=0x01;                 //模式设置,00000001,采用的是定时器0,工作与模式1(M1=0,M0=1)。
        TR0=1;                         //打开定时器
        TH0=0Xff;                 //定时器设置,每隔100微秒发起一次中断。
        TL0=0X48;                  // 0Xa4
        ET0=1;                         //开定时器0中断
        EA=1;                         //开总中断
}

void time0() interrupt 1           //每隔100微秒发起一次中断
{        TH0=0Xff;
        TL0=0Xdb;                                 //    TH0 = 0x0FF;          TL0=0Xa4;
   
        pp++;
}

void motor_degree(uint i)           // i取值0-255
{
        while(i--)
        {
                if(pp<=2)        //占空比0.2
                    motor = 1;  
                else
                    motor = 0;
                if(pp==10)
                        pp=0;
        }
}
void main()
{
        InitTimer0();          //定时器0初始化
        while(1)
        {
        WE = 1;          //打开位选锁存器
        P0 = 0xfe;         //选中第一位数码管1111 1110
        WE = 0;  //          锁存位选数据
        while(block == 0)                   //光电开关被遮挡,反转90度
                         {       
                                DU = 1;
                                P0 = 0x06;         //数码管显示1
                                DU = 0;
                                dir = 0;
                                beep = 0;
                                motor_degree(50);//   
                         }
        while(block == 1)                        //光电开关无遮挡
                        {                       
                                DU = 1;
                                P0 = 0x3f;         //数码管显示0
                                DU = 0;
                                dir = 1;
                                beep = 1;
                                motor_degree(50);//        无遮挡,正转90度
                        }
        }
}
       
                         
                       
举报

更多回帖

发帖
×
20
完善资料,
赚取积分