如何控制电机速度

2019-07-15 18:28发布

本帖最后由 11hyliang1 于 2014-9-23 17:01 编辑

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit D1=P1^1;
sbit D2=P1^2;
sbit D3=P1^3;
sbit D4=P1^4;
sbit ENA=P1^5;
sbit ENB=P1^6;
uchar c,a,b,temp,flag,flag1;
void rec_data();
void delay(uint);void qianjin();
void main()
{
        TMOD=0x20;
        TH1=0xfd;
        TL1=0xfd;
        TR1=1;
        SCON=0X50;
        SM0=0;
        SM1=1;
        REN=1;
        EA=1;
        ES=1;
        PCON=0x00;
        P1=0XFF;
        flag=0;

        while(1)
        {
                if(flag1==1)
                {
                switch(a)
            {
                    case 0x11: qianjin();break;               
//               case 0x22: D1=1;D2=0;D3=0;D4=1;break;               
  //              case 0x33: D1=0;D2=1;D3=0;D4=1;break;              
  //              case 0x44: D1=1;D2=0;D3=1;D4=0;break;                     
   //             case 0x00: D1=0;D2=0;D3=0;D4=0;break;                     
                default: break;
                        }
                        flag1=0;
                }
         }
}
void rec_data()
{
        uchar c;
        c=SBUF;
        switch(flag)

        {
                case 0:if(c==0xfc){flag=1;} else flag=0;break;
                case 1:if(c!=0xff){flag=2;a=SBUF;} else flag=0;break;
                case 2:if(c==0xfc||c==0x0d||c==0x1e||c==0x2f||c==0x41){flag=3;flag1=1;flag=0;} else flag=0;break;
                default: break;
        }
}

void serial() interrupt 4
{
                ES=0;
                if(RI==1)
                {
                        RI=0;
                        rec_data();
                }
                ES=1;
}

void qianjin()
{
        uint cycle=0,T=500;
        D1=1;
        D2=0;
        while(cycle!=T)
        {
                ENA=1;
                delay(cycle++);
                ENA=0;
                delay(T-cycle);
        }
               
}

void delay(unsigned int z)
{
        unsigned int x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
如何才能控制电机处于一个较慢的速度转动,太快了,不需要精确具体速度是多少,就尽量减慢转速就行,像我那样写不太理想,因为好像慢慢加速完了就会停止了,我希望进入qianjin函数后,如果我没有发送任何信号,电机能一直恒速、低速前进,另外在不大改动我的代码的情况下,应该怎么写代码
忘记说了,是用的L298驱动模块驱动的


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
6条回答
11hyliang1
2019-07-16 07:48
本帖最后由 11hyliang1 于 2014-9-23 22:53 编辑
清寒素尘 发表于 2014-9-23 21:37
看看如果延时长一些会不会可以?

延长可以,不过转弯就不知怎么弄了,电机一个正,一个反,只会在原地打圈,还是说转太快了就会原地打圈,想用两个定时器,但上面波特率设置已经用了定时器了,而且有时开着开着就停了,发送什么指令都没用,去手动弄一下轮子又可以跑,不知是摩擦太大还是怎么回事,电池我测了一下,电力很足

一周热门 更多>