我是在用51单片机最小系统板做智能小车,用L298N驱动模块输入12v后再通过L298N的5v输出经过稳压给单片机供电。然后通过这样的供电方式使用舵机的时候,舵机有很明显的响声,但是舵机没有转动。请问各位这是什么原因?
代码如下:
#include <REGX52.H>
#include <intrins.h>
#include "delay.h"
sbit PWM = P3^5;
unsigned char counter;
unsigned char angle;
void Timer1_Init() //500微秒@11.0592MHz
{
TMOD &= 0x0F; //设置定时器模式
TMOD |= 0x10; //设置定时器模式
TL1 = 0x33; //设置定时初始值
TH1 = 0xFE; //设置定时初始值
TF1 = 0; //清除TF1标志
TR1 = 1; //定时器1开始计时
ET1 = 1; //使能定时器1中断
EA = 1; //打开总中断
PT1 = 1; //设置优先级
}
void control()
{
counter = 2; //右转
angle = 1;
Delay1ms(1000);
counter = ; //左转
angle = 4;
Delay1ms(1000);
counter = 3; //归中
angle = ;
Delay1ms(1500);
}
void Timer1_Isr() interrupt 3
{
TL1 = 0x33; //设置定时初始值
TH1 = 0xFE; //设置定时初始值
counter++;
if(counter == 40)
{
counter = 0;
}
if(counter <= angle)
{
PWM = 1;
}
else
{
PWM = 0;
}
TR1 = 1;
}
可以确认一下你的代码实现了PWM输出,是否可以驱动你的舵机。此外,还需要确保舵机的供电电压、电流都满足要求。可以根据舵机的数据手册,检查您的驱动模块是否正常工作。
此外,还有一些细节:
在代码中,P3.5被用作PWM输出,确保该引脚是51单片机的可用输出引脚。
定时器1的初始值需要根据实际情况调整。
在control函数中,角度变量angle的初始值是否与舵机的要求一致。
control函数中的Delay1ms延时是否合适。
还有:
这个问题可能是由于舵机不能得到足够的电流供应造成的。可以尝试通过更换驱动模块,或增加电流供应的方式来解决这个问题。此外,还可以检查舵机的连接是否正确,确保舵机的控制信号被正确地发送到驱动模块。
另外,你的代码中存在一些错误,请检查代码,以确保所有的变量都有正确的值,以免对舵机控制造成影响。比如,在 control 函数中, angle 变量没有正确地初始化
如果以上所有因素都没有问题,那么你的代码应该可以正常驱动舵机。如果问题仍然存在,请提供更多信息
很可能是电压不够导致舵机无法正常工作。L298N输出的5V可能不能满足舵机的电压需求,你可以尝试直接从12V输入给舵机供电,或者使用更高输出电压的稳压模块。此外,还有可能是舵机的控制信号不正确导致舵机无法工作,你可以检查一下单片机的程序以及舵机的控制信号是否正确。
这种情况可能是由于舵机驱动电路的电压不稳定导致的。L298N 驱动模块把 12V 电压稳压到 5V,但是如果稳压的不足,舵机可能就无法正常工作。
另外,舵机的驱动电流可能不足,这样也可能导致舵机无法正常工作。在使用 L298N 驱动模块时,您需要确保模块能够提供足够的电流来驱动舵机。如果不能,您可以尝试使用其他驱动模块,或者增加电流输出以满足舵机的需求。
还有,舵机的控制信号可能不正确。您需要确保您的代码正确地生成了舵机的控制信号,并且该信号的格式和舵机的驱动电路相匹配。
建议您对电路进行检查,确保电压和电流输出正确,并且检查代码以确保控制信号的生成是正确的。如果仍然存在问题,您可以尝试寻求专业人士的帮助。
这可能是由于舵机没有得到足够的电流,请检查L298N模块,以确保它获得足够的电流以驱动舵机转动。也可能是舵机自身的问题,请检查舵机的质量,以确保它可以正常工作;如果无法排除此问题,可以尝试更换一个新的舵机。
既然舵机有很明显的响声,这时就要首先检查电压是否足够,判定驱动能量,不足的话先解决此问题。
驱动不了要么线接错了要么控制代码不正确
有几个原因可能导致舵机没有转动:
1.电源不足:如果舵机需要的电流较大,而你给舵机供电的电源不足,舵机将无法正常工作。
2.电源电压值:测量舵机电源的输入电压值和输出电压值,以确定电源是否符合要求。
3.电路故障:如果电路板或控制电路出现故障,舵机将无法正常工作。
4.单片机程序错误:如果单片机程序有误,控制舵机的信号可能不正确,从而导致舵机不工作。
4.舵机故障:舵机可能已损坏,导致其不工作
5舵机连接:确认舵机与L298N驱动模块以及单片机之间的接线是否正确。
软件设计:
我们知道想让舵机转动,必须给舵机一个脉冲,脉冲说白了就是高低电平,高低电平的占比不同,转的角度也就不同。
这里使用51的定时器,每过0.1ms计时一次,20ms为一个周期,同时定义一个变量,一个常量,将二者进行比较即可。
程序:
//实际上想让舵机转到指定角度,是需要自己实验的,每个舵机都不一样,原理是参考的。
#include <reg52.h>
sbit SEV_PWM = P1^7; //设定PWM输出的I/O端口,有个引脚输出
unsigned char count = 0; //比较值
unsigned char SEV_conut=9; //pwm控制值
/*延时程序*/
void Delay(unsigned int s)
{
unsigned int i;
for(i=0; i<s; i++);
for(i=0; i<s; i++);
}
/*定时器T0初始化*/
void Com_Init()
{
TMOD |= 0x01; //定时器T0设置成方式1
TH0 = 0xff; //定时常数 0.1ms 晶振为11.0592MHz
TL0 = 0xa4;
ET0 = 1; //中断标志
TR0 = 1; //定时器开关
EA=1; //总开关
}
/*T0中断初始化*/
void Time0_Init() interrupt 1
{
TR0 = 0; //定时器开关
TH0 = 0xff; //重装时间常数 0.1ms
TL0 = 0xa4;
count++; //比较值,很关键
if(count <= SEV_conut) //5==0° 10==90°
{
SEV_PWM = 1; //高电平
}
else
{
SEV_PWM = 0; //低电平
}
if (count >= 200) //T = 20ms清零 20ms为周期,重新开始
{
count = 0;
}
TR0 = 1; //开启T0
}
void main()
{
Com_Init(); //中断初始化,打开定时器
while(1)
{
SEV_conut=9;
count=0; //重新赋值,重新比较
Delay(50000); //延时是为了留一些时间给舵机反映。
SEV_conut=2;
count=0;
Delay(50000);
SEV_conut=17;
count=0;
Delay(50000);
}
}
总结:
控制舵机其实就是控制输出PWM,而PWM的输出就需要配置51单片机的定时器,总的来说还是要对51单片机的定时器熟悉。
建议采用以下程序:
运行程序前建议确认:
1、硬件连接正确,供电电压稳定5V
2、晶振是否为11.0592MHz
3、舵机是否损坏
4、连接线是否发生断线问题
#include <REGX52.H>
#include <intrins.h>
#include "delay.h"
sbit PWM = P3^5;
unsigned char counter;
unsigned char angle;
void Timer0_Init() //500微秒@11.0592MHz
{
TMOD = 0X01;
TH0 = 0XFE;
TL0 = 0X33;
TR0 = 1;
TF0 = 0;
ET0 = 1;
EA = 1;
}
void control()
{
counter = 0;
angle = 2; //右转
Delay1ms(1000);
counter =0 ;
angle = 4; //左转
Delay1ms(1000);
counter = 0;
angle =3 ; //归中
Delay1ms(1500);
}
void Timer0_Isr() interrupt 1
{
TL0 = 0x33; //设置定时初始值
TH0 = 0xFE; //设置定时初始值
counter++;
if(counter == 40)
{
counter = 0;
PWM = 1;
}
if(counter <= angle)
{
PWM = 1;
}
else
{
PWM = 0;
}
}
如果问题得到解决请点 采纳~~
这个问题可能是由于舵机的电压不足或者输入的PWM信号不正确造成的。由于L298N模块是一个12V的驱动模块,而舵机通常需要5V左右的电压来工作。因此,您需要确保L298N模块输出的5V稳定并且足够用于驱动舵机。
此外,您还需要确保您使用正确的PWM信号来驱动舵机。通常,舵机需要50Hz左右的PWM信号来工作,因此您需要确保您的PWM信号频率正确。
如果上述方法都不能解决您的问题,您可以尝试进一步测试舵机的电压和PWM信号,以确保它们都是正确的。您也可以检查您的驱动电路,确保舵机的控制信号线连接正确。