Generera frekvenser med hög upplösning?
- Klas-Kenny
- Inlägg: 11861
- Blev medlem: 17 maj 2010, 19:06:14
- Ort: Växjö/Alvesta
Generera frekvenser med hög upplösning?
Hade uppfattningen att detta skulle vara lätt, men det var värre än väntat.
Skulle behöva generera en klocksignal på säg 50-100 kHz, med 6-7 siffrors upplösning. Tänkte först att det skulle vara enkelt med bara en timer i en µC, men det visade sig inte vara fallet. Det skulle kräva enormt hög klockfrekvens (behöver ju då kunna räkna till 10 000 000 på en hundratusendels sekund).
Men, man kan ju köpa en funktionsgenerator som gör jobbet, inklusive en hel massa annan funktionalitet, många vågformer etc. för hyfsat små pengar. Så jag kan inte riktigt tänka mig att det borde vara *så* svårt om man bara har rätt metod.
Så, "hur gör man"? Vad finns det för metoder för att åstadkomma detta?
Skulle behöva generera en klocksignal på säg 50-100 kHz, med 6-7 siffrors upplösning. Tänkte först att det skulle vara enkelt med bara en timer i en µC, men det visade sig inte vara fallet. Det skulle kräva enormt hög klockfrekvens (behöver ju då kunna räkna till 10 000 000 på en hundratusendels sekund).
Men, man kan ju köpa en funktionsgenerator som gör jobbet, inklusive en hel massa annan funktionalitet, många vågformer etc. för hyfsat små pengar. Så jag kan inte riktigt tänka mig att det borde vara *så* svårt om man bara har rätt metod.
Så, "hur gör man"? Vad finns det för metoder för att åstadkomma detta?
-
- Inlägg: 1048
- Blev medlem: 2 juli 2010, 23:04:07
Re: Generera frekvenser med hög upplösning?
Behöver du kunna variera frekvensen kontinuerligt? Eller engångsställa med valbar frekvens?
Kan man tolerera fasbrus, eller måste signalen vara ren?
Allting går, men det kan bli kompicerat. Man kan använda någon typ av frekvensblandare och summera två signaler.
Man kan behöva analoga filter. Man kan alternativt använda en faslåst loop, men då får man fasbrus.
Kan man tolerera fasbrus, eller måste signalen vara ren?
Allting går, men det kan bli kompicerat. Man kan använda någon typ av frekvensblandare och summera två signaler.
Man kan behöva analoga filter. Man kan alternativt använda en faslåst loop, men då får man fasbrus.
-
- Inlägg: 16074
- Blev medlem: 21 juni 2003, 21:26:56
- Ort: Väster om Lund (0,67 mSv)
- Klas-Kenny
- Inlägg: 11861
- Blev medlem: 17 maj 2010, 19:06:14
- Ort: Växjö/Alvesta
Re: Generera frekvenser med hög upplösning?
Behöver kunna variera "när som helst" så att säga. Och vill gärna ha en så digital lösning som möjligt då jag vill kunna mata in en önskad frekvens och få ut den (dock är den absoluta noggrannheten inte särskilt kritisk, bara man kan ställa i små steg).
Lite fasbrus *borde* inte vara något stort problem.
Tanken med blandare har funnits, men känns ändå inte helt självklart. Kan med timer i en µC generera en frekvens på sådär 10 Hz med rätt upplösning, att blanda den då med tex. 70kHz ger ju summa och skillnadsfrekvenser på 70 010 Hz och 69 990 Hz, inte helt enkelt att filtrera ut den önskade.
Även tanken med PLL har funnits, men frågan är "vad som händer" när man multiplicerar upp så långt som ifrån då de 10 Hz som enkelt kan genereras, uppåt 10 000 ggr?
Läste på lite om DDS nu, kollat på det innan men inte riktigt blivit klok på hur man kommer fram till förhållandet mellan utfrekvens och upplösning.
Men, vad jag förstod det som nu så kan man vid samtliga utfrekvenser få en upplösning om f/2^n där f är den inre klockfrekvensen och n är antalet bitar i "tuning word", stämmer det?
Då kräver det ju en hyggligt snabb DDS, men borde inte vara omöjligt. Kollade snabbt på AD9956 som borde kunna göra jobbet. Känns bara sanslöst stort och framför allt dyrt, för någonting så förhållandevis enkelt. Nästan löjligt att montera en krets som kan ge ut signaler (med samma höga upplösning) på flera hundra MHz när man bara behöver några tiotal kHz.
Lite fasbrus *borde* inte vara något stort problem.
Tanken med blandare har funnits, men känns ändå inte helt självklart. Kan med timer i en µC generera en frekvens på sådär 10 Hz med rätt upplösning, att blanda den då med tex. 70kHz ger ju summa och skillnadsfrekvenser på 70 010 Hz och 69 990 Hz, inte helt enkelt att filtrera ut den önskade.
Även tanken med PLL har funnits, men frågan är "vad som händer" när man multiplicerar upp så långt som ifrån då de 10 Hz som enkelt kan genereras, uppåt 10 000 ggr?
Läste på lite om DDS nu, kollat på det innan men inte riktigt blivit klok på hur man kommer fram till förhållandet mellan utfrekvens och upplösning.
Men, vad jag förstod det som nu så kan man vid samtliga utfrekvenser få en upplösning om f/2^n där f är den inre klockfrekvensen och n är antalet bitar i "tuning word", stämmer det?
Då kräver det ju en hyggligt snabb DDS, men borde inte vara omöjligt. Kollade snabbt på AD9956 som borde kunna göra jobbet. Känns bara sanslöst stort och framför allt dyrt, för någonting så förhållandevis enkelt. Nästan löjligt att montera en krets som kan ge ut signaler (med samma höga upplösning) på flera hundra MHz när man bara behöver några tiotal kHz.
- lillahuset
- Gått bort
- Inlägg: 13969
- Blev medlem: 3 juli 2008, 08:13:14
- Ort: Norrköping
Re: Generera frekvenser med hög upplösning?
Sju siffrors upplösning vid 100kHz är 0.01Hz.
Om du gör en DDS så räcker det med, om vi tänker oss att du vill ha 128 steg i sinusvågen vid 100kHz, med uppdatering med 12,8MHz vilket inte är speciellt märkvärdigt. Om man har en vettig processor. En Cortex M4 för en femtiolapp eller så. Så har du massor av kapacitet över för annat.
Om du gör en DDS så räcker det med, om vi tänker oss att du vill ha 128 steg i sinusvågen vid 100kHz, med uppdatering med 12,8MHz vilket inte är speciellt märkvärdigt. Om man har en vettig processor. En Cortex M4 för en femtiolapp eller så. Så har du massor av kapacitet över för annat.
- Klas-Kenny
- Inlägg: 11861
- Blev medlem: 17 maj 2010, 19:06:14
- Ort: Växjö/Alvesta
Re: Generera frekvenser med hög upplösning?
lillahuset: Förklara gärna närmare hur man tänker och räknar kring det där!
Om det går att göra med enbart en µC (tanken är att konstruktionen ska innehålla en 48MHz STM32-någonting) så vore det ju helt fantastiskt. Jag får bara inte ihop hur det ska gå till..
Och utsignalen ska inte ens vara sinusformad, bara en fyrkantig klocka.
Om det går att göra med enbart en µC (tanken är att konstruktionen ska innehålla en 48MHz STM32-någonting) så vore det ju helt fantastiskt. Jag får bara inte ihop hur det ska gå till..
Och utsignalen ska inte ens vara sinusformad, bara en fyrkantig klocka.
Re: Generera frekvenser med hög upplösning?
Det går att göra blandare som undertrycker ena sidbandet, och det är inte särskilt svårt.
Men alla blandare tillför lite brus.
Går det inte att klara av önskad upplösning med lite högre frekvens, säg 1000Hz?
Och ja, med Cortex M4 går det nog att lösa problemet nästan utan externa komponenter gissar jag.
Vågar dock inte garantera detta
Men alla blandare tillför lite brus.
Går det inte att klara av önskad upplösning med lite högre frekvens, säg 1000Hz?
Och ja, med Cortex M4 går det nog att lösa problemet nästan utan externa komponenter gissar jag.
Vågar dock inte garantera detta

Re: Generera frekvenser med hög upplösning?
Med risk för att jag missuppfattat frågan,
har lekt lite med Si570, den är grym,
https://www.silabs.com/Support%20Docume ... /si570.pdf
Den ligger lite högt i frekvens, men delar du med 256 blir det ju perfekt
Det finns nog någon annan liknande modell som passar dig bättre i frekvens.

har lekt lite med Si570, den är grym,
https://www.silabs.com/Support%20Docume ... /si570.pdf
Den ligger lite högt i frekvens, men delar du med 256 blir det ju perfekt

Det finns nog någon annan liknande modell som passar dig bättre i frekvens.
- Klas-Kenny
- Inlägg: 11861
- Blev medlem: 17 maj 2010, 19:06:14
- Ort: Växjö/Alvesta
Re: Generera frekvenser med hög upplösning?
Nu vaknade min hjärna vad gäller DDS. Där går det ju hur enkelt som helst, löses utan problem av tex. en AD9837.
Men, om det går med bara µC'n så tar jag gärna emot den lösningen. Vore ju tveklöst det bästa.
Men, om det går med bara µC'n så tar jag gärna emot den lösningen. Vore ju tveklöst det bästa.

Re: Generera frekvenser med hög upplösning?
AD9851 är ju ett "mindre" alternativ till 9956 du tittade på. Finns färdiga kort i olika varianter på EBAY om du ska labba.
Om du byter ut 30MHz kristallen som verkar sitta på de flesta kort till en med lägre frekvens så får du ner maximal utfrekvens och upplösning ökar så det matchar ditt område bättre. Med 30MHz kristallen så har du 40mHz upplösning. Men, det är en DDS med allt vad det innebär.
Om du byter ut 30MHz kristallen som verkar sitta på de flesta kort till en med lägre frekvens så får du ner maximal utfrekvens och upplösning ökar så det matchar ditt område bättre. Med 30MHz kristallen så har du 40mHz upplösning. Men, det är en DDS med allt vad det innebär.
- lillahuset
- Gått bort
- Inlägg: 13969
- Blev medlem: 3 juli 2008, 08:13:14
- Ort: Norrköping
Re: Generera frekvenser med hög upplösning?
Jaha, du vill bara ha en fyrkant ut. Hur mycket "jitter" kan du tolerera? Det blir det som avgör hur hög uppdateringsfrekvens du behöver. Säg att du kan tolerera 1% "jitter" vid 100kHz, då behöver du en uppdateringsfrekvens på 100 * 100kHz = 10MHz i en DDS.
Förmodligen är det bättre att bara använda en 32 bits timer. Med 48MHz klocka får du "wrap around" efter 2^32/48E6Hz~89s. Sedan finns det väl, om jag inte minns helt fel en prescaler som kan ge dig multiplar av ~0.011Hz. Inte riktigt vad du frågade efter men nästan. Sänk frekvensen till 42,95MHz så ligger du väldigt nära.
Vilken STM32 hade du tänkt dig? Luktar L lång väg.
Med reservation för tankefel.
Förmodligen är det bättre att bara använda en 32 bits timer. Med 48MHz klocka får du "wrap around" efter 2^32/48E6Hz~89s. Sedan finns det väl, om jag inte minns helt fel en prescaler som kan ge dig multiplar av ~0.011Hz. Inte riktigt vad du frågade efter men nästan. Sänk frekvensen till 42,95MHz så ligger du väldigt nära.
Vilken STM32 hade du tänkt dig? Luktar L lång väg.

Med reservation för tankefel.
Re: Generera frekvenser med hög upplösning?
STM32F4 har 32bitars timer, kör du chippet full och timer så har du 1/168000000 per steg ~ca 6ns
Så i teorin så borde du kunna ställa in din pwm mellan 12ns och upp till 25 sekunder med 6ns upplösning...
Edit: lillahuset var inne på samma lösning.
Edit2: vill du ha längre tider än 25 sekunder så går det att seriekoppla timers.
Edit3: kör 32 bitars timer utan prescaler och ändra top-värdet istället.
Så i teorin så borde du kunna ställa in din pwm mellan 12ns och upp till 25 sekunder med 6ns upplösning...
Edit: lillahuset var inne på samma lösning.
Edit2: vill du ha längre tider än 25 sekunder så går det att seriekoppla timers.
Edit3: kör 32 bitars timer utan prescaler och ändra top-värdet istället.
- lillahuset
- Gått bort
- Inlägg: 13969
- Blev medlem: 3 juli 2008, 08:13:14
- Ort: Norrköping
Re: Generera frekvenser med hög upplösning?
Visst är det underbart med en cykeltid på drygt 6ns.
PIC någon?
Edit: Knappt, inte drygt.

Edit: Knappt, inte drygt.
- Klas-Kenny
- Inlägg: 11861
- Blev medlem: 17 maj 2010, 19:06:14
- Ort: Växjö/Alvesta
Re: Generera frekvenser med hög upplösning?
Men alltså..
När jag kör en timer, så blir det väl effektivt att jag bara delar ner klockfrekvensen. Så om man då kör nämnda 168 MHz och vill ha ut 100 kHz får man ju dela med 1680 (räkna till 1679 eller vad det blir). Ändrar jag då ett steg i vad jag räknar till, säg att gå ifrån att dela med 1680 till 1681 så är det ju bara en frekvensändring på ~59 Hz.
Annat sätt att se på det, en frekvens på 100 kHz har en periodtid på 10 µs. Jag vill kunna justera 1/100 000 av detta, alltså nere på 100 ps. Då är 6 ns plötsligt inte så snabbt.
När jag kör en timer, så blir det väl effektivt att jag bara delar ner klockfrekvensen. Så om man då kör nämnda 168 MHz och vill ha ut 100 kHz får man ju dela med 1680 (räkna till 1679 eller vad det blir). Ändrar jag då ett steg i vad jag räknar till, säg att gå ifrån att dela med 1680 till 1681 så är det ju bara en frekvensändring på ~59 Hz.
Annat sätt att se på det, en frekvens på 100 kHz har en periodtid på 10 µs. Jag vill kunna justera 1/100 000 av detta, alltså nere på 100 ps. Då är 6 ns plötsligt inte så snabbt.
