Hallo,
wir haben den TMC246 in Kombination mit dem TMC428 im Einsatz. Bis anhin hatten wir keine Probleme mit der Ansteuerung unseres Schrittmotors. Seit die Last des Schrittmotors erhöht wurde, treten seltsame Effekte auf.
Unser Hardware-Setup sieht wie folgt aus:
uC <=> TMC428 <=> TMC246 => Schrittmotor (Nanotec)
Der Schrittmotor bewegt ein Ventil, welches ein bestimmter Luft-Fluss regelt. Zudem enthält das Ventil eine Feder, welche ein Drehmoment gegen den Schrittmotor erzeugt. Seit die Reibung des Ventils erhöht wurde, treten nun seltsame Effekte auf:
1.) Nachdem das Ventil vollständig geöffnet wurde, wird mittels Schrittmotor die Position A angefahren.
2.) Bei Position A resultiert ein bestimmter Luftfluss von Fluss A
3.) Das Ventil wird vollständig geschlossen (und verliert wahrscheinlich Schritte, weil die Reibung / Federkraft zu gross wird).
4.) Das Ventil wird zurück auf Soll-Position A gesteuert.
5.) Bei Position A resultiert nun ein Luftfluss von Fluss B (Fluss B > Fluss A, weil wahrscheinlich Steps verloren gegangen sind)
6.) Jetzt wirds mystisch: Wird das Ventil mehrmals hintereinander geöffnet und zurück nach Position A gefahren, so werden die verlorenen Schritte zurück gewonnen, bis sich bei Position A der Fluss A einstellt.
=> Es scheint so, dass wir in unserem System ein Memory-Effekt haben. Kann dieser Effekt vom TMC246 kommen?
Ein Bild der Messung (Punkt 1. bis 6.) habe ich angehängt: Rot ist der Luftfluss in l/min und Blau das Steuersignal (Soll-Position).
Die Konfiguration des Controllers sieht wie folgt aus:
#define BVC_TMC_REG_STEPPERMOTOR_is_agtat 6 // three bit: 75% = 944 mA (momentan wird treashold nicht genutzt)
#define BVC_TMC_REG_STEPPERMOTOR_is_aleat 6 // three bit: 75% = 944 mA (momentan wird treashold nicht genutzt)
#define BVC_TMC_REG_STEPPERMOTOR_is_v0 4 // three bit: Ruhestrom = 50% = 472 mA
// Schwellwert für Strombegrenzung: Wenn a > a_treashold, dann gilt is_agtat, sonst is_aleat
#define BVC_TMC_REG_STEPPERMOTOR_a_threshold 0x40 // eleven bit: Schwellwert = momentan nicht benutzt -> agtat = aleat
// Microstep Resolution
#define BVC_TMC_REG_STEPPERMOTOR_usrs 7 // three bit: 7 = 64 microsteps/full step
// Minium Speed
#define BVC_TMC_REG_STEPPERMOTOR_v_min 1 // eleven bit: 1 ist Standardwert und wird norm. nicht geändert
// ?? Kein eigentlicher Parameter //
#define BVC_TMC_REG_STEPPERMOTOR_1 1 // one bit: for completeness allways 1
// Ref. Switch
#define BVC_TMC_REG_STEPPERMOTOR_ref_conf 0xf // four bit: 0xF = NO_REF (= REF_RnL + SOFT_STOP + DISABLE_STOP_R + DISABLE_STOP_L)
// Ramp Mode
#define BVC_TMC_REG_STEPPERMOTOR_rm 0 // two bit: 0 = RM_RAMP
//effektiv konfigurierbare Werte
// Max. positioning speed
#define BVC_TMC_REG_STEPPERMOTOR_v_max 280 // eleven bit; anpassbarer Wert
// Msx. acceleration
#define BVC_TMC_REG_STEPPERMOTOR_a_max 20 // eleven bit; anpassbarer Wert
// Pulse und Ramp Divisor
#define BVC_TMC_REG_STEPPERMOTOR_pulse_div 0 // four bit
#define BVC_TMC_REG_STEPPERMOTOR_ramp_div 0 // four bit
// acceleration factor Pmul und acceleration divisor Pdiv
// Könnte man eigentlich automatisch kalkulieren mit Eingabe von a_max, pulse_div und ramp_div (siehe Excel sheet)
#define BVC_TMC_REG_STEPPERMOTOR_pmul 24 // seven bit
#define BVC_TMC_REG_STEPPERMOTOR_pdiv 7 // four bit
Vielen Dank für die Anworten
