Sida 1 av 1
Behöver hjälp att hitta digitalt lågpass filter
Postat: 27 september 2007, 20:59:40
av mri
Jag kan inte mycket om DSP algoritmer men gissar att det finns folk här som kan sånt, eller vet var jag kan leta vidare.
I reflow temperaturregleringen jag knåpar med är temperaturens derivata (förändring per tidsenhet) en viktig parameter. Temperaturen i sig kan öka ganska snabbt, upp till 3 grader per sekund, men derivatan förändras dock ganska långsamt. Dvs systemet har tröghet.
Derivatan skall beräknas kontinuerligt och jag behöver ett lågpassfilter för att filtrera bort brus. Jag har testat med ett mycket enkelt filter jag hittade på nätet nånstans. Det kan liknas med ett lågpassfilter byggd av en kondensator och ett motstånd:
Kod: Markera allt
K = T * SPS
out = acc / K
acc = acc + in - out
T = Filtrets tidskonstant i sekunder (tiden det tar att nå upp till ~63% amplitud ut)
SPS = Samples per second
acc = Ackumulator
in = Samplat värde som skall filtreras
out = Filtrerat värde ut
Jag samplar temperaturen varje sekund, och beräknar skillnaden mot föregående sample. Denna skillnad matar jag in till filtret och ut får jag en filtrerad derivata, dvs grader/sekund. Det här fungerar, men är inte speciellt bra. Jag behöver ett effektivare lågpassfilter som på ca 5-10 samples ger en stabil filtrerad derivata...
Finns det kanke filter var man matar in samples och får ut en filtrerad derivata, det skulle vara perfekt...
Postat: 27 september 2007, 22:08:16
av Peppar
Kanske denna sidan kan vara något:
http://www.silcom.com/~aludwig/Signal_p ... ilters.htm
Detta är inte min starka sida, tyvärr.
Postat: 27 september 2007, 23:33:19
av chille
Det absolut bästa vore om du kunde köra ett FIR eller IIR-filter med koefficienter som ej ändras något. Då skulle du kunna beräkna fram ett par optimala koefficienter med något program, typ mathlab eller något filterberäkningsprogram och sedan använda de för att filtrera signalerna utan att använda allt för många cykler. Antagligen räcker det med ett 1-pole filter och då borde det bli en multiplikation och några instruktioner till.
Annars kan du alltid ta en titt på
Music-DSP's filter-arkiv. Dock är väl många filter där optimerade för audiobruk. Men hittar du ett vanligt lågpassfilter utan resonans eller andra parametrar kan det ju fungera.
Ett annat sätt vore kanske att beräkna RMS-värdet? Vad tror du om det? Dock är det nog jävligt tungt för en PIC/AVR, eller liknande, att göra det i realtid då det kräver både kvadratroten och divisioner. Jag tar för givet att du kör någon liten 8bitars MCU?
Föresten, om jag var du så skulle jag nog sampla temperaturen mer än en gång per sekund. Kanske typ 5-10 gånger per sekund. Då borde du få ett _mycket_ stabilare mätvärde.
En annan sak som kan vara värt att tänka på är att om du nu kör en processor som inte har multiplikation eller division i hårdvara är att implementera till exempel en algoritm som beräknar en multiplikation, för du behöver ju rimligtvis inte köra en loop som jag har sätt att rätt många gör när de ska multiplicera. Ett exempel är "russian peasant algorithm", då kan du multiplicera väldigt stora tal snabbt och enkelt i en klen processor.
Postat: 28 september 2007, 16:04:43
av mri
chille: Jo jag har varit inne på den där sidan nån gång tidigare. Det finns ju några intressandta LP filter där. Antar att det är bara att pröva dem. Jag får datat enkelt loggat till PC'n så jag kan testa dem där.
"lågpassfilter utan resonans", vad betyder det?
RMS; kvadratrot är nog inte att tänka på i första hand, men processorn har nog 16 bitars multiplikation och division i hårdvaran. Det är en 16 bitars Renesas R8C på 20 MHz. Angående samplingen så kan jag sampla max 2 gånger per sekund.
Postat: 28 september 2007, 16:25:35
av oJsan
Skulle du kunna förse oss med en bunt uppmätta värden? Dvs en temperaturlogg från din apparat... då är det nog lättare att se varför det inte fungerar så speciellt bra...
Postat: 28 september 2007, 16:49:15
av oJsan
Har du testat att göra ett löpande medelvärde av de N senaste sample och sedan beräkna derivatan mellan två på varandra följande medelvärden? (senaste och föregående medelvärde alltså) Säger inte att det fungerar, men det blir nog mycket stabilare...
Postat: 28 september 2007, 20:48:59
av SvenW
Om det filtrerade värdet skall användas i en regulator, t.ex. av PID typ , så stöter man på fundamentala problem om man försöker filtrera bort brus. Fördröjningar som nödvändigtvis försämrar regulatorns bandbredd. Skall värdet bara loggas så är det inga problem.
Postat: 28 september 2007, 23:29:06
av mri
Jag har inte haft tid att testa några nya filter men jag tog två nya loggar. De är helt ofiltrerade. Sampling en gång per sekund. De ser faktiskt bättre ut än mina tidigare försök.

Har åtgärdat en potentiell störkälla i apparaten som kan ha inverkat negativt tidigare.
Den här
loggen är ett stegsvarstest vid 100 och 200 grader ur vilken programmet skall plocka ut max derivata vid 100 och 200 grader, samt övervärming vid samma temperaturer.
Den här
loggen är min nuvarande reflow reglering som antar att max derivata samt övervärming är konstant vid alla temperaturer. Nästa version kommer att interpolera värdena från stegsvaren vid 100 och 200 grader.
Hursomhelst, det vore ändå trevligt att få bort de variationer som finns i kurvorna. Hoppas ni har Excel.
Postat: 29 september 2007, 11:16:05
av RDX*
Om du kan ha någorlunda fördröjning så verkar ett flytandemedelfilter räcka.
Re: Behöver hjälp att hitta digitalt lågpass filter
Postat: 29 september 2007, 22:09:26
av oJsan
Asså... måste bara få reda ut en sak:
mri skrev:I reflow temperaturregleringen jag knåpar med är temperaturens derivata (förändring per tidsenhet) en viktig parameter. Temperaturen i sig kan öka ganska snabbt, upp till 3 grader per sekund, men derivatan förändras dock ganska långsamt. Dvs systemet har tröghet.
Jag förstår inte? Om temperaturen ökar med 3 grader per sekund så är ju derivatan just _3_ ?!
Vad är det egentligen du vill uppnå i ugnen.. vill du ha en konstant temperaturstegring (derivata)?
Vad menar du med "max derivata vid 100 och 200 grader"? Vid just 100 grader kan ju derivatan inte vara annat än just derivatan... förstår inte vad du menar med "max"?
Postat: 29 september 2007, 22:45:51
av mri
3 grader per sekund är ungefär max uppvärmningshastighet vad mitt strykjärn (som jag för tillfället testar med) klarar, men det är något som programmet skall lista ut med hjälp av automatisk kalibrering.
"vill du ha en konstant temperaturstegring (derivata)?"
Nja, jo, när det gäller just reflow så skall derivatan vara konstant. Olika brant i olika sektioner av lödprofilen. Temperaturen skall åtminstone inte hållas konstant nån längre stund.
Med "max derivata" menar jag vad värmeelementet vid full effekt maximalt kan prestera när temperaturen passerar 100 och 200 grader. När man fått reda på "max derivata" kan man sänka effekten och på så sätt få önskad derivata...