2x digitalWrite oder Port ansprechen

Ich habe vor, eine Steuerung mit einem Controllino (Maxi auf Mega Basis) aufzubauen. Der hat mehrer Ausgänge direkt mit High-side PNP Switches, 12V 2A. Lt. Beschreibung kann man die auch parallel schalten, wenn die Ansteuerung "zeitgleich" erfolgt.
Jetzt ist aber nunmal zwichen den Signalen bei 2x digitalWrite eine Verzögerung von mit Oszi gemessenen 5 uS. Angestuert werden sollen Magnetventile mit 12V, ca. 2,4A Haltestrom, danach ggf. PWM. Ist da 5 uS zeitgleich genug oder besser per direkter Portmanipulation machen?

Kann mann dann überhaupt PWM benutzen, bei 2 parallel geschalteten Ausgängen?

ElEspanol:
12V 2A.

Angestuert werden sollen Magnetventile mit 12V, ca. 2,4A Haltestrom, danach ggf. PWM. Ist da 5 uS zeitgleich genug

Interessant wäre der Anzugsstrom und wie lange diese Leistung auf einem Transistor ausgehalten werden kann. -> DaBla. Wenn der die Belastung für 20µs aushält,.. kann man machen
Der kurze Zeitfaktor beim Haltestrom ist eher unkritisch, wenn das Teil schon gezogen ist.

Teste mal, wie weit sich das Ventil in 5µs bewegt (ich vermute so wenig, dass es in die Messtoleranz fällt).

Gruß Tommy

Tommy56:
Teste mal, wie weit sich das Ventil in 5µs bewegt (ich vermute so wenig, dass es in die Messtoleranz fällt).

Gruß Tommy

Wieviel sich das Ventil bewegt, ist doch egal. Es geht um den Einschaltstrom. Zum Magnetventil habe ich kein DaBla, ist ein chinesisches vom Ali
Im Datenblatt vom Controllino hab ich nichts über die PNP gefunden, auf der Webseite www.controllino.com/product/controllino-maxi/steht 2A, im Pinout steht nur HIGH side switch.
Im Instruction Manual habe ich diese beruhigenden Worte gefunden:

The digital "High-Side Switch" outputs and "Half-Bridge" outputs (only MEGA) are labelled with "D0" to "D.." on the upper side of the CONTROLLINO housing. The supply voltage of each of this digital screw terminals can be loaded with 2A @12V or @24V. Each of this outputs are short-circuit proof and limits the maximum output current automatically. The internal resistance when switched is about 70mΩ when using the "High-Side Switch" outputs and about 240mΩ when using the "Half-Bridge" outputs.

Da könnte ich mir ja sogar die Freilaufdioden sparen :wink:

Versuche mal dies, mein Schätzeisen zeigt 100 ns mit Mega2560:

#include <CombiePin.h> // https://forum.arduino.cc/index.php?topic=702031.msg4720476#msg4720476

using namespace Combie::Pin;

RelaisINV<22> relais22;
RelaisINV<24> relais24;

void setup(void) 
{
  relais22.init();// ohne kurze Low Phase
  relais24.init();// ohne kurze Low Phase
}

void loop(void)
{
  relais22.on();
  relais24.on();
  delayMicroseconds(50);
  relais22.off();
  relais24.off();
  delayMicroseconds(50);
}

ElEspanol:
Da könnte ich mir ja sogar die Freilaufdioden sparen :wink:

Wieso meinst Du das? Ich lese da nichts von Überspannungsfestigkeit.

Gruß Tommy

agmue:
Versuche mal dies, mein Schätzeisen zeigt 100 ns mit Mega2560:

Aufm Nano zeigt mein Oszi 120 ns. Gut geschätzt.
Danke für den Code, mit der kurzen Verzögerung sollte nichts passieren.

Tommy56:
Wieso meinst Du das? Ich lese da nichts von Überspannungsfestigkeit.

Gruß Tommy

Hast recht. Ich habe das mit unkaputtbar interpretiert.

ElEspanol:
Danke für den Code, ...

Den Dank leite ich gleich an combie weiter, der hat ihn geschrieben!

ElEspanol:
... mit der kurzen Verzögerung sollte nichts passieren.

Denke ich auch so. Ein Schieberegister mit Latch dürfte gleichzeitiger sein, ist aber auch mehr Aufwand.

PORTD=PORTD | B1100;

PORTD=PORTD & B11110011;

wäre auf dem Oszi absolut zeitgleich.

Darauf ist auf Seite 19 des Manuals sogar darauf hingewiesen.

jetzt zurück zum Controllino.
Ich finde im Datenblatt https://www.controllino.com/wp-content/uploads/2017/03/MAXI_DATASHEET-19-04-20161.pdf keine OC Ausgänge die man paralellschalten könnte. Außerdem keine Leistungs / Strom Angaben der Digitalen Ausgänge. Anders ist es mit den Relaisausgängen. Diese sind bis 6A belastbar.

Grüße Uwe

Hab Das noch gefunden:

https://www.controllino.com/wp-content/uploads/2019/02/CONTROLLINO-Instruction-Manual-V1.5-2018-12-14.pdf:
Digital Outputs
The digital "High-Side Switch"outputs and "Half-Bridge"outputs (only MEGA) are labelledwith "D0"to"D.."on the upper side oftheCONTROLLINOhousing. The supply voltage of eachof this digital screw terminalscan be loaded with 2A @12V or @24V. Eachof this outputs are short-circuit proof and limits the maximum output current automatically. The internal resistance when switched is about 70mΩ when using the "High-Side Switch"outputs and about 240mΩ when using the "Half-Bridge"outputs

Du sagtest Du hättest einen MAXI.
Außerdem ist die A-Angabe nicht für den Ausgang sondern für die Spannungsversorgung. Das heißt alle Ausgänge zusammen können 2A bringen.

Grüße Uwe

Danke für das mitdenken.

Auf Seite 18 des https://www.controllino.com/wp-content/uploads/2019/02/CONTROLLINO-Instruction-Manual-V1.5-2018-12-14.pdf steht explizit:
Digital Outputs
The digital "High-Side Switch" outputs and "Half-Bridge" outputs (only MEGA) are labelled with "D0" to "D.." on the upper side of the CONTROLLINO housing. The supply voltage of each of this digital screw terminals can be loaded with 2A @12V or @24V. Each of this outputs are short-circuit proof and limits the maximum output current automatically. The internal resistance when switched is about 70mΩ when using the "High-Side Switch" outputs and about 240mΩ when using the "Half-Bridge" outputs.

weiter auf Seite 19:
Output Parallelization
There is the possibility to parallelize some digital outputs to drive loads with the need of more current under the following conditions:
• Outputs are controlled from the same processor port (possibility to set it via one instruc-tion)
• There is no delay between control signals for parallelized outputs (shall be managed by the SW).
Possible outputs for parallelization are:
MINI:
1st group: D0, D1, D2, D3
2nd group: D4, D5
3rd group: D6, D7
MAXI:
1st group: D0, D1, D3
2nd group: D2
3rd group: D4, D5, D6, D7
4th group: D8, D9, D10, D11

Ist das nicht das, wonach es aussieht?

ElEspanol:
weiter auf Seite 19:
Output Parallelization
There is the possibility to parallelize some digital outputs to drive loads with the need of more current under the following conditions:
• Outputs are controlled from the same processor port (possibility to set it via one instruc-tion)
• There is no delay between control signals for parallelized outputs (shall be managed by the SW).
Possible outputs for parallelization are:
...
MAXI:
1st group: D0, D1, D3
2nd group: D2
3rd group: D4, D5, D6, D7
4th group: D8, D9, D10, D11

Ist das nicht das, wonach es aussieht?

Doch, sieht danach aus. Aber auch sonst hätte ich wenig bedenken. Oben steht:

ElEspanol:
The supply voltage of each of this digital screw terminals can be loaded with 2A @12V or @24V. Each of this outputs are short-circuit proof and limits the maximum output current automatically.

Wenn die wirklich einen Schutz gegen Kurzschluss haben und der Strom auf 2A begrenzt wird, sollte sowieso nicht passieren.

Gruß, Jürgen

ich hab mal vor ner Zeit aus dem digitalWrite nur das essentielle für ein "digitalWriteFast" herausgenommen:
das sollte daher auch schon schneller sein als die originale Funktion.

#include <CombiePin.h> // https://forum.arduino.cc/index.php?topic=702031.msg4720476#msg4720476

using namespace Combie::Pin;

RelaisINV<13> relais13;

uint32_t start, ende;

void digitalWriteFast(uint8_t pin, uint8_t val)
{
  uint8_t bit = digitalPinToBitMask(pin);
  uint8_t port = digitalPinToPort(pin);
  volatile uint8_t *out = portOutputRegister(port);
  if (val == LOW) {
    *out &= ~bit;
  } else {
    *out |= bit;
  }
}

void setup(void)
{
  Serial.begin(115200);
  relais13.init();// ohne kurze Low Phase

  pinMode(12, OUTPUT);

  start = micros();
  relais13.on();
  delayMicroseconds(50);
  relais13.off();
  ende = micros();
  Serial.println(ende - start);

  start = micros();
  digitalWriteFast(12, HIGH);
  delayMicroseconds(50);
  digitalWriteFast(12, LOW);
  ende = micros();
  Serial.println(ende - start);

  start = micros();
  digitalWrite(12, HIGH);
  delayMicroseconds(50);
  digitalWrite(12, LOW);
  ende = micros();
  Serial.println(ende - start);
}

void loop(void)
{
}

56
56
68

nachgemessen mit einem Oszi hab ich das aber nie.

noiasca:
... nur das essentielle für ein "digitalWriteFast" herausgenommen:

@ ElEspanol: Dann kann man das auch gleich auf zwei Pins erweitern, dann sehe ich auf meinem Schätzeisen keine Verzögerung (getestet mit Mega2560):

// https://forum.arduino.cc/index.php?topic=722295.msg4855433#msg4855433
// 2x digitalWrite oder Port ansprechen
#include <CombiePin.h> // https://forum.arduino.cc/index.php?topic=702031.msg4720476#msg4720476

using namespace Combie::Pin;

RelaisINV<22> relais22;
RelaisINV<24> relais24;

void setup(void)
{
  relais22.init();// ohne kurze Low Phase
  relais24.init();// ohne kurze Low Phase
}

void loop(void)
{
  digitalWriteFast(22, 24, HIGH);
  delayMicroseconds(5);
  digitalWriteFast(22, 24, LOW);
  delayMicroseconds(5);
}

void digitalWriteFast(uint8_t pin1, uint8_t pin2, uint8_t val)
{
  uint8_t bit1 = digitalPinToBitMask(pin1);
  uint8_t bit2 = digitalPinToBitMask(pin2);
  uint8_t port1 = digitalPinToPort(pin1);
  uint8_t port2 = digitalPinToPort(pin2);
  volatile uint8_t *out1 = portOutputRegister(port1);
  volatile uint8_t *out2 = portOutputRegister(port2);
  if (port1 == port2) {
    if (val == LOW) {
      *out1 &= ~bit1 & ~bit2;
    } else {
      *out1 |= bit1 | bit2;
    }
  } else {
    if (val == LOW) {
      *out1 &= ~bit1;
      *out2 &= ~bit2;
    } else {
      *out1 |= bit1;
      *out2 |= bit2;
    }
  }
}

Habe es gerade mal eingespielt und durchgemessen. Der zweite Pin hat eine Verzögerung von 5 ns wenn es verschiedene Ports sind.
Beim selben Port kurioserweise 10ns. Gemessen an einem Nano, Pin 2 und 3 bzw. Pin 2 und 4

Schon komisch. Wahrscheinlich liegt es an meinen unproffessionellen Tastköpfen, da ist der grüne schneller als der blaue :slight_smile: ::slight_smile:

Aber ich muss schon sagen Jungs, ihr seid echt gut.

Habe es gerade mal eingespielt und durchgemessen. Der zweite Pin hat eine Verzögerung von 5 ns wenn es verschiedene Ports sind. Beim selben Port kurioserweise 10ns. Gemessen an einem Nano

Da stimmt was nicht. Ein Arduino Nano mit 16 MHz Takt kennt keine kürzere Zeit als (1000/16=62,5) ns und darüber nur ganzzahlige Vielfache.
Alles schnellere ist gleichzeitig, und höchstens elektrisch/messtechnisch erklärbar.

michael_x:
Alles schnellere ist gleichzeitig, und höchstens elektrisch/messtechnisch erklärbar.

Ich muss mal die scharfen Knicke aus den Messstrippen rausmachen ::slight_smile:

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.