51单片机:03_直流电机

159 阅读2分钟

直流电机

0.png

将直流电能转换成机械能(直流电动机)、或将机械能转换成直流电能(直流发电机)的旋转电机。

由定子和转子组成。

静止不动的叫定子。 转动的部分叫转子。 没有正负极。 改变电流方向、影响电机的旋转方向。

ULN2003芯片介绍

用于驱动大功率器件的芯片。(因为单片机的电压不足以直接驱动电机、需要一个中转来驱动)

1.png

步进电机1C-7C无法输出1(需要上拉电阻)

所以直流电机在连接时、1端连接COM、一段连接1c-7C的一个。

由图可知

1B输入高、1C输出低。

程序

使用定时中断、2.5秒旋转直流电机、2.5秒停止...循环

4.gif

这里的电路图和实际开发板上有点不一样。

一端连接实际板子上的01(电路图中的2)、一端连5V 1.电路图中、向P10输入1->OUT1输出0->2输出0

2.png

3.png 代码 1.Timer0.c

#include <REGX52.H>

/**
	*
	* @brief 定时中断初始化
	* @param
	* @retval
	*/
void Timer0_Init()
{
	EA=1;
	ET0=1;
	TR0=1;
	TMOD=0X01;
}
/**
	*
	* @brief 5ms中断一次
	* @param
	* @retval
	*/
void Timer0_05ms_Init()
{
	TL0 = 0x00;		//设置定时初值
	TH0 = 0x4C;		//设置定时初值
	
}

2.main.c

#include <REGX52.H>
#include "Timer0.H"

typedef unsigned char u8;
typedef unsigned int u16;

sbit DC_Motor = P1^0;

#define DC_MOTOR_RUN_TIME 	2000
//中断一次+1
u8 Count=0;

void main()
{
	//P1^0默认输出为高电频 开机时可能会转、先设置0关闭
	DC_Motor =0;
	Timer0_Init();
	Timer0_05ms_Init();
	while(1)
	{
		
	}
}

void Timer0_Interrupt() interrupt 1
{
	Timer0_05ms_Init();
	// Code ...
	Count++; 
	//2秒执行一次取反
	if(Count>=40){
		Count=0;
		DC_Motor = ~DC_Motor;
	}
}