#include<reg52.h>
#include"delay.h"
/*
ENB IN1 IN2 直流电机状态
0 * * 停止
1 0 0 制动
1 0 1 正转
1 1 0 反转
1 1 1 制动
*/
sbit IN1=P0^1;
sbit IN2=P0^2;
sbit IN3=P0^3;
sbit IN4=P0^4;
sbit ENB_A=P0^5;
sbit ENB_B=P0^6;
/* 前进 */
void true(void)
{
ENB_A=1;
delay_ms(5);
ENB_A=0;
delay_ms(5);
ENB_B=1;
delay_ms(5);
ENB_B=0;
delay_ms(5);
IN1=0;
IN2=1;
IN3=0;
IN4=1;
}
/* 后退 */
void false(void)
{
ENB_A=1;
delay_ms(5);
ENB_A=0;
delay_ms(5);
ENB_B=1;
delay_ms(5);
ENB_B=0;
delay_ms(5);
IN1=1;
IN2=0;
IN3=1;
IN4=0;
}
/* 前进左转 */
void true_left(void)
{
ENB_A=1;
ENB_B=1;
IN1=0;
IN2=0;
IN3=0;
IN4=1;
}
/* 前进右转 */
void true_right(void)
{
ENB_A=1;
ENB_B=1;
IN1=0;
IN2=1;
IN3=0;
IN4=0;
}
/* 后退左转 */
void false_left(void)
{
ENB_A=1;
ENB_B=1;
IN1=0;
IN2=0;
IN3=1;
IN4=0;
}
/* 后退右转 */
void false_right(void)
{
ENB_A=1;
ENB_B=1;
IN1=1;
IN2=0;
IN3=0;
IN4=0;
}
/* 加速前进至满速 */
void true_up(void)
{
unsigned int true_up_st,true_up_et;
true_up_et=2000;
while(true_up_et!=0)
{
ENB_A=1;
delay_us(true_up_st++);
ENB_A=0;
delay_us(true_up_et-true_up_st);
ENB_B=1;
delay_us(true_up_st++);
ENB_B=0;
delay_us(true_up_et--);
IN1=0;
IN2=1;
IN3=0;
IN4=1;
}
}
PWM调速时可以满电压运行,当频率较小时会不会一停一停的。
|