找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2392|回复: 14
收起左侧

红外遥控程序调试问题,usb供电可以,独立电源不行

[复制链接]
ID:652430 发表于 2019-12-2 10:04 来自手机 | 显示全部楼层 |阅读模式
我用红外遥控写了一个简单程序,连接usb时调试用遥控器可以控制小车启动停止,用电源供电时,按遥控器没反应,是什么原因造成的,怎么解决
回复

使用道具 举报

ID:96682 发表于 2019-12-2 15:09 来自手机 | 显示全部楼层
USB 一般为 5V,电源供电电压为几伏
回复

使用道具 举报

ID:25310 发表于 2019-12-2 16:18 | 显示全部楼层
电源部分没处理好,
回复

使用道具 举报

ID:213173 发表于 2019-12-2 16:57 | 显示全部楼层
查这个电源供电是否能满足电路需求。
回复

使用道具 举报

ID:650297 发表于 2019-12-2 21:03 | 显示全部楼层
用两个电源,电机部分单供电与单片机共地。
回复

使用道具 举报

ID:652430 发表于 2019-12-3 09:27 来自手机 | 显示全部楼层
电源用6/9伏都试过,都不行,而且还有个问题就是另一个程序用传感器检测启动小车运行,用usb连接可以正常运行,但是按下电源开关,传感器检测到后,小车不动,且发出滴滴的声音,当用手拨动一下车轮,就会自己转动,按程序走。综上所述不知道什么原因,用电源开关不能按程序检测行走。
回复

使用道具 举报

ID:652430 发表于 2019-12-3 09:59 来自手机 | 显示全部楼层
yanguang123 发表于 2019-12-2 21:03
用两个电源,电机部分单供电与单片机共地。

两个5v电源,要很多空间
回复

使用道具 举报

ID:524818 发表于 2019-12-3 10:39 | 显示全部楼层
上图看看
回复

使用道具 举报

ID:367934 发表于 2019-12-3 12:04 | 显示全部楼层
应该是硬件设计没处理好。按正常情况,USB电源和主电源是连通的,主电源只是经过降压芯片,可能是电源芯片部分有问题。电机都有一个启动电流电压,用手拨动一下车轮。才能启动应该是电源转换后不够力。
回复

使用道具 举报

ID:652430 发表于 2019-12-5 16:53 来自手机 | 显示全部楼层
适得府君书 发表于 2019-12-3 12:04
应该是硬件设计没处理好。按正常情况,USB电源和主电源是连通的,主电源只是经过降压芯片,可能是电源芯片 ...

这两天学用pwm控制就没事了
回复

使用道具 举报

ID:491875 发表于 2019-12-7 08:06 | 显示全部楼层
独立电源的电流输出能力是否足够?有没有并联大电容?如果可能,在独立电源上并联一只1000UF左右的电容试一试。USB通常电流输出能力大于1A。
回复

使用道具 举报

ID:465554 发表于 2019-12-7 12:26 | 显示全部楼层
电压不够,供电不足,加一个升压模块就行
回复

使用道具 举报

ID:491875 发表于 2019-12-7 16:39 | 显示全部楼层
两笙山世 发表于 2019-12-7 12:26
电压不够,供电不足,加一个升压模块就行

电压不够加一个升压模块可以解决问题。供电不知有没有升压模块可解决不了问题!况且楼主已经说了,6V,9V电压试过,显然,电压不够的原因可以排除,应该是供电电流不够的可能性比较大,特别是瞬时供电电流不够的可能性比较大,因为用手拨动车轮后可以自己转动接头!显然,是因为电机的启动电流比较大,而供电电流相对不足。增加电源并联电容可以提高电源瞬时电流,也就是降低电源内阻。
回复

使用道具 举报

ID:652430 发表于 2019-12-10 16:04 | 显示全部楼层
老愚童63 发表于 2019-12-7 16:39
电压不够加一个升压模块可以解决问题。供电不知有没有升压模块可解决不了问题!况且楼主已经说了,6V,9V ...

我用电脑连接调试就可以,用独立电源调试就接收不了红外信号,程序我用一个定时器把PWM和红外接收写一起,分开两个定时器写的话,只能一次接收一个按键信号,要重启才可以接收另一个,有什么办法解决。程序如下:
#include<reg52.h>
            sbit P36=P3^6 ;
         sbit P37=P3^7 ;
         sbit P24=P2^4;
         sbit ENA=P1^0;
         sbit P11=P1^1;
         sbit P12=P1^2;
          sbit ENB=P1^3         ;
          sbit P14=P1^4;
          sbit P15=P1^5;
           sbit IR=P3^2;
         
         void fonrt();
         void zuozuan();
            void tingzhi();

   unsigned char irtime;
   bit irpro_ok,irok;
   unsigned char IRcord[4];
   unsigned char irdata[33];
   void Ir_work (void);
   void Ircordpro(void);
       
         unsigned char pwm_val_left =0;
   unsigned char push_val_left =0;
   unsigned char pwm_val_right =0;
unsigned char push_val_right=0;  
   unsigned int time;
                 void         pwm_out_left_moto() ;
                 void pwm_out_right_moto() ;
                 bit Left_moto_stop =1; //右电机停转
                 bit Right_moto_stop=1;
       
                 
#define Left_moto_Stop    {P1^1=0,P1^2=0;}  
#define Right_moto_Stop   {P1^4=0,P1^5=0;}
sbit Left_moto_pwm= P1^0;       
sbit Right_moto_pwm         = P1^3        ;

/******************************************************************
**                       左电机调速
******************************************************************/
void pwm_out_left_moto()
{  
       

            if(pwm_val_left<=push_val_left)
                        {
                        ENA=0;
       
                        }
                else
                    {
                              ENA=1;
                                                                 
                        }
                if(pwm_val_left>=20)
                           ENA=1;
        }



/******************************************************************
**                       右电机调速
******************************************************************/
void pwm_out_right_moto(void)
{

            if(pwm_val_right<=push_val_right)
            {
                    Right_moto_pwm=1;
                }
        else
            {
                        Right_moto_pwm=0;
                }
        if(pwm_val_right>=20)
               pwm_val_right=0;
   }


        void tim0_isr(void)interrupt 1 using 1
        {
        irtime++;
         pwm_val_left++;
         pwm_val_right++;
         pwm_out_left_moto();
         pwm_out_right_moto();                  
        }

        void EX0_ISR(void)interrupt 0
        {
        static unsigned char i;
        static bit startflag;
        if (startflag)
        {if(irtime<63&&irtime>=33)
        i=0;
        irdata=irtime;
        irtime=0;
        i++;
        if (i==33)
        {irok=1;
        i=0;
        }
        }
        else
        {irtime=0;
        startflag=1;}
        }

        void TIM0init(void)
        {TMOD=0x02;
                 TH0= 0x00;                  //1ms定时
        TL0= 0x00;
        ET0=1;
        TR0=1;
        TR1=0;}

        void EX0init(void)
        {IT0=1;
        EX0=1;
        EA=1;}

void Ircordpro (void)
{unsigned char i,j,k;
unsigned char cord,value;
k=1;
for (i=0;i<4;i++)
{for(j=1;j<=8;j++)
{cord=irdata[k];
if(cord>7)
value |=0x80;
if(j<8)
{value>>=1;
}
k++;
}IRcord=value;
value=0;}
irpro_ok=1;
}
  
           void Ir_work(void)
        {switch(IRcord[2])
        {case 0x18:fonrt();break;
         case 0x52:tingzhi( );break;
         case 0x08:zuozuan();break;
         default:break;}
         irpro_ok=0        ;
         }

   void delay (int xms)
   {unsigned int i,j;
   for (i=xms;i>0;i--)
   for (j=112;j>0;j--);}

void  fonrt ()
{ push_val_right=16;  
push_val_left =16;
  P11=1;
P12=0;
P14=1;
P15=0;
delay(200);
  }

   void zuozuan()
   {   
           delay(500);
   push_val_left=8;
         push_val_right=12;
P11=0;
P12=1;
        P14=1;
P15=0;            
}

void tingzhi()
   {P1=0x00;
   }
   
   void main()
   {  IP=0X02;
            EX0init();
   TIM0init();
             while(1)
  {
   if(irok)
   {Ircordpro();
   irok=0;}

  if(irpro_ok)         
   {   
        Ir_work();  
   }
   }
   }
回复

使用道具 举报

ID:649963 发表于 2019-12-10 21:49 | 显示全部楼层
查这个电源供电是否能满足电路需求。 以及电源部分是否处理好
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表