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

代码如下,帮忙找下问题何在#include<AT89X52.H>//********************************************//*****... 代码如下,帮忙找下问题何在
#include<AT89X52.H>
//********************************************
//***********分为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()后面的函数仿佛都失效了,为什么啊,大神们求解!
展开
 我来答
NJGQZF
2015-07-10 · TA获得超过1.1万个赞
知道大有可为答主
回答量:3165
采纳率:0%
帮助的人:1191万
展开全部
while(1)
{
run();
delay(100);
stop();
delay(100);
}

以上循环体反复执行,不待电机停止(惯性),开通信号又来了,所以电机一直转。你把延时时间大大加大看看效果。
追问
这个延时有1s多的,我把不输出pwm信号就正常电机转动的时候,电机是可以正常的转一会停一会的
德马克电机
2024-10-29 广告
直流伺服电机,是一种高精度、高性能的电机,主要分为有刷和无刷两种类型。有刷直流伺服电机成本低、结构简单、启动转矩大,适用于对成本敏感的普通工业和民用场合。无刷直流伺服电机则体积小、重量轻、出力大、响应快,且易于实现智能化,效率高、噪音小、电... 点击进入详情页
本回答由德马克电机提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式