2012-11-8 09:54:28 [显示全部楼层]
11054浏览
查看: 11054|回复: 12

[常见问题] 跪求ATMEGA328的管脚定义?

[复制链接]
最近新购了一块DFRduino RoMeo V1.1的卡(即DFRobot Arduino RoMeo 328集成2路电机驱动按键扩展板),想要通过PWM控制电机的正反转,但不清楚其管脚定义。

现在出现的问题就是用 I/O控制的是容易出现  给一个高电平(不是一直保持的)以后电机就一直转;点停止管脚以后电机还是一直转 点启动以后电机一直转,用线点任意管脚都可以启动电机。下面附上我们的程序希望能我们指导
  1. int ledPin = 13; // LED connected to digital pin 13
  2. int inPin = 9;   // pushbutton connected to digital pin 7
  3. int val = 0;     // variable to store the read value
  4. int outpin=4;
  5. int outpin1=5;
  6. int outpin2=6;
  7. int outpin3=7;
  8. int indd=2;
  9. int a=0;
  10. void setup()
  11. {
  12.   pinMode(ledPin, OUTPUT);      // sets the digital pin 13 as output
  13.   pinMode(inPin, INPUT);    // sets the digital pin 7 as input
  14.    pinMode(outpin, OUTPUT);  
  15.    pinMode(outpin1, OUTPUT);  
  16.    pinMode(outpin2, OUTPUT);
  17.    pinMode(outpin3, OUTPUT);  
  18.   pinMode(indd, OUTPUT);
  19. }
  20. void loop()
  21. {
  22.   val = digitalRead(inPin); // read the input pin
  23.   a = digitalRead(indd);
  24.   digitalWrite(ledPin, val);   // sets the LED to the button's value
  25.   digitalWrite(outpin, HIGH);
  26.   delay(100);
  27.   digitalWrite(outpin1,LOW);
  28.    delay(100);
  29. //  digitalWrite(outpin2, HIGH); // control the motor move or not_wake
  30. if(1==val)
  31. {
  32.   
  33.   digitalWrite(outpin2, HIGH);        //MaxVel:255
  34.    delay(100);
  35.   digitalWrite(outpin3, HIGH);     // control the motor move direction_wake
  36.   delay(100);
  37. }
  38.   if(1==a)
  39. {
  40.    val=0;
  41.   digitalWrite(outpin2, LOW);        //MaxVel:255  
  42.   digitalWrite(outpin3, LOW);     // control the motor move direction_wake
  43.   
  44. }
  45. }
复制代码

bobo  NPC

发表于 2012-11-8 10:32:06

https://wiki.dfrobot.com.cn/index.php?title=RoMeo%E6%8E%A7%E5%88%B6%E5%99%A8_%E5%85%BC%E5%AE%B9Arduino(SKU:DFR0004)

上面是WIKI的地址,确保你的版本是V1.1,板子上面是彩色排母。

电机控制"PWM模式"的几个管脚为
引脚        功能
4        电机1方向控制
5        电机1PWM控制
6        电机2PWM控制
7        电机2方向控制
你的定义为
  1. int inPin = 9;   // pushbutton connected to digital pin 7
  2. int val = 0;     // variable to store the read value
  3. int outpin=4;    //程序里面一直为高电机1方向控制正转
  4. int outpin1=5; //电机1PWM控制 程序一直为低,第一个电机将一直不转动
  5. int outpin2=6;
  6. int outpin3=7;
  7. int indd=2;
  8. if(1==val)  //如果输入9脚是高电平 电机2最大速度正转,
  9. {
  10.   
  11.   digitalWrite(outpin2, HIGH);        //MaxVel:255
  12.    delay(100);
  13.   digitalWrite(outpin3, HIGH);     // control the motor move direction_wake
  14.   delay(100);
  15. }
  16. else  //增加判断语句  否则就停止转动
  17. {
  18. digitalWrite(outpin2, LOW);        //停止转动
  19. }
  20.   if(1==a) // indd输入管脚不知道你是用来做什么功能
  21. {
  22.    val=0;
  23.   digitalWrite(outpin2, LOW);        //MaxVel:255  
  24.   digitalWrite(outpin3, LOW);     // control the motor move direction_wake
  25.   
  26. }
复制代码
回复

使用道具 举报

liaokesong  学徒
 楼主|

发表于 2012-11-8 11:36:14

你好
我们现在按照您给的程序来驱动电机了
但是仍然是原来那个样子,定义的就9的管脚在给它一个+5V的电源以后就一直转动,即使把电源去掉以后就也是一直转,一直的都转着停止不了,
不知道这样的问题解决
希望能帮我们解决这个问题。
回复

使用道具 举报

liaokesong  学徒
 楼主|

发表于 2012-11-8 11:42:34

我的板卡是DFRdu1no ROmeo v1.1(c)2001
数字管脚的定义0(RX),1(TX),2,3,4,5,6,7 ,8,9*,10*,11*,12,13,GND,AREF. 排线座是绿色的
回复

使用道具 举报

liaokesong  学徒
 楼主|

发表于 2012-11-8 11:47:55

本来是我们给一个+5V高电平给9这个管脚电机就会转一下 不给就不会转才对呢
现在是给一个电平就一直转个不停啊
急需知道了啊
回复

使用道具 举报

liaokesong  学徒
 楼主|

发表于 2012-11-8 11:49:58

您在后面加的ELSE语句没有起到作用呢
电机一直转的
回复

使用道具 举报

mickey  NPC

发表于 2012-11-9 12:53:39

Romeo控制器的电机驱动接口为数字口4,5,6,7,其中4,5控制电机M1,6,7控制电机M2,控制器定义4,7为转向控制,高电平正转,低电平反转,5,6为PWM控制速度,为0电机停转,为255电机最大转速。
回复

使用道具 举报

bobo  NPC

发表于 2012-11-9 12:54:42

下面是我测试后的代码,肯定可以用,如果还有问题,你把你接线拍照发上来看下,
  1. int E1 = 5; //M1 Speed Control
  2. int E2 = 6; //M2 Speed Control
  3. int M1 = 4; //M1 Direction Control
  4. int M2 = 7; //M1 Direction Control
  5. int KEY_IN = 9;
  6. void stop(void) //Stop
  7. {
  8. digitalWrite(E1,LOW);   
  9. digitalWrite(E2,LOW);      
  10. }
  11. void advance(char a,char b) //Move forward
  12. {
  13. analogWrite (E1,a);      //PWM Speed Control
  14. digitalWrite(M1,HIGH);   
  15. analogWrite (E2,b);   
  16. digitalWrite(M2,HIGH);
  17. }
  18. void back_off (char a,char b) //Move backward
  19. {
  20. analogWrite (E1,a);
  21. digitalWrite(M1,LOW);   
  22. analogWrite (E2,b);   
  23. digitalWrite(M2,LOW);
  24. }
  25. void turn_L (char a,char b) //Turn Left
  26. {
  27. analogWrite (E1,a);
  28. digitalWrite(M1,LOW);   
  29. analogWrite (E2,b);   
  30. digitalWrite(M2,HIGH);
  31. }
  32. void turn_R (char a,char b) //Turn Right
  33. {
  34. analogWrite (E1,a);
  35. digitalWrite(M1,HIGH);   
  36. analogWrite (E2,b);   
  37. digitalWrite(M2,LOW);
  38. }
  39. void setup(void)
  40. {
  41. int i;
  42. for(i=4;i<=7;i++)
  43.    pinMode(i, OUTPUT);  
  44.   pinMode(KEY_IN,INPUT);
  45.   pinMode(13, OUTPUT);  
  46. }
  47. void loop(void)
  48. {
  49.   int temp = 0;
  50.   temp = digitalRead(KEY_IN);
  51.   if(temp == HIGH)
  52.   {
  53.     advance (255,255);   //move forward in max speed
  54.     digitalWrite(13,HIGH);
  55.   }
  56.   else
  57.   {
  58.      stop();
  59.      digitalWrite(13,LOW);
  60.   }   
  61. }
复制代码
回复

使用道具 举报

liaokesong  学徒
 楼主|

发表于 2012-11-13 10:31:10

我想通过两个输入端,来控制电机的正反转。即拉高inPinA时,电机正传;拉高inPinB时,电机反转;不进行如何操作时,电机就停止。
现在的问题是:只有一个输入端时,可很好的控制电机正反转(如您的代码),但通过两个端口时,就不行了。拉高不同输入端时,要么电机不能反转,要么电机运行不连续,通过监控,会看到0,1间断出现。
代码如下:
  1. int E2 = 6; //M2 Speed Control
  2. int M2 = 7; //M2 Direction Control
  3. int X = 8;  //YES 10,9,8,3,2
  4. int Y = 2;
  5. void stop(void) //Stop
  6. {
  7. digitalWrite(E2,LOW);   
  8. }
  9. void advance(char b) //Move forward
  10. {
  11. analogWrite (E2,b);   
  12. digitalWrite(M2,HIGH);
  13. }
  14. void back_off (char b) //Move backward
  15. {
  16. analogWrite (E2,b);   
  17. digitalWrite(M2,LOW);
  18. }
  19. void setup(){
  20.   //start serial connection
  21.   Serial.begin(9600);
  22.   //configure pin2 as an input and enable the internal pull-up resistor
  23.   pinMode(6, OUTPUT);
  24.   pinMode(7, OUTPUT);
  25.   pinMode(Y, INPUT);
  26.   pinMode(X, INPUT);
  27.   pinMode(13, OUTPUT);
  28. }
  29. void loop(){
  30.   //read the pushbutton value into a variable
  31.   int sensorVal = digitalRead(Y);
  32.   int val = digitalRead(X);
  33.   //print out the value of the pushbutton
  34.   Serial.println(val);
  35.   
  36.   // Keep in mind the pullup means the pushbutton's
  37.   // logic is inverted. It goes HIGH when it's open,
  38.   // and LOW when it's pressed. Turn on pin 13 when the
  39.   // button's pressed, and off when it's not:
  40.   if(sensorVal == HIGH)
  41.   {
  42.       digitalWrite(13, HIGH);
  43.       advance(255);   //move forward in max speed
  44.   }
  45.   else{
  46.       stop();
  47.       digitalWrite(13, LOW);
  48.   }
  49.   
  50.   if(val == HIGH)
  51.   {
  52.       digitalWrite(13, HIGH);
  53.       back_off(255);   //move forward in max speed
  54.   }
  55.   else{
  56.       stop();
  57.       digitalWrite(13, LOW);
  58.   }
  59. }
复制代码
板卡接线如下:
C:\Documents and Settings\WBA013\桌面\img
回复

使用道具 举报

liaokesong  学徒
 楼主|

发表于 2012-11-13 10:33:06

图片见附件。很急,各位高手指点指点~~

板卡接线

板卡接线
回复

使用道具 举报

liaokesong  学徒
 楼主|

发表于 2012-11-13 10:34:59

附上另一张图:
回复

使用道具 举报

mickey  NPC

发表于 2012-11-13 12:12:53

我们的控制器,电机驱动部分使用了2个数字口控制1路电机,1个口是控制正反转,即高电平正转,低电平反转,1个口是控制器速度,低电平就停止,高电平就最大速度。
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
关于楼主

楼主的其它帖子

上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail