在 51 单片机应用中,电机控制的应用也非常多。本章所要实现的功能是:直流电机工作约 5S 后停止。
切记:51 单片机主要是用来控制而非驱动,如果直接使用芯片的 GPIO
管脚去驱动大功率器件,要么将芯片烧坏,要么就驱动不起来!
1 直流电机介绍
2 ULN2003 芯片介绍
3 硬件设计
4 软件设计
5 实验现象
1 直流电机介绍
直流电机是指能将直流电能转换成机械能(直流电动机)或将机械能转换成
直流电能(直流发电机)的旋转电机。
2 ULN2003 芯片介绍
51 单片机主要是用来控制而非驱动,如果直接使用芯片的 GPIO
管脚去驱动大功率器件,要么将芯片烧坏,要么就驱动不起来。
若使用该芯片驱动直流电机,只可实现单方向控制,电机一端接电源正极,
另一端接芯片的输出口。
3.硬件设计:
注:直流电机连接如下:
一端连接在VCC端,一端连接在10~16任意一脚,此时当1~7脚有高电平输入时,非门使之变为低电平,直流电机的两端就会有电势差,直流电机旋转。
注:ULN2003D芯片的5脚是P2^5,与12脚的BEEP是连接蜂鸣器的。
1~4脚的P1^0~P1^3,与12~16脚工作于直流电机。并外接为J47,方便直流电机连接VCC和OUT1~OUT4直接任意一脚.
4 软件设计
本章所要实现的功能是:直流电机工作约 5S 后停止。
注:main主循环内不需要定义u8 i=0;我也不知道为什么当时写了这个。复习的时候发现错误了,大家注意下。
5.原始代码如下:
#include "reg52.h" typedef unsigned char u8; typedef unsigned int u16; //定义直流电机控制管脚 sbit DC_Motor=P1^0; //定义直流电机运行时间为 5000ms #define DC_MOTOR_RUN_TIME 5000 void delay_ms(u16 ms) { u8 i,j; for(i=ms;i>0;i--) { for(i=110;j>0;j--) { ; } } } void main() { //开启电机 DC_Motor=1; delay_ms(DC_MOTOR_RUN_TIME); //关闭电机 DC_Motor=0; while(1) { ; } }
6.实验现象
使用 USB 线将开发板和电脑连接成功后(电脑能识别开发板上 CH340 串口), 把编译后产生的.hex 文件烧入到芯片内,实现现象如下:直流电机工作约 5S 后停止。
注意:直流电机的两根线要连接在 J47 端子的 O1 和 5V 上。如下所示: