Forum: Mikrocontroller und Digitale Elektronik [STM32] Touch mit HAL TSC und linrot / Lineare Sensoren


von Jazz (Gast)


Angehängte Dateien:

Lesenswert?

Für mein erstes Cortex-Projekt mit einem STM32F042K6T6 habe ich ein 
kleines Board entworfen mit 4 Touchkeys (Runde Elektroden mit 10mm 
Durchmesser) und 2 lineare Sensoren. Für diese hab ich das 3 channel / 4 
half-ended electrodes interlaced sensor Design aus Application notes 
AN4312 (Bild 1).
Auf der Softwareseite benutze ich den HAL und STMCube32MX, würde es 
soweit es geht auch gerne dabei belassen, weil ich mich einfach noch 
nicht gut genug auskenne um alles zu Fuß zu programmieren.

Soweit, sogut, trotz einiger Problemchen auf meinem selbstbestückten 
Board, die aber gut an zu alter Lötpaste und damit verbundenen Problemen 
liegen könnten, macht das Board schon halbwegs was es sollte.

Touchkeys scheinen nach kurzem Test quasi out-of-the-box zu 
funktionieren. Ich rufe in meiner main Schleife die autogenerierte state 
machine auf:
1
while (tsl_user_Exec()==TSL_USER_STATUS_BUSY)
2
{};
 und kann anschließend über die ebenfalls autogenerierten
1
MyTKeys[]
 meine Daten auslesen. Hier interessiert mich bei TouchKeys eigentlich 
nur
1
MyTKeys[Index].p_Data->StateId
 und die liefert mir brauchbares, zb release -> proximity debounce -> 
proximity -> detect. Die Grenzwerte und Empfindlichkeit muss noch 
eingestellt werden aber rudimentär funktioniert's schon ohne 
Codeänderungen, was ja überraschend erfreulich ist..

Bei den linearen Sensoren sieht es derzeit leider nicht so rosig aus. 
StateId scheint soweit ok zu sein und auf den ersten Anblick auch die 
Direction, bei RawPos sind jedoch alle Werte in etwa zwischen 120 und 
150. Hierbei springen die Werte halbwegs wild herum, was jedoch auch 
diesem interlaced Design geschuldet sein könnte und dem Namen nach 
sollte man wohl eh nicht darauf zugreifen im App Layer. Der Wert
1
MyLinRots_Data[Index].Position
 bewegt sich allerdings zwischen den Werten 7 und 9 und das leider zu 
unzuverlässig - habe auch schon bei halbwegs kontinuierlicher 
Abwärtsbewegung auch schon 9->8->7->8 gesehen.
Gut, damit kann man nichts anfangen. Hatte ursprünglich auf mehr 
Auflösung gehofft, bevor ich mich damit beschäftigt habe. Offenbar sind 
die Position Variablen in MyTKeys[].pData bzw MyLinRots_Data[] als 
uint8_t deklariert.
 Die LinRot Methode CalcPosition() beschreibt diese Position und gibt 
einen Status zurück - verändert nix an der Position, wird also wohl 
schon irgendwo in der state machine aufgerufen und macht soweit schon 
aus der sehr sprunghaften RawPos eine definitiv weniger sprunghafte 
Position.
Ansonsten habe ich noch den DeltaCoeff , position offset ( 
(TSL_tsignPosition_T *)TSL_POSOFF_3CH_LIN_H aus dem Hal ) und position 
correcture ( TSL_POSCORR_3CH_LIN_H ) gesehen. All das is leider so 
schlecht dokumentiert, zB zu letzteren beiden habe ich auch nach 
längerer Suche genau nichts gefunden, was das beschreibt.
Ich hab die ganzen App Notes und bla gelesen und es fing schon beim 
Hardwaredesign an, alles verteilt auf 5 oder 6 Dokumente, C0G/NP0 
Kondensatoren mit halbwegs vernünftigen (empfohlenen) Werten, die Slider 
eigentlich genau nach deren Design und trotzdem war mir am Ende einiges 
unklar :
- hatched Shield auch unter den Slider Elektroden? (habe mich für ja 
entschieden, ka ob es dann das is ..)
- sollen die Traces zwischen Elektroden und MCU jetzt am selben Layer 
sein wie die Elektroden oder nicht? Ich fand leider alles so schwammig 
beschrieben, dass ich darauf keine zufriedenstellende bzw teils 
widersprüchlich erscheinende Antworten drauf gefunden hab..)
Nachdem das alles doch ein bisschen mühsam ist, so im blinden zu tappen, 
hat hier eventuell jemand schon mal einen brauchbaren Linearsensor mit 
der Touch Library implementiert - wenn ja, wie bzw. was mache ich hier 
falsch?

(Anmerkung zu Bild 2 : TSLPRIM_LINROT_RESOLUTION war bereits auf 8 
umgestellt)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.