永发信息网

51单片机,电机使用了PWM调速后,就一直转,其他后续函数入暂停失效,如不能停止

答案:2  悬赏:70  手机版
解决时间 2021-02-05 14:46
  • 提问者网友:风月客
  • 2021-02-05 00:43
代码如下,帮忙找下问题何在
#include
//********************************************
//***********分为50档,0为最低速,50为全速。
//********************************************
sbit IN1= P1^0;
sbit IN2= P1^1;
sbit IN3= P1^2;
sbit IN4= P1^3;
sbit EN1= P1^4; //左电机使能
sbit EN2= P1^5; //右电机使能

unsigned int L_pwm=30;
unsigned int R_pwm=30;
unsigned int f=0; //50等分信号数

// PWM调速信号初始化函数
void pwm_initial(void)
{
TMOD=0x22; //定时器0,1工作方式2,8位自动装入计数。
TH1=0xF0;
TL1=0xF0; //定时器赋初值 计时20us,50次为1ms,为一PWM信号周期

EA=1;
ET1=1;
TR1=1; //开中断
TR0=0;
}

//1KHzPWM 50等分信号产生中断函数
void F_PWM(void) interrupt 3
{
if(f > 50) f=0;

if(f <= L_pwm) EN1=1;
else EN1=0;

if(f <= R_pwm) EN2=1;
else EN2=0;

f++;
}

//停止函数*******************************
void stop(void)
{

IN1=0; //左电机停止
IN2=0;

IN3=0; //右电机停止
IN4=0;
}

//前进函数*******************************
void run(void)
{
IN1=1; //左电机正转
IN2=0;

IN3=1; //右电机正转
IN4=0;
}

void main()
{

pwm_initial();

while(1)
{
run();
delay(100);
stop();
delay(100);

}
}

也就是电机转动后就一直转动着,速度可以调,但是就是不会停下来,也就是run()后面的函数仿佛都失效了,为什么啊,大神们求解!
最佳答案
  • 五星知识达人网友:街头电车
  • 2021-02-05 02:02
while(1)
{
run();
delay(100);
stop();
delay(100);
}

以上循环体反复执行,不待电机停止(惯性),开通信号又来了,所以电机一直转。你把延时时间大大加大看看效果。
全部回答
  • 1楼网友:行路难
  • 2021-02-05 03:41
这个程序以前做遥控小车的时候写过,很长,不过控制l298的很短的,楼主只需要控制l298的ena,enb,in1,2,3,4的高电平时间长短,也就是占空比就可以控制左右电机的速度了,原理自己百度文库很简单的,我是用定时器控制的,没法,52单片机没pwm功能,呵呵
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯