#include "reg52.H"
#include "MyType.h"
//=============L298端å£å®ä¹===============
sbit ENA = P3^6; //左轮驱å¨ä½¿è½
sbit IN1 = P0^3; //左轮é»çº¿ï¼-ï¼
sbit IN2 = P0^4; //左轮红线ï¼+ï¼
sbit IN3 = P0^5; //å³è½®çº¢çº¿ï¼-ï¼
sbit IN4 = P0^6; //å³è½®é»çº¿ï¼+)
sbit ENB = P3^7; //å³è½®é©±å¨ä½¿è½
//=============PWM================
#define PWM_COUST 100 //PWMç»åç份100
uchar MOTO_speed1; //左边çµæºè½¬é
uchar MOTO_speed2; //å³è¾¹çµæºè½¬é
uchar PWM_abs1; //左边çµæºåç»å¯¹å¼åå 空æ¯
uchar PWM_abs2; //左边çµæºåç»å¯¹å¼åå 空æ¯
uchar PWM_var1=20; //左边çµæºç´èµ°é度 ï¼ä¸åççµæºï¼æ¤åæ°ä¸åï¼
uchar PWM_var2=20; //å³è¾¹çµæºç´èµ°é度
uchar PWMAnd = 0; //PWMèªå¢åé
/******************************************************************
å称ï¼motor(char speed1,char speed2)ï¼
åè½ï¼åæ¶è°èçµæºç转é
åæ°ï¼speed1ï¼çµæº1çPWMå¼ï¼speed2ï¼çµæº2çPWMå¼
speed>0.æ£è½¬ï¼speed<0.å转ï¼-100~100ï¼
è°ç¨ï¼extern int abs(int val); åç»å¯¹å¼
è¿åï¼
/******************************************************************/
void motor(char speed1,char speed2)
{
//==============左边çµæº=============
if (speed1>0)
{
IN1 =0;IN2 =1;//æ£è½¬
}
else if (speed1<0)
{
IN1 =1;IN2 =0;//å转
}
//==============å³è¾¹çµæº=============
if (speed2>0)
{
IN3 =1;IN4 =0;//æ£è½¬
}
else if (speed2<0)
{
IN3 =0;IN4 =1;//å转
}
}
/******************************************************************
å称ï¼motor_PWM()ï¼
åè½ï¼PWMå 空æ¯è¾åº
åæ°ï¼æ
è°ç¨ï¼æ
è¿åï¼æ
/******************************************************************/
void motor_PWM ()
{
uchar PWM_abs1;
uchar PWM_abs2;
PWM_abs1=MOTO_speed1;
PWM_abs2=MOTO_speed2;
if (PWM_abs1>PWMAnd) ENA=1; //左边çµæºå 空æ¯è¾åº
else ENA=0;
if (PWM_abs2>PWMAnd) ENB=1; //å³è¾¹çµæºå 空æ¯è¾åº
else ENB=0;
if (PWMAnd>=PWM_COUST) PWMAnd=0; //PWM计æ°æ¸
é¶
else PWMAnd+=1;
}
/******************************************************************
å称ï¼void TIME_Init ()ï¼
åè½ï¼å®æ¶å¨åå§å
æ令ï¼
è°ç¨ï¼æ
è¿åï¼æ
/******************************************************************/
void TIME_Init ()
{
//=========å®æ¶å¨T2åå§å PWM==================
TCON = 0x00;
TMOD = 0x00;
RCAPH = 0xff; //å®æ¶0.1ms
RCAPL = 0x47;
TH0 = 0xff;
TL0 = 0x47;
ET0 = 1; //å®æ¶å¨2ä¸æå¼
TR0 = 1; //PWMå®æ¶å¨å
³ï¼PWMå¨æ为10ms
}
/******************************************************************
å称ï¼void PWM_Time2 () interrupt 5
åè½ï¼T2ä¸æï¼PWMæ§å¶
åæ°ï¼
è°ç¨ï¼motor_PWM();//PWMå 空æ¯è¾åº
è¿åï¼
/******************************************************************/
void PWM_Time2 () interrupt 5
{
TR2 = 0;
TF2 = 0;
ET2 = 0; //å®æ¶å¨0ä¸æç¦æ¢
motor_PWM();//PWMå 空æ¯è¾åº
ET2 = 1; //å®æ¶ä¸æ0å¼å¯
TR2 = 1;
}
mainï¼ï¼
{
TIME_Init () ï¼
motor(50,50)ï¼//å·¦å³çµæºç转éé½æ¯50
}
温馨提示:内容为网友见解,仅供参考