Forum: Mikrocontroller und Digitale Elektronik Strommessung PWM Strategie


von Mein_erstes_Mal (peter_s158)


Lesenswert?

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.

von Vanye R. (vanye_rijan)


Lesenswert?

> 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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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?

von Ingo L. (corrtexx)


Lesenswert?

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.

von Axel S. (a-za-z0-9)


Lesenswert?

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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

Lesenswert?

Bitte Bedienungsanleitung beachten. Die findet sich über jeder 
Texteingabebox.

von Ingo L. (corrtexx)


Lesenswert?

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

von Brüno (dominic_m833)


Lesenswert?

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.

von Mein_erstes_Mal (peter_s158)


Angehängte Dateien:

Lesenswert?

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?

von Axel S. (a-za-z0-9)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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.

von Sebastian W. (wangnick)


Lesenswert?

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

von Mein_erstes_Mal (peter_s158)


Lesenswert?

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

von Ingo L. (corrtexx)


Lesenswert?

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?

von Sebastian W. (wangnick)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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.

von Ingo L. (corrtexx)


Lesenswert?

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
von Sebastian W. (wangnick)


Lesenswert?

Peter D. schrieb:
> Das sind dann etwa 18°C Erwärmung.

Peter, wie ist das ausgerechnet?

LG, Sebastian

von Brüno (dominic_m833)


Lesenswert?

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
von Mein_erstes_Mal (peter_s158)


Lesenswert?

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

von Ingo L. (corrtexx)


Lesenswert?

Mein_erstes_Mal schrieb:
> Außer es gibt eine Bessere Möglichkeit ?

> Wie macht mein FLuke die Strommessung?
Nimm dein Fluke

von Mein_erstes_Mal (peter_s158)


Lesenswert?

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

von Sebastian W. (wangnick)


Lesenswert?

Mein_erstes_Mal schrieb:
> Ich brauche aber eine genaue Messung auf dem MC

Willst du messen um zu regeln?

LG, Sebastian

von Vanye R. (vanye_rijan)


Lesenswert?

> Echt komme ich da nicht genauer hin?
> Wie macht mein FLuke die Strommessung?

Ich schliesse mich der Verarschungstheorie an.

Vanye

von Εrnst B. (ernst)


Lesenswert?

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.

von Mein_erstes_Mal (peter_s158)


Lesenswert?

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.

von Εrnst B. (ernst)


Lesenswert?

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.

von M. K. (sylaina)


Lesenswert?

Mein_erstes_Mal schrieb:
> Kann man diesen Tiefpass auch programmieren?

Nen Mittelwert bilden ist schon eine Tiefpassfilterung. Vielleicht hilft 
dir auch ein gleitender Mittelwert.

von Norbert (der_norbert)


Lesenswert?

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
Noch kein Account? Hier anmelden.