标题: 求个大佬帮我调一下占空比,让小车速度慢一点,万分感谢 [打印本页]

作者: QYYY    时间: 2018-12-27 15:37
标题: 求个大佬帮我调一下占空比,让小车速度慢一点,万分感谢
#include<AT89X52.H>  //????52?????????
//????????С?????????????IO
sbit IN1 = P1^2; // ????1 ??????????
sbit IN2 =  P1^3; // ????1 ??????????
sbit IN3 = P1^6; // ????1 ??????????
sbit IN4 =  P1^7; // ????1 ??????????
sbit EN1 = P1^4;   // ???????
sbit EN2 =  P1^5; // ???????
sbit BUZZ=P2^3;
    #define Left_1_led        P3_3  // ??????      
#define Right_1_led       P3_2  //???????
    #define Left_moto_pwm   P1_5  //PWM????
#define Right_moto_pwm   P1_4   //PWM????     
//???????
   void delay(unsigned int k)
{   
     unsigned int x,y;
  for(x=0;x<k;x++)
    for(y=0;y<2000;y++);
}
//С?????????
void run(void)
{
     IN1=0;  //????
  IN2=1;
  IN3=1;  //????
  IN4=0;
  EN1=0.01;
  EN2=0.01;
}
//С?????????
void backrun(void)
{
     IN1=1;  //????
  IN2=0;
  IN3=0;  //????
  IN4=1;
  EN1=0.01;
  EN2=0.01;
}
//С?????????
void leftrun(void)
{
     IN1=0;  //????
  IN2=0;
  IN3=1;  //????
  IN4=0;
  EN1=0.01;
  EN2=0.01;
}
  //С?????????
void rightrun(void)
{
     IN1=0;  //????
  IN2=1;
  IN3=0;  //????
  IN4=0;      
  EN1=0.01;
  EN2=0.01;
}
   //С????????
void stopruo(void)
{
     IN1=0;  //????
  IN2=0;
  IN3=0;  //????
  IN4=0;
  EN1=0.01;
  EN2=0.01;
}
//??????
void main(void)
{  
while(1){
if(Left_1_led==1)
   if(Right_1_led==0)
   {backrun();}
    if(Right_1_led==0)
   {leftrun();delay(50);}
   else
    if(Left_1_led==0)
   {rightrun();delay(50);}
if(Left_1_led==1)
   if(Right_1_led==1)
   {run();}
} }




作者: 周超然    时间: 2018-12-27 16:49
你这个代码,第一注释用keil设置文本赋值,百度网上查
第二,if后面没有{}么?
代码写出来自己和别人都需要看的,别随手写。习惯不好,以后坑自己也坑别人。
作者: 1092648746    时间: 2018-12-27 23:26
这个注释,醉了,能改一下格式再发上来吗?
这个程序是用IO口高低电平模拟PWM输出吧,没有用定时器的话只需控制高电平持续时间就可以控制占空比,也就可以调整小车速度了,楼主顺着这个思路整理下
作者: HC6800-ES-V2.0    时间: 2018-12-28 10:19
我有一个,你看看。
#include <reg51.h>

sbit ZLDJ20=P2^3;//IC的控制输入脚5、7或10、12
sbit ZLDJ21=P2^2;
sbit EN2=P1^0;
sbit ZLDJ10=P2^1;
sbit ZLDJ11=P2^0;
sbit EN1=P1^1;

sbit Agoto=P2^5;//遥控器按键输入I/O口
sbit Bback=P2^7;
sbit Cright=P2^6;
sbit Dleft=P2^4;

unsigned char pwm=0;
unsigned char push=6;
unsigned char pwm_T=20;

void Delay10ms(unsigned int c)
{
    unsigned char a,b;
    for(c;c>0;c--)
        for(b=38;b>0;b--)
            for(a=130;a>0;a--);
}

void pwmint(void)
{
        TMOD=0X01;
        TH0= 0XFC;
        TL0= 0X66;
        TR0= 1;
        ET0= 1;
        EA = 1;
}

void pwm_out(void)
{  
        if(pwm<=push)
        {
                EN1=1;
                EN2=1;
        }
        else
        {
                EN1=0;
                EN2=0;
        }
        if(pwm>=pwm_T)
        {
                pwm=0;
        }
}

void timer0()interrupt 1
{
     TH0=0XFC;
         TL0=0X66;
         pwm++;
         pwm_out();
}       

void TC(void)
{
        ZLDJ10=0;
        ZLDJ11=0;
        ZLDJ20=0;
        ZLDJ21=0;
}

void PU(void)
{
        ZLDJ20=1;
        ZLDJ21=0;
        ZLDJ10=1;
        ZLDJ11=0;
}

void PD(void)
{
        ZLDJ20=0;
        ZLDJ21=1;
        ZLDJ10=0;
        ZLDJ11=1;
}

void RR(void)
{
        ZLDJ20=0;
        ZLDJ21=0;
        ZLDJ10=1;
        ZLDJ11=0;
}

void LL(void)
{
        ZLDJ20=1;
        ZLDJ21=0;
        ZLDJ10=0;
        ZLDJ11=0;
}

void PWMD(void)
{
        push=push+2;
        if (push>20)
        {
                push=20;
        }
}

void PWMX(void)
{
        push=push-2;
        if (push<6)
        {
                push=6;
        }
}

void main(void)
{
        unsigned char n;
        pwmint();
        TC();
        Agoto=1;
        Bback=1;
        Cright=1;
        Dleft=1;
        while(1)
        {
                if (Agoto==1)
                {
                        n=0;
                        while(Agoto)
                        {
                                n++;
                                Delay10ms(1);
                                if (n>200)
                                {
                                        break;
                                }
                        }
                        if (n>30)
                        {
                                PWMD();
                        }
                        else
                        {
                                PU();
                        }
                }
                if (Bback==1)
                {
                        n=0;
                        while(Bback)
                        {
                                n++;
                                Delay10ms(1);
                                if (n>200)
                                {
                                        break;
                                }
                        }
                        if (n>30)
                        {
                                PWMX();
                        }
                        else
                        {
                                PD();
                        }
                }
                if (Cright==1)
                {
                        RR();
                }
                if (Dleft==1)
                {
                        n=0;
                        while(Dleft)
                        {
                                n++;
                                Delay10ms(1);
                                if (n>200)
                                {
                                        break;
                                }
                        }
                        if (n>30)
                        {
                                TC();
                        }
                        else
                        {
                                LL();
                        }
                }

        }
}
功能是:通过无线电遥控器,控制小车,其中可以加速、减速,就是你说的调速。因为遥控器只有四键,所以我用此程序,扩成了八个功能,即一键双功能。







欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1