大哈欠E 发表于 2013-6-18 08:35:41

关于直流电机调速的一些疑惑。

正在做智能小车,遇到电机调速这个模块,不懂具体程序实施方法,我知道是用PWM来调制,我搞不懂的是这个PWM信号到底是接控制电机的两个输出接口 out1 out2然后给改变他们的占空比,还是接l298n的使能端ENa 来控制的?我看到网上的一些调速程序着实看不懂。郁闷,大神能不能说一下具体实现方法,然后写一段简短的程序让我参考一下。。在这里麻烦大神了。

李鸿鸿 发表于 2013-6-19 21:59:18

out1,out2,ENa中的其中一个都可以,最好是out1或out2,例如out1,ENa设为高电平,则out2就为PWM控制

李鸿鸿 发表于 2013-6-19 22:03:55

这个是STC12C5A60S2单片机控制PWM的,虽然把PWM改为定时器,但定时器可以输出PWM
#include"pwm.h"
#include<reg52.h>
#include"Dingyi.h"

uint value1,value2;
uchar cnt1,cnt2,k1,k2;            //控制电机变量

void pwm_chushihua()
{
   cnt1=0;
   cnt2=0;

   EN_A=1;
   m1=0;
   m2=0;
   EN_B=1;
   m3=0;
   m4=0;

   value1=THz;
   CCAP0L=value1;
   CCAP0H=value1>>8;
   value1+=THz;
   CCAPM0=0x49;

   value2=THz;
   CCAP1L=value2;
   CCAP1H=value2>>8;
   value2+=THz;
   CCAPM1=0x49;
       
       CCON=0;

   CL=0;
   CH=0;
   CMOD=0x00;
}

void PCA_int0() interrupt 7 using 1        //PCA中断
{
   if(CCF0==1)
   {
   CCF0=0;
   CCAP0L=value1;
   CCAP0H=value1>>8;
   value1+=THz;
   if(cnt1++<=k1)
   {
             m2=1;
   }
   else
   {
             m2=0;
   }
   if(cnt1>100)
      cnt1=0;                       
   }

   if(CCF1==1)
   {
   CCF1=0;
   CCAP1L=value2;
   CCAP1H=value2>>8;
   value2+=THz;
   if(cnt2++<=k2)
   {
             m3=1;
   }
   else
   {
             m3=0;
   }
   if(cnt2>100)
      cnt2=0;
   }
}

void Output1(uchar x)      //PWM1输出控制左边电机
{
   k1=x;
}

void Output2(uchar x)      //PWM1输出控制左边电机
{
   k2=x;
}

大哈欠E 发表于 2013-6-20 12:39:18

李鸿鸿 发表于 2013-6-19 22:03 static/image/common/back.gif
这个是STC12C5A60S2单片机控制PWM的,虽然把PWM改为定时器,但定时器可以输出PWM
#include"pwm.h"
#include ...

嗯,我试了,在ena端口也能调速。。不过我还在使用STC89c52.这芯片,过段时间也该换块芯片玩玩了。。
页: [1]
查看完整版本: 关于直流电机调速的一些疑惑。