chili023

Open Source Prüfstandssoftware auf Basis von Arduino Mega und LabVIEW

Recommended Posts

BugHardcore    194
vor 2 Minuten schrieb chili023:

@BugHardcore Das hatten wir schonmal versucht. Da gab es ein anderes Problem, das man das VI dauernt neu starten musste. Aber das kann mit dem nicht schließen der COM Schnittstelle zu tun haben.

 

Ereignisstruktur = Case structure ?

 

Die hier. Die liegt in einer While Schleife und reagiert auf Ereignisse, also Wertänderungen an Schaltern oder sowas.

Event.PNG

 

Das kann dan so aussehen:

 

Schleife.PNG

 

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
BugHardcore    194

Damit kannst du halt generell einiges entzerren und das Blockdiagramm auch übersichtlicher strukturieren.

 

Du könntest z.B. die komplette Schleife "Konfiguration laden" in ein Ereignis Case legen, dann muss die nicht jedes Mal mitgeschliffen werden. Das machste dann für jede getrennte Aufgabe.

 

Noch dazu: Ich lege mir in Schleifen, die nicht zeitkritisch laufen gerne mal ein "Warten" mit 10 ms oder so. Dann läuft der Prozessor nicht sinnlos auf Last.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
grua    77

@BugHardcore:

 

super, genau das sind die Inputs, die wir benötigen um das VI zu optimieren! Wir haben tatsächlich gemerkt, dass das VI auf leistungschwächeren PCs nicht optimal läuft. Es gehen zwar keine Daten verloren, aber der Lesepuffer füllt sich, und die Telegramme werden zeitverzögert abgearbeitet. D.h. die rpm- und km/h-Zeiger arbeiten dann um einige Sekunden zeitverzögert. Daher wäre es natürlich wünschenswert das VI CPU-schonender zu strukturieren.

 

Wie ich eingangs schon geschrieben habe, komme ich aus der Hochsprachenprogrammierung und hatte vor diesem Projekt von LabView-Programmierung keine Ahnung, hatte mich da neu eingearbeitet und mal rein auf Funktion programmiert, ohne Rücksicht auf Effizienz. Und dann nach und nach immer nachgebessert und erweitert. Da kommt dann halt meist nicht gerade der übersichtlichste und effizienteste Code raus...

 

Denkst du, du hättest mal Zeit, Lust & Laune das VI dbgl. durchzuackern und mit Eventstrukturen (und sonstigem Know-How) effizienter zu gestalten? Wäre natürlich der Hammer...!

 

 

 

Bearbeitet von grua
  • Like 2

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
BugHardcore    194

Ich schau mal, dass ich mir die Tage meinen LV Rechner mit nach Hause nehme und schau mal drüber.

Ich persönlich tu mich in Labview aber immer noch schwerer anderer Leute Kram zu verstehen als richtigen Sprachen...

Schlimmer sind nur SPSen :-D

 

Grundsätzliche Tipps:

Daten Clustern, Strukturen benutzen (auch wenns die Funktionalität nicht wirklich verlangt), und SubVIs bauen. Wenns Speicherplatzkritisch ist, sollte man Referenzen nutzen, keine lokalen Variablen, der Speicherplatz wird nach dem Abarbeiten nicht freigegeben. Aber wer Hochsprachen kennt, weiß das wohl.

Ich hab mal gelesen, dass jedes Programm, was größer ist, als eine Bildschirmgröße, zu groß ist. Schaffe ich aber auch nie.

 

Ich bin da jetzt aber auch kein Vollpro. Bei mir ist es eher andersrum. Ich hab in Berufsschule und Studium Grundlagen von Basic und C gelernt, habe Objektorientierung eher angekratzt, hab dann aber in der Diplomarbeit und jetzt im Job immer mal wieder mit Labview arbeiten dürfen und müssen.

Mit Arduinos bastel ich seit nem knappen Jahr.

 

Ich hätte nen Mega hier, kann man einen Lauf Simulieren?

 

 

 

 

  • Like 2

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
wildstyler    32

Kannst es mal mit dem debug sketch versuchen. Der ist dafür gedacht auch ohne Prüfstand einen Lauf zu simulieren. Aber tob dich, wenn möglich, im VI einfach mal aus. Ich werd versuchen das zeitnah zu testen und meine Eindrücke hier zu berichten

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
Motorhead    1.595

hallo!

 

bin gestern durch @Springrace Mario auf diese software aufmerksam geworden. hintergrund ist, das er/wir seinen mit gsfdyno betriebenen prüfstand auch gerne mit dieser software hier (test)betreiben wollen.

hier mal kurz zusammengefasst, ob ich das richtig gerafft habe:

 

Am 29.12.2016 um 22:51 schrieb chili023:

Messprinzip:

Arduino Mega angeschlossen and die Minimalkartschaltung.

Der Arduino bekommt in TTL (5V) die Impulse der Rolle und der Zündung. Diese gehen in den ICP4 und ICP5 (Pin 48 und Pin 49).

....

Der Arduino hat die Aufgabe die Zeit zwischen zwei steigenden Flanken der beiden Eingänge zu messen und diese in einen Ringspeicher zu speichern. Die Werte werden dann über Serielle Schnitstelle zusammen mit der Übertragungszeit (Zeit zwischen zwei Übertragungen) an den PC/LabVIEW gesenden. LabVIEW berechnet dann die Leistung und stellt sie dar.

....

Benötigt wird:

1x Arduino Mega

1x Labview 2014 oder neuer

1x Prüfstand mit Rollensensor

1x Minimalkartschaltung (nicht dringend notwendig wenn man weiss was man macht....)

 

dh ich brauch einen pc mit einer seriellen schnittstelle, an die der Arduino Mega angeschlossen ist.

am Arduino gehn dann vom rollensensor das signal in 5V (umgewandelt durch den transistor LTV827S) ein, weiters kommt noch das signal der zündungsabnahme auch da an.

 

 

was mich noch wundert:

der arduino hat ja auch einen usb gerätestecker dran, der kann nicht als verbindung zum pc verwendet werden, oder plant ihr das?

81CwHpyFjVL._SL1200_.jpg

 

Arduino-Mega-2560-recursos.jpg

 

 

lg m

 

Bearbeitet von Motorhead

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
gs-gani    13

werden die Sensoren dann am Anschluss 48 und 49 und GND angeschlossen?. Ist einmal ein Counter (Drehzahlmessung) Digitaler EIngang und die Impulse der ROlle auch als Digitaler EIngang?

Da ich mit der Arduino Sprache noch nicht so vertraut bin, welche Daten werden hier weiter gesendet?

 

Serielle Schnittstelle mit 250000 Baudrates und dann? ICP4 und ICP5 sprich Digitaler Eingang 49 und Digitaler EIngang 48. Oder andere Daten auch?

 

  •   //----------SERIAL---------
  •   Serial.begin(250000);
  •  
  •   //Clear all Interrupt Flags
  •  // EIFR |= (1 << INTF0);
  •   TIFR4 |= (1 << ICF4);   //Clear ICP4 FLAG
  •   TIFR5 |= (1 << ICF5);   //Clear ICP5 FLAG
  •  
  • Arduino Mega 2560 PIN mapping table

    Pin Number Pin Name Mapped Pin Name
    1 PG5 ( OC0B ) Digital pin 4 (PWM)
    2 PE0 ( RXD0/PCINT8 ) Digital pin 0 (RX0)
    3 PE1 ( TXD0 ) Digital pin 1 (TX0)
    4 PE2 ( XCK0/AIN0 )  
    5 PE3 ( OC3A/AIN1 ) Digital pin 5 (PWM)
    6 PE4 ( OC3B/INT4 ) Digital pin 2 (PWM)
    7 PE5 ( OC3C/INT5 ) Digital pin 3 (PWM)
    8 PE6 ( T3/INT6 )  
    9 PE7 ( CLKO/ICP3/INT7 )  
    10 VCC VCC
    11 GND GND
    12 PH0 ( RXD2 ) Digital pin 17 (RX2)
    13 PH1 ( TXD2 ) Digital pin 16 (TX2)
    14 PH2 ( XCK2 )  
    15 PH3 ( OC4A ) Digital pin 6 (PWM)
    16 PH4 ( OC4B ) Digital pin 7 (PWM)
    17 PH5 ( OC4C ) Digital pin 8 (PWM)
    18 PH6 ( OC2B ) Digital pin 9 (PWM)
    19 PB0 ( SS/PCINT0 ) Digital pin 53 (SS)
    20 PB1 ( SCK/PCINT1 ) Digital pin 52 (SCK)
    21 PB2 ( MOSI/PCINT2 ) Digital pin 51 (MOSI)
    22 PB3 ( MISO/PCINT3 ) Digital pin 50 (MISO)
    23 PB4 ( OC2A/PCINT4 ) Digital pin 10 (PWM)
    24 PB5 ( OC1A/PCINT5 ) Digital pin 11 (PWM)
    25 PB6 ( OC1B/PCINT6 ) Digital pin 12 (PWM)
    26 PB7 ( OC0A/OC1C/PCINT7 ) Digital pin 13 (PWM)
    27 PH7 ( T4 )  
    28 PG3 ( TOSC2 )  
    29 PG4 ( TOSC1 )  
    30 RESET RESET
    31 VCC VCC
    32 GND GND
    33 XTAL2 XTAL2
    34 XTAL1 XTAL1
    35 PL0 ( ICP4 ) Digital pin 49
    36 PL1 ( ICP5 ) Digital pin 48
    37 PL2 ( T5 ) Digital pin 47
    38 PL3 ( OC5A ) Digital pin 46 (PWM)
    39 PL4 ( OC5B ) Digital pin 45 (PWM)
    40 PL5 ( OC5C ) Digital pin 44 (PWM)
    41 PL6 Digital pin 43
    42 PL7 Digital pin 42
    43 PD0 ( SCL/INT0 ) Digital pin 21 (SCL)
    44 PD1 ( SDA/INT1 ) Digital pin 20 (SDA)
    45 PD2 ( RXDI/INT2 ) Digital pin 19 (RX1)
    46 PD3 ( TXD1/INT3 ) Digital pin 18 (TX1)
    47 PD4 ( ICP1 )  
    48 PD5 ( XCK1 )  
    49 PD6 ( T1 )  
    50 PD7 ( T0 ) Digital pin 38
    51 PG0 ( WR ) Digital pin 41
    52 PG1 ( RD ) Digital pin 40
    53 PC0 ( A8 ) Digital pin 37
    54 PC1 ( A9 ) Digital pin 36
    55 PC2 ( A10 ) Digital pin 35
    56 PC3 ( A11 ) Digital pin 34
    57 PC4 ( A12 ) Digital pin 33
    58 PC5 ( A13 ) Digital pin 32
    59 PC6 ( A14 ) Digital pin 31
    60 PC7 ( A15 ) Digital pin 30
    61 VCC VCC
    62 GND GND
    63 PJ0 ( RXD3/PCINT9 ) Digital pin 15 (RX3)
    64 PJ1 ( TXD3/PCINT10 ) Digital pin 14 (TX3)
    65 PJ2 ( XCK3/PCINT11 )  
    66 PJ3 ( PCINT12 )  
    67 PJ4 ( PCINT13 )  
    68 PJ5 ( PCINT14 )  
    69 PJ6 ( PCINT 15 )  
    70 PG2 ( ALE ) Digital pin 39
    71 PA7 ( AD7 ) Digital pin 29
    72 PA6 ( AD6 ) Digital pin 28
    73 PA5 ( AD5 ) Digital pin 27
    74 PA4 ( AD4 ) Digital pin 26
    75 PA3 ( AD3 ) Digital pin 25
    76 PA2 ( AD2 ) Digital pin 24
    77 PA1 ( AD1 ) Digital pin 23
    78 PA0 ( AD0 ) Digital pin 22
    79 PJ7  
    80 VCC VCC
    81 GND GND
    82 PK7 ( ADC15/PCINT23 ) Analog pin 15
    83 PK6 ( ADC14/PCINT22 ) Analog pin 14
    84 PK5 ( ADC13/PCINT21 ) Analog pin 13
    85 PK4 ( ADC12/PCINT20 ) Analog pin 12
    86 PK3 ( ADC11/PCINT19 ) Analog pin 11
    87 PK2 ( ADC10/PCINT18 ) Analog pin 10
    88 PK1 ( ADC9/PCINT17 ) Analog pin 9
    89 PK0 ( ADC8/PCINT16 ) Analog pin 8
    90 PF7 ( ADC7 ) Analog pin 7
    91 PF6 ( ADC6 ) Analog pin 6
    92 PF5 ( ADC5/TMS ) Analog pin 5
    93 PF4 ( ADC4/TMK ) Analog pin 4
    94 PF3 ( ADC3 ) Analog pin 3
    95 PF2 ( ADC2 ) Analog pin 2
    96 PF1 ( ADC1 ) Analog pin 1
    97 PF0 ( ADC0 ) Analog pin 0
    98 AREF Analog Reference
    99 GND GND
    100 AVCC VCC

 

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
chili023    90

@Motorhead
 Du kannst ganz normal die Minimalkarte anzapfen, wie gesagt ich empfehle aber optokoppler. Ich habe morgen 2x 5h Zugfahrt vor mir. Ich hoffe, das ich da das Arduino shield mit allen Komponenten fertig bekomme.DAs könnte sich dann jeder ätzen lassen und bestücken. Ich werde versuchen, falls ich fertig werde mit dem Board, 5 Stück am we zu ätzen. Die kann ich dann nächste Woche bestücken und verschicken. Nach den Test können wir dann über Verbesserungen und ne kleinserie sprechen.

  • Like 1

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
chili023    90

Die ICP sind Input Capture Pins. Das sind  2 von 5 Interrupt Pins. Wenn hier ein Signal > 2 V anliegt wird der Interrupt ausgelöst. Das Programm springt dann in die Interrupt Service Routine und führt den jeweiligen Code aus.In dieser Interrupt Service Routine fülle ich einfach einen Ringspeicher für die jeweiligen ersten Flanken. Sobald Timer0 (glaube ich) übergelaufen ist werte ich den Ringspeicher aus und schicke das Ergebnis an die Serielle Schnittstelle.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
chili023    90

Das ist der ISR (Interrupt Service Routine) von ICP5

ISR(TIMER5_CAPT_vect) {

  if ( ErsteFlanke5 == 1) {

    Messung5[j] = 0;
    StartTime5[j] = ICR5;
    ovlCAPTst5[j] = ovlTIM5;
    if ((TIFR5 & 1 << TOV5) && (StartTime5[j] < 0x8000))      // evtl. Ueberlauf T1 noch offen?
    {
      ovlCAPTst5[j]++;                                         // nur, wenn capture-int + overflow-int gleichzeitig !
    }
    ErsteFlanke5 = 0;   
                 
  }
  else {

    EndTime5[j] = ICR5;
    ovlCAPTend5[j] = ovlTIM5;
    if ((TIFR5 & 1 << TOV5) && (EndTime5[j] < 0x8000))      // evtl. Ueberlauf T5 noch offen?
    {
      ovlCAPTend5[j]++;                                      // nur, wenn capture-int + overflow-int gleichzeitig !
    }


    Messung5[j] = 1;
    ErsteFlanke5 = 1;                    
   
    TIFR5 |= (1 << ICF5);
    j++;
    //-------End of ringsize
    if (j == ringsize) {
      j = 0;
    }

  }

 
}

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
chili023    90

TIFRx sind die Flags die dem Prozessor sagen: Jetzt ISR ausführen.

TimerInterruptFlagRegisterX

Bearbeitet von chili023

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
gs-gani    13

und welche Daten sendet der Arduino an Labview weiter?

 

Kann man nicht sagen, dass nur die zwei Digitalen Eingänge bzw. die Ergebnisse daraus weiter gesedet werden sollen? Das geht glaube ich mit Analoge Eingänge auch?

 

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
chili023    90

Ich weiss nicht genau worauf du hinaus willst.

 

Gesendet wird:

Counter (zur Plausibilierung);Frequenz zwischen zwei Transfers an den PC; Frequenz Signal 1; Frequenz Signal 2

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
sf freak    33
Am 9.1.2017 um 11:49 schrieb chili023:

Hallo SMarco.

Du benötigst einen Arduino (Genuido) MEGA 2580 oder ein Vergleichbares China Modell.

Wenn ihr gleich loslegen wollt, braucht ihr sonst nichts mehr.

Was ich aber empfehle ist ein paar optokoppler zwischen Minimal und Arduino.

Ich habe einen LTV827.

Zusätzlich noch 2x 10kOhm und 2x X Ohm um den Strom der Rolle und Zündung auf 50mA zu begrenzen.

 

Bei der Minimal mit 5V sind das dann glaube ich 180 Ohm. Rollensensor dann bitte mit U=RI ausrechnen.

 

Möglichkeit zwei wäre, ihr wartet noch ne Woche oder so und dann kann ich euch für die Materialkosten ein komplettes Schield für den MEGA ätzen.

Da wäre dann alles drauf. Optokoppler, Minimalkartschaltung, BME 280 und Anschlüsse für Lambda und Thermoelement.

 Super Sache:thumbsup::thumbsup:

bin gerade dabei das ganze zu Basteln und zu Probieren!

 

Bei deiner Rechnung mit der Minimal Spg. meintest du 9V  R=U/I, R=9/0,05, R= 180Ohm  ?????  und die 10kOhm sind für die Zündung?

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
chili023    90

Also das kommt ganz darauf an wie viel Volt deine Schaltung bekommt und welche Optokoppler du benutzt.

Bei 12V 240Ohm

Bei 9V 180 Ohm

Bei 5V 100 Ohm

 

Abgriff Zündsignal an Pin 3 des HEF 4093

 

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
gs-gani    13
vor 4 Stunden schrieb chili023:

Ich weiss nicht genau worauf du hinaus willst.

 

Gesendet wird:

Counter (zur Plausibilierung);Frequenz zwischen zwei Transfers an den PC; Frequenz Signal 1; Frequenz Signal 2

 

vielen Dank. Ich habe irgendwie einen Denkfehler drinnen.

Wäre es bitte möglich, dass man im Arduino die Messdaten (Drehzahl Motor und ROlle) simuliert, damit die keinen Prüfstand/Sensoren haben auch mit der Kommunikation experimentieren können. Super wäre ein 30Sekunden Lauf. Drehzahlen/Messdaten rauf und dann runter. --> Schleife und somit immer wiederholt.

VIelen Dank im Voraus.

 

DatenSonden.jpg

 

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden

  • Wer ist Online   0 Benutzer

    Keine registrierten Benutzer online.