angel725 发表于 2014-10-2 22:23:23

为什么一定要写这句电机才会转呢?


int E1 = 5;//PWMA
int M1 = 4;//DIRA
int E2 = 6;//PWMB            
int M2 = 7;//DIRB
int Val=0;
int temp=20;
void setup()
{
      pinMode(M1, OUTPUT);
      pinMode(M2, OUTPUT);
}

void foward()
{
    digitalWrite(M1,HIGH);
    analogWrite(E1,Val);
    digitalWrite(M2,HIGH);
    analogWrite(E2,Val);
    Val=Val+temp;
    if (Val == 0 || Val == 255)
   {
         temp = -temp;
   }
    //delay(500);
}

void loop()
{
   foward();
   //delay(500);
}
想做个小车。
用L298P电机驱动板。
上面的代码为什么一定要加上 Val=Val+temp;
电机才会转?
还有那个if有用吗?

莲子 发表于 2014-10-2 23:46:33

这个你得先看看L298N的使用方法啦,你看你的程序里面,E1和E2后面的注释(//PWMA和//PWMB),
这说明你的这个程序使用的是PWM来对电机调速,只有当PWM的值给到一定的程度时,电机才会转,
而初始“int Val=0;
          int temp=20;”
如果不加这句 Val=Val+temp;就相当于L298N的使能端没有使能,电机当然不能转。

你如果不需要调节电机速度,让电机在当前电压下以最高转速运行,可以直接改写这句为 Val=255;同时注释掉if语句。

按此程序的话,if当然有用,因为analogWrite(E1,Val);这个函数的第二个参数Val的值的范围只能为0到255;这句if的意思就是说:当Val的值达到最大值或者处于最小值时,让temp值变反。即,当Val==255时,temp=-20,Val往下减小,当减到0时(此时的前一刻还是temp=-20),temp变反,即
temp=-(-20)=20啦;从而Val往上增加。:)

angel725 发表于 2014-10-3 12:17:56

那它最低转速是多少,
看这段,应该是从20开始加速的。

为什么我直接写20它就不转。

マイナス37度 发表于 2014-10-4 14:01:31

本帖最后由 マイナス37度 于 2014-10-4 14:12 编辑

void loop()
{
digitalWrite(M1,HIGH);
    digitalWrite(E1,HIGH);
    digitalWrite(M2,HIGH);
    digitalWrite(E2,HIGH);
   delay(速度:1最快);
}
这是最笨的办法了,把括号里的val直接改20是肯定不行的,原因么自己找找肯定能找到的
页: [1]
查看完整版本: 为什么一定要写这句电机才会转呢?