打印
[疑难问答]

直流电机的变速,测速,显示

[复制链接]
1184|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Forever_092|  楼主 | 2014-1-3 10:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
要求:(1)直流电机能正转、反转控制;
             (2)可进行转速控制(至少10档);
           (3)对转速测量和显示;并能进行转速的设定;   
             (4)每2人一组,自由选择搭档;
本人学生,自己初学习51单片机,上网求助,如能解决,不胜感谢
写了如下代码,可以正反转,可以调速,不知怎么测速,而且调

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
void delay (uchar);
sbit pwm1=P2^0;               //通道1                反转控制                       
sbit pwm2=P2^1;                         //通道2                正转控制                               
sbit jia_key=P3^6;                 //加速s4
sbit jian_key=P3^7;                 //减速s5
sbit trun_key=P3^5;                 //转向s3
sbit dula=P2^6;
sbit wela=P2^7;
uchar num=50,flag=1,time=0,temp=0;
/*uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void dispaly()
{



        dula=0;
        P0=table[show_num];
        dula=1;
        dula=0;       
        wela=0;
        P0=0xfe;
        wela=1;
        wela=0;
        delay(5);



        P0=table[0];
        dula=1;
        dula=0;
        P0=0xfd;
        wela=1;
        wela=0;       
        delay(5);

        P0=table[0];
        dula=1;
        dula=0;
        P0=0xfb;
        wela=1;
        wela=0;       
        delay(5);

        P0=table[0];
        dula=1;
        dula=0;
        P0=0xf7;
        wela=1;
        wela=0;       
        delay(5);
       
                 
       
}         */
void biansu()
{
        if(jia_key==0)
        {
                delay(2);
                if(jia_key==0)
                {
                         num+=10;
                        if(num>=100)
                        {
                                num=100;
                        }       
                }
                while(!jia_key);                //松开,就跳出
        }


        if(jian_key==0)
        {
                 delay(2);
                if(jian_key==0)
                {
                        num-=10;
                        if(num<=0)
                        {
                                num=0;
                        }
                       
                }
                while(!jian_key);                         //松开,就跳出
        }
}
void zhuangxiang ()
{
        if(trun_key==0)
        {
                delay(2);
                if(trun_key==0)
                {
                         flag=~flag;
//                        temp=~temp;
                }
                while(!trun_key);                 //松开按键,条件满足,跳出
        }       
       
}
void main()
{                 
                TMOD=0x01;
                TH0=(65536-10)/256;
                TL0=(65536-10)%256;            //10微秒中断一次
                EA=1;                                        //打开总中断
                 ET0=1;                                        //打开定时器 0
                TR0=1;                                        //启动定时器0
        while(1)                                        //等待中断发生
        {

                zhuangxiang ();                               
                biansu();
        }
}
void delay(uchar m)                //延时m毫秒
{
        uint i,j;
        for(i=m;i>0;i--)
                for(j=110;j>0;j--);
}
void T0_time()interrupt 1        //10微秒中断一次
{
        TR0=0;                          //关闭定时器0
        TH0=(65536-10)/256;
        TL0=(65536-10)%256;
        TR0=1;                                        //打开定时器0
        if(flag==1)                                //电机正转
        {
                 pwm1=0;
//                pwm2=1;          
                time++;       
        if(time>=100)
                 time=0;
        if(time<num)
                pwm2=1;
        else
                pwm2=0;
        }

       
//        else
        if(flag==0xfe)                                                                        //电机反转
        {                                                                               
                pwm2=0;       
//                pwm1=1;                                                                                                          
                time++;               
                if(time>=100)
                         time=0;
                if(time<num)
                         pwm1=1;       
                else
                        pwm1=0;
        }
       
          
}

沙发
Forever_092|  楼主 | 2014-1-3 10:37 | 只看该作者
前面一个函数式准备给显示用的,没用上

使用特权

评论回复
板凳
Forever_092|  楼主 | 2014-1-3 10:37 | 只看该作者
没有人来,是不是51太垃圾了,没人看呀

使用特权

评论回复
地板
four_zhg| | 2014-1-6 12:24 | 只看该作者
测速 可以加编码器

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

8

帖子

0

粉丝