极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 37236|回复: 15

重开帖发下我的双电机+电机驱动板程序和接线图(ps了张图)

[复制链接]
发表于 2013-9-9 11:45:04 | 显示全部楼层 |阅读模式
本帖最后由 hick 于 2013-9-9 11:49 编辑

首先是我 ps 的接线图





然后是L298N双H桥直流电机驱动板,跟提供的手册上的略有差异。主要是跟 ENA ENB IN1-IN4 并列的还有一个 5V+ 和 GND 插针。 我理解这个是驱动板的 5V 输入口?  还是说下图右下的那个 5V 跳线才是驱动板 5V 输入?







下面这张是跟手册上不一样的局部放大







昨晚这套还是能跑起来了,就是不能通过 ENA ENB 控制速度。 也另外发了个求助帖,本贴也继续求教咋回事:







另附手册上的程序:

  1. // motor A
  2. int dir1PinA = 2;
  3. int dir2PinA = 3;
  4. int speedPinA = 9;

  5. // motor B
  6. int dir1PinB = 4;
  7. int dir2PinB = 5;
  8. int speedPinB = 10;

  9. unsigned long time;
  10. int speed;
  11. int dir;

  12. void setup() {
  13.   pinMode(dir1PinA, OUTPUT);
  14.   pinMode(dir2PinA, OUTPUT);
  15.   pinMode(speedPinA, OUTPUT);
  16.   pinMode(dir1PinB, OUTPUT);
  17.   pinMode(dir2PinB, OUTPUT);
  18.   pinMode(speedPinB, OUTPUT);

  19.   time = millis();
  20.   speed = 0;
  21.   dir = 1;
  22. }

  23. void loop() {
  24.   analogWrite(speedPinA, speed);
  25.   analogWrite(speedPinB, 255 - speed);
  26.   // set direction
  27.   if (1 == dir) {
  28.     digitalWrite(dir1PinA, LOW);
  29.     digitalWrite(dir2PinA, HIGH);
  30.     digitalWrite(dir1PinB, HIGH);
  31.     digitalWrite(dir2PinB, LOW);
  32.   } else {
  33.     digitalWrite(dir1PinA, HIGH);
  34.     digitalWrite(dir2PinA, LOW);
  35.     digitalWrite(dir1PinB, LOW);
  36.     digitalWrite(dir2PinB, HIGH);
  37.   }
  38.   if (millis() - time > 5000)  {
  39.     time = millis();
  40.     speed += 20;
  41.     if (speed > 255) {
  42.       speed = 0;
  43.     }
  44.     if (1 == dir) {
  45.       dir = 0;
  46.     } else {
  47.       dir =1;
  48.     }
  49.   }
  50. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

 楼主| 发表于 2013-9-11 14:13:40 | 显示全部楼层
wyd1520 发表于 2013-9-11 14:05
这是电压不够造成的,speed要使能让电机转动,值最少在150以上才行,低于这个值电压就太低了就走不动。
...

恩 , 那个速度值不通场景下不通。

实际经验感觉跟电压可能也不是百分百相关,后来我甚至换了新买的移动电源,实测电压可能都要低于之前使用的俩移动电源,但是驱动起来就是顺畅。

回复 支持 1 反对 0

使用道具 举报

发表于 2013-9-9 13:51:38 | 显示全部楼层
图片挺清晰的,
回复 支持 反对

使用道具 举报

发表于 2013-9-9 16:50:05 | 显示全部楼层
Fortware 发表于 2013-9-9 13:51
图片挺清晰的,

time = millis();这个函数是在哪里定义的呢,可不可以给我源代码呢
回复 支持 反对

使用道具 举报

发表于 2013-9-9 20:06:26 | 显示全部楼层
本帖最后由 Fortware 于 2013-9-9 20:28 编辑
time = millis();这个函数是在哪里定义的呢,可不可以给我源代码呢


F:\arduino-1.0.4\arduino-1.0.4\reference\Millis.html
回复 支持 反对

使用道具 举报

发表于 2013-9-9 23:47:08 | 显示全部楼层
按照这个程序,假如程序调了速,但人无法识别出来。

不如直接确定speed=50 或speed=100
对比观察一下是否控制电机的转速。

另外,从图片观察看使能端的跳线冒连接上了,似乎意味着使能值为最大值。
即使程序中设定的使能端的值也不起作用。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-10 11:10:58 | 显示全部楼层
tom 发表于 2013-9-9 23:47
按照这个程序,假如程序调了速,但人无法识别出来。

不如直接确定speed=50 或speed=100

多谢, 经过单电机反复调试,基本确认应该是电压不够,电流太小,不通的 speed 控制值造成很奇怪的现象。
换了个好点儿的电源,最大值255的时候能 ok 了。低于一定值需要手工转动辅助启动,否则蜂鸣。
回复 支持 反对

使用道具 举报

发表于 2013-9-11 12:58:44 | 显示全部楼层
新手,学习了
回复 支持 反对

使用道具 举报

发表于 2013-9-11 14:05:43 | 显示全部楼层
hick 发表于 2013-9-10 11:10
多谢, 经过单电机反复调试,基本确认应该是电压不够,电流太小,不通的 speed 控制值造成很奇怪的现象。 ...

这是电压不够造成的,speed要使能让电机转动,值最少在150以上才行,低于这个值电压就太低了就走不动。
你可以试试,从110-255就知了 150 180 200 220 255 是有区别
回复 支持 反对

使用道具 举报

发表于 2013-9-12 17:43:18 | 显示全部楼层
开始初始化时给个255启动,1秒之后再调速
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-12 17:50:16 | 显示全部楼层
一缕阳光 发表于 2013-9-12 17:43
开始初始化时给个255启动,1秒之后再调速

恩 现在不好试,估计可能有些效果。  我试过统一的速度值,先操作单电机,一定能够延时以后再操作另外一个电机效果就好很多; 同时操作可能就启动不了。
回复 支持 反对

使用道具 举报

发表于 2013-9-13 22:08:26 | 显示全部楼层
本帖最后由 greeham 于 2013-9-13 22:09 编辑

5v是输出吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-13 23:18:47 | 显示全部楼层
greeham 发表于 2013-9-13 22:08
5v是输出吧

应该有一个是输入。 板子上三个 5V 标记的,我只确认一个是电机输入的, 其他俩不大确认。
回复 支持 反对

使用道具 举报

发表于 2013-11-23 19:18:19 | 显示全部楼层
bbbbbbbbb
回复 支持 反对

使用道具 举报

发表于 2014-2-3 10:09:04 | 显示全部楼层
没看明白最后你们是解决了这个调速问题,还是没有解决这个问题啊
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-19 18:39 , Processed in 0.056980 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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