折腾了好几天,实在搞不定了,决定上来社区求助。
现在的硬件情况是这样的:
- HM-GM37-3429霍尔传感器大载重电机,每个电机六条线,其中电机输入两个,霍尔编码器电源两个,编码器AB相两个
- 四个电机,不算电源线的话,每个电机要使用3个Arduino的端口(控制高低电平和PWM)+两个编码器AB相数据输入,共需要20个端口
- Arduino Uno
- L298N四路驱动器
- 12V电池
我遇到的问题是:
1. 不知道怎样接线才能把电机和霍尔编码器都用上
2. 考虑过扩展板,但即便用了Nano+扩展板能插上线,Arduino也只有1~13,A1~A7这么多的端口,如何能同时控制电机又可以获取到四个霍尔编码器的值?
还有就是目前电机总是时转时不转的,折腾了5,6个小时了不清楚原因,还望各位大神可以多支招,已排查以下情况:
- 全部杜邦线已用万用表测量过是通的
- L298N是正常的,用了两块同样的板子试过还是这样
- 电机用电池直连测试过是可以转的
唯一没有测过的就是Arduino Uno是不是正常的了,但这个不知道有没有简便的方法可以测试?
谢谢大家!
以下是我的测试代码:
[mw_shl_code=arduino,true]/*
* Sample Code for testing car running
*/
//Define the Pins
//Motor 1
int pinAIN1 = 4; //右前马达
int pinAIN2 = 2; //右前马达
int pinPWMA = 3; //右前马达PWM
int pinAIN3 = 7; //左前马达
int pinAIN4 = 6; //左前马达
int pinPWMB = 5; //左前马达PWM
int pinAIN5 = 10; //右后马达
int pinAIN6 = 8; //右后马达
int pinPWMC = 9; //右后马达PWM
int pinAIN7 = 12; //左后马达
int pinAIN8 = 13; //左后马达
int pinPWMD = 11; //左后马达PWM
//Standby
int pinSTBY = 12;
void setup()
{
Serial.begin(9600);
//Set the PIN Modes
pinMode(pinAIN1, OUTPUT);
pinMode(pinAIN2, OUTPUT);
pinMode(pinPWMA, OUTPUT);
pinMode(pinAIN3, OUTPUT);
pinMode(pinAIN4, OUTPUT);
pinMode(pinPWMB, OUTPUT);
pinMode(pinAIN5, OUTPUT);
pinMode(pinAIN6, OUTPUT);
pinMode(pinPWMC, OUTPUT);
pinMode(pinAIN7, OUTPUT);
pinMode(pinAIN8, OUTPUT);
pinMode(pinPWMD, OUTPUT);
pinMode(pinSTBY, OUTPUT);
}
void loop()
{
//12A
Serial.println("前");
int speed = 255;
digitalWrite(pinAIN1, 1);
digitalWrite(pinAIN2, 0);
analogWrite(pinPWMA, speed);
delay(2000);
Serial.println("结束");
analogWrite(pinPWMA, 0);
delay(1000);
Serial.println("后");
digitalWrite(pinAIN1, 0);
digitalWrite(pinAIN2, 1);
analogWrite(pinPWMA, speed);
delay(2000);
Serial.println("结束");
analogWrite(pinPWMA, 0);
delay(1000);
//34B
Serial.println("后");
digitalWrite(pinAIN3, 1);
digitalWrite(pinAIN4, 0);
analogWrite(pinPWMB, speed);
delay(2000);
Serial.println("结束");
analogWrite(pinPWMB, 0);
delay(1000);
Serial.println("前");
digitalWrite(pinAIN3, 0);
digitalWrite(pinAIN4, 1);
analogWrite(pinPWMB, speed);
delay(2000);
Serial.println("结束");
analogWrite(pinPWMB, 0);
delay(1000);
//56C
Serial.println("前");
digitalWrite(pinAIN5, 1);
digitalWrite(pinAIN6, 0);
analogWrite(pinPWMC, speed);
delay(2000);
Serial.println("结束");
analogWrite(pinPWMC, 0);
delay(1000);
Serial.println("后");
digitalWrite(pinAIN5, 0);
digitalWrite(pinAIN6, 1);
analogWrite(pinPWMC, speed);
delay(2000);
Serial.println("结束");
analogWrite(pinPWMC, 0);
delay(1000);
//78D
Serial.println("后");
digitalWrite(pinAIN7, 1);
digitalWrite(pinAIN8, 0);
analogWrite(pinPWMD, speed);
delay(2000);
Serial.println("结束");
analogWrite(pinPWMD, 0);
delay(1000);
Serial.println("前");
digitalWrite(pinAIN7, 0);
digitalWrite(pinAIN8, 1);
analogWrite(pinPWMD, speed);
delay(2000);
Serial.println("结束");
analogWrite(pinPWMD, 0);
delay(1000);
/*
*/
}[/mw_shl_code]