直流点击介绍

  直流电机是指能将直流电能转换成机械能(直流电动机)或将机械能转换成直流电能(直流发电机)的旋转电机。它是能实现直流电能和机械能互相转换的电机。当它作电动机运行时是直流电动机,将电能转换为机械能;作发电机运行时是直流发电机,将机械能转换为电能。

  直流电机的结构应由定子和转子两大部分组成。直流电机运行时静止不动的部分称为定子,定子的主要作用是产生磁场,由机座、主磁极、换向极、端盖、轴承和电刷装置等组成。运行时转动的部分称为转子,其主要作用是产生电磁转矩和感应电动势,是直流电机进行能量转换的枢纽,所以通常又称为电枢,由转轴、电枢铁心、电枢绕组、换向器和风扇等组成。

直流电机没有正负之分,在两端加上直流电就能工作。需要知道直流电机的额定电压和额定功率,不能使之长时间超负荷运作。 在交换接线后,可以形成正反转。

  当前开发板配置的直流电机为5V直流点击,其主要参数如下:

  • 轴长:8mm
  • 轴径:2mm
  • 电压:1-6V
  • 参考电流:0.35-0.4A
  • 3V转速:17000-18000转每分钟
外观实物图
内部结构

ULN2003芯片介绍

  51单片机主要是用来控制而非驱动,如果直接使用芯片的GPIO管脚去驱动大功率器件,要么将芯片烧坏,要么就驱动不起来。所以要驱动大功率器件,比如电机。就必须搭建驱动电路,开发板上板载的驱动芯片是ULN2003,该芯片是一个单片高电压、高电流的达林顿晶体管阵列集成电路。不仅可以用来驱动直流电机,还可用来驱动五线四相步进电机,比如28BYJ-48步进电机。

  ULN2003 是一个单片高电压、高电流的达林顿晶体管阵列集成电路。它是由7 对NPN达林顿管组成的,它的高电压输出特性和阴极箝位二极管可以转换感应负载。单个达林顿对的集电极电流是500mA。达林顿管并联可以承受更大的电流。此电路主要应用于继电器驱动器,字锤驱动器,灯驱动器,显示驱动器(LED气体放电),线路驱动器和逻辑缓冲器。ULN2003的每对达林顿管都有一个2.7k串联电阻,可以直接和TTL或5V CMOS装置。

  • 主要特点
    1. 500mA额定集电极电流(单个输出)
    2. 高电压输出:50V
    3. 输入和各种逻辑类型兼容
    4. 继电器驱动器
  • 逻辑框图

  从上图可以很容易理解该芯片的使用方法,其内部相当于非门电路,即输入高输出为低,输入为低输出是高,这里要注意:因为ULN2003的输出是集电极开路,ULN2003 要输出高电平,必须在输出口外接上拉电阻。这也就能解释在后面连接直流电机时为什么不能直接将ULN2003的2个输出口接电机线,而必须一根线接电源,另一个才接ULN2003输出口。

  若使用该芯片驱动直流电机,只可实现单方向控制,电机一端接电源正极,另一端接芯片的输出口。若想控制五线四相步进电机,则可将四路输出接到步进电机的四相上,电机另一条线接电源正。

硬件设计

  本实验使用到硬件资源如下:

  1. 步进电机驱动模块
  2. 直流电机
步进电机模块电路

  可通过单片机IO口输出高电平来控制电机旋转,输出低电源控制电机停止。注意:单片机IO输出低电平时,ULN2003的OUT1并不会输出高电平导致停止,而是因为集电极开路,导致电机无电流流入致使停止。

软件设计

  本实验要实现的功能:直流电机约工作5S后停止。

实物接线图
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include "reg52.h"

// 对系统默认数据类型进行重命名
typedef unsigned int u16;
typedef unsigned char u8;

// 定义直流电机控制管脚
sbit DC_Motor = P1^0;

#define DC_MOTOR_RUN_TIME 5000 // 定义直流电机运行时间为5000ms

/********************************************************************
*函数名: delay_10us
*函数功能:延时函数,ten_us=1时,大约延时10us
*输入: ten_us
*输出:无
*********************************************************************/
void delay_10us(u16 ten_us)
{
while(ten_us--);
}

/********************************************************************
*函数名: delay_ms
*函数功能: ms延时函数,ms=1时,大约延时1ms
*输入: ten_us
*输出:无
*********************************************************************/
void delay_ms(u16 ms)
{
u16 i,j;
for(i = ms;i > 0;i--)
for(j = 110;j > 0;j--);
}

void main()
{
DC_Motor = 1; // 开启电机
delay_ms(DC_MOTOR_RUN_TIME);
DC_Motor = 0; // 关闭电机

while(1)
{

}
}