Hur fixa Hz upplösning vid 50 kHz billigt?
-
limpan4all
- Inlägg: 8505
- Blev medlem: 15 april 2006, 18:57:29
- Ort: Typ Nyköping
Hur fixa Hz upplösning vid 50 kHz billigt?
I en applikation som använder Freescale K60, så behöver vi generera en frekvens som skall ha enkel Hz upplösning vid ca 50 kHz dvs 49999, 50000, 50001 Hz osv.
Frekvenskravet är inte exakt men stegningen skall ligga i storleksordningen 1Hz med spannet typ +-0,25 Hz.
Med den K60 som går att köpa idag 50 MHz i periferiklocka (vid 100 MHz i systemklocka). Så kommer vi inte bättre än ca 10 Hz i upplösning och det räcker inte (divisor 1000 resp 1001 eller 999).
En extern PLL typ 74HC4046 kostar ca 3 SEK samt tillför lite jitter som inte är önskvärt.
Nu till frågan.
Utnyttjar vi K60 på fel sätt, dvs skall den klara av att göra detta men vi fattar bara inte hur?
Är det någon som har bra tips på lösning, som maximalt får kosta ca 4,50 SEK i 10k antal.
Har tittat en del på Analog Devices DDS (typ AD9830) lösningar men dom innehåller ju Sine Loo-Up Table D/A mm som vi inte behöver, vilket driver upp kostnaden för högt.
En SPI eller I2C extern oscillator som är ställbar i Hz området är det som önskas typ NCO (Numerical Controlled Oscillator)+ Phase Modulator eller något liknande.
Någons som har något tips??
Frekvenskravet är inte exakt men stegningen skall ligga i storleksordningen 1Hz med spannet typ +-0,25 Hz.
Med den K60 som går att köpa idag 50 MHz i periferiklocka (vid 100 MHz i systemklocka). Så kommer vi inte bättre än ca 10 Hz i upplösning och det räcker inte (divisor 1000 resp 1001 eller 999).
En extern PLL typ 74HC4046 kostar ca 3 SEK samt tillför lite jitter som inte är önskvärt.
Nu till frågan.
Utnyttjar vi K60 på fel sätt, dvs skall den klara av att göra detta men vi fattar bara inte hur?
Är det någon som har bra tips på lösning, som maximalt får kosta ca 4,50 SEK i 10k antal.
Har tittat en del på Analog Devices DDS (typ AD9830) lösningar men dom innehåller ju Sine Loo-Up Table D/A mm som vi inte behöver, vilket driver upp kostnaden för högt.
En SPI eller I2C extern oscillator som är ställbar i Hz området är det som önskas typ NCO (Numerical Controlled Oscillator)+ Phase Modulator eller något liknande.
Någons som har något tips??
Re: Hur fixa Hz upplösning vid 50kHz billigt?
Tja, jag känner inte till processorn i fråga men en "mjukvaru" dds kanske skulle kunna vara lösningen. Förutsatt att resurserna finss(lediga).
Ett annat alternativ: En CPLD med lämpligt program. Tveksamt om ni tjänar in det jämfört med färdig DDS om ni inte anväder det sedan tidigare.
Edit: Jesper har en trevlig lite dds i en avr som ni kanske kunde kolla lite på...
Edit2: En länk är ju alltid bra.. http://www.myplace.nu/avr/minidds/index.htm
Ett annat alternativ: En CPLD med lämpligt program. Tveksamt om ni tjänar in det jämfört med färdig DDS om ni inte anväder det sedan tidigare.
Edit: Jesper har en trevlig lite dds i en avr som ni kanske kunde kolla lite på...
Edit2: En länk är ju alltid bra.. http://www.myplace.nu/avr/minidds/index.htm
Re: Hur fixa Hz upplösning vid 50kHz billigt?
Jag förstår inte riktigt vad ni ska ha frekvensen till, men skulle det gå att att växla mellan divisor 1000 och 1001 i ett mönster som ger 49999 Hz i medel?
-
limpan4all
- Inlägg: 8505
- Blev medlem: 15 april 2006, 18:57:29
- Ort: Typ Nyköping
Re: Hur fixa Hz upplösning vid 50 kHz billigt?
Bra idéer men som vanligt så dyker det upp begränsningar.
Signalen skall användas såsom start av datainsamling och takthållning, och den måste kunna låsas frekvensmässigt till en extern signal som varierar i frekvens (rejäl översampling).
Faslåsningen sker mjukvarumässigt (dvs vi räknar ut vilken frekvensen skall vara) så det gäller bara att kunna variera frekvensen som styr det hela.
Att variera divisorn (för att få en divisor som i medelvärde är rätt) inför för mycket jitter i den önskade frekvensen samt minskar fördelarna med DMA betydligt (för att få 10ggr bättre noggrannhet så behöver man genomföra minst 10st divisorförändringar under samplingstiden) vilket ökar CPU belastningen motsvarande.
Jespers lösning är vacker men ger tyvärr för hög CPU belastning, vi skulle inte hinna med att göra något annat alls och det måste vi.
Dessutom får jag inte riktigt till matematiken...
Hur skulle frekvensupplösningen kunna vara konstant över hela frekvensområdet???
Med en 11,059200MHz kristall så är CPU klockans period tid 862ns dvs hur kan man vid t.ex 50kHz få mindre frekvenssteg än ca 66Hz?
Vid något över DC så stämmer det ju med 0,07Hz i steg men inte vid högre frekvenser.
Jag tar gärna emot kommentarer på det sista, ingen skulle hellre än jag vilja att jag har fel just där
Signalen skall användas såsom start av datainsamling och takthållning, och den måste kunna låsas frekvensmässigt till en extern signal som varierar i frekvens (rejäl översampling).
Faslåsningen sker mjukvarumässigt (dvs vi räknar ut vilken frekvensen skall vara) så det gäller bara att kunna variera frekvensen som styr det hela.
Att variera divisorn (för att få en divisor som i medelvärde är rätt) inför för mycket jitter i den önskade frekvensen samt minskar fördelarna med DMA betydligt (för att få 10ggr bättre noggrannhet så behöver man genomföra minst 10st divisorförändringar under samplingstiden) vilket ökar CPU belastningen motsvarande.
Jespers lösning är vacker men ger tyvärr för hög CPU belastning, vi skulle inte hinna med att göra något annat alls och det måste vi.
Dessutom får jag inte riktigt till matematiken...
Hur skulle frekvensupplösningen kunna vara konstant över hela frekvensområdet???
Med en 11,059200MHz kristall så är CPU klockans period tid 862ns dvs hur kan man vid t.ex 50kHz få mindre frekvenssteg än ca 66Hz?
Vid något över DC så stämmer det ju med 0,07Hz i steg men inte vid högre frekvenser.
Jag tar gärna emot kommentarer på det sista, ingen skulle hellre än jag vilja att jag har fel just där
Re: Hur fixa Hz upplösning vid 50 kHz billigt?
Ni skulle ju kunna lägga till en avr i så fall, borde kunna bli billigare än ett ddschip.
http://www.analog.com/static/imported-f ... 2-2-99.pdf
Sida 8 är värd en titt. Frekvensen ges av FOUT = (M (REFCLK)) /2^N, där N är fasackumulatorns längd och M är värdet som bestämmer frekvensen. Upplösningen på M(och därmed frekvensen) är inte beroende av referensfrekvensen, däremot kommer du ju få färre antal steg för att gå igenom fastabellen. Du få alltså färre punkter på kurvan ju högre utfrekvens du har. Så länge du håller dig inom fs/2 ska det inte vara några problem...
http://www.analog.com/static/imported-f ... 2-2-99.pdf
Sida 8 är värd en titt. Frekvensen ges av FOUT = (M (REFCLK)) /2^N, där N är fasackumulatorns längd och M är värdet som bestämmer frekvensen. Upplösningen på M(och därmed frekvensen) är inte beroende av referensfrekvensen, däremot kommer du ju få färre antal steg för att gå igenom fastabellen. Du få alltså färre punkter på kurvan ju högre utfrekvens du har. Så länge du håller dig inom fs/2 ska det inte vara några problem...
-
limpan4all
- Inlägg: 8505
- Blev medlem: 15 april 2006, 18:57:29
- Ort: Typ Nyköping
Re: Hur fixa Hz upplösning vid 50 kHz billigt?
Jo, jag har läst allt det där ett stort antal gånger men jag fattar fortfarande inte hur något kan ändra sig oftare än vad det finns flanker på referensklockan (även oftare än den upptransformerade referensklockan). I mitt fall för att få skillnaden mellan 49999 och 50000 Hz så skulle jag behöva en klockcykel på 0,4ns dvs en klocka på 2,5GHz vid ren klockning om det skall vara exakta skillnader i divisor. (Skillnaden mellan 50kHz och 49999 är 20us respektive 20,0004us eller 0,0004us=0,4ns).
Om man däremot kan tåla en hel del jitter på den genererade frekvensen/tiden så är det ju möjligt, men förändringarna på utgången måste väl ändå vara helt i synk med flankerna på referensklockan.
Om man däremot kan ändra både på frekvens multiplikatorn och nedräkningsmultipeln så kan man klara sig med betydligt lägre klockor.
Om man däremot kan tåla en hel del jitter på den genererade frekvensen/tiden så är det ju möjligt, men förändringarna på utgången måste väl ändå vara helt i synk med flankerna på referensklockan.
Om man däremot kan ändra både på frekvens multiplikatorn och nedräkningsmultipeln så kan man klara sig med betydligt lägre klockor.
Re: Hur fixa Hz upplösning vid 50 kHz billigt?
Fundera över figur 1.3. Det är alltså längden på hoppet i fas i varje tidsögonblick du styr. Dessa hopp(liksom utsignalen) är alltid synkrona med referensklockan. Upplösningen på hoppen ändras inte med ändrad utfrekvens, referensklockan delas aldrig(där finns det såklart undantag...) delas aldrig ner, det som ändras är hur fort "faspekaren" går runt. Ju längre hopp desto snabbare utfrekvens och desto färre samplingspunkter på vågen, men frekvensupplösningen är alltid samma.
Ett annat alternativ är ju fractional N PLL, men det tror jag inte blir billigare än en färdig DDS, och de har också spurioser...
Ett annat alternativ är ju fractional N PLL, men det tror jag inte blir billigare än en färdig DDS, och de har också spurioser...
-
limpan4all
- Inlägg: 8505
- Blev medlem: 15 april 2006, 18:57:29
- Ort: Typ Nyköping
Re: Hur fixa Hz upplösning vid 50 kHz billigt?
Jo, jag är med på allt det där men det innebär ju att den numeriska oscillatorn med efterföljande fasackumulator är oduglig för mitt bruk om man skulle försöka sig på en sådan lösning direkt. Det blir helt enkelt för mycket fasjitter.
Men om man skulle först göra en analog 50 kHz sen lågpassfiltrera duktigt. Sen via en komparator ta fram fyrkantvågen. Då kommer jittret i de individuella sampeltidsfelen som åtgår för att genererar sinusvågen kunna filtreras bort via ett externt LP-filter.
Och teoretiskt så räcker det ju med "bara 100kHz" för att kunna återskapa 50kHz, men min erfarenhet att en 16-faldig översampling är "bra" då spelar filtret inte så stor roll.
Med en ren mjukvarulösning av Jespers modell så skulle ca 25% av en 100Mhz Cortex M4 CPU tas i anspråk (7,2M instruktioner + overhead för taskswitchning).
Så mycket kan vi inte lägga på denna uppgift, så det får bli att göra en bra analog PLL istället
Men om man skulle först göra en analog 50 kHz sen lågpassfiltrera duktigt. Sen via en komparator ta fram fyrkantvågen. Då kommer jittret i de individuella sampeltidsfelen som åtgår för att genererar sinusvågen kunna filtreras bort via ett externt LP-filter.
Och teoretiskt så räcker det ju med "bara 100kHz" för att kunna återskapa 50kHz, men min erfarenhet att en 16-faldig översampling är "bra" då spelar filtret inte så stor roll.
Med en ren mjukvarulösning av Jespers modell så skulle ca 25% av en 100Mhz Cortex M4 CPU tas i anspråk (7,2M instruktioner + overhead för taskswitchning).
Så mycket kan vi inte lägga på denna uppgift, så det får bli att göra en bra analog PLL istället
Re: Hur fixa Hz upplösning vid 50 kHz billigt?
Jag vet inte hur enkelt och billigt det skulle vara att
få till ett varierbart bandpassfilter som går att styra
med 1Hz precision men i så fall kunde man ha ett sånt
och applicera på en bra brussignal. Borde inte det fungera?
få till ett varierbart bandpassfilter som går att styra
med 1Hz precision men i så fall kunde man ha ett sånt
och applicera på en bra brussignal. Borde inte det fungera?
Re: Hur fixa Hz upplösning vid 50 kHz billigt?
Jag kan inte låta bli att tänka på detta.
50kHz med en upplösning på 1Hz. Detta måste ge att "divisorn" måste minst vara 50.000 och grundklocka till detta måste då bli minst 50kHz*50kHz = 2,5GHz.
I mina öron låter det varken smått eller billigt!
50kHz med en upplösning på 1Hz. Detta måste ge att "divisorn" måste minst vara 50.000 och grundklocka till detta måste då bli minst 50kHz*50kHz = 2,5GHz.
I mina öron låter det varken smått eller billigt!
-
limpan4all
- Inlägg: 8505
- Blev medlem: 15 april 2006, 18:57:29
- Ort: Typ Nyköping
Re: Hur fixa Hz upplösning vid 50 kHz billigt?
Det går att åstadkomma med en 74HC4046 och en neddelare med divisorn 64 och sen låta CPU´n köra feedbackloopen.
Problemet är bara att 74HC4046 (som är skitbillig i och för sig) jittrar lite i frekvens.
Så det var därför jag slängde ur mig frågan om någon hade sett en bättre (heldigital) och ungefär lika billig lösning.
Det borde finnas en marknad för IC som har en NCO med SPI styrning och med stor variation på utfrekvensen samt har hög upplösning. Fast mina undersökningar har inte hittat någon sådan "karamell".
Jag vart själv rejält förvånad över att det krävdes så hög grundfrekvens som 2,5GHz för att kunna klara 1Hz i stegupplösning vid en trots allt så pass låg frekvens som 50kHz...
Innan jag började att räkna på det hela så pekade min intuition att 50MHz periferiklocka borde räcka mer än väl, där ser man hur fel man kan ha
Problemet är bara att 74HC4046 (som är skitbillig i och för sig) jittrar lite i frekvens.
Så det var därför jag slängde ur mig frågan om någon hade sett en bättre (heldigital) och ungefär lika billig lösning.
Det borde finnas en marknad för IC som har en NCO med SPI styrning och med stor variation på utfrekvensen samt har hög upplösning. Fast mina undersökningar har inte hittat någon sådan "karamell".
Jag vart själv rejält förvånad över att det krävdes så hög grundfrekvens som 2,5GHz för att kunna klara 1Hz i stegupplösning vid en trots allt så pass låg frekvens som 50kHz...
Innan jag började att räkna på det hela så pekade min intuition att 50MHz periferiklocka borde räcka mer än väl, där ser man hur fel man kan ha
Re: Hur fixa Hz upplösning vid 50 kHz billigt?
Har jag förstått det rätt om det är så att resultatet ska vara en centerfrekvens på 50 kHz och en deviation i 1 Hz-steg? Eller ska upplösningen räcka från 0-50 kHz?
Om det första så verkar den ha gott om timers, varför inte använda två? En basfrekvens något högre än 50 kHz och en snabbare räknare för deviationen?
En timer delad med säg 910 och en annan med 10... när den långsammare timern ger interrupt så nollställs den snabbare samt dess interrupt aktiveras och när den snabbare räknat färdigt deviationen så nollställs den långsammare, den snabbares interrupt stängs av, och vad som nu ska ske var 50 kHz ± n Hz (invertera en utsignal?) sker
Om det första så verkar den ha gott om timers, varför inte använda två? En basfrekvens något högre än 50 kHz och en snabbare räknare för deviationen?
En timer delad med säg 910 och en annan med 10... när den långsammare timern ger interrupt så nollställs den snabbare samt dess interrupt aktiveras och när den snabbare räknat färdigt deviationen så nollställs den långsammare, den snabbares interrupt stängs av, och vad som nu ska ske var 50 kHz ± n Hz (invertera en utsignal?) sker
Re: Hur fixa Hz upplösning vid 50 kHz billigt?
Jag förstod inte riktigt hur din metod skulle fungera, men jag ser inte hur det ska kunna gå i mjukvaran på en processor som går i 50MHz. 50M / 1000 = 50k, 50M / 1001 = 49,95k. Varje klockcykel tar alltså motsvarande 50Hz.
-
limpan4all
- Inlägg: 8505
- Blev medlem: 15 april 2006, 18:57:29
- Ort: Typ Nyköping
Re: Hur fixa Hz upplösning vid 50 kHz billigt?
Det behövliga frekvensområdet är 50kHz+-6kHz men granulariteten behöver kunna vara 1Hz inom området.
Och precis som tidigare har sagts så är det omöjligt att lösa med den valda CPU´n (eller alla andra rimliga CPU´er då det krävs klockfrekvenser uppåt 2,5GHz för att man bara skall se skillnad på klockticken).
Betänk att alla CPU´er som vi använder idag bara kan göra saker synkront med någon intern/extern klocka.
Då inser man att 1Hz skillnad upp eller ner från 50kHz skulle kräva 0,4ns i periodtid på CPU klockan.
Så oavsett om man använder svävning mellan frekvenser eller annan metod så kommer flankerna på klockan att hamna på minst 1/CPU-klockan från varandra.
Och precis som tidigare har sagts så är det omöjligt att lösa med den valda CPU´n (eller alla andra rimliga CPU´er då det krävs klockfrekvenser uppåt 2,5GHz för att man bara skall se skillnad på klockticken).
Betänk att alla CPU´er som vi använder idag bara kan göra saker synkront med någon intern/extern klocka.
Då inser man att 1Hz skillnad upp eller ner från 50kHz skulle kräva 0,4ns i periodtid på CPU klockan.
Så oavsett om man använder svävning mellan frekvenser eller annan metod så kommer flankerna på klockan att hamna på minst 1/CPU-klockan från varandra.
