内容
直流电机工作约5S后停止
直流电机简介
直流电机是指能将直流电能转换成机械能(直流电动机)或将机械能转换成直流电能(直流发电机)的旋转电机;
直流电机的结构应由定子和转子两大部分组成;
- 直流电机运行时静止不动的部分称为定子,定子的主要作用是产生磁场,由机座、主磁极、换向极、端盖、轴承和电刷装置等组成;
- 运行时转动的部分称为转子,其主要作用是产生电磁转矩和感应电动势,是直流电机进行能量转换的枢纽,所以通常又称为电枢,由转轴、电枢铁心、电枢绕组、换向器和风扇等组成;
直流电机没有正负之分,在两端加上直流电就能工作;在交换接线后,可以形成正反转;
使用前需要知道直流电机的额定电压和额定功率,不能使之长时间超负荷运作;
开发板配置的直流电机为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装置相连;
主要特点:
- 500mA额定集电极电流(单个输出),
- 高电压输出:50V
- 输入和各种逻辑类型兼容
- 继电器驱动器
原理图
由逻辑图可知,其内部相当于非门电路,即输入高输出为低,输入为低输出是高;
这里要注意:因为ULN2003的输出是集电极开路,ULN2003要输出高电平,必须在输出口外接上拉电阻;
若使用该芯片驱动直流电机,只可实现单方向控制,电机一端接电源正极,另一端接芯片的输出口;
若想控制五线四相步进电机,则可将四路输出接到步进电机的四相上,电机另一条线接电源正;
从上图可知,ULN2003的输入口与单片机的P10-P13连接,对应输出则是OUT1-OUT4,而J47则是提供给外部连接电机的接口,可以支持直流电机、五线四相步进电机28BYJ-48连接;
我们使用的是直流电机,可以将电机的一根线连接在VCC上,另一根连接在OUT1上,因此可通过单片机P10口输出高电平来控制电机旋转,输出低电源控制电机停止;
注意:单片机P10输出低电平时,ULN2003的OUT1并不会输出高电平导致停止,而是因为集电极开路,导致电机无电流流入致使停止;
思路
P10口输出高电平即开启电机,输出低电平就关闭电机;
编码
main.c
/*
* @Description: 使直流电机启动5秒后关闭
*/
#include "reg52.h"
typedef unsigned int u16; // 对系统默认数据类型进行重定义
typedef unsigned char u8;
// 定义直流电机控制管脚
sbit DC_Motor = P1 ^ 0;
/**
* @description: 延时函数(循环一次大约10us)
* @param {u16} ten_us
* @return {*}
*/
void delay_10us(u16 ten_us)
{
while (ten_us--)
;
}
/**
* @description: 延时函数(循环一次大约1ms)
* @param {u16} ms
* @return {*}
*/
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(5000); // 直流电机运行时间为5000ms
DC_Motor = 0; // 关闭电机
while (1)
{
}
}
编译和结果
按F7编译,无错误,生成.hex文件,使用pz-isp将hex文件下载到单片机
(将电机的电源线接到J47的01口和5v口)
结果:直流电机工作约5S后停止