找回密码
 立即注册

QQ登录

只需一步,快速开始

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

小白求问,L298N驱动电机,这个单片机程序怎么改变pwm占空比

[复制链接]
跳转到指定楼层
楼主
ID:653281 发表于 2019-12-1 21:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Featheryuyuyu 于 2019-12-2 00:44 编辑

小白上路,希望各位大佬能指教。感激不尽
以下是程序:
//**************************************************************************//
// 程序名称:直流电机测试程序
// 功能描述:直流电机正转2秒,反转2秒,自动加速正转,自动减速反转,依次循环
// 单片机:  AT89S52,外接12M晶振
// 硬件连接:P1.0----IN1
//     P1.1----IN2
//            P1.2----ENA
//     直流电机两端分别接OUT1和OUT2,
//     电机驱动电压根据所接电机而定,驱动板芯片逻辑电压为+5V

//**************************************************************************//
#include<reg52.h>
sbit IN1=P1^0;
sbit IN2=P1^1;
sbit ENA=P1^2;
void delay(unsigned int z);
void delay_us(unsigned int aa);
/*******************主函数**************************/
void main()
{
while(1)
{
  unsigned int i,cycle=0,T=2048;
  IN1=1;      //正转
  IN2=0;
  for(i=0;i<200;i++)
  {
   delay(10);//PWM占空比为50%,修改延时调整PWM脉冲
   ENA=~ENA;
  }
  IN1=0;      //反转
  IN2=1;
  for(i=0;i<100;i++)
  {
   delay(20);//PWM占空比为50%,修改延时调整PWM脉冲
   ENA=~ENA;
  }
  IN1=1;     //自动加速正转
  IN2=0;
  while(cycle!=T)
  { ENA=1;
   delay_us(cycle++);
   ENA=0;
   delay_us(T-cycle);
  
  }
  IN1=0;     //自动减速反转
  IN2=1;
  while(cycle!=T)
  { ENA=1;
   delay_us(cycle++);
   ENA=0;
   delay_us(T-cycle);
  
  }
}  
}
/******************z秒延时函数*************************/
void delay(unsigned int z)
{
unsigned int x,y;
for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}
/****************微妙延时******************************/
void delay_us(unsigned int aa)
{
while(aa--);
}


///////////////各位大佬,教教我吧。我试着改过几次,电机都只能响不能转,零件都是好的,我试过直接把12v的电压加在12v的电机上,这样就可以运转。程序不用pwn,也只响不转,我真的想不明白。最好详细点指明改哪儿,怎么改。谢谢各位大佬了!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:282850 发表于 2019-12-2 01:50 | 只看该作者
AT89S52没有PWM输出口,但这种程序原则上不难,就是IO口按时间送高电平、低电平。回头看看“点亮一个LED“的程序、Timer的程序(你程序没用到,可以不学)
回复

使用道具 举报

板凳
ID:314948 发表于 2019-12-2 06:56 | 只看该作者
电机响但是不转,电机没问题,大概率是电机驱动不起来,也就是你供电不足。我记得我用l298n的时候,供电功率要比你电机的额定功率大才能正常使用(印象中还要大不少,l298n这个模块本身就消耗不少功率)。
解决办法
1.先不管pwm,占空比什么的,按照l298n的用法,让l298n驱动电机全速正反转,就是in1=1(0),in2=0(1),en=1。最好做完检验这一步成功没有,用万用表测in1,in2,en端的电压看和你给的电平是否一致。ps,l298n要和单片机共地
2.接上供电,先不接电机,用万用表测量out端的电压以及电流看是否能达到电机的额定电压,电流,如果不能就调供电的功率,如果想要比较好的调速效果,应该超过一点电机额定功率。如果模块输出端能达到要求,接上电机应该就没问题了。然后你再搞pwm调速。
回复

使用道具 举报

地板
ID:654044 发表于 2019-12-2 10:10 | 只看该作者
f556 发表于 2019-12-2 01:50
AT89S52没有PWM输出口,但这种程序原则上不难,就是IO口按时间送高电平、低电平。回头看看“点亮一个LED“ ...

厉害!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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