标题: L298N驱动实例 [打印本页]

作者: 11dong37026    时间: 2017-4-23 09:14
标题: L298N驱动实例
(1)
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit INPUT1 = P1^0; //控制口
sbit INPUT2 = P1^1;
sbit INPUT3 = P1^2;
sbit INPUT4 = P1^3;
sbit ENA   = P1^4; //产生PWM
sbit ENB   = P1^5;
uint MA=0,MB=0;
uint SpeedA=20;//50%占空比
uint SpeedB=20;
void delay(uint z) {
         uintx,y;
         for(x=z;x>0;x--)
                   for(y=125;y>0;y--);
}
            
void main(void)
{
         delay(1000)      ;
         delay(1000)      ;
         INPUT1=1;
         INPUT2=0;
         INPUT3=1;
         INPUT4=0;
         TH0= 0xF4;
         TL0= 0x48;
         TH1= 0xF4;
         TL1= 0x48;
         TMOD= 0x11;
         TR0= 1;
         TR1= 1;
         ET0= 1;
         ET1= 1;
         EA  = 1;   
         while(1){}
}               
void time0_int() interrupt 1 using 1
{
         TR0=0;                                 
         TH0=0xF4;
         TL0=0x48;
         MA++;                                                     
         if(MA<SpeedA){
           ENA = 1;
         }
         elseENA = 0;
         if(MA== 40){
           MA = 0;
         }
         TR0= 1;
}
void time1_int() interrupt 3 using 1
{
         TR1=0;
         TH1=0xF4;
         TL1=0x48;
         MB=MB+ 1;
         if(MB< SpeedB){
           ENB=1;
         }
         elseENB = 0;
         if(MB== 40){
           MB = 0;
         }
         TR1= 1;
}
(2)
#include <reg52.h>
sbit KEY1 = P3^1;
sbit PWM = P1^5;
unsigned char CYCLE; //定义周期 该数字X基准定时时间 如果是10 则周期是10 x0.1ms
unsigned char PWM_ON ;//定义高电平时间
void delay(unsigned int cnt)
{
while(--cnt);
}
main()
{
unsigned char PWM_Num;//定义档位
TMOD |=0x01;//定时器设置 1ms in12M crystal
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;//定时1mS
IE= 0x82; //打开中断
TR0=1;
CYCLE = 10;// 时间可以调整 这个是10步调整 周期10ms 8PWM就是256
while(1)
  {
if(!KEY1)
  {
  delay(10000);
  if(!KEY1)
    {
     PWM_Num++;
           if(PWM_Num==4)PWM_Num=0;
      switch(PWM_Num){
      case 0:P1=0xFE;PWM_ON=0;break;//高电平时长
      case 1:P1=0xFD;PWM_ON=4;break;
      case 2:P1=0xFB;PWM_ON=6;break;
      case 3:P1=0xF7;PWM_ON=8;break;
      default:break;
    }
   }
  }
}
}
/********************************/
/*     定时中断                */
/********************************/
void tim(void) interrupt 1 using 1
{
static unsigned char count; //
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;//定时1mS
if (count==PWM_ON)
    {
    PWM = 1; //灯灭
    }
count++;
if(count == CYCLE)
    {
   count=0;
         if(PWM_ON!=0)//如果左右时间是0 保持原来状态
            PWM = 0;//灯亮
    }
}
(3)
/***************电子电机驱动模块直流电机控制程序**************************/
#include <reg52.h>
sbit IN1=P1^0;
sbit IN2=P1^1;
sbit IN3=P1^2;
sbit IN4=P1^3;
sbit EN1=P1^4;
sbit EN2=P1^5;
unsigned int pwm_H;
unsigned int pwm_L;
/***********初始函数函数**********************************/
/*日期:201222 */
/*版本号 V1.2*/
/*说明:初始化系统,调用速度设置函数前请先初始化*/
void InitSpeed()
{
TMOD=0X01;
TL0=0;
TH0=0;
TR0=1;
ET0=1;
EA=1;
}
/***********速度设置函数**********************************/
/*日期:201222 */
/*版本号 V1.2*/
/*说明:0-1000级速度,值越高速度越快*/
void SetSpeed(unsigned int num)
{  
if(num<1000)
{
pwm_L=65535-num;
pwm_H=65536-(1001-num);
}
else return ;
}
/***********速度设置函数**********************************/
/*日期:201222 */
/*版本号 V1.2*/
/*说明:左转设置函数*/
void TurnLeft()
{  
IN1=0;
IN2=1;
IN3=0;
IN4=1;
}
/***********速度设置函数**********************************/
/*日期:201222 */
/*版本号 V1.2*/
/*说明:右转设置函数*/
void TurnRight()
{
IN1=1;
IN2=0;
IN3=1;
IN4=0;
}
/************电机使能*********************************/
/*日期:201222 */
/*版本号 V1.2*/
/*说明:右转设置函数*/
void MotorGo()
{
EN1=0;
EN2=0;
}
void main()
{
InitSpeed();
TurnRight();
MotorGo();
SetSpeed(999);
  while(1);
}
/*******定时器0中断服务程序*************/
void Timer0() interrupt 1 using 1
{
                 static char stepFlag;
                   TR0=0;
                   if(stepFlag==1)
                   {
                  
                   TL0=pwm_H;
       TH0=pwm_H>>8;
                   EN1=0;      //电机1不使能
                   EN2=0;      //电机2不使能
                   stepFlag=0;
                   }
                   else
                   {  
             TL0=pwm_L;
       TH0=pwm_L>>8;  
                  EN1=1;     //电机1使能
                   EN2=1;      //电机2使能
                   stepFlag=1;
                   }
                   TR0=1;
}


作者: lxl_51h    时间: 2021-4-11 11:24
用你的程序,电机只有嗡嗡声音,不转动啊





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1