⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 直流电机.c

📁 次程序为单片机89S52系列直流电机驱动程序,具体解释见程序.
💻 C
字号:
//本调速硬件适合转速较高的直流电机,不适合力矩或者转速电机
//调节占空比实际上是调节电机两端电压的平均值,即PWM调速
#include <reg52.h>
#define Uchar unsigned char
#define Uint unsigned int
#define Ulong unsigned long
/*********************************/

sbit a=P1^0;

sbit AA=P2^0;
sbit BB=P2^1;		//直流电机 A 控制引脚
sbit CC=P2^2;
sbit DD=P2^3;		//直流电机 B 控制引脚
sbit Ea=P2^4;
sbit Eb=P2^5;

char status;        //电机工作状态
 
Uint time=1;
Uint high;//=50;		//高电平维持50次定时时间隔间
Uint period=100;//=2500;	//若为250 则占空比为20%
//period 等于 100  制动  占空比50%
//period 大于 100  正转	 占空比大于50%
//period 小于 100 且大于 50  反转	占空比小于50%

void delay(int ms)
{ int i,j;
  for(i=0;i<ms;i++)
  for(j=0;j<120;j++);
}

void int0(void) interrupt 1
{
	TH0=0xff;
	TL0=0xf7;

      if(status==-4) {high=4;  }
      if(status==-3) {high=20; }
      if(status==-2) {high=35; }
      if(status==-1) {high=40; }
      if(status==0)  {high=50; }
      if(status==1)  {high=55; }
      if(status==2)  {high=65; }
      if(status==3)  {high=80; }
      if(status==4)  {high=96; }
  
	if(++time==high) {BB=0;AA=1;}		////BB 若先置1,后置0,则为(1-占空比)
	 else if(time==period)
	 	{ // if(!status) Ea=0;
	 		time=1;
	    //	a=!a;			////电机运行状态观察指示
	 		BB=1;
	 		AA=0;
	 	} 
}
/********************************/   
void boot(void)
{
	TMOD=0x01;			
	TH0=0xff;			////约10KHz//0x47
	TL0=0xf7;
	TR0=1;
	ET0=1;
	EA=1;
}
/********************************/
void main(void)
{
	Ea=0;
	Eb=0;
	P0=0xff;
	boot();
	Ea=1;			////置1,打开电机
//	Eb=0;
	while(1)
	{// status=-4;  a=0; delay(150);
	  //status=-3;  a=1; delay(50);
	 // status=-2;  a=0; delay(50);
 	 // status=-1;  a=1; delay(50);
     // status=0;   a=0; delay(50);
      status=1;   a=1; delay(50);
	 // status=2;   a=0; delay(50);
	 // status=3;   a=1; delay(50);
	 // status=4;   a=0; delay(150);
     
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -