Welcome to MattzoBricks › Forums › MattzoTrainController for Power Functions (MTC4PF) › L9110 auf 100% trotz korrekter Rocrail-Befehle
- This topic has 14 replies, 7 voices, and was last updated 10 months, 1 week ago by Merten Falk.
-
AuthorPosts
-
-
January 24, 2023 at 22:56 #5864Stephan CsontosParticipant
Hallo werte MattzoController Freunde
Ich habe folgendes Problem:
Wenn ich einen Geschwindigkeitswert über RocRail an den MattzoController sende, wird dieser auch über dem MQTT Broker übertragen. Hier ein kleiner Auszug aus dem SerialMonitor:
Setting train speed 30 (power: 634) for motor shield index 0
setMotorShieldPower() called with msi=0, mpi=0, desiredPower=-634
Setting train speed 35 (power: 673) for motor shield index 0
setMotorShieldPower() called with msi=0, mpi=0, desiredPower=-673
Setting train speed 40 (power: 712) for motor shield index 0
setMotorShieldPower() called with msi=0, mpi=0, desiredPower=-712An den PIN D3 und D4 wird aber immer ein Spannung von 3.28V ausgegeben. Jeder Geschwindigkeitsveränderung in RocRail wird an den PIN D3 und D4 nicht ausgegeben.
Somit resultiert bei jedem Geschwindigkeitsbefehl eine Spannung von 8.8V auf dem Motorshield.Hier die Config im Controller:
// Author: Dr. Matthias Runte
// Copyright 2020 by Dr. Matthias Runte
// License:
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.// This file is the configuration file for the firmware
// You need to adapt it to the specific requirements of the desired behaviour of the controller
// The file contains default values for the standard wiring layout of the MattzoLayoutController
// Check the examples in the “examples” directory for more inspiring creations// ************************************************
// Example file for a simple train with MTC4PF mini
// ************************************************// *****
// LOCOS
// *****// Number of locos (aka. MattzoLocos) controlled by this controller
const int NUM_LOCOS = 1;// List of MattzoLocos
// The parameters have the following meaning:
// – locoName: name of the loco as setup in Rocrail
// – locoAddress: address of the loco as setup in Rocrail
// – accelerationInterval: time interval for acceleration / braking (default: 100 ms)
// – accelerateStep: power increment for each acceleration step
// – brakeStep: : power decrement for each braking step
MattzoLocoConfiguration* getMattzoLocoConfiguration() {
static MattzoLocoConfiguration locoConf[NUM_LOCOS];locoConf[0] = (MattzoLocoConfiguration){
.locoName = “TGV blau”,
.locoAddress = 100,
.accelerationInterval = 100,
.accelerateStep = 5,
.brakeStep = 10
};return locoConf;
}// *************
// MOTOR SHIELDS
// *************
// Number of motor shields connected to this controller
const int NUM_MOTORSHIELDS = 1;// List of motor shields that are controlled by this controller
// The parameters have the following meaning:
// – locoAddress: loco that this motor shields is attached to
// – motorShieldType: motor shield type
// – L298N_enA, L298N_enB: PWM signal pin for motor A / B, if L298N is used.
// – in1..in4: pin for motor direction control for motor shields L298N and L9110 (in1: forward motor A, in2: reverse motor A, in3: forward motor B, in4: reverse motor B).
// – minArduinoPower: minimum power setting for Arduino based motor shields
// – maxArduinoPower: maximum power setting for Arduino based motor shields (max. 1023)
// – configMotorA: turning direction of motor A (1 = forward, -1 = backward, 0 = unused). In case of LEGO IR Receiver 8884, this is the motor connected to the red port.
// – configMotorB: same for motor B; if IR receiver: blue port
// – irChannel: if a LEGO IR Receiver 8884 is used, the selected channel of the receiver. May be 0, 1, 2 or 3. If the loco uses multiple IR receivers on different channels, additional motor shields for the loco are required.
MattzoMotorShieldConfiguration* getMattzoMotorShieldConfiguration()
{
static MattzoMotorShieldConfiguration msConf[NUM_MOTORSHIELDS];// Type of motor shield directly wired to the controller.
// (The different motor shield types are defined in MTC4PF.ino)
// Set to MotorShieldType::NONE if only virtual motor shields are used!
const MotorShieldType MOTORSHIELD_TYPE = MotorShieldType::L9110;msConf[0] = (MattzoMotorShieldConfiguration){
.locoAddress = 100,
.motorShieldType = MotorShieldType::L9110,
.L298N_enA = 0,
.L298N_enB = 0,
.in1 = D3,
.in2 = D4,
.in3 = D5,
.in4 = D6,
.minArduinoPower = MIN_ARDUINO_POWER,
.maxArduinoPower = MAX_ARDUINO_POWER,
.configMotorA = -1,
.configMotorB = 0,
.irChannel = -1
};return msConf;
}// *************************
// TRAIN LIGHT CONFIGURATION
// *************************// Number of train lights controlled by this controller
#define NUM_TRAIN_LIGHTS 0TTrainLightConfiguration trainLightConfiguration[NUM_TRAIN_LIGHTS] = {};
// ******************************
// FUNCTION MAPPING CONFIGURATION
// ******************************// Rocrail functions are used to MANUALLY switch train lights on and off
// Number of function mappings
#define NUM_FUNCTION_MAPPINGS 0TLocoFunctionMappingConfiguration locoFunctionMappingConfiguration[NUM_FUNCTION_MAPPINGS] = {};
// *********************************
// TRAIN LIGHT TRIGGER CONFIGURATION
// *********************************// Triggers are used to AUTOMATICALLY switch train lights on and off
// Number of train light triggers as defined just below
#define NUM_TRAIN_LIGHT_TRIGGERS 0TTrainLightTriggerConfiguration trainLightTriggerConfiguration[NUM_TRAIN_LIGHT_TRIGGERS] = {};
// ************************
// CONTROLLER CONFIGURATION
// ************************// Configuration for motorshield type Lego IR Receiver 8884
const uint8_t IR_LED_PIN=D5; // pin on which the IR LED is installed that controls all attached Lego IR Receiver 8884s.// Digital output PIN to monitor controller operation (typically a LED)
const bool STATUS_LED_PIN_INSTALLED=true;
const uint8_t STATUS_LED_PIN=D8;
const bool STATUS_LED_REVERSE=false;// Report battery level
#define REPORT_BATTERYLEVEL false // set to true or false to allow or omit battery level reports
#define SEND_BATTERYLEVEL_INTERVAL 60000 // interval for sending battery level in milliseconds
#define BATTERY_PIN A0
const int VOLTAGE_MULTIPLIER = 20000 / 5000 – 1; // Rbottom = 5 kOhm; Rtop = 20 kOhm; => voltage split factor
#define MAX_AI_VOLTAGE 5100 // maximum analog input voltage on pin A0. Usually 5000 = 5V = 5000mV. Can be slightly adapted to correct small deviations// ****************
// NETWORK SETTINGS
// ****************// Trigger emergency brake upon disconnect
const bool TRIGGER_EBREAK_UPON_DISCONNECT=true;// WiFi Hostname
// Hostnames must start with a-z, A-Z, 0-9. From 2nd character, hyphens (“-“) may also be used
const char* MC_HOSTNAME = “MTC4PF-mini”;// Syslog application name
const char* SYSLOG_APP_NAME = “MTC4PF-mini”;Das folgende Board habe ich im Einsatz:
NodeMCU Lua Amica Modul V2 ESP8266 ESP-12F WIFI WLAN unverlötet mit CP2102Danke für die Hilfe
P.S.:
Motorshield habe ich bereits gewechselt. Habe aber den Controller noch nicht durch einen anderen ersetzt. -
January 25, 2023 at 08:26 #5865Matthias RunteKeymaster
Wenn ich Dich richtig verstehe, klappt anhalten und fahren grundsätzlich, aber beim fahren fährt die Lok immer mit voller Leistung, korrekt? Wenn dem so ist, würde ich Dir empfehlen, mal mit folgenden beiden Parametern zu spielen:
.minArduinoPower = MIN_ARDUINO_POWER,
.maxArduinoPower = MAX_ARDUINO_POWER,Probier doch mal
.minArduinoPower = 200,
.maxArduinoPower = 500,oder so etwas, und teste ein bisschen was für die Lok gut funktioniert.
-
January 25, 2023 at 10:17 #5866Stephan CsontosParticipant
Hallo Matthias
Danke dir für den Tipp, genau dies musste ich im Code anpassen. Die zugewiesenen Werte zu .minAurduinoPower und .maxArduinoPower sind zu hoch.
Ich musste die werte wie folgt anpassen damit ein brauchbares PWM Signal generiert wird:
.minArduinoPower = 1,
.maxArduinoPower = 300,Ein Wert von 400 wird im main.cpp der Funktion .minArduinoPower zugewiesen.
Dieser Wert führt dazu, dass das PWM Signal an den Ausgänge D3/D4 eine gemittelte Spannung von ca. 3.3V erzeugen.Warum dies nun bei diesem Microcontroller von AZ-Delivery so ist, kann ich nicht sagen.
Gemäss Lieferant ist der gelieferte Microcontroller der gleiche, wie der in der Materialliste auf Mattzobricks.com.Sei es so wie es ist aber nun funktioniert alles so wie es soll.
Danke dir und bis bald
- This reply was modified 1 year, 8 months ago by Stephan Csontos. Reason: Schreibfehler
-
February 11, 2023 at 12:46 #5935Guido RamusParticipant
Hallo,
ich hatte genau das gleiche Problem. Und bei mir mit dem Billig-L9110 und den Standart ESP passten die Werte 100-250 ganz gut.
Danke für den Tip und für die MTC Sache überhaupt!
VG,
Brandse- This reply was modified 1 year, 8 months ago by Guido Ramus. Reason: Tippfehler
-
February 11, 2023 at 12:55 #5937Matthias RunteKeymaster
Ich kommentiere das mal im Source Code, dann hat es die Nachwelt etwas einfacher.
-
May 17, 2023 at 21:22 #6310Artyr NikolaevParticipant
Faced the same problem.
Added to the setup section
analogWriteRange(1023); -
October 28, 2023 at 16:33 #6499Ralf SchäferParticipant
Hallo Matthias und MattzoController Freunde,
erstmal vielen Danke für die tolle Umsetzung der Controller.
Bisher war ich immer nur begeisterter stiller Konsument deiner Entwicklungen,
nun habe ich aber genau das gleiche Problem mit dem PWM Signal das nur 0 und volle Power kennt.Ich konnte es wie oben beschrieben auch in den Griff bekommen …
Hab mit einem Oszilloskop gemessen das die Impulse über 0% so grade erscheinen und bis 98% breiter werden
Komme so auf die Werte 1 und 260Ich verstehe es aber nicht wirklich.
Mit unveränderten Werten:
Lade ich den Controller mit Arduino und Version 0.51 klappt es bisher problemlos.
Lade ich den gleichen Controler mit VSCode und der aktuellen Version, muss ich die Werte ändern.An der Hardware kann es meiner Meinung nach nicht liegen.
Da muss sich doch irgendeine Berechnung etc. im Code geändert haben ?!Grüße und Danke
-
October 30, 2023 at 10:14 #6500Matthias RunteKeymaster
Hallo Ralf, seit 0.51 hat sich sehr viel geändert. Sobald die “Saison” wieder begonnen hat, schaue ich da mal näher rein und sehe mir das mal an. Wenn ich Dich richtig verstanden habe, kommst Du aber durch Ändern der Werte erst einmal klar, oder?
-
November 1, 2023 at 11:51 #6501Ralf SchäferParticipant
Hallo MAtthias, ja danke. Ich hatte mir nur ein neues Platinchen (SMD) entwickelt und da hab ich dann natürlich erstmal bei mir gesucht 🙂 dann noch der Umstieg auf VSCode. Alles Gut. das lange Wochenende ist gerettet. Bei mir startet die Bastel Saison auch grad erst wieder. Echt Klasse was du/ihr da so baust.
-
November 11, 2023 at 09:43 #6520Matthias RunteKeymaster
Danke sehr und noch viel Erfolg!
-
-
-
November 28, 2023 at 07:41 #6543Merten FalkParticipant
Gelöscht, weil Duplikat.
- This reply was modified 10 months, 3 weeks ago by Matthias Runte.
- This reply was modified 10 months, 2 weeks ago by Merten Falk. Reason: Duplikat
-
November 28, 2023 at 07:41 #6544Merten FalkParticipant
Moin moin,
nachdem ich zur Belustigung meiner Jungs, zwei L9110 abgebrannt (<- buchstäblich) habe, bin ich dann doch auf den Gedanken gekommen mal hier im Forum zu schauen.
Ich vermute, dass die Ursache für meine Pyroshow ebenfalls (MIN|MAX)_ARDUINO_POWER ist. Ich bin auf der Suche nach Lösungen auf diesen PR gestoßen https://github.com/esp8266/Arduino/pull/7456.
Das würde die beschriebenen Effekte erklären und auch, dass das nicht auf jede Hardware zutrifft. Die Lösung von @artyr_n erscheint mir logisch und sinnvoll.
Ich werde noch ein wenig rumspielen und berichten.Gruß Merten
PS: Ich habe dieses Board https://www.az-delivery.de/en/products/nodemcu-lolin-v3-modul-mit-esp8266
PPS: Die Lösung mit (MIN|MAX)_ARDUINO_POWER funktioniert auch.-
November 30, 2023 at 07:34 #6550Merten FalkParticipant
Moin moin,
kurze Ergänzung. Hatte gestern zwischen Tür und Angel noch mal kurz Gelegenheit die Sache weiter zu verfolgen. Ich habe auf D5-D7, bzw. D8-D10 je eine drei Farben LED. Auf D1/D2 und D3/D4 den L9110. Die LEDs funktionieren inzwischen einwandfrei inklusive Farbwechsel bei Richtungsänderung. Das ist schon ein ziemlich cooles Feature. Auf D2/D3 kann ich (mit archaischem Messinstrument) nachvollziehen, dass je nach eingestellter Richtung und Geschwindigkeit, die Spannung gemäß Spezifikation zwischen 0 und ca 3,3 V liegt. Bei D1/D2 musste ich dann unterbrechen, aber auf D2 lagen immer ca. 3,3 V an. Da muss ich nochmal schauen, ob ich mich da verkonfiguriert habe, oder das Modul nicht so will wie es sollte.Kurz: Da D1/D2 auf dem Kanal am L9110 angeschlossen waren, der mir abgeraucht ist, vermute ich, dass das nichts mit der hier besprochenen Problematik der Power-Ranges zu tun hat.
-
-
November 28, 2023 at 07:41 #6521Martin HuckeParticipant
Hi, es könnte von der ESP8266-Version mitabhängen, also die Hardware hat da durchaus einen Einfluss.
Bei allen Releases vor v3.0 war es ein 10Bit-Wert (0..1023), ab Version 3.0 ist es ein 8-Bit Wert (0…255)v3.0 –> https://arduino-esp8266.readthedocs.io/en/3.0.0/reference.html
v2.0 –> http://arduino.esp8266.com/Arduino/versions/2.0.0-rc2/doc/reference.html -
December 11, 2023 at 07:27 #6561Merten FalkParticipant
Moin,
der Transparenz halber möchte ich hier nochmal ein Update zu meinen ersten Posts geben:
1. Ich habe eine Menge falsche Annahmen gemacht. U.A., dass ich einen gutes Verständnis der Problematik habe.
2. Dass der Motor shield abbrennt, lag wohl am Motor shield. Habe mir nochmal andere zugelegt, die bislang nicht brennen.
3. Die einzige Anpassung, die wirklich funktioniert um vernünftige Werte an den PINs des NodeMCU Moduls zu bekommen ist .minArduinoPower und .maxArduinoPower auf 0 bzw. 255 zu setzten.
4. Der neue Motor Shield mit L9119 funktionierte trotzdem nicht wie erwartet. Ich habe schlussendlich einen weiteren MotorShieldType MotorShieldType::RED_L9110 hinzugefügt und entsprechendes Handling für die Geschwindigkeit. An den Ausgängen kommt jetzt auch 0-9 V je nach Geschwindigkeit an. Test mit Motoren steht noch aus. An dieser Stelle möchte ich nicht unerwähnt lassen, dass ich keine Ahnung habe, ob ich nicht wieder etwas übersehen habe, was meine Anpassungen überflüssig machen würde. Ich werde bei Gelegenheit mal einen PR öffnen, dann können das die Profis beurteilen.
-
-
AuthorPosts
- You must be logged in to reply to this topic.