欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1720|回復: 0
收起左側

關于單片機驅動步進電機轉速的問題

[復制鏈接]
ID:921891 發(fā)表于 2021-5-15 20:35 | 顯示全部樓層 |閱讀模式
現(xiàn)在我可以控制步進電機的啟停和正反轉,但是控制不了速度,就算不用按鍵控制,直接修改定時器中斷的時間也改變不了步進電機的轉速,電機就只能一直以10s一圈的速度轉動,小弟問下各位大哥大姐們什么情況。

#include <reg51.h>
unsigned int Tspeed[3]={20,4000,10000};
unsigned char motor_time;
unsigned int CYCLE=20
bit Run_Status=0;

sbit CLK=P3^4;//脈沖
sbit ENA=P3^2; //使能
sbit DIR=P3^3;        //方向       

sbit StopStart=P1^2;         //啟停                        
sbit P_ADJ=P1^3;  //增速   
sbit N_ADJ=P1^4; //降速
sbit P_TS=P1^5;//正反轉
unsigned int PWM;

void key_Set()
{

        ENA=0;
        CLK=0;
        DIR=0;
}

void delay()                                  //延時函數(shù)
{
        unsigned int i =500;
        while (i--);
       
}

void TimeInit()          //定時器初始化
{

       
        TMOD |= 0x01;
        TH0=(65536-CYCLE)/256;                  //給time0裝初值
        TL0=(65536-CYCLE)%256;
        TH1=(65536-1000)/256;                 //給time1裝初值
        TL1=(65536-1000)%256;
  IE = 0x8A;
        PT1=1;                       //使得time1的優(yōu)先級高于time0
        TR0=1;                                             //打開兩個中斷
        TR1=1;

}

void Key_motor()                                             
{
        {
        if(P_ADJ==0)                                 //減速
        {
                delay();                       
                if(P_ADJ==0)
            {
                        while(!P_ADJ);
                        a--;
                        if(a<1)
                        a=0;
                        CYCLE=Tspeed[a];
                        }                       
                }
        }
       
        if(P_TS==0)                                           //正反轉
        {
                                 delay();
                                if(P_TS==0)
                        {
                        while(!P_TS);                          
                        DIR=1;
                        b++;
                        if(b%2==0)
                        {
                        DIR=0;
                        }
                }
        }
       
        if(N_ADJ==0)                                  //加速
        {
                delay();
                if(N_ADJ==0)
                {
                        while(!N_ADJ);
                        a++;
                        if(a>2)
                        a=2;
                        CYCLE=Tspeed[a];
                }
        }
       
        if(StopStart==0) //啟停件
        {
                delay();
                if(StopStart==0)
                {
                        while(!StopStart);
                        Run_Status=~Run_Status;
                        if(Run_Status)
                        {
                                ENA=1;                 
                                TR0=1;                       
                        }
                        else
                        {
                                ENA=0;                 
                                TR0=0;                  
                        }
                }
        }
}


void Time0() interrupt 1
{
    TH1=(65536-CYCLE)/256; //產生脈沖信號
         TL1=(65536-CYCLE)%256;
         CLK=~CLK;
        PWM++;
}


void Time1() interrupt 3
{
    TH1=(65536-1000)/256;                 //按鍵中斷
         TL1=(65536-1000)%256;
         Key_motor();               
}



void main()
{
                key_Set();
          TimeInit();
                while(1)
                        {
               
                        Key_motor();       
                               
                }
               

}
       


回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表