电机驱动芯片L293D介绍:
在这里直流电机的控制采用L293D芯片。L293D是一款单片集成的高电压、高电流、4通道电机驱动,设计用于连接标准DTL或TTL逻辑电平,驱动电感负载(诸如继电线圈、DC和步进电机)和开关功率晶体管等等。L293D有4个通道,每个电机需要用到2个通道,以实现电机的正反转。为了简化为双桥应用,L293D每个通道对(IN1与IN2为1对;IN3与IN4为1对)都配备了一个使能输入端(IN1与IN2对应使能端EN1;IN3与IN4对应使能端EN2)。
L293D具有如下特性:
1、L293D每个通道的电流输出能力达600 mA
2、L293D每个通道的峰值输出电流达1.2 A(非重复)
3、便于使能
4、L293D具有过温保护
5、逻辑“0”输入电压高达1.5 V(高抗噪性)
6、内置箝位二极管
直流电机PWM调速基本原理:
在脉宽调制(PWM)控制直流电机转速的情况下,电源并非连续地向直流电机供电,而是在一个特定的频率下为直流电机提供电能。
利用不同占空比的PWM调速方波信号,调节对直流电机的通断电,能起到对直流电机调速作用。这是因为电机实际上是一个大电感,它有阻碍输入电流和电压突变的能力,因此脉冲输入信号被平均分配到作用时间上。
这样,改变L293D始能端EN1和EN2上输入方波的占空比就能改变加在电机两端的电压大小,从而改变了直流电机转速。
软件PWM调速实例介绍:
通过执行软件延时交替改变EN1输出逻辑状态来产生脉宽调制信号,设置不同的延时时间得到不同的占空比。用到了IN1与IN2通道对,对应的直流电机接到OUT1和OUT2上。
/********************直流电机PWM调速*******************
* 处理器:STC89C52RC
* 开发环境:KEIL
* 名称:PWM调速
*************************************************************/
#include<reg51.h>
//电机驱动芯片L293D输入IO口
sbit IN1=P1^3;
sbit IN2=P1^4;
sbit EN1=P1^2;
//注意:对应的直流电机接到OUT1和OUT2上。
unsigned char pwmval_motor=0; //变量定义
unsigned char pwmval_motor_init=10;
//电机PWM脉冲占空比调节 ,调节值在0到20之间,调节此值可以调节电机的速度。
sbit BEEP_IO=P2^3; //蜂鸣器定义
bit left_pwm=1; //直流电机PWM开关,为1时打开
void delay(int In,int Out); //延时函数
void motor_run(void); //直流电机转动
void pwm_motor(void); //直流电机PWM调速
/************************延时函数**************************/
void delay(int In,int Out) //定义延时函数
{
int i,j;
for(i=0;i<In;i++)
{
for(j=0;j<Out;j++){;}
}
}
/****************直流电机转动控制函数******************/
void motor_run(void) //直流电机转动
{IN1=1;IN2=0;}
/******************直流电机PWM调速********************/
void pwm_motor(void)
{
if(left_pwm)
{
if(pwmval_motor<=pwmval_motor_init){EN1=1;}
else{EN1=0;}
if(pwmval_motor>=20){pwmval_motor=0;}
}
else{EN1=0;}
}
/******************定时器0初始化函数********************/
void timer_init()
{
TMOD=0x01;
TH0=0xfc; //1ms定时
TL0=0x66;
TR0=1;
ET0=1;
EA=1; //开总中断
}
/**************************主函数**************************/
void main()
{
timer_init();
delay(10,100); //延时一段时间
BEEP_IO = 0;
delay(100,100);
BEEP_IO = 1;
motor_run(); //直流电机转
while(1);
}
/*****************定时器0中断处理函数******************/
void timer0()interrupt 1 using 2
{
TH0=0xfc;TL0=0x66; //1Ms定时
pwmval_motor=pwmval_motor+1;
pwm_motor();
}
从控制程序中我们可以知道,调节pwmval_motor_init的值就可以调节EN1上信号的占空比,从而调节直流电机的运转速度。
最后,求求看到的此文的小伙伴点赞和关注支持一下下哦。毕竟,码字不容易哦,您的支持是我最大的动力呀!!!呜呜呜~~~