RobotPower MultiMoto kontroll sköld Guide (2 / 3 steg)
Steg 2: programmering
Planeringen ser ut mer förvirrande än den egentligen är, det finns bara massor av variabler som ska initieras. När allt är inställd är kontroll lätt.
Denna kod körs alla inställningarna sedan flyttar manöverdonen in och ut med halv fart och full fart.
Viktiga saker att notera när kontrollera MultiMoto:
-Använd digitalWrite() för att motorerna, låg = aktiverad, hög = inaktiverad
-Använd digitalWrite() på riktning stiften att ställa in riktning av motorerna. 1 eller 0 som förlängning eller returgående fas beror på hur du ansluten manöverdonet till M1-M4 terminalerna.
-Använd analogWrite() på PWM stift att ställa in hastigheten (0-255)
/ * Exempelkod att styra upp till 4 manöverdon, med Robot Power MultiMoto-drivrutinen.
Hårdvara:
-Robot Power MultiMoto
-Arduino Uno
Ledningar:
-Anslut manöverdon till M1, M2, M3, M4 anslutningar i MultiMoto styrelse.
-Anslut negationen (svart) till rätt typ av anslutning, positiva (röd) till vänster.
-Anslut en 12 volt källa (minst 1A per motor om lossas, 8A per motor om fullt lastade) till BAT terminalerna. Se till att positiva och negativa placeras på rätt platser.
Koden ändras av progressiva automatiseringar från exempelkoden försedd Robot
< en href = "http://www.robotpower.com/downloads/" rel = "nofollow" > http://www.robotpower.com/downloads/</a>
Robot Power MultiMoto v1.0 demo
Denna programvara släpps ut i det offentliga rummet
*/
inkludera SPI biblioteket:
#include < SPI.h >
L9958 slav Välj stift för SPI
#define SS_M4 14
#define SS_M3 13
#define SS_M2 12
#define SS_M1 11
L9958 riktning pins
#define DIR_M1 2
#define DIR_M2 3
#define DIR_M3 4
#define DIR_M4 7
L9958 PWM stift
#define PWM_M1 9
#define PWM_M2 10 / / Timer1
#define PWM_M3 5
#define PWM_M4 6 / / Timer0
L9958 aktivera för alla 4 motorer
#define ENABLE_MOTORS 8
int pwm1, pwm2, pwm3, pwm4;
booleska Kat1 kat2 kat3, dir4;
void setup() {
unsigned int configWord;
sätta din installation kod här, om du vill köra en gång:
pinMode (SS_M1, OUTPUT); digitalWrite (SS_M1, låg); HÖG = inte valda
pinMode (SS_M2, OUTPUT); digitalWrite (SS_M2, låg);
pinMode (SS_M3, OUTPUT); digitalWrite (SS_M3, låg);
pinMode (SS_M4, OUTPUT); digitalWrite (SS_M4, låg);
L9958 riktning pins
pinMode (DIR_M1, OUTPUT);
pinMode (DIR_M2, OUTPUT);
pinMode (DIR_M3, OUTPUT);
pinMode (DIR_M4, OUTPUT);
L9958 PWM stift
pinMode (PWM_M1, OUTPUT); digitalWrite (PWM_M1, låg);
pinMode (PWM_M2, OUTPUT); digitalWrite (PWM_M2, låg); Timer1
pinMode (PWM_M3, OUTPUT); digitalWrite (PWM_M3, låg);
pinMode (PWM_M4, OUTPUT); digitalWrite (PWM_M4, låg); Timer0
L9958 aktivera för alla 4 motorer
pinMode (ENABLE_MOTORS, OUTPUT);
digitalWrite (ENABLE_MOTORS, hög); HÖG = inaktiverad
/ / *** Ställa in L9958 marker ***
"L9958 Config registret
"Bit
"0"-RES
' 1 - DR - Återställ
"2-CL_1 - curr gräns
"3-CL_2 - curr_limit
"4-RES
"5-RES
' 6-RES
"7-RES
' 8 - VSR - spänning slew rate (1 gör massa limit, 0 stänger)
' 9-ISR - nuvarande slew rate (1 gör massa limit, 0 stänger)
"10 - ISR_DIS - nuvarande slew inaktivera
"11 - OL_ON - öppna belastning aktivera
' 12-RES
"13-RES
' 14-0 - noll alltid
"15-0 - noll alltid
* / / / ställa in max nuvarande gräns och inaktivera ISR dräpte begränsa
configWord = 0b0000010000001100;
SPI.begin();
SPI.setBitOrder(LSBFIRST);
SPI.setDataMode(SPI_MODE1); klockan pol = låg, fas = hög
Motor 1
digitalWrite (SS_M1, låg);
SPI.transfer(lowByte(configWord));
SPI.transfer(highByte(configWord));
digitalWrite (SS_M1, hög);
Motor 2
digitalWrite (SS_M2, låg);
SPI.transfer(lowByte(configWord));
SPI.transfer(highByte(configWord));
digitalWrite (SS_M2, hög);
Motor 3
digitalWrite (SS_M3, låg);
SPI.transfer(lowByte(configWord));
SPI.transfer(highByte(configWord));
digitalWrite (SS_M3, hög);
Motor 4
digitalWrite (SS_M4, låg);
SPI.transfer(lowByte(configWord));
SPI.transfer(highByte(configWord));
digitalWrite (SS_M4, hög);
Ange inledande manöverdonet inställningar att dra 0 hastighet för säkerhet
dir1 = 0; kat2 = 0; kat3 = 0; dir4 = 0; Ange riktning
PWM1 = 0; PWM2 = 0; pwm3 = 0; pwm4 = 0; Inställd hastighet (0-255)
digitalWrite (ENABLE_MOTORS, låg); / / lågt = aktiverad
} / / End setup
void loop() {
dir1 = 1;
PWM1 = 255; Ange riktning och hastighet
digitalWrite (DIR_M1, dir1);
analogWrite (PWM_M1, pwm1); skriva till stift
kat2 = 0;
PWM2 = 128;
digitalWrite (DIR_M2, kat2);
analogWrite (PWM_M2, pwm2);
kat3 = 1;
pwm3 = 255;
digitalWrite (DIR_M3, kat3);
analogWrite (PWM_M3, pwm3);
dir4 = 0;
pwm4 = 128;
digitalWrite (DIR_M4, dir4);
analogWrite (PWM_M4, pwm4);
Delay(5000); vänta en gång alla fyra motorer är inställda
dir1 = 0;
PWM1 = 128;
digitalWrite (DIR_M1, dir1);
analogWrite (PWM_M1, pwm1);
kat2 = 1;
PWM2 = 255;
digitalWrite (DIR_M2, kat2);
analogWrite (PWM_M2, pwm2);
kat3 = 0;
pwm3 = 128;
digitalWrite (DIR_M3, kat3);
analogWrite (PWM_M3, pwm3);
dir4 = 1;
pwm4 = 255;
digitalWrite (DIR_M4, dir4);
analogWrite (PWM_M4, pwm4);
Delay(5000);
} //end ogiltig loop