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()后面的函数仿佛都失效了,为什么啊,大神们求解! 展开
#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()后面的函数仿佛都失效了,为什么啊,大神们求解! 展开
1个回答
德马克电机
2024-10-29 广告
2024-10-29 广告
直流伺服电机,是一种高精度、高性能的电机,主要分为有刷和无刷两种类型。有刷直流伺服电机成本低、结构简单、启动转矩大,适用于对成本敏感的普通工业和民用场合。无刷直流伺服电机则体积小、重量轻、出力大、响应快,且易于实现智能化,效率高、噪音小、电...
点击进入详情页
本回答由德马克电机提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询