标题: 我这段单片机代码为什么小车动不了?感觉没什么问题 [打印本页]

作者: longtimenosee    时间: 2019-8-9 23:15
标题: 我这段单片机代码为什么小车动不了?感觉没什么问题
#include<reg52.h>


typedef unsigned char u8;
typedef unsigned int  u16;
sbit IN1=P2^1;
sbit IN2=P2^0;
sbit ENA=P2^2;
sbit ENB=P2^3;
u8        time1;


void time()
{        
    TMOD|=0x01;
        TH0=0XFF;
        TL0=0Xff;
        EA=1;
        ET0=1;
        TR0=1;
}

void main()
{

        time();
        while(1)
        {

                if (time1>1000)time1=0;//定义周期
                IN1=0;
                IN2=1;
                   if(time1<=500)          //占空比50%
                   {
                        ENA=1;
                        ENB=1;
               
                }
                else
                {
                ENA=0;
                ENB=0;
               
                }
                IN1=1;
                IN2=0;
                if(time<=500)          //占空比50%
                   {
                        ENA=1;
                        ENB=1;
                }
                else
                {
                 ENA=0;
                ENB=0;
                }
                }
}
void time0() interrupt 1
{
        TH0=0XFF;
        TL0=0Xff;
        time1++;
        
}


作者: xianfajushi    时间: 2019-8-10 03:58
time这个定义在哪?没看到
作者: witheMe    时间: 2019-8-10 08:38
你的这个定时中断给的时间或许过于短了吧,这是一个机器周期一次中断,算下来你pwm的周期也只有1000个机器周期,这个频率可能超过了电机的接受范围。你可以适量减少TH0和TL0的值试一下
作者: longtimenosee    时间: 2019-8-10 09:37
xianfajushi 发表于 2019-8-10 03:58
time这个定义在哪?没看到

主函数第一个就调用了
作者: longtimenosee    时间: 2019-8-10 09:39
witheMe 发表于 2019-8-10 08:38
你的这个定时中断给的时间或许过于短了吧,这是一个机器周期一次中断,算下来你pwm的周期也只有1000个机器 ...

#include<reg52.h>


typedef unsigned char u8;
typedef unsigned int  u16;
sbit IN1=P2^1;
sbit IN2=P2^0;
sbit IN3=P2^2;
sbit IN4=P2^3;
                         
#define L_go      IN1=0;IN2=1 //左轮前进
#define L_back    IN1=1;IN2=0 //左轮后退   
#define L_stop    IN1=0;IN2=0        //左轮停止,两个输出1也可以
#define R_go            IN3=0;IN4=1 //右轮前进
#define R_back          IN3=1;IN4=0 //右轮后退
#define R_stop          IN3=0;IN4=0 //右轮停止,两个输出1也可以
void main()
{
        while(1)
        {
         L_go;
         R_go;
        }       
}
我这样不用PWM直接让他动,为什么也不行
作者: witheMe    时间: 2019-8-10 10:22
longtimenosee 发表于 2019-8-10 09:39
#include

那我觉得你或许需要检查一下你的硬件问题了,看是不是线松动了,单片机出了啥差错,稳压模块驱动模块是不是正常工作,电机是否可以正常转动
作者: xianfajushi    时间: 2019-8-10 10:22
longtimenosee 发表于 2019-8-10 09:37
主函数第一个就调用了

     if(time<=500)     我说的是这个
作者: longtimenosee    时间: 2019-8-10 12:56
witheMe 发表于 2019-8-10 10:22
那我觉得你或许需要检查一下你的硬件问题了,看是不是线松动了,单片机出了啥差错,稳压模块驱动模块是不 ...

我现在就是排查到应该是单片机没进入电路,但是我把L298N的GND和最小系统板的GND连在一起,这种接法没有问题
作者: longtimenosee    时间: 2019-8-10 12:56
xianfajushi 发表于 2019-8-10 10:22
if(time

这个打掉了一个1.。。




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