基于51单片机STC89C52RC的直流电机软件PWM控制的基本原理

电机驱动芯片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上信号的占空比,从而调节直流电机的运转速度。

 

最后,求求看到的此文的小伙伴点赞关注支持一下下哦。毕竟,码字不容易哦,您的支持是我最大的动力呀!!!呜呜呜~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式硬件与代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值