颜色驱动电机
Archived University Note
This content is from my university archives and may not be reliable or up-to-date.
代码
/*********************************************************************************
***************************************************************************************/
#include "reg52.h"
typedef unsigned int u16;
typedef unsigned char u8;
typedef unsigned int uint;
sbit IN1=P3^7;
sbit ENA=P3^6;
sbit IN2=P3^5; //L
sbit ENB=P3^4; //L
sbit ENSER=P3^0;
uint time_temp=0;
/*********************************************************************************
*******************************************************************************/
void delay(u16 i)
{
while(i--);
}
void Speed_L(uint a) // a范围0~100
{
ENB=1;
//ENB=1;
delay(a); // a越大,电机越快,持续时间越长
ENB=0;
//ENB=0;// 休息时间
delay(100-a);// 补足到100
}
void Speed_R(uint a) // a范围0~100
{
ENA=0;
//ENB=1;
delay(a);
ENA=1;
}
void Speed_SER(uint a) // a范围0~100
{
switch(time_temp%2){
case 0:
ENSER=1;
delay(a);
ENSER=0;
delay(10-a);
break;
case 1:
ENSER=0;
delay(a);
ENSER=1;
delay(10-a);
break;
}
time_temp=time_temp+1;
}
/*********************************************************************************
*******************************************************************************/
void main()
{
while(1)
{
//led=0x00;
//delay(50000);
//led=0;//led2=0;
//delay(50000);
//////
/*IN2=1;
IN1=0;
Speed_L(98);
Speed_R(98);
Speed_SER(5); */
//////
IN2=0; //L
ENB=1;
}
}
功能说明
这是一个基于51单片机的PWM电机速度控制程序:
- Speed_L(uint a): 控制左侧电机速度,参数a为0-100的占空比
- Speed_R(uint a): 控制右侧电机速度
- Speed_SER(uint a): 控制舵机速度,通过交替开关实现
引脚定义
- P3^7: IN1
- P3^6: ENA
- P3^5: IN2
- P3^4: ENB
- P3^0: ENSER (舵机控制)