hallo zusammen, ich muss eine Pulse mit sehr enger und unterschiedliche Breite erzeugen. Die Einstellung und Vorgehensweise ist wie folgt: Clock freq= 16 Mhz, Prescaler=1. Aus_zeit soll 15 µs sein, daraus folgt = 15µs*16MHz/2=120. Dafür habe ich an Timer gedacht und mit dieser Logic für bestimmte Zeit an und ausschalten. Leider sieht es aus, dass manchmal Flanken nicht fallen können. Obwohl ichmit Cubemx die maximale Outputgeschwindigkeit in der GPIO-Konfiguration auf very high gesetzt habe. habt ihr vorschläge ? Vielen Dank
Samuel schrieb: > habt ihr vorschläge ? Das geht autonom mit den Timern. Lies das hier: https://www.st.com/content/ccc/resource/technical/document/application_note/group0/91/01/84/3f/7c/67/41/3f/DM00236305/files/DM00236305.pdf/jcr:content/translations/en.DM00236305.pdf
danke aber das hilft mir nicht. trotzdem werde ich das durchlesen. weil ich versucht habe, die ARR eines PWM-Signales zu ändern, jedoch ohne Erfolg.
Wenn es nur Pulspakete sein sollen wären evtl. entsprechende Bitmuster per SPI eine Lösung.
Samuel schrieb: > danke aber das hilft mir nicht. trotzdem werde ich das durchlesen. > weil ich versucht habe, die ARR eines PWM-Signales zu ändern, jedoch > ohne Erfolg. Ja, weil du keine Ahnung hast was eine PWM ist und wie ein Timer funktioniert. Stelle den Prescaler auf 1, Periode auf 480, No Division, Pulse 240 dann gehts. Und lerne zuerst einmal was ein PWM Signal ist.
C. W. schrieb: > Wenn es nur Pulspakete sein sollen wären evtl. entsprechende > Bitmuster > per SPI eine Lösung. er möchte das aber mit dem Timer machen.
Samuel schrieb: > danke aber das hilft mir nicht. Doch, genau DAS willst du! Kapitel 5: Arbitrary waveform generation using timer DMA-burst feature.
C. W. schrieb: > Wenn es nur Pulspakete sein sollen wären evtl. entsprechende Bitmuster per SPI eine Lösung. DAS habe ich probiert. Aber es ging nicht. Weil es immer feste low interval gibt. und die Daten werden je nach der Zeit zwischen 2 fallenden Flanken gemmesen und dementsprechend decodieren. LG
void LED(){ Wert= __HAL_TIM_GetCounter(&htim3); if(Wert> 0 && Wert<120){ HAL_GPIO_WritePin(GPIOE,GPIO_PIN_15,GPIO_PIN_RESET); } else if (Wert> 120 && Wert<= 1392){ HAL_GPIO_WritePin(GPIOE,GPIO_PIN_15,GPIO_PIN_SET); // Sync 58 Tcik } else if (Wert> 1392 && Wert<= 1512){ HAL_GPIO_WritePin(GPIOE,GPIO_PIN_15,GPIO_PIN_RESET); } else if (Wert> 1512 && Wert<= 1704){ HAL_GPIO_WritePin(GPIOE,GPIO_PIN_15,GPIO_PIN_SET); // 13 tick Status } else if (Wert> 1704 && Wert<= 1824){ HAL_GPIO_WritePin(GPIOE,GPIO_PIN_15,GPIO_PIN_RESET); } else if (Wert> 1824 && Wert<= (2024)){ HAL_GPIO_WritePin(GPIOE,GPIO_PIN_15,GPIO_PIN_SET); // 26 tick data1 } else{ HAL_GPIO_WritePin(GPIOE,GPIO_PIN_15,GPIO_PIN_RESET); } }
Harry L. schrieb: > Samuel schrieb: >> danke aber das hilft mir nicht. > > Doch, genau DAS willst du! > > Kapitel 5: Arbitrary waveform generation using timer DMA-burst feature. anscheinend hast recht. melde mich, wenn es klappt.
hallo zusammen, ich habe es jetzt mit arbitrary waveform. Aber es hat nicht geklappt. ich denke, dass es an der Konfiguration liegt, weil ich register programmiereung nicht kann.Ich habe ein Array von 6 Words erstellt, damit zwei Wellenformmuster an TIM2-Kanal 1 gesendet werden können (TIM2_ARR, TIM2_RCR, TIM2_CCR1). uint32_t aSRC_Buffer [6] = {2000,1,800,3000,2,200}; /// ARR, RCR, CCR1 x 2. trotzdem sehe ich kein Signal mit dem Oszi ausser ein Signal wegen der folgenden Function HAL_TIM_PWM_Start (& htim2, TIM_CHANNEL_1); Zusammenfassung der Konfiguration: Timer clock =64 MHz clock source: internal PWM Generation CH1 Prescaler=64 counter mode =Up period= 50000 – Pin PA8: TIM2_ch1_output – Mode: push pull – Pull: pull-up – Speed: high uint32_t aSRC_Buffer[6] = { 2000,1,800,3000,2,200}; //ARR, Häufigkeit, CCR /* USER CODE BEGIN 2 */ //HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1); HAL_TIM_DMABurst_WriteStart(&htim2,TIM_DMABASE_ARR, TIM_DMA_TRIGGER, (uint32_t *)aSRC_Buffer, TIM_DMABURSTLENGTH_3TRANSFERS); /* USER CODE END 2 */
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.