Guten Tag, ich versuche gerade eine stabile Strommessung eines PWM Signals zu programmieren. Das PWM hat eine Frequenz von 100Hz. ich verwende den STM32F103 als Mikrocontroller. Gibt es eine Möglichkeit den ADC so zu konfigurieren das ich meine Messungen genau zwischen der Periode des PWM messe? Oder wie geht man an so eine Messung richtig ran? Danke für die Hilfe.
> Gibt es eine Möglichkeit den ADC so zu konfigurieren das ich meine > Messungen genau zwischen der Periode des PWM messe? Wenn es das ist was du messen willst dann kannst du das selbstverstaendlich so machen. Du laesst dir halt vom Timer deiner PWM irgendwie geschickt einen IRQ erzeugen und syncronisierst deinen ADC damit. > Oder wie geht man an so eine Messung richtig ran? Du koenntest damit anfangen das du dein Problem richtig schilderst. Ueblicherweise verwendet man PWM als eine Art Schaltnetzteil, es soll also eine mittlere Gleichspannung/strom erzeugt werden und eigentlich wuerde man die dann messen wollen, also nach einem Filter. Aber was wissen wir schon was du willst? Vanye
Mein_erstes_Mal schrieb: > Das PWM hat eine Frequenz von 100Hz. Wofür brauchst du so eine niedrige Frequenz? > genau zwischen der Periode des PWM messe? Es gibt bei einer PWM kein "dazwischen". Denn was, wenn das PWM Tastverhältnis 0 ist oder 100%? Also musst du erst mal definieren, wo der Zeitpunkt sein soll: gleich nach der steigenden oder nach der fallenden Flanke? Hat die Last induktive Anteile?
Du musst deinen Timer so konfigurieren, dass er hoch- und runterzählt (Center-Aligned). Dann kannst du noch konfigurieren, ober er im oberen oder unteren Wendepunkt den ADC triggert (Repetition Counter), oder beides. Dann hast du den ADC immer an der selben PWM-Stelle synchron- so habe ich das auf nem STM32F0 gemacht:
1 | void Init_PWM ( void ) |
2 | {
|
3 | GPIO_InitTypeDef GPIO_InitStructure_A; |
4 | GPIO_StructInit(&GPIO_InitStructure_A); |
5 | |
6 | // IOs als Ausgang initialisieren (PortA und PortB)
|
7 | RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); |
8 | |
9 | GPIO_InitStructure_A.GPIO_Mode = GPIO_Mode_AF; |
10 | GPIO_InitStructure_A.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8; |
11 | GPIO_InitStructure_A.GPIO_OType = GPIO_OType_PP; |
12 | GPIO_InitStructure_A.GPIO_PuPd = GPIO_PuPd_DOWN; |
13 | GPIO_InitStructure_A.GPIO_Speed = GPIO_Speed_Level_3; |
14 | GPIO_Init(GPIOA, &GPIO_InitStructure_A); |
15 | |
16 | GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_2); |
17 | GPIO_PinAFConfig(GPIOA, GPIO_PinSource8, GPIO_AF_2); |
18 | |
19 | /////////////////////////////////////////////////////////
|
20 | /////////////////////////////////////////////////////////
|
21 | // Timer
|
22 | TIM_TimeBaseInitTypeDef TIM_TimeBase_InitStructure; |
23 | TIM_TimeBaseStructInit(&TIM_TimeBase_InitStructure); |
24 | RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); |
25 | |
26 | TIM_TimeBase_InitStructure.TIM_Prescaler = 0; |
27 | TIM_TimeBase_InitStructure.TIM_CounterMode = TIM_CounterMode_CenterAligned1; |
28 | TIM_TimeBase_InitStructure.TIM_Period = PWM_PERIOD; |
29 | TIM_TimeBase_InitStructure.TIM_ClockDivision = 0; |
30 | TIM_TimeBase_InitStructure.TIM_RepetitionCounter = 3; |
31 | TIM_TimeBaseInit(TIM1, &TIM_TimeBase_InitStructure); |
32 | |
33 | TIM_UpdateRequestConfig(TIM1, TIM_UpdateSource_Global); |
34 | TIM_SelectOutputTrigger(TIM1,TIM_TRGOSource_Update); |
35 | TIM_UpdateDisableConfig(TIM1,DISABLE); |
36 | |
37 | /////////////////////////////////////////////////////////
|
38 | /////////////////////////////////////////////////////////
|
39 | // Dead-Time (not nessesary)
|
40 | TIM_BDTRInitTypeDef TIM_BDTRInitStructure; |
41 | TIM_BDTRStructInit(&TIM_BDTRInitStructure); |
42 | /* Automatic Output enable, Break, dead time and lock configuration*/
|
43 | TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable; |
44 | TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable; |
45 | TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF; |
46 | TIM_BDTRInitStructure.TIM_DeadTime = DEADTIME_750NS; |
47 | TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable; |
48 | TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_High; |
49 | TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable; |
50 | TIM_BDTRConfig(TIM1, &TIM_BDTRInitStructure); |
51 | |
52 | /////////////////////////////////////////////////////////
|
53 | /////////////////////////////////////////////////////////
|
54 | // PWM
|
55 | TIM_OCInitTypeDef TIM_OCInitStructure; |
56 | TIM_OCStructInit(&TIM_OCInitStructure); |
57 | TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; |
58 | TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; |
59 | TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable; |
60 | TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; |
61 | TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High; |
62 | TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset; |
63 | TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset; |
64 | TIM_OCInitStructure.TIM_Pulse = PWM_PERIOD/2; |
65 | |
66 | TIM_OC1Init(TIM1, &TIM_OCInitStructure); |
67 | TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); |
68 | |
69 | TIM_ARRPreloadConfig(TIM1, ENABLE); |
70 | |
71 | // DISABLE_PWM();
|
72 | // ENABLE_PWM();
|
73 | // ENABLE_SYNCHRONOUS_MODE();
|
74 | |
75 | /* Enable Timer */
|
76 | TIM_Cmd( TIM1, ENABLE ); |
77 | }
|
78 | |
79 | |
80 | void Init_ADC ( void ) |
81 | {
|
82 | /* Set clock */
|
83 | RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); |
84 | RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1 , ENABLE); |
85 | RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); |
86 | RCC_ADCCLKConfig(RCC_ADCCLK_HSI14); |
87 | |
88 | GPIO_InitTypeDef GPIO_InitStructure; |
89 | GPIO_StructInit(&GPIO_InitStructure); |
90 | |
91 | ADC_InitTypeDef ADC_InitStructure; |
92 | ADC_StructInit(&ADC_InitStructure); |
93 | |
94 | DMA_InitTypeDef DMA_InitStructure; |
95 | DMA_StructInit(&DMA_InitStructure); |
96 | |
97 | TIM_TimeBaseInitTypeDef TIM_TimeBase_InitStructure; |
98 | TIM_TimeBaseStructInit (&TIM_TimeBase_InitStructure); |
99 | |
100 | NVIC_InitTypeDef NVIC_InitStructure; |
101 | NVIC_Init(&NVIC_InitStructure); |
102 | |
103 | |
104 | /* ADC Kanäle */
|
105 | /* IO initialisieren */
|
106 | GPIO_StructInit(&GPIO_InitStructure); |
107 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5; |
108 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN; |
109 | GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; |
110 | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_3; |
111 | GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; |
112 | GPIO_Init(GPIOA, &GPIO_InitStructure); |
113 | |
114 | NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel1_IRQn; |
115 | NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; |
116 | NVIC_InitStructure.NVIC_IRQChannelPriority = 0; |
117 | NVIC_Init(&NVIC_InitStructure); |
118 | |
119 | /* DMA Controll */
|
120 | DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(ADC1->DR); |
121 | DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)DataBuffer; |
122 | DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; |
123 | DMA_InitStructure.DMA_BufferSize = NR_OF_MIDDLE * VALUES_TO_SAMPLE; |
124 | DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; |
125 | DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; |
126 | DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; |
127 | DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; |
128 | DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; |
129 | DMA_InitStructure.DMA_Priority = DMA_Priority_High; |
130 | DMA_Init(DMA1_Channel1, &DMA_InitStructure); |
131 | DMA_ITConfig(DMA1_Channel1,DMA_IT_TC,ENABLE ); |
132 | |
133 | /* ADC */
|
134 | ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b; |
135 | ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; |
136 | ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_Rising; |
137 | ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_TRGO; |
138 | ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; |
139 | ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Upward; |
140 | ADC_Init(ADC1, &ADC_InitStructure); |
141 | |
142 | ADC_ChannelConfig(ADC1,ADC_Channel_1,ADC_SampleTime_1_5Cycles); |
143 | ADC_ChannelConfig(ADC1,ADC_Channel_2,ADC_SampleTime_1_5Cycles); |
144 | ADC_ChannelConfig(ADC1,ADC_Channel_3,ADC_SampleTime_1_5Cycles); |
145 | ADC_ChannelConfig(ADC1,ADC_Channel_4,ADC_SampleTime_1_5Cycles); |
146 | ADC_ChannelConfig(ADC1,ADC_Channel_5,ADC_SampleTime_1_5Cycles); |
147 | |
148 | ADC_GetCalibrationFactor(ADC1); |
149 | |
150 | DMA_Cmd(DMA1_Channel1, ENABLE); |
151 | ADC_Cmd(ADC1, ENABLE); |
152 | ADC_DMACmd(ADC1, ENABLE); |
153 | ADC_DMARequestModeConfig(ADC1,ADC_DMAMode_Circular); |
154 | while(ADC_GetFlagStatus(ADC1,ADC_FLAG_ADEN) == RESET); |
155 | ADC_StartOfConversion(ADC1); |
156 | }
|
Das Überflüssige musst du halt raus schmeissen.
Mein_erstes_Mal schrieb: > ich versuche gerade eine stabile Strommessung eines PWM Signals zu > programmieren. Was nennst du "stabil"? Ist denn der Strom stabil? > Das PWM hat eine Frequenz von 100Hz. > ich verwende den STM32F103 als Mikrocontroller. Also ist die PWM langsam und der µC tendentiell eher schnell. > Gibt es eine Möglichkeit den ADC so zu konfigurieren das ich meine > Messungen genau zwischen der Periode des PWM messe? Die Periodendauer ist der Zeitraum in dem sich ein (periodisches, natürlich) Signal wiederholt. Da gibt es kein "dazwischen". Ich nehme an, dir geht es um die Messung des Stromes, wenn deine PWM "angeschaltet" ist. Das geht wenn die PWM mindestens so lange angeschaltet ist, wie die S&H Stufe des ADC braucht um die Eingangsspannung zu erfassen. Und natürlich muß der Strom schon stabil sein, die Last muß also ohmsch und nicht etwa kapazitiv oder induktiv sein. Dann konfigurierst du dir einen Interrupt auf den Start des PWM-Signals und startest den ADC in der ISR. Eventuell kann man den ADC auch direkt mit dem Timer verheiraten, schau halt selber ins Datenblatt. Und wenn du nach dem aktivieren des PWM-Signals noch eine gewisse Zeit abwarten willst, bevor du die Messung startest, nimmst du halt einen zweiten Compare-Zeitpunkt dafür. Den mußt du natürlich anpassen, wenn du die PWM änderst.
Bitte Bedienungsanleitung beachten. Die findet sich über jeder Texteingabebox.
Axel S. schrieb: > Da gibt es kein "dazwischen". Doch, natürlich > Dann konfigurierst du dir einen Interrupt auf den Start des PWM-Signals > und startest den ADC in der ISR. Eventuell kann man den ADC auch direkt > mit dem Timer verheiraten, schau halt selber ins Datenblatt. Und wenn du > nach dem aktivieren des PWM-Signals noch eine gewisse Zeit abwarten > willst, bevor du die Messung startest, nimmst du halt einen zweiten > Compare-Zeitpunkt dafür. Den mußt du natürlich anpassen, wenn du die PWM > änderst. Wie es geht habe ich oben bereits erwähnt, deine Darstellung hier ist eher unbrauchbar
Axel S. schrieb: > Was nennst du "stabil"? Ist denn der Strom stabil? Du hast das Problem offensichtlich nicht verstanden. Ein tiefpassgefiltertes PWM-Signal ist niemals stabil sondern schwankt periodisch mit der PWM-Frequenz. Wenn man nun asynchron abtastet, bekommt man wunderschönes Aliasing.
Hallo und danke für die Antworten. Vanye R. schrieb: > Wenn es das ist was du messen willst dann kannst du das > selbstverstaendlich so machen. Du laesst dir halt vom Timer deiner PWM > irgendwie geschickt einen IRQ erzeugen und syncronisierst deinen ADC > damit. Ja genau ich möchte Synchron zur Periode des PWM Messen. Lothar M. schrieb: > Wofür brauchst du so eine niedrige Frequenz? Der Strom fließt durch eine Ventilspule und diese Spule möchte 100Hz. Lothar M. schrieb: > Es gibt bei einer PWM kein "dazwischen". Denn was, wenn das PWM > Tastverhältnis 0 ist oder 100%? Also musst du erst mal definieren, wo > der Zeitpunkt sein soll: gleich nach der steigenden oder nach der > fallenden Flanke? Hat die Last induktive Anteile? Ich füge ein Bild ein. Hoffe das macht mein Vorhaben klarer. Ingo L. schrieb: > Du musst deinen Timer so konfigurieren, dass er hoch- und runterzählt > (Center-Aligned). Dann kannst du noch konfigurieren, ober er im oberen > oder unteren Wendepunkt den ADC triggert (Repetition Counter), oder > beides. Dann hast du den ADC immer an der selben PWM-Stelle synchron- so > habe ich das auf nem STM32F0 gemacht: Danke für deinen Code. Werde ich mir ansehen. Axel S. schrieb: > Also ist die PWM langsam und der µC tendentiell eher schnell. Genau😊 Ich stelle mir das so vor das mein ADC so die Periode dauert in die DMA Messungen Schaufelt. Wenn das dann erledigt ist könte ich über diese Daten einen Mittelwert bilden. Ist das denkbar?
Brüno schrieb: > Axel S. schrieb: >> Was nennst du "stabil"? Ist denn der Strom stabil? > > Du hast das Problem offensichtlich nicht verstanden. Nein. Du hast meine Antwort nicht verstanden. > Ein > tiefpassgefiltertes PWM-Signal ist niemals stabil sondern schwankt > periodisch mit der PWM-Frequenz. <Loriot> Ach! </Loriot> Ich habe nirgends auch nur ein Wort von Tiefpaßfilterung und asynchroner Abtastung geschrieben. Im Gegenteil. Aber wenn die Last (zumindest teilweise) induktiv ist, dann steigt der Strom in der aktiven Phase der PWM (vulgo: Einschaltzeit) mehr oder weniger langsam an. Er ist also nicht stabil. Es ist noch nicht mal klar, ob er einen stabilen Wert erreicht oder nicht. Mein_erstes_Mal schrieb: > Ich stelle mir das so vor das mein ADC so die Periode dauert in die > DMA Messungen Schaufelt. Wenn das dann erledigt ist könte ich über > diese Daten einen Mittelwert bilden. Ist das denkbar? Denkbar ist vieles. Die Frage ist eher: was willst du überhaupt messen? Und wozu? Wenn du den Strom kurz nach dem Einschalten mißt (und nur da), dann wirst du einen zu kleinen Wert erhalten. Bei einem induktiven Verbraucher wie einem Ventil ist es eher sinnvoll, den Strom kurz vor dem Ausschalten zu messen (also den Maximalwert). Aber es kommt halt darauf an, warum du das überhaupt messen willst. Ein induktiver Verbraucher wird auch einen Freilauf-Strompfad brauchen (vulgo: eine Freilaufdiode). Wenn du den Strom über die ganze Periode samplen willst, mußt du den auch erfassen.
Mein_erstes_Mal schrieb: > Der Strom fließt durch eine Ventilspule und diese Spule möchte 100Hz. Vermutlich ist das ein Dosierventil, d.h. es geht im Takt der PWM auf und zu. Die PWM bestimmt dann die mittlere Durchflußmenge. Die Induktivität spielt kaum eine Rolle und es wirkt hauptsächlich der ohmsche Widerstand. Man könnte den Strom also einfach aus der Spannung berechnen. Der Ohmsche Widerstand bleibt ja konstant.
Mein_erstes_Mal schrieb: > Ich stelle mir das so vor das mein ADC so die Periode dauert in die DMA > Messungen Schaufelt. > Wenn das dann erledigt ist könte ich über diese Daten einen Mittelwert > bilden. > Ist das denkbar? Zeig doch mal zusätzlich zur PWM die Strommeßspannung. Und miß mal die Induktivität der Ventilspule. Denn je nach Verlauf des Stromanstiegs in der Induktivität würde man die Samplezeiten anders legen müssen ... LG, Sebastian
Sorry wenn ich mich nicht erkläre. Also ich habe Testweiße mein PWM mit einem Dutycyle von 50% laufen. Das Ventil nimmt am Anfang 600 mA auf nach 10 Minuten ist das Ventil warm und der Strom sinkt auf 560 mA Wenn ich den Strom mit dem Mikrocontroller messe dann messe ich den Strom zwar. Jedoch habe ich eine Schwankung von +-6 bis8 mA. Peter D. schrieb: > Vermutlich ist das ein Dosierventil, d.h. es geht im Takt der PWM auf > und zu. Die PWM bestimmt dann die mittlere Durchflußmenge. > Die Induktivität spielt kaum eine Rolle und es wirkt hauptsächlich der > ohmsche Widerstand. Man könnte den Strom also einfach aus der Spannung > berechnen. Der Ohmsche Widerstand bleibt ja konstant. Ja es ist so ein Ventil. Aber der Strom ändert sich mit der Temperatur der Spule. Danke für die Hilfe
Mein_erstes_Mal schrieb: > Das Ventil nimmt am Anfang 600 mA auf nach 10 Minuten ist das Ventil > warm und der Strom sinkt auf 560 mA > Wenn ich den Strom mit dem Mikrocontroller messe dann messe ich den > Strom zwar. Jedoch habe ich eine Schwankung von +-6 bis8 mA. Willst du uns verarschen?
Mein_erstes_Mal schrieb: > Aber der Strom ändert sich mit der Temperatur der Spule. Das muß nicht unbedingt an der Temperatur der Spule liegen. Die Bewegung des Ventilstößels im Magnetfeld der Spule arbeitet gegen den fließenden Strom, und wenn das Ventil warm ist kann es sein, dass sich diese mechanische Bewegung etwas anders verhält als bei kaltem Ventil. Gerade wenn der Stößel sich 100 Mal pro Sekunde zweimal bewegt ... LG, Sebastian
Mein_erstes_Mal schrieb: > Das Ventil nimmt am Anfang 600 mA auf nach 10 Minuten ist das Ventil > warm und der Strom sinkt auf 560 mA Das sind dann etwa 18°C Erwärmung.
Peter D. schrieb: > Das sind dann etwa 18°C Erwärmung. Ja und seine Messschwankungen betragen 1,4%. Das bekommt man mit der besten PWM-Synchronisierung nicht weg.
:
Bearbeitet durch User
Peter D. schrieb: > Das sind dann etwa 18°C Erwärmung. Peter, wie ist das ausgerechnet? LG, Sebastian
Axel S. schrieb: > Ich habe nirgends auch nur ein Wort von Tiefpaßfilterung und asynchroner > Abtastung geschrieben. Im Gegenteil. > > Aber wenn die Last (zumindest teilweise) induktiv ist, dann steigt der > Strom in der aktiven Phase der PWM (vulgo: Einschaltzeit) mehr oder > weniger langsam an. Er ist also nicht stabil. Ein Widerspruch in sich, denn eine induktive Last ist ein Tiefpass. Außerdem ist es völlig irrelevant wie viele Worte du von was geschrieben hast, denn ich wieß ja schon darauf hin dass du das Problem nicht verstanden hast. Der TE möchte nämlich synchron abtasten.
:
Bearbeitet durch User
Ingo L. schrieb: > Mein_erstes_Mal schrieb: >> Das Ventil nimmt am Anfang 600 mA auf nach 10 Minuten ist das Ventil >> warm und der Strom sinkt auf 560 mA >> Wenn ich den Strom mit dem Mikrocontroller messe dann messe ich den >> Strom zwar. Jedoch habe ich eine Schwankung von +-6 bis8 mA. > Willst du uns verarschen? Natürlich will ich Euch nicht verarschen. Ingo L. schrieb: > Ja und seine Messschwankungen betragen 1,4%. Das bekommt man mit der > besten PWM-Synchronisierung nicht weg. Echt komme ich da nicht genauer hin? Wie macht mein FLuke die Strommessung? Brüno schrieb: > Außerdem ist es völlig irrelevant wie viele Worte du von was geschrieben > hast, denn ich wieß ja schon darauf hin dass du das Problem nicht > verstanden hast. Der TE möchte nämlich synchron abtasten. Ja ich möchte Syncron über die PEriode Messen. Außer es gibt eine Bessere Möglichkeit ? Danke für die Hilfe
Mein_erstes_Mal schrieb: > Außer es gibt eine Bessere Möglichkeit ? > Wie macht mein FLuke die Strommessung? Nimm dein Fluke
Ingo L. schrieb: > Mein_erstes_Mal schrieb: >> Außer es gibt eine Bessere Möglichkeit ? > >> Wie macht mein FLuke die Strommessung? > Nimm dein Fluke Ich brauche aber eine genaue Messung auf dem MC. Danke für die Hilfe
Mein_erstes_Mal schrieb: > Ich brauche aber eine genaue Messung auf dem MC Willst du messen um zu regeln? LG, Sebastian
> Echt komme ich da nicht genauer hin? > Wie macht mein FLuke die Strommessung? Ich schliesse mich der Verarschungstheorie an. Vanye
Mein_erstes_Mal schrieb: > Ich brauche aber eine genaue Messung auf dem MC. Dann versuch' zuerst herauszufinden, was dein Fluke da genau misst. Ist es ein Durchschnittswert, RMS, oder einfach ein Wert zu einem Zufallszeitpunkt... Und über welches Zeitintervall mittelt dein Fluke, ist es der Durchschnittswert der letzten Sekunde, 10 Sekunden, ... Wenn du die Info hast, kannst du dir eine Auswerte-Schaltung/Logik entwerfen, die dasselbe Resultat bringt. Vermutlich reicht ein schnöder Tiefpass hinter dem Shunt.
Sebastian W. schrieb: > Mein_erstes_Mal schrieb: >> Ich brauche aber eine genaue Messung auf dem MC > > Willst du messen um zu regeln? > > LG, Sebastian JA genau das möchte ich. Wenn meine Messung aber um einige mA springt brauche ich nicht anfangen zu regeln. Was ich mich frage wie das RMS des Multimeters arbeitet und ob ich es nachbilden kann. Im Moment habe ich mit dem DMA 256 Werte gemittelt. 8 Dieser Ergebnise habe ich dann mit einen Quatratischen Mittelwert nochmal gemittelt. Das Ergebnis ist aber noch zu wackelig. Εrnst B. schrieb: > Vermutlich reicht ein schnöder Tiefpass hinter dem Shunt. Kann man diesen Tiefpass auch programmieren? Danke für die Hilf. Und nein ich will nur lernen und nicht jemanden Verarschen.
Mein_erstes_Mal schrieb: > Kann man diesen Tiefpass auch programmieren? ja. Du hast alle Zeit der Welt: Mein_erstes_Mal schrieb: > nach 10 Minuten ist das Ventil warm d.H. es reicht vermutlich wenn du den ADC durchlaufen lässt, und dir für deine Regelung z.B. den Mittelwert über die Messungen letzten 60 Sekunden anschaust. Da brauchst du auch keinen Kilobyte-großen Ringbuffer, einfach ADC-Werte Aufsummieren und mitzählen, einmal Pro Minute Summe/Anzahl für deine Regelung berechnen, Variablen zurücksetzen.
Mein_erstes_Mal schrieb: > Kann man diesen Tiefpass auch programmieren? Nen Mittelwert bilden ist schon eine Tiefpassfilterung. Vielleicht hilft dir auch ein gleitender Mittelwert.
Mein_erstes_Mal schrieb: > JA genau das möchte ich. Wenn meine Messung aber um einige mA springt > brauche ich nicht anfangen zu regeln. > Was ich mich frage wie das RMS des Multimeters arbeitet und ob ich es > nachbilden kann. > Im Moment habe ich mit dem DMA 256 Werte gemittelt. 8 Dieser Ergebnise > habe ich dann mit einen Quatratischen Mittelwert nochmal gemittelt. > > Das Ergebnis ist aber noch zu wackelig. Wenn sich deine Meßfrequenz langsam der PWM-Frequenz annähert, dann entsteht eine niederfrequente Schwebung (da du mit dem Meßvorgang langsam auf deiner sich ändernden Meßkurve wanderst). Idealerweise sollte die Meßfrequenz ein präzises Vielfaches der PWM-Frequenz sein. Die Werte über genau eine Periode können dann gemittelt werden und der sich ergebende Wert sollte deutlich stabiler sein. Alternativ (ohne Synchronisation) eine hohe Meßrate in ein simples Filter geschoben (alter_wert = 99%*alter_wert + 1%*neuer_wert) Je kleiner der Neuanteil, desto langsamer die Näherung an den Echtwert
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.