Ich möchte zwei Phasenströme eines BLDC Motors simultan über ADC1 und ADC2 getriggert über Timer1 Capture Compare Channel 4 einlesen. Siehe auch Kapitel 5.1 der STM Dokumentation UM1052 https://www.st.com/content/ccc/resource/technical/document/user_manual/5e/5e/d2/cb/07/35/45/a6/CD00298474.pdf/files/CD00298474.pdf/jcr:content/translations/en.CD00298474.pdf Das Grundsetup habe ich mit CubeMX erstellt. Das Compiliert auch fehlerfrei (OpenSTM32 in Eclipse) Leider bekomme ich den AD-Wandler nicht wie gewünscht zum Laufen. Es wird anscheinend kein Interrupt vom Channel4 erzeugt. (weder TIM1_TRG_COM_IRQn noch TIM1_CC_IRQn) Zum Check toggle ich die LED auf dem Board in der Interrupt Routine. Der Einzige Interrupt der kommt, ist der vom Timer1 Überlauf. Das ganze Projekt ist auf Github zu finden: https://github.com/stancecoke/LishuiFOC Hat jemand eine Idee? Bitte kein HAL oder CubeMx Bashing und ja, ich habe das Reference Manual für Timer 1 und ADC1+2 bereits durchgeackert ;-) https://www.st.com/content/ccc/resource/technical/document/reference_manual/59/b9/ba/7f/11/af/43/d5/CD00171190.pdf/files/CD00171190.pdf/jcr:content/translations/en.CD00171190.pdf Gruß hochsitzcola
Ich kann mich dunkel erinnern, dass ich da auch mal geknoblet habe. Das Problem war, dass bei HAL_TIM_PWM_Start.... theoretisch alle Kanäle verodert werden können, aber praktisch musste jeder einzeln gestartet werden, da es sonst nicht funktioniert hat.
OK, wenn ich alle Kanäle einzeln starte, kommt der TIM1_CC_IRQn Interrupt. Der ADC läuft immer noch nicht. Ich denke, daß der auf den Trigger-Interrupt wartet und der kommt nicht :-( Gruß hochsitzcola
Was ist mit dem letzten Punkt im Bild? Habe jetzt keine Lust ein Beispiel zu studieren, aber stimmt das so?
Das kann man nur auf "Auto" stellen, dann wird aber die Triggerquelle ungültig... Gruß hochsitzcola
Dann muss ich jetzt passen. Ich habe nur "normalen" ADC benutzt. Mit injected habe ich mich nicht befasst. Was ist der Unterschied?
Die beiden ADC_SOFTWARE_START in der main.c stechen auch irgendwie ins Auge.
hochsitzcola schrieb: > Bitte kein HAL oder CubeMx Bashing Na ja, dann können dir so ziemlich alle Profis hier schon mal nicht helfen, denn die benutzen sowas halt nicht. Das hat auch seinen Grund, wie du es gerade erkennen dürftest... Gehe doch mal in den Debug wie jeder normaler Entwickler, schau dir die Register zur Laufzeit an und die Lösung deines Problems kommt in greifbare Nähe. Mehr kann man dir leider nicht anbieten.
pegel schrieb: > Mit injected habe ich mich nicht befasst. > Was ist der Unterschied? Injected scheint es extra für die Anwendung in der BLDC Ansteuerung zu geben. Die AD-Werte werden direkt in eigene Register geschrieben und ggf. gleich ein Offset abgezogen. Das Ganze mit hoher Priorität. Dreikommaeinsvier schrieb: > Na ja, dann können dir so ziemlich alle Profis hier schon mal nicht > helfen, denn die benutzen sowas halt nicht. Das hat auch seinen Grund, > wie du es gerade erkennen dürftest... Ich habe ja nicht gesagt, daß ihr mir keine Tipps auf Registerebene dürft. :-) Die Benutzung des HAL ist gewöhnungsbedürftig und es gibt nicht viel Beispiele im Netz. Dieser Injected-Mode durch Timer1 getriggert scheint besonders exotisch zu sein. Ich werde auf jeden Fall deinen Rat befolgen und mir die Registerinhalte mal genauer anschauen... Gruß hochsitzcola
pegel schrieb: > ADC_SOFTWARE_START Moin, du hast für die ADC die Kombination von Normal und Injected angegeben. Deshalb ist jetzt die Frage, ob das Injected nur funktioniert, wenn das Normal schon läuft. Ich würde Normal starten bzw. aus der Konfiguration nehmen um das zu testen.
Das Beispiel funktioniert jedenfalls so: https://blog.naver.com/PostView.nhn?blogId=eziya76&logNo=220953913003 nur das kein Timer IT, sondern ein EXTI den Injected ADC startet.
Schade, bei deinem Link ist die Initialisierung vom ADC nicht als Code dargestellt... Der Capture Compare Interrupt vom Timer 1 kommt ja, also könnte ich damit auch die injected conversion wie im Beispiel aufrufen. Ich bin bisher aber davon ausgegangen, das das automatisch geht, da ich ja in der Injected Konfiguration als Trigger den Channel 4 Capture Compare direkt anwählen kann.... Gruß hochsitzcola
Update: den injected ADC per Softwarestart über den TIM1_CC_IRQn Callback triggern funktioniert. Direkt über JEXTSEL[2:0]:001: Timer 1 CC4 event funktioniert nicht :-( Ich werde jetzt mal im OpenSTM32 Forum anfragen. Gruß hochsitzcola
Wie gesagt, vielleicht muss der Normale ADC laufen damit das funktioniert. Du hast ja die Kombi Normal/Injected ausgewählt.
Hm, softwaregestartet geht es ja auch, ohne daß regular ADC läuft. Das Thema bei OpenSTM32 ist erstellt. http://www.openstm32.org/forumthread7467?topics_offset=0 Gruß hochsitzcola
Hm, ich bin in dem User Manual über den Hinweis gestolpert (Table3,
Seite 36)
> DMA is used to enable ADC injected conversion external trigger. Disabling is
performed by software
Das sagt mir gar nichts. Die erwähnten DMA Kanäle sind für ADC1 (Kanal1)
und UART (Kanal5) ?! Ich hab jetzt in 4 verschiedenen Foren angefragt,
keine Lösung in Sicht. Ich behelfe mir jetzt mit dem Timer CC Ch4
Callback und rufe den Injected ADC darüber auf...
Gruß
hochsitzcola
Hallo zusammen, ich habe die gleiche Anwendung und bekomme es hin den injected channel genau einmal auszulesen. Danach wird das JEOS/C Flag nie wieder gesetzt obwohl ich die Conversion erneut starte. Da der Beitrag nciht ganz so alt ist wollte ich mal fragen ob du in der zwischenzweit eine Lösung gefunden hast. Viele Grüße leko
hochsitzcola schrieb: > Hm, ich bin in dem User Manual über den Hinweis gestolpert (Table3, > Seite 36) >> DMA is used to enable ADC injected conversion external trigger. Disabling is > performed by software > > Das sagt mir gar nichts. Die erwähnten DMA Kanäle sind für ADC1 (Kanal1) > und UART (Kanal5) ?! Ich hab jetzt in 4 verschiedenen Foren angefragt, > keine Lösung in Sicht. Ich behelfe mir jetzt mit dem Timer CC Ch4 > Callback und rufe den Injected ADC darüber auf... > > Gruß > hochsitzcola Hello, Some time ago I made an short application to read simultaneously 2 channels of ADC1, using DMA. In attachment is the "main.c" file I hope this will help you.
:
Bearbeitet durch User
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.