智能小车PWM调速原理

电机驱动电路

智能小车电机的驱动芯片采用L293D。L293D是一款单片集成的高电压、高电流、4通道电机驱动,设计用于连接标准DTL或TTL逻辑电平,驱动电感负载(诸如继电线圈、DC和步进电机)和开关功率晶体管等等。L293D有4个通道,每个电机需要用到两个通道,以实现电机的正反转。4个电机就需要用到8个通道。本小车需要2片L293D电机驱动芯片。

为了简化为双桥应用,L293D每个通道对都配备了一个使能输入端。L293D逻辑电路具有独立的供电输入,可在更低的电压下工作。

L293D具有如下特性:

1、L293D每个通道的电流输出能力达600 mA

2、L293D每个通道的峰值输出电流达1.2 A(非重复)

3、便于使能

4、L293D具有过温保护

5、逻辑“0”输入电压高达1.5 V(高抗噪性)

6、内置箝位二极管

智能小车的调速

智能小车的部分实验中,电机不能时刻保持在全速运转的状态,需要控制小车速度才能完成一些特定的功能。比如在“智能小车循迹实验”中,如果小车速度过快,来不及反应做出方向的调整,小车会很容易跑离轨迹。PWM调速是目前电机的主流调速方式。

智能小车采用脉宽调制(PWM)的办法来控制电机的转速,从而控制智能小车的速度。在此种情况下,电池电源并非连续地向直流电机供电,而是在一个特定的频率下为直流电机提供电能。

不同占空比的方波信号,调节对直流电机的通断电,能起到对直流电机调速作用。这是因为电机实际上是一个大电感,它有阻碍输入电流和电压突变的能力,因此脉冲输入信号被平均分配到作用时间上。

这样,改变L293D始能端EN1和EN2上输入方波的占空比就能改变加在电机两端的电压大小,从而改变了直流电机转速。

电路中用微处理机来实现脉宽调制,通常的方法有两种:

(1)用软件方式来实现:

通过执行软件延时交替改变EN1和EN2输出逻辑状态来产生脉宽调制信号,设置不同的延时时间得到不同的占空比。

(2)用硬件方式实现:

硬件自动产生PWM信号,不占用CPU处理的时间。这就要用到具有硬件PWM功能的芯片,在一串理想的脉冲周期序列中(如方波),正脉冲的持续时间与脉冲总周期的比值可以调节。

智能小车控制板采用STC89C52RC芯片,不具备硬件PWM波形发生器,我们采用定时器中断来产生固定占空比的脉冲信号,定时器的作用是准确的计算脉冲时间。采用定时器中断来产生PWM波形,而不是软件延迟的方法,可以有效的提升CPU的工作效率。

智能小车PWM调速前进

有时候我们需要控制智能小车的速度,不希望智能小车全速前进。比如在“智能小车循迹实验”中,如果小车速度过快,来不及反应做出方向的调整,小车会很容易跑离轨迹,这样就需要调整控制智能小车的速度了。

那么怎么样实现智能小车前进速度的调节呢?调节智能小车的速度,实际上是调节电机的运转速度,PWM调速是目前电机的主流调速方式。智能小车采用脉宽调制(PWM)的办法来控制电机的转速,从而控制智能小车的速度。在此种情况下,电池电源并非连续地向直流电机供电,而是在一个特定的频率下为直流电机提供电能。不同占空比的方波信号,调节对直流电机的通断电,能起到对直流电机调速作用。这是因为电机实际上是一个大电感,它有阻碍输入电流和电压突变的能力,因此脉冲输入信号被平均分配到作用时间上。这样,改变L293D使能端EN1和EN2上输入方波的占空比就能改变加在电机两端的电压大小,从而改变了直流电机转速。

智能小车PWM调速前进程序源代码

unsignedchar pwmval_left = 0; //变量定义

unsignedchar pwmval_right = 0; //变量定义

unsignedchar pwmval_left_init = 10;

//左电机占空比调节,调节值在0到20之间,调节此值可以调节小车的速度。

unsignedchar pwmval_right_init = 10;

//右电机占空比调节,调节值在0到20之间,调节此值可以调节小车的速度。

bitright_pwm = 1; //右电机PWM开关,为1时打开

bitleft_pwm = 1; //左电机PWM开关,为1时打开

voidleft_moto(void)

{

if(left_pwm)

{

if(pwmval_left <= pwmval_left_init){EN1 =1; }

else{EN1 = 0;}

if(pwmval_left >= 20){pwmval_left = 0;}

}

else{EN1 = 0;}

}

voidright_moto(void)

{

if(right_pwm)

{

if(pwmval_right <= pwmval_right_init){EN2= 1;}

else if(pwmval_right > pwmval_right_init){EN2= 0;}

if(pwmval_right >= 20){pwmval_right = 0;}

}

else{EN2 = 0;}

}

voidtimer0()interrupt 1 using 2

{

TH0=0xfc;TL0=0x66; //1Ms定时

pwmval_left=pwmval_left+1;pwmval_right=pwmval_right+1;

left_moto();right_moto();

}

voidtimer_init()

{

TMOD=0x01;

TH0=0xfc;TL0=0x66; //1ms定时

TR0=1;ET0=1;EA=1; //开总中断

}

voidmain()

{

timer_init();delay(10,100);

BEEP_IO=0;delay(100,100);BEEP_IO=1;

forward(); //调用前进函数

while(1);

}

从控制程序中我们可以知道,调节pwmval_left_init和pwmval_right_init的值就可以调节EN1和EN2上信号的占空比,从而调节左电机和右电机的运转速度,最终完成智能小车的运动速度。

猜你喜欢

转载自blog.csdn.net/weichen_78/article/details/129136460
今日推荐