跳到主要内容

基于PWM的直流电机调速电路

在本项目中,我将演示如何利用 8051 单片机 生成 PWM(脉宽调制)信号,以及基于 PWM 控制的直流电机调速系统 的实现方法。

1. 引言

在许多应用中,直流电机(DC Motor)的转速控制至关重要,因为这些应用对精度与保护都有严格要求。这里我们将使用一种称为 PWM(脉宽调制) 的技术来控制直流电机的转速。

直流电机的转速控制可以通过机械或电气方法实现,但这些方法通常需要体积庞大的硬件;相比之下,基于单片机的系统为电机转速控制提供了一种简便的方式。

alt text

在此之前,我们已经学习过如何在没有单片机的情况下,通过 PWM 控制直流电机转速。而在这里,我们将通过单片机来进行同样的实验。

为此,我们将使用 8051 单片机 来产生 PWM 波形。通过改变该 PWM 波形的占空比,我们即可调节直流电机的转速。在 8051 单片机 中,定时器(Timers)被用于产生 PWM 波形。

在本文中,我们将学习如何利用 8051 单片机的定时器 生成 PWM 信号,以及如何使用该 PWM 信号来控制直流电机的转速。

2. PWM信号生成与直流电机调速原理

2.1 电路原理

本项目的核心是8051单片机。8051单片机没有专门的PWM电路,因此需要利用定时器和中断来生成PWM信号。

在本项目中,我们将使用8051单片机的Timer0和定时器中断来生成PWM信号。

2.2 如何在8051单片机中生成PWM信号?

大多数现代单片机(如AVR(例如Arduino)、ARM、PIC等)都配备了专门的PWM硬件和引脚,可以即时激活PWM模式。然而,8051单片机没有这种功能。因此,我们需要使用8051单片机的定时器和中断来生成PWM信号。8051的Timer0配置在Mode0模式下。通过仔细调整高电平和低电平,我们可以保持信号的固定周期。

3. PWM调速电路图

alt text

4. 电路元件

  • 8051单片机
  • 11.0592 MHz晶振
  • 电容 — 33pF × 2,10µF
  • 电阻 — 1KΩ × 4,10KΩ × 2
  • 12V直流电机
  • L298N电机驱动模块
  • 按钮 × 5
  • 1KΩ × 8上拉电阻包
  • 串行电缆
  • 12V电池或适配器
  • 连接导线

5. PWM调速电路设计

5.1 电路设计说明

电路包括一个8051单片机(及其与振荡器和复位相关的支持电路)、L298N电机驱动模块、直流电机和几个按钮。

12V直流电机连接到L298N电机驱动模块的OUT1和OUT2引脚。电机驱动模块的IN1和IN2引脚连接到+5V(VCC)和GND。电机驱动模块的EN1引脚连接到单片机的P0.0引脚。

四个按钮连接到单片机的P0.4、P0.5、P0.6和P0.7引脚。

通常,我们可以将开关以两种配置方式连接到单片机:上拉配置和下拉配置。

上拉配置:在上拉配置中,单片机引脚被拉高到逻辑1,按钮连接到GND。当按下按钮时,单片机引脚接收逻辑0。

下拉配置:在下拉配置中,单片机引脚被拉低到逻辑0,按钮连接到VCC。当按下按钮时,单片机引脚接收逻辑1。

在本电路中,我们使用上拉配置。因此,我们需要检查逻辑0以确定按钮是否被按下。

alt text

6. 代码

项目代码如下。

#include<reg51.h>

sbit PWM_Pin = P0^0;
sbit low = P0^4;
sbit medium = P0^5;
sbit high = P0^6;
sbit off = P0^7;

void InitPWM_timer(void);

unsigned char PWM = 0;
unsigned int temp = 0;
char a=1;


int main(void)
{
low=1;
medium=1;
high=1;
off=1;
PWM_Pin=0;

InitPWM_timer();



while(1)
{
if(low==0)
{
PWM=102;
a=0;
}
else if(medium==0)
{
PWM=153;
a=0;
}
else if(high==0)
{
PWM=255;
a=0;
}
else if(off==0)
{
a=1;
PWM_Pin=0;
}
}
}


void InitPWM_timer (void)
{
TMOD &= 0xF0;
TMOD |= 0x01;

TH0 = 0x00;
TL0 = 0x00;

ET0 = 1;
EA = 1;

TR0 = 1;
}


void Timer0_ISR (void) interrupt 1
{
TR0 = 0;

if(PWM_Pin==1 && a==0)
{
PWM_Pin = 0;
temp = (255-PWM);
TH0 = 0xFF;
TL0 = 0xFF - temp&0xFF;
}
else if(PWM_Pin==0 && a==0)
{
PWM_Pin = 1;
temp = PWM;
TH0 = 0xFF;
TL0 = 0xFF - temp&0xFF;
}

TF0 = 0;
TR0 = 1;
}

7. 如何操作电路?

  1. 将12V电池或适配器连接到开发板。
  2. 打开电源。
  3. 使用编程器将HEX文件烧录到8051单片机中。
  4. 按照电路图连接必要的线路。
  5. 打开电源并按下开关1,观察电机开始旋转,但仅以40%的容量运行。
  6. 按下开关2,电机将以略高于一半的速度运行(60%占空比)。
  7. 按下开关3,电机将以全速旋转(100%占空比)。
  8. 按下开关4以停止电机。

8. 优点

  • 使用PWM方法可以节省电力。

9. 应用场景

  • 用于工业中控制电机速度。
  • 用于购物中心。
  • 可以利用该概念控制灯光强度。