微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 51单片机控制直流电机测速度的程序,跪求大神指点一下。

51单片机控制直流电机测速度的程序,跪求大神指点一下。

时间:10-02 整理:3721RD 点击:
在做毕设,不知道这测速度和调转速可不可以。感谢感谢。
#include<reg52.h>
#include"dc motor.h"
#include"delay.h"
#define uchar unsigned char
#define uint  unsigned int
extern uchar PWM_ON;
/******************外部中断0服务程序*****************************/
void INT_0() interrupt 0        
{
         speed_num++;
}
/***************定时器0中断服务程序*****************************/
void timer_0() interrupt 1
{
    uchar counter=0;        
        TH0=(65536-10000)/256;                   //重设定时器0初值
        TL0=(65536-10000)%256;
        counter++;
        if(100==counter)
        {        
        a=speed_num;           //到1S就计算收到多少个脉冲
                counter=0;
        }
}
/***************定时器1中断服务程序*****************************/
void timer_1() interrupt 3
{
    static uchar count=0;        
        TH1=(65536-20000)/256;                   //重设定时器1初值
        TL1=(65536-20000)%256;
        count++;
        if(count==PWM_ON)
        {        
        dianji=0;                  
        }
        count++;
        if(count==CYCLE)
        {
         count=0;
         if(PWM_ON!=0)
           dianji=1;
        }
}

/******************速度调节程序*****************************/
void aspeed (uchar num)
  {
   static int  temp;
              if(num>temp)
                      {
                        if(PWM_ON<CYCLE)
                 PWM_ON++;
                   }
                   else
                   {
                    if(PWM_ON<CYCLE)
                 PWM_ON--;
                   }
                   temp=num;
        
}
/******************速度检测程序*****************************/
uchar speed_text(uchar a)    //1S内计算的转速
{
                uchar b;
                b=a*2*3.14*10;//10表示半径10mm
                return b;
}
/*************************判是否有键按下**************************************/               
            K=keyscan(); //调键扫
             switch(K)
                  {
                          case 0x18:           // 按下C键进入显示界面
                                         lcd12864_write_command(0x01);
                                                  
                                          rate=speed_text(b);          //获取速度                 
                                          xianshi();                          //显示速度
                                  lcd12864_display(2,1, "当前速度为:");
                                          lcd12864_display(3,3,speed_1 );
                          lcd12864_display(4,1, "按D键设置速度");
                                          Delay_ms(3000);
                                  break;
                        case 0x28:           // 按下D键进入速度加减界面
                                            lcd12864_write_command(0x01);
                                  lcd12864_display(2,1, "按E键加速");
                          lcd12864_display(3,1, "按F键减速");
                              break;
                        case 0x48:     // 按下E键加速
                                          lcd12864_write_command(0x01);
                                          lcd12864_display(1,1, "速度+");
                                          
                                          lcd12864_display(2,1, "     ");
                                          aspeed (num);//速度调节
                                          num++;          // 加速键按下,速度标志加1
                                          if(num==3)
                                             num=3;        // 达到最大3,则保持
                                  break;
                        case 0x88:     // 按下F键减速
                                          lcd12864_write_command(0x01);
                                          lcd12864_display(1,1, "速度-");
                                          lcd12864_display(2,1, "     ");
                                          aspeed (num);//速度调节
                                          if(num!=0)
                                             num--;
                                          else   
                                             num=0;        // 达到最小3,则保持
                                  break;
                    }


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top