极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10803|回复: 3

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

[复制链接]
发表于 2014-10-2 22:23:23 | 显示全部楼层 |阅读模式

  1. int E1 = 5;  //PWMA
  2. int M1 = 4;  //DIRA
  3. int E2 = 6;  //PWMB            
  4. int M2 = 7;  //DIRB
  5. int Val=0;
  6. int temp=20;
  7. void setup()
  8. {
  9.       pinMode(M1, OUTPUT);
  10.       pinMode(M2, OUTPUT);
  11. }

  12. void foward()
  13. {
  14.     digitalWrite(M1,HIGH);
  15.     analogWrite(E1,Val);
  16.     digitalWrite(M2,HIGH);
  17.     analogWrite(E2,Val);
  18.     Val=Val+temp;
  19.     if (Val == 0 || Val == 255)
  20.      {
  21.            temp = -temp;
  22.      }
  23.     //delay(500);
  24. }

  25. void loop()
  26. {
  27.    foward();
  28.    //delay(500);
  29. }
复制代码

想做个小车。
用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往上增加。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-3 12:17:56 | 显示全部楼层
那它最低转速是多少,
看这段,应该是从20开始加速的。

为什么我直接写20它就不转。
回复 支持 反对

使用道具 举报

发表于 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是肯定不行的,原因么自己找找肯定能找到的
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-8 22:32 , Processed in 0.069212 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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