Jump to content
elektro-skateboard.de

VESC Motortemperatur


Dude

Empfohlene Beiträge

Geschrieben

Hat jemand von Euch schon mal den Temp-Pin am Hallsensor-Stecker genutzt um die Motortemperatur zu bestimmen. Soweit ich weiß, sind dazu in der Firmware "einfache Änderungen" (Zitat Benjamin Vedder) durchzuführen, damit der Wert ausgelesen wird.

 

Dude

Geschrieben

Die Ist nicht public!

Warte auf die neue Version, die hat es in sich.

Viele Problemstellen werden umschifft, so das die VESC Todesrate deutlich sinken wird. Mehr kann ich dazu nichts sagen. Noch etwas Geduld mitbringen.

Geschrieben
Die Ist nicht public!

Warte auf die neue Version, die hat es in sich.

Viele Problemstellen werden umschifft, so das die VESC Todesrate deutlich sinken wird. Mehr kann ich dazu nichts sagen. Noch etwas Geduld mitbringen.

 

 

 

Kein Problem ich übe mich ja schon seit 6 Monaten in Geduld, da wart ich gern noch mal weitere 6 [emoji851]

Apropos Geduld: Weißt Du auf die Schnelle was zu tun ist um das in der aktuellen public Version auszulesen?

 

 

Gesendet von iPhone mit Tapatalk

Geschrieben
Die Temperatur wird in der aktuellen Version nicht ausgelesen.

 

 

 

Ok, hab meine Frage nicht präzise genug gestellt - wollte wissen was in der FW zu ergänzen ist, damit der Wert ausgelesen/einer Variablen zugwiesen wird.

Konnte in den ganzen Foren dazu nix finden, da wahrscheinlich für die meisten nicht von Interesse. Für meinen Hubmotor wäre es aber spannend.

 

 

Gesendet von iPhone mit Tapatalk

Geschrieben
Ok, hab meine Frage nicht präzise genug gestellt - wollte wissen was in der FW zu ergänzen ist, damit der Wert ausgelesen/einer Variablen zugwiesen wird.

Konnte in den ganzen Foren dazu nix finden, da wahrscheinlich für die meisten nicht von Interesse. Für meinen Hubmotor wäre es aber spannend.

 

Er musste das BLDC-Tool, sowie die Firmware erweitern. Leider ist diese Modifikation etwas her und seine Geschwindigkeit die Software "anzupassen" war erstaunlich. Ich gebe dir da nicht viel Hoffnung, es sei, du bis oder kennst einen QT-Spezialisten für das BLDC-Tool. In der Firmware müsstest du Anpassungen durchführen, die ähnlich die die Akkuspannung, den Motor abregelt, wenn die Temperatur die erste Grenze überschreitet. Motor aus, wäre dann beim Überschreiten der Sicherheitsgrenze.

 

Ich würde an deiner Stelle noch etwas warten. :cornut:

 

Die BLDC-Tool Anpassung war die kleinste Baustelle, da du den Temperatur-Code für die MOSFETs kopieren kannst.

Geschrieben

Hi Barney,

 

ich wäre mit viel weniger zufrieden. Mir würde eine Variable in der Firmware reichen, welche die Motortemperatur enthält - also das Auslesen des NTC via STM32F4 ist der Punkt.

Abregeln möchte ich aktuell noch nicht, nur eine Info über die Temperatur. BLDC-Tool müsste ich nicht anfassen. Ich würde die Variable in einer der vorhandenen Strukturen/Classes über UART+BT an meinen Empfänger oder Handy ausgeben. Das kann ich mittlerweile, gibt ja recht viele Beispiele dafür und die hab ich einfach nachgeturnt.

Geschrieben
Hi Barney,

 

ich wäre mit viel weniger zufrieden. Mir würde eine Variable in der Firmware reichen, welche die Motortemperatur enthält - also das Auslesen des NTC via STM32F4 ist der Punkt.

Abregeln möchte ich aktuell noch nicht, nur eine Info über die Temperatur. BLDC-Tool müsste ich nicht anfassen. Ich würde die Variable in einer der vorhandenen Strukturen/Classes über UART+BT an meinen Empfänger oder Handy ausgeben. Das kann ich mittlerweile, gibt ja recht viele Beispiele dafür und die hab ich einfach nachgeturnt.

 

Ich muss mir die Sourcen nochmal ziehen. Ich melde mich.

Geschrieben

hwconf

hw_410.h -> * 11: IN3 TEMP_MOTOR wurde schon gesetzt

 

Wenn du auch nach TEMP_MOSFET im Quellcode suchst, sehe ich auf Anhieb nicht, ob dies bei der Motorsteuerung berücksichtigt wird.

 

Suche weiter...

Geschrieben

commands.c

 

case COMM_GET_VALUES:
       ind = 0;
       send_buffer[ind++] = COMM_GET_VALUES;
[color=Red]        buffer_append_float16(send_buffer, NTC_TEMP(ADC_IND_TEMP_MOS1), 1e1, &ind);
       buffer_append_float16(send_buffer, NTC_TEMP(ADC_IND_TEMP_MOS2), 1e1, &ind);
       buffer_append_float16(send_buffer, NTC_TEMP(ADC_IND_TEMP_MOS3), 1e1, &ind);
       buffer_append_float16(send_buffer, NTC_TEMP(ADC_IND_TEMP_MOS4), 1e1, &ind);
       buffer_append_float16(send_buffer, NTC_TEMP(ADC_IND_TEMP_MOS5), 1e1, &ind);
       buffer_append_float16(send_buffer, NTC_TEMP(ADC_IND_TEMP_MOS6), 1e1, &ind);
       buffer_append_float16(send_buffer, NTC_TEMP(ADC_IND_TEMP_PCB), 1e1, &ind);[/color]
       buffer_append_float32(send_buffer, mc_interface_read_reset_avg_motor_current(), 1e2, &ind);
       buffer_append_float32(send_buffer, mc_interface_read_reset_avg_input_current(), 1e2, &ind);
       buffer_append_float16(send_buffer, mc_interface_get_duty_cycle_now(), 1e3, &ind);
       buffer_append_float32(send_buffer, mc_interface_get_rpm(), 1e0, &ind);
       buffer_append_float16(send_buffer, GET_INPUT_VOLTAGE(), 1e1, &ind);
       buffer_append_float32(send_buffer, mc_interface_get_amp_hours(false), 1e4, &ind);
       buffer_append_float32(send_buffer, mc_interface_get_amp_hours_charged(false), 1e4, &ind);
       buffer_append_float32(send_buffer, mc_interface_get_watt_hours(false), 1e4, &ind);
       buffer_append_float32(send_buffer, mc_interface_get_watt_hours_charged(false), 1e4, &ind);
       buffer_append_int32(send_buffer, mc_interface_get_tachometer_value(false), &ind);
       buffer_append_int32(send_buffer, mc_interface_get_tachometer_abs_value(false), &ind);
       send_buffer[ind++] = mc_interface_get_fault();
       // TODO: send FOC values id, iq, abs
       commands_send_packet(send_buffer, ind);
       break;

 

buffer_append_float16(send_buffer, NTC_TEMP(ADC_IND_TEMP_PCB), 1e1, &ind); -> steckt hier die Motortemperatur drin, oder ist das der Temperatursensor für die MOSFETs?

 

Suche geht weiter....

Geschrieben

Kleiner Fehler in der Firmware für die 10er Hardware:

* ADC Vector
*
* 0:    IN0        SENS3
* 1:    IN1        SENS2
* 2:    IN2        SENS1
* 3:    IN8        CURR2
* 4:    IN9        CURR1
[color=Red] * 5:    IN3        TEMP_MOSFET[/color]
* 6:    Vrefint
* 7:    IN6        ADC_EXT2
* 8:    IN12    AN_IN
* 9:    IN4        TX_SDA_NSS
* 10:    IN5     ADC_EXT
[color=Red]* 11:    IN3     TEMP_MOTOR[/color]

Ist bei der 8ter Hardware richtig getrennt. Stimmt auch mit dem Schaltplan überein.

Geschrieben
commands.c

 

case COMM_GET_VALUES:
       ind = 0;
       send_buffer[ind++] = COMM_GET_VALUES;
[color=Red]        buffer_append_float16(send_buffer, NTC_TEMP(ADC_IND_TEMP_MOS1), 1e1, &ind);
       buffer_append_float16(send_buffer, NTC_TEMP(ADC_IND_TEMP_MOS2), 1e1, &ind);
       buffer_append_float16(send_buffer, NTC_TEMP(ADC_IND_TEMP_MOS3), 1e1, &ind);
       buffer_append_float16(send_buffer, NTC_TEMP(ADC_IND_TEMP_MOS4), 1e1, &ind);
       buffer_append_float16(send_buffer, NTC_TEMP(ADC_IND_TEMP_MOS5), 1e1, &ind);
       buffer_append_float16(send_buffer, NTC_TEMP(ADC_IND_TEMP_MOS6), 1e1, &ind);
       buffer_append_float16(send_buffer, NTC_TEMP(ADC_IND_TEMP_PCB), 1e1, &ind);[/color]
       buffer_append_float32(send_buffer, mc_interface_read_reset_avg_motor_current(), 1e2, &ind);
       buffer_append_float32(send_buffer, mc_interface_read_reset_avg_input_current(), 1e2, &ind);
       buffer_append_float16(send_buffer, mc_interface_get_duty_cycle_now(), 1e3, &ind);
       buffer_append_float32(send_buffer, mc_interface_get_rpm(), 1e0, &ind);
       buffer_append_float16(send_buffer, GET_INPUT_VOLTAGE(), 1e1, &ind);
       buffer_append_float32(send_buffer, mc_interface_get_amp_hours(false), 1e4, &ind);
       buffer_append_float32(send_buffer, mc_interface_get_amp_hours_charged(false), 1e4, &ind);
       buffer_append_float32(send_buffer, mc_interface_get_watt_hours(false), 1e4, &ind);
       buffer_append_float32(send_buffer, mc_interface_get_watt_hours_charged(false), 1e4, &ind);
       buffer_append_int32(send_buffer, mc_interface_get_tachometer_value(false), &ind);
       buffer_append_int32(send_buffer, mc_interface_get_tachometer_abs_value(false), &ind);
       send_buffer[ind++] = mc_interface_get_fault();
       // TODO: send FOC values id, iq, abs
       commands_send_packet(send_buffer, ind);
       break;

 

buffer_append_float16(send_buffer, NTC_TEMP(ADC_IND_TEMP_PCB), 1e1, &ind); -> steckt hier die Motortemperatur drin, oder ist das der Temperatursensor für die MOSFETs?

 

Suche geht weiter....

Denke nicht, da die MOSi den gleichen Index wie die PCB Temperatur haben.

#define ADC_IND_TEMP_MOS1			9
#define ADC_IND_TEMP_MOS2			9
#define ADC_IND_TEMP_MOS3			9
#define ADC_IND_TEMP_MOS4			9
#define ADC_IND_TEMP_MOS5			9
#define ADC_IND_TEMP_MOS6			9
#define ADC_IND_TEMP_PCB			9

Geschrieben

Mal was Praktisches. Der PCB NTC ist gegen 3.3V geschaltet, der NTC an den Hall Pins muss aber auf GND gehen (würde ich aus dem Schaltplan so interpretieren und in der "Norm" zu der Steckerbelegung der BLDC-Halls steht das auch so drin) . Richtig?

Geschrieben (bearbeitet)

Wenn ich das richtig gesehen habe musst du mehrere Files erweitern:

 

hw_4x.h -> den richtigen Pin wie im Schaltplan eintragen für die Motortemperatur:

 

/*
* ADC Vector
*
* 0:    IN0        SENS3
* 1:    IN1        SENS2
* 2:    IN2        SENS1
* 3:    IN5        CURR2
* 4:    IN6        CURR1
* 5:    IN3        NC
* 6:    Vrefint
* 7:    IN9        ADC_EXT2
* 8:    IN12    AN_IN
* 9:    IN4        TEMP_MOSFET
* 10:    IN15    ADC_EXT
[color=Red] * 11:    IN10    TEMP_MOTOR[/color]
*/

im selben File folgende Zeile nachtragen:

 

// ADC Indexes
#define ADC_IND_SENS1                2
#define ADC_IND_SENS2                1
#define ADC_IND_SENS3                0
#define ADC_IND_CURR1                4
#define ADC_IND_CURR2                3
#define ADC_IND_VIN_SENS            8
#define ADC_IND_EXT                    10
#define ADC_IND_EXT2                7
#define ADC_IND_TEMP_MOS1            9
#define ADC_IND_TEMP_MOS2            9
#define ADC_IND_TEMP_MOS3            9
#define ADC_IND_TEMP_MOS4            9
#define ADC_IND_TEMP_MOS5            9
#define ADC_IND_TEMP_MOS6            9
#define ADC_IND_TEMP_PCB            9
[color=Red]#define ADC_IND_TEMP_MOTOR        10[/color]
#define ADC_IND_VREFINT                6 

In

commands.c

case COMM_GET_VALUES:
       ind = 0;
       send_buffer[ind++] = COMM_GET_VALUES;
       buffer_append_float16(send_buffer, NTC_TEMP(ADC_IND_TEMP_MOS1), 1e1, &ind);
       buffer_append_float16(send_buffer, NTC_TEMP(ADC_IND_TEMP_MOS2), 1e1, &ind);
       buffer_append_float16(send_buffer, NTC_TEMP(ADC_IND_TEMP_MOS3), 1e1, &ind);
       buffer_append_float16(send_buffer, NTC_TEMP(ADC_IND_TEMP_MOS4), 1e1, &ind);
       buffer_append_float16(send_buffer, NTC_TEMP(ADC_IND_TEMP_MOS5), 1e1, &ind);
       buffer_append_float16(send_buffer, NTC_TEMP(ADC_IND_TEMP_MOS6), 1e1, &ind);
       buffer_append_float16(send_buffer, NTC_TEMP(ADC_IND_TEMP_PCB), 1e1, &ind);
       [color=Red]buffer_append_float16(send_buffer, NTC_TEMP(ADC_IND_TEMP_MOTOR), 1e1, &ind); [/color]

in

mc_interface.c

die Routine für die Übertemperaturbehandlung MOSFET auf Motor umkopieren..

 

in

typedef.c

typedef struct {
   float v_in;
   float temp_mos1;
   float temp_mos2;
   float temp_mos3;
   float temp_mos4;
   float temp_mos5;
   float temp_mos6;
   float temp_pcb;
   [color=Red]float temp_motor;[/color]
   float current_motor; 

Ich nur die Routine für den ADC nicht...

bearbeitet von barney
Geschrieben
Mal was Praktisches. Der PCB NTC ist gegen 3.3V geschaltet, der NTC an den Hall Pins muss aber auf GND gehen (würde ich aus dem Schaltplan so interpretieren und in der "Norm" zu der Steckerbelegung der BLDC-Halls steht das auch so drin) . Richtig?

 

Ja, hier hatte er einen "Designfehler" drin.

Geschrieben

Der Temperatursensor MOSFET wird in:

mc_interface.c

ausgelesen

fdata.temperature = NTC_TEMP(ADC_IND_TEMP_MOS1); 
[color=Red]fdata.temperature_motor = NTC_TEMP(ADC_IND_TEMP_MOTOR); [/color]

 

Ab hier verstehe ich seine Variablen nicht mehr....

Geschrieben (bearbeitet)

Zum Einstieg super, vielen Dank! Ich musste aber wg. Notfallprogramm Chemienachhilfe 8. Klasse leider abbrechen ...grmpf.

 

Interessant ist auch, dass

ADC_IND_EXT 10

ADC_IND_EXT auch auf 10 liegt.

bearbeitet von Dude
Geschrieben
Zum Einstieg super, vielen Dank! Ich musste aber wg. Notfallprogramm Chemienachhilfe 8. Klasse leider abbrechen ...grmpf.

 

Interessant ist auch, dass

 

ADC_IND_EXT auch auf 10 liegt.

 

LOL Verstehe, hier Spanisch und Mathe. (und wir können kein Spanisch)

 

Ich hoffe er hat den Pin nicht mehrfach vergeben. Den aktuellen Schaltplan habe ich nicht geladen. Welche HW-Version benutzt du?

  • 1 year later...
Geschrieben

Habe eine Frage bezüglich der Temperatur.

Nach langer Fahrt schaltet das Board bei Vollgas ab.

Leicht beschleunigen geht.

Nach 10 min Pause alles wieder normal.

Liegt das an der Temperatur.

Voltage Sag kann ich ausschliessen.

Geschrieben

Das liegt wohl eher nicht an der Temperatur, weil es da einen Soft cut off gibt. Die Temperatur vom vesc kannst du relativ einfach über USB oder ein BT Modul auslesen. Alternativ kannst du auch mit der Abschalttemp herum spielen... Default mäßig ist sie auf 80 Grad, glaube ich. Setzt sie mal auf 60 oder so und schau ob das Problem früher auftritt. Wenn du einen VESC 6 hast, kannst du zu fast hundert Prozent ausschließen dass er zu heiß wird bei deinem Street-Board.

Tritt dem Gespräch bei

Du kannst jetzt posten und dich später registrieren. Wenn du bereits einen Account hast kannst du dich hier anmelden.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...