Ok, wenn der Thread der Troubleshooting und Arduino-Problemen gewidmet ist, dann stelle ich die Frage hier.
Auszug aus der Anleitung:
Beginnen wir mit dem Anschluss des Motors an den Halter M1 und den Encoder an den HA1/HB1.
Wir zeigen Ihnen, wie Sie dies im Codebeispiel tun.
Zuallererst werden wir den Motor bewegen. Laden Sie dazu diesen Code in Ihren MKR1000 hoch:
bei mir ist die HW sieht so aus und so ist die angeschlossen.
Dann lade ich den vorgeschlaganen C-Code "Motor_test. ino" in die Arduino-IDE runter:
#include <MKRMotorCarrier.h>
#define INTERRUPT_PIN 6
//Variable to store the battery voltage
static int batteryVoltage;
//Variable to change the motor speed and direction
static int duty = 0;
void setup()
{
//Serial port initialization
Serial.begin(115200);
while (!Serial);
//Establishing the communication with the motor shield
if (controller.begin())
{
Serial.print("MKR Motor Shield connected, firmware version ");
Serial.println(controller.getFWVersion());
}
else
{
Serial.println("Couldn't connect! Is the red led blinking? You may need to update the firmware with FWUpdater sketch");
while (1);
}
// Reboot the motor controller; brings every value back to default
Serial.println("reboot");
controller.reboot();
delay(500);
//Take the battery status
float batteryVoltage = (float)battery.getConverted();
Serial.print("Battery voltage: ");
Serial.print(batteryVoltage);
Serial.print("V, Raw ");
Serial.println(battery.getRaw());
}
void loop() {
//Take the battery status
float batteryVoltage = (float)battery.getConverted();
//Reset to the default values if the battery level is lower than 11V
if (batteryVoltage < 11)
{
Serial.println(" ");
Serial.println("WARNING: LOW BATTERY");
Serial.println("ALL SYSTEMS DOWN");
M1.setDuty(0);
M2.setDuty(0);
M3.setDuty(0);
M4.setDuty(0);
while (batteryVoltage < 11)
{
batteryVoltage = (float)battery.getConverted();
}
}
else
{
//Motor test
for (duty=-100; duty<100; duty+=5)
{
Serial.print("Motor Duty: ");
Serial.println(duty);
M1.setDuty(duty);
M2.setDuty(duty);
M3.setDuty(duty);
M4.setDuty(duty);
delay(50);
}
for (duty=100; duty>-100; duty-=5)
{
Serial.print("Motor Duty: ");
Serial.println(duty);
M1.setDuty(duty);
M2.setDuty(duty);
M3.setDuty(duty);
M4.setDuty(duty);
delay(50);
}
//Keep active the communication MKR1000 & MKRMotorCarrier
//Ping the samd11
controller.ping();
//wait
delay(50);
}
}
Dann Kompiliere ich per Arduino-IDE: es kommt als Response nur weisse Text. Es sieht wie ordnungsmäßig aus. Bei Bedarf könnte ich Response vom Kompilieren auch hier auffuhren.
Dann "Hochladen" in die HW per Arduino-IDE. Hier ist die Response vom Hochladen aus der Arduino_IDE:
-------------------------------------------------------------------------------------
//vollständig s. in Attachment zu diesem Post: Response_Hochladen___Motor_test.doc weil die Größe der Response (>9000 Zeichen) passt hier nicht hin. Fragment füge ich hier ein
Sketch wird kompiliert...
..............................
Linking everything together...
............................. .....................
Bibliothek MKRMotorCarrier in Version 1.0.5 im Ordner: C:.........Documents\Arduino\libraries\MKRMotorCarrier wird verwendet
Bibliothek Wire in Version 1.0 im Ordner: C:\ProgramData\MATLAB\SupportPackages\R2019a\3P.instrset\arduinoide.instrset\idepkgs\packages\arduino\hardware\samd\1.6.20\libraries\Wire wird verwendet
Der Sketch verwendet 23028 Bytes (8%) des Programmspeicherplatzes. Das Maximum sind 262144 Bytes.
Erzwinge Reset durch öffnen/schließen mit 1200 bps auf dem Port COM9
PORTS {COM9, } / {} => {}
PORTS {} / {} => {}
PORTS {} / {} => {}
PORTS {} / {COM5, } => {COM5, }
Found upload port: COM5
C:\ProgramData\MATLAB\SupportPackages\R2019a\3P.instrset\arduinoide.instrset\idepkgs\packages\arduino\tools\bossac\1.7.0/bossac.exe -i -d --port=COM5 -U true -i -e -w -v C:...........\AppData\Local\Temp\ArduinoServer\MW/Motor_test.ino.bin -R
Set binary mode
readWord(addr=0)=0x20007ffc
readWord(addr=0xe000ed00)=0x410cc601
readWord(addr=0x41002018)=0x10010305
version()=v2.0 [Arduino:XYZ] Dec 20 2016 15:36:43
chipId=0x10010005
Connected at 921600 baud
readWord(addr=0)=0x20007ffc
readWord(addr=0xe000ed00)=0x410cc601
readWord(addr=0x41002018)=0x10010305
Atmel SMART device 0x10010005 found
write(addr=0x20004000,size=0x34)
......................... ..........................
[===================== ] 70% (256/365 pages)write(addr=0x20005000,size=0x1000)
writeBuffer(scr_addr=0x20005000, dst_addr=0x6000, size=0x1000)
[========================== ] 87% (320/365 pages)write(addr=0x20005000,size=0xb40)
writeBuffer(scr_addr=0x20005000, dst_addr=0x7000, size=0xb40)
[==============================] 100% (365/365 pages)
done in 0.186 seconds
Verify 23332 bytes of flash with checksum.
checksumBuffer(start_addr=0x2000, size=0x1000) = 21f4
...................................
checksumBuffer(start_addr=0x6000, size=0x1000) = 9b38
checksumBuffer(start_addr=0x7000, size=0xb24) = 145e
Verify successful
done in 0.023 seconds
CPU reset.
readWord(addr=0)=0x20007ffc
...................
In der zuletzt im Attachment aufgeführten Arduino-Response nach dem Hochladen in die HW habe ich
die Stelle **Found upload port: COM5 ** fett markiert. Es ging hier um COM5, obwohl im IDE bei mir ist die Einstellung nur auf COM9.
An der Stelle folgten ein Paar sounds und ab der Stelle war der Response-Text orange farbiert.
Meine Frage wäre: wo könnte das Fehler liegen?
Nach dem C-Code "Motor_test" in der Anleitung geschrieben:
Sobald wir wissen, wie man einen Motor bewegt, ist der nächste Schritt, von den Encodern zu lesen.....
ERWARTETE ERGEBNISSE
Nach dem Ausführen der ersten Skizze sollten Sie verstehen, dass die Motoren dreht sich einen Sweep
seit Stoppposition bis zur höchsten Geschwindigkeit in beiden Richtungen.
Sie können den Motor an jedem der Motoranschlüsse anschließen, das Verhalten sollte das gleiche sein.
Es ist also erwartet, dass der Motor sich drehen soll. Der Motor dreht sich aber nicht.
Ich bitte euch um Hilfe.
Response_Hochladen___Motor_test.doc (26.8 KB)