打印

直流电机的变速测速

[复制链接]
718|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huwr|  楼主 | 2016-7-13 20:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
要求:(1)直流电机能正转、反转控制;
             (2)可进行转速控制(至少10档);
           (3)对转速测量和显示;并能进行转速的设定;   
             (4)每2人一组,自由选择搭档;
本人学生,自己初学习51单片机,上网求助,如能解决,不胜感谢
沙发
huanghuac| | 2016-7-13 20:09 | 只看该作者
你自己一点都没试下吗

使用特权

评论回复
板凳
huwr|  楼主 | 2016-7-13 20:11 | 只看该作者

写了如下代码,可以正反转,可以调速,不知怎么测速,而且调

#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;
        }
        
         
}

使用特权

评论回复
地板
gongche| | 2016-7-13 20:14 | 只看该作者
用8051 ISP 编程器U2 对MA803进行烧写,为什么硬件选项是不可选的,那应该是选用外部晶振还是内部晶振。

使用特权

评论回复
5
chenho| | 2016-7-13 20:18 | 只看该作者
用MA803内部PWM能否产生38K的红外波?

使用特权

评论回复
6
tian111| | 2016-7-13 20:20 | 只看该作者
单片机外振多少

使用特权

评论回复
7
宋倩2010| | 2016-7-13 20:22 | 只看该作者
8M

使用特权

评论回复
8
zhuhuis| | 2016-7-13 20:23 | 只看该作者
不能

使用特权

评论回复
9
冰清玉洁| | 2016-7-13 20:26 | 只看该作者
对,最多只能做到31.25K

使用特权

评论回复
10
huwr|  楼主 | 2016-7-13 20:30 | 只看该作者
我知道了,结贴啦

使用特权

评论回复
11
jonson0322| | 2016-7-15 08:46 | 只看该作者
gongche 发表于 2016-7-13 20:14
用8051 ISP 编程器U2 对MA803进行烧写,为什么硬件选项是不可选的,那应该是选用外部晶振还是内部晶振。
...

您好,硬件选项更改只能用U1进行修改,我这边是笙泉代理,您可以加我QQ2432774552 ,我们这边有专业工程师帮您

使用特权

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

本版积分规则

780

主题

8627

帖子

5

粉丝