Danke.
Ok, dann Arduino Engineering Kit, Rev. 1 Chapter 3.1 Motor_test
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 sind die HW-Komponente so wie auf dem oberen Bild und so ist die HW auch 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 den oberen C-Code 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 sind Fragmente der Response vom Hochladen aus der Arduino_IDE:
------------------------------------------------------------------------
vollständige IDE-Response nach dem Hochladen ist im Attachment zu diesem Post, weil zu groß: Response_Hochladen___Motor_test.doc
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 bewusste 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.ino" in der Anleitung geschrieben:
Sobald wir wissen, wie man einen Motor bewegt, ist der nächste Schritt, von den Encodern zu lesen.....
Aus der Anleitung:
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.
Grüß
Igor
Response_Hochladen___Motor_test.doc (26.8 KB)