加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

【C语言学习】51单片机L298N驱动电机调速

(2015-05-18 21:25:13)
标签:

春芽

c语言

单片机

pwm

it

分类: 机器人

【春芽电子科技】【C语言学习】51单片机L298N驱动电机调速

http://s3/mw690/001VMXHPgy6Sn0eeAbo82&690

//=============L298N端口定义===============
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细分等份
uchar MOTO_speed1;  //左边电机转速
uchar MOTO_speed2;   //右边电机转速
uchar PWM_abs1;   //左边电机取绝对值后占空比
uchar PWM_abs2;   //左边电机取绝对值后占空比
uchar PWM_var1=20;  //左边电机直走速度 (不同的电机,此参数不同)
uchar PWM_var2=20;  //右边电机直走速度
uchar PWMAnd = 0;  //PWM自增变量

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;//反转
  }
}

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 ()
{
//=========定时器T2初始化 PWM==================
 T2CON = 0x00;
   T2MOD = 0x00;
   RCAP2H = 0xff; //定时0.1ms
   RCAP2L = 0x47;
   TH2 = 0xff;
   TL2 = 0x47;
 ET2 = 1;  //定时器2中断开
 TR2 = 1;  //PWM定时器关,PWM周期为10ms
 
}


 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

}
 
温馨提示:更多问题请咨询 春芽电子科技 淘宝店铺或 春芽电子科技 百度贴吧

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有