找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2394|回复: 1
打印 上一主题 下一主题
收起左侧

L298N驱动实例

[复制链接]
跳转到指定楼层
楼主
ID:192571 发表于 2017-4-23 09:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
(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;
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:751649 发表于 2021-4-11 11:24 | 只看该作者
用你的程序,电机只有嗡嗡声音,不转动啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表