Fråga:
Hur skulle jag gå tillväga för att få en liten oscillator igång vid exakt 31891,269,116 µHz?
renegadeds
2016-08-29 13:12:14 UTC
view on stackexchange narkive permalink

Jag vill bygga en RTC-modul för Arduino som körs på Mars-tid.Omvandlingsfaktorn är 1.0274912510 Jordens sekunder till 1 Mars sekund.

Medan jag har lyckats åstadkomma detta programmatiskt med en <2 andra upplösning (vilket inte är exakt ideal, föredrar jag ungefär 300 ms noggrannhet)använder fixpunktsmatematik på en Arduino Uno ansluten till en vanlig RTC-modul, jag undrar om det skulle vara möjligt att ha någon form av lågspänningsoscillator som körs på exakt 31891,269,116 µHz (31,891269116 kHz) som mer eller mindre skulle kunna utbytasmed en standardklockkristall på 32 kHz (dock skulle jag vara öppen för andra idéer så länge de inte är alltför dyra.)

Några idéer hur detta kan vara möjligt?Alternativt kan någon typ av timer som går av en gång var 1.0274912510 sekund också vara acceptabel.

Vilken noggrannhet krävs i delar per miljard?
Varför den konstiga enheten (µHz?) Det är 31,891 kHz.Så du letar antagligen efter en 32kHz klockkristall.
@JRE Jag kunde istället ha uttryckt det som 31,891269116kHz, men när du behöver en viss mängd noggrannhet, är det mer vettigt för mig att skriva det i den måttenhet som krävs.
@pjc50 20 ppm skulle förmodligen vara ett acceptabelt belopp.
Din fråga är alldeles för bred.Du måste lägga till begränsningar som kostnad, storlek och strömförbrukning.Beskriv din ansökan och den miljö där den måste fungera.Har du tillgång till externa referenser som GPS eller kraftledning?En exakt lösning är inte möjlig, så du måste sätta några verkliga gränser för felen - både kortvariga (jitter) och långsiktiga (drift) - som du kan tolerera.Redigera denna information i din fråga i stället för att lämna den i kommentarer.
Börja med dina krav.Du har specificerat extraordinär precision.Varför?På andra håll säger du att du kan göra vad du vill med en Arduino.Jag är ledsen att berätta för dig detta, men du skojar dig själv, om du inte använder något som en rubidium- eller cesiumklocka som referens.Så berätta vad du gör och vad dina prestationskrav är.Det är funktionella krav, inte din härledda prestanda.Om du försöker producera en klocka som är låst för en annan, säg så och låt oss veta precis vad dina krav (och toleranser) är.
Du frågar i grund och botten "Jag vill ha en linjal på 31891.269 116 mm. Hur bygger jag en?"Föreställ dig en metallbit som är mer än 104 fot lång, där den sista tumen måste vara exakt till sex decimaler.Och då säger du "Okej, det måste vara cirka 104 meter långt - men jag måste veta variationen till sex decimaler."De två frågorna är _komplett_ olika - nu: vilken är det?
Du försöker lösa din brist på programmering med mycket dyr och anpassad hårdvara.Du kan enkelt implementera en 256-bitars konvertering av flytande punkter i en Arduino eller vilken precision du vill.
@pipe Det är absolut inte vad jag försöker göra.Jag försöker att inte behöva använda en Arduino alls.
@JohnBurger Jag tror att jag tydligt angav att det båda är i den ursprungliga frågan.Jag förstår vad jag frågade, varför jag frågade om det ens var möjligt och i så fall hur jag skulle kunna göra eller få en sådan sak.
OK, så nu vet vi att du vill bygga en Martian RTC.Nu.Hur exakt kräver du att det är?1 sekund per dag?1 sekund per år?Och vilken upplösning behöver du?1 sekund?1 msek?1 usec?Observera till exempel att din Arduino-lösning inte är mer exakt än din Arduino-klocka, och jag garanterar att det är mycket sämre än 1 sek / år.
Jag tycker att det här är ett utmärkt exempel på varför inkludering av mer information på förhand gör att människor kan peka dig i rätt riktning.Brian Drummonds svar är nu det bästa, eller åtminstone billigt och genomförbart för en amatör.Det är också ett bra exempel på varför du måste vara försiktig när du anger precision och noggrannhet - det finns många parametrar som är potentiellt relevanta för en klocka.Vi har inte ens diskuterat temperaturkompensering eller jitter ännu.
@WhatRoughBeast Absolut.Min nuvarande lösning har en upplösning på 1-2 sekunder och en drift eller cirka 4 sekunder per dag vilket är mindre än idealiskt.De flesta RTC: er som är beroende av kvartskristaller har <2s drift per dag men med en nästan perfekt 1s upplösning.Jag försöker bara vara lika exakt som någon annan kvartsklocka.
Och _ det är därför jag frågade.Din ursprungliga fråga ställde en sak, och dina kommentarer till andra frågor innebar något helt annat.Därav kommentaren ... "Mindre än ideal"?_Ingenting_ är perfekt - och "lika exakt som någon annan kvartsklocka" är ett * mycket * specifikt svar, tack!
@pjc50 Min ursäkt, första gången jag publicerade här.Kommer att ha det i åtanke för framtiden.Jag håller med, Brians lösning är den bästa.Tack för din hjälp.
Har du någonsin letat efter precisionen hos en vanlig 32 kHz klockkristall?
"Omvandlingsfaktorn är 1.0274912510 Jordens sekunder till 1 Mars sekund."- förväxlar du skillnaden i dagslängd mellan Mars och jorden med längden på en sekund?[Längden på en soldag på Mars] (https://en.wikipedia.org/wiki/Timekeeping_on_Mars) är 88 775 s, eller 1.02749 jorddagar (86 400 s).På den andra definieras den andra av den strålning som en cesiumatom avger, och till och med tar tidsutvidgning för att ta hänsyn till, behöver du hastigheter på cirka 0,23 c för att få skillnaden 2,7%.
Mars andra är exakt lika lång som jorden andra och Proxima Centauri andra också.Själva poängen för en måttenhet är att vara densamma.Tips: Jorddagar och år är inte heller "runda" värden i sekunder, vi fixar detta med varvsekunder.
Jag förstår hur någon som inte är astrofysiker kan tro att jag har fel, men det gör jag inte.På Mars förlängs den andra till 1.0274912510 Jordsekunder för att upprätthålla 24 timmars tid.Om Mars andra är 1.0274912510 Jordsekunder, slutar du med 86400 av dem per sol.Du kan lära dig mer här om du är intresserad av att förstå hur Mars tidtagning fungerar: http://www.giss.nasa.gov/tools/mars24/help/algorithm.html
Vid specificering av klockor för elektronik inkluderar vi vanligtvis toleranser.Detta skulle ha undvikit mycket av den debatt som hänt här.Om du frågade efter en klocka som gick 31.891269116 +/- 0.006kHz, hade det varit lättare att svara på den här frågan (vilket skulle vara klockan du bad om med ett 20 ppm-fel i båda riktningarna).Med detta sagt, om du faktiskt ville ha mer precision än så, kan du överväga att få en GPS för Arduino och göra matematik för att konvertera från UTC till martian datum / tid.Jag tror att GPS är bra för 40 ppm!
Nio svar:
Brian Drummond
2016-08-29 16:29:37 UTC
view on stackexchange narkive permalink

Använd en 32768 kHz kristall som alla andra, men dela istället med 33669, vilket ger -5.08 ppm fel. (Du kan ta bort det genom att trimma lastkapacitansen om du vill).

Det är inte exakt men för en Mars-klocka kommer det att vara lika bra som vilken jordklocka som helst. Att ignorera problemen med temperaturkompensation för Mars omgivningstemperaturer, de flesta klockkristaller finns bara tillgängliga för jordanvändning, såvida du inte kan hitta Mars-leverantörer ...

Jag skulle använda counter-timer kringutrustning i en MSP430 för att göra uppdelningen och (förutsatt att du kör en vanlig kvartsmekanisk klockrörelse) genererar bipolära 30ms pulser på dess utgångsstift varje sekund, ungefärligt efter de ursprungliga tiderna som du kan mäta i ett oscilloskop.

Arduino eller liknande kommer att göra jobbet, men MSP kan sättas i sömn mellan pulserna och konsumerar under 1uA med LF-oscillatorn igång. Här är en exempeldesign med källkod och PCB för en klocka - bara jordtid hittills, men det kan antagligen fixas genom att ändra en konstant.

Tack!Baserat på andra synpunkter tycker jag att det här ser ut som det mest lönsamma alternativet utan att behöva gräva in i atomklockorna så jag har valt det som lösningen på min fråga.Jag uppskattar också designen du har länkat.
Var medveten om att de betydande siffror som du gav * inte * kommer att uppfyllas med en standard RTC-kristall.5 ppm-felet från matematiken kommer sannolikt att vara mindre än kristalltoleransen.
@user2943160 om du har en bra referens kan du slå 1 ppm eller så med inledande trimning - det kommer att vara några ppm drift över några år och (konstigt för att ställa gaffelkristaller) en parabolisk variation med temperaturen.Alla billiga kvartsklockor i mitt hus går i olika takt, de trimmades förmodligen aldrig på fabriken och är inte mycket bättre än en temperaturkompenserad pendelklocka.
+1 bara för "Marsleverantörer".
hobbs
2016-08-29 22:23:12 UTC
view on stackexchange narkive permalink

Du kan göra bättre än Brian Drummonds förslag. Även om det kan vara sant att din oscillator är den största källan till fel i systemet, finns det ingen anledning att lägga till ytterligare systematiska fel när det är enkelt att inte göra det.

Ställ in ditt tidsintervall på 33668 fästingar, starta en räknaren vid 0, och vid varje timeravbrott, öka räknaren med 6754.

Om räknaren efter inkrementering är> = 8105, subtraherar du 8105 och ställer in tidsintervallet för följande sekund till 33669 kryssar.

Annars lämnar du räknaren i fred och ställer in tidsintervallet för följande sekund till 33668.

Detta ger dig (förutsatt en perfekt 32,768 kHz kristall) ett genomsnittligt intervall på

  (33668 + 6754/8105) / 32768 ~ = 1.0274912510006  

sekunder (mindre än ett del per biljonfel i förhållande till 1.0274912510), istället av 1.0274963378906 sekunder (nästan 5 del per miljon fel). Detta innebär att klockans långsiktiga noggrannhet verkligen beror på oscillatorns noggrannhet. felet på grund av matematiken kommer att bidra med väsentligt mindre än ett felfel per år. Även om längden på någon singel sekund kommer att ha ett relativt fel upp till 25 ppm, försvinner felet under längre och längre medelintervaller.

Detta är Bresenhams algoritm tillämpades vid tidtagning och fraktionen 6754/8105 hittades enligt följande:

32768 * 1.027491251 = 33668.833312768

Den exakta fortsatta fraktionen för 33668.833312768 är [33668; 1, 4, 1, 1349, 1, 7].

Att släppa sista termen ger ungefär 33668 + 6754/8105, som har alla delar som passar snyggt i 16 bitar.

Dmitry Grigoryev
2016-08-29 13:27:06 UTC
view on stackexchange narkive permalink

En oscillator som körs på exakt 31,891,269,116 µhz eller en timer med en period på 1,0274912510 sekunder kräver en precision på minst \ $ 10 ^ {- 10} \ $.Det bästa är att använda en atomklocka som kan vara så exakt som \ $ 10 ^ {- 14} \ $.

Jag hoppades kunna undvika dyr hårdvara om möjligt.Just nu uppnår jag detta med en vanlig RTC-modul och en Arduino, och jag kan göra 1000ms till 1027.4912510ms konvertering, men jag har bara ungefär en 1-2 sekunders upplösning vilket betyder att den är självkorrigering men inte är väldigt exakt.
@renegadeds bör du göra det klart i din fråga vilken precision som är acceptabelt.Och ge ett visst sammanhang: en enda [arduino] -tagg skulle vara ett bra tips om att du inte bygger ett högprecisionslaboratorium.
Noteras, jag har uppdaterat frågan och lagt till Arduino-taggen.
Spehro Pefhany
2016-08-29 13:40:27 UTC
view on stackexchange narkive permalink

Det kan göras med en rubidium eller annan atomreferensklocka vid 10 MHz, kanske en PLL för att ge (säg) 100 MHz, och räknas sedan med en ~ 36 bitars fasackumulator för att ge 0,001Hz upplösning.Det senare kan göras med en liten FPGA.

Du kan läsa om DDS-metoder (Digital Digital Synthesis).Det finns marker som gör DDS men kanske inte med så stor bitbredd.

Rubidium-klockmoduler finns på överskottsmarknaden eller från tillverkare som Microsemi.

WhatRoughBeast
2016-08-29 17:05:24 UTC
view on stackexchange narkive permalink

Du definierar inte "dyrt", så det här är något av ett skott i mörkret.

Börja med en kommersiell (inklusive eBay) 10 MHz generator. Rubidium för val, men oavsett vilken noggrannhet du kan få sätter din prestanda.

Bygg nu en programmerbar delare på 28 bitar. Vid 10 MHz kan du komma undan med 74HC CMOS-logik, men du måste använda en snabb bärkonfiguration. Utgången utlöser också en delning med två flip-flop som ger bit 29.

Avdelaren kan köras i förhållandet 10.274.912 eller 10.274.913, beroende på tillståndet för bit 29. För en perfekt 10 MHz-ingång effektiv utgångsperiod för bit 28 blir då 1.02749125 sekunder, vilket är ungefär exakt till 1 ppb, eller cirka 30 ms / år. En mindre exakt ingång kommer naturligtvis att producera en mindre exakt utgång.

Med 74HC161s som standard kan du göra detta med 8 IC: er, och om du är försiktig kan du kanske använda en standard prototypning strip board, även om du vill vara mycket försiktig med att förstärka marksystemet. Perfboard skulle vara billigare, mer kompakt och mer hållbart, men ledningarna skulle vara mindre praktiska, eftersom du skulle behöva lödda anslutningarna. Du kan sedan potta den i något som RTV av elektronikgrad (INTE RTV: n du får i hårdvaruaffären), för en slutlig modulstorlek i intervallet 2 x 2 x 1/2 tum, räknat inte oscillatorn.

EDIT

Observera att din prestandastandard, kopplad till "vanliga" RTC, faktiskt ligger inom 1 sek / dag noggrannhet, vilket är 30 gånger sämre än detta tillvägagångssätt. Så, först och främst, kan du ta bort bit 29-steget eller alternativt dela dina 10 MHz till 5 MHz och använda ett förhållande på 5,137,456. Denna lägre klockfrekvens vid räknarna möjliggör en enklare bärstruktur, vilket undviker den snabba bärningen som skulle vara nödvändig vid 10 MHz. Din noggrannhet är nu i storleksordningen 60 ms / år för en perfekt klocka.

FURTHER EDIT

En snabb titt på eBay visar ett stort antal 10 MHz OCXOs för mindre än 20 dollar.Dessa har vanligtvis en stabilitet på 1 ppb eller bättre, med 0,2 ppb en ganska vanlig specifikation.Skaffa en av dessa så ska du vara i god form.Du vill låna en frekvens / periodmätare med ganska hög upplösning för att bestämma den faktiska utfrekvensen och justera sedan delningsförhållandet så att det matchar.

Överens, och även om OCXO inte ingår i energibudgeten är och kan en TCXO fortfarande förbättra en klockkristall.
Tony Stewart Sunnyskyguy EE75
2016-08-29 17:43:12 UTC
view on stackexchange narkive permalink

"Stratum 1" -ur är härledda från \ $ 10 ^ {- 11} \ $ SC-skurna kristaller som används i ~ $ 250 VC-OCXO (t.ex. Vectron) såvida du inte köper begagnade. Sedan med inställning för synkronisering med globala klockor som WWV, VLF, GPS 10MHz eller 1pps klocka som i sin tur synkroniseras till \ $ 10 ^ {- 14} \ $ atomklockor via "låst till 3 satelliter." Då kan du kalibrera till \ $ 10 ^ {- 11} \ $ -fel.

För att skapa en ny f, till exempel din frekvens, krävs en förskjutning på 2,07% av 1pps så det går inte att göra genom att ställa in en klockkristall vid \ $ 10 ^ {- 6} \ $ stabilitet.

En "fraktion N synth" -typ PLL används för att härleda alla förhållanden mellan en referens såsom 10 MHz från vissa GPS-enheter.

Om en TCXO-oscillator har en stabilitet på 1 ppm, kan den bara ställas in lite mer än detta och inte 2,07% offset från 1 pps eller 1.0274912510 Hz, så en PLL med ett eller flera N-chip är ett sätt att göra detta med en VC-OCXO eller mekanisk kappjusterad OCXO.

tillagd - För att generera 1pps på MARs-tiden är delningsförhållandet 26,337.44856 med 5 heltal siffror och en rest på 5 siffror.

  • Om du kan ställa in Xtal till 0,01 ppm är den bara stabil vanligtvis till 1 ppm om inte en mikrougn görs vid ~ 30'C eftersom Tempco vanligtvis är noll runt kroppstemperaturen för vissa XTALS, inte nödvändigtvis MEM. Om inte Vcc och temp är kontanta inom 0,1 ° C är allt som försöker korrigera restfel bättre än 0,01 ppm omöjligt, till och med 0,1 ppm är kortvarigt och långvarigt åldrande kommer att vara minst 1 ppm per år.

  • Således, i teorin, om du hade en kalibrerad 1ppm-klocka från en GPS för att ställa in 1ppm jordtid, skulle det vara omöjligt att förvänta sig bättre noggrannhetskorrigering för återstående.

  • Restfelvärde för avdelare per sekund. är 44856/100000 (+26,337)

  • Konvertering av 44856 till binär = 1010111100111000
  • Detta behöver en resträknare för att växla mellan / 44856 och 45857

  • Vi gör denna restdelning genom att trunka det binära restnumret till 8 bitar och sedan rotera bitarna så att MSB blir LSB.

  • 10101111 blir 11110101

  • Varje sekund en resträknare från 11110101 och där varje "n" bitposition = 1 är räknevärdet i binärt n ^ 2 därdelnings-heltal-förhållandet är 45857 istället för 44856. Eftersom LSB = 1 betyder det att var 2: e räkning växlar fram till 101 sekunder, sedan delas valet för nästa 1-räkningsantal.Detta upprepas för att välja vilken avdelare som ska användas för nästa sekund, sedan öka pekaren tills pekaren når slutet och vänta på nästa 1pps jordklocka.

  • Denna process upprepas för hela räkningen av denna roterade binära rest eller 10101111> 11110101 = 245 sekunder så att en fraktionerad N-synth-delare på 1pps Mars tid skapas varje sekundkorrigeringar gjordes var 245 sekunders cykel för att hålla sig i tid.på lång sikt.

-Kanske är delningsförhållandet för flytande punkt för klockan lättare.

Chris Stratton
2016-08-29 23:23:57 UTC
view on stackexchange narkive permalink

Du kan lösa detta trivialt i programvara utan att ändra hårdvaran alls (även om du kanske vill ha en mer stabil referensfrekvens), genom att använda binära fraktioner, och du kan göra det på ett sätt som ger dig millisekundupplösning och kan enkelt göras tillräckligt fria från kumulativa omvandlingsfel så att du kan se den grundläggande noggrannheten för vilken källa du kan referera till, inklusive en atomklocka.

Vad du skulle göra är att ändra din timeravbrott för att ackumuleras till en mycket ett brett register och lägg till vid varje avbrott ett ganska långt värde som är så exakt som en bild av förhållandet mellan en jord millisekund och en "Mars millisekund" som du önskar.

Låt oss säga för argumentets skull att du ville ha en 32-bitars upplösning för konverteringen. Du kan använda en 64-bitars ackumulator, med de nedre 32 bitarna som representerar bråk. Vad du skulle göra är att räkna ut det lämpliga värdet, något mindre än 2 ^ 32, vilket representerar omvandlingsfaktorn. Varje gång din Earth-millisekund avbryter bränder lägger du till detta värde i ackumulatorn. Varje gång du vill fråga klockan returnerar du de övre 32 bitarna, vilket är antalet hela Mars millisekunder som gått, medan de nedre 32 bitarna bara bevaras internt för att undvika avrundningsfel.

Använda lång binär fraktioner som detta gör att du kan utföra en konvertering med så mycket noggrannhet som du önskar. 32 bitar är nästan säkert för långa för fraktionen, medan 32 bitar för hela millisekunderna kan vara för korta, men du kan justera efter önskemål.

Förresten, denna teknik för att ackumuleras i ett långt register men bara rapportera några av de viktigaste bitarna är hur direkt digital syntes kan producera extremt hög frekvensupplösning.

Du kan också överväga att göra en del av konverteringen genom att ändra förhållandet mellan delaren från systemklockan 8 eller 16 MHz till millisekundavbrottet och flytta den närmare intervallet för ett "Mars millisekund".Speciellt om du vill ha något mer exakt än en billig kristall kanske du har att göra med en vanlig 10 MHz-referens som är disciplinerad av en GPS eller mer direkt av en atomklocka, så du kan ersätta den för den vanliga AVR 8/16 MHz klockkällan och räkna omdelningsförhållanden i enlighet med detta.

Henry Crun
2018-07-17 14:09:01 UTC
view on stackexchange narkive permalink

Direkt digital syntes (DDS) eller numerisk styrd oscillator är ett ganska enkelt sätt att få önskad upplösningsnivå för en utfrekvens utan beroende av klockfrekvensen.

I detta tillvägagångssätt har du en högupplösningsfasackumulator.Varje slinga runt dig lägger till en fasökning som också har fin upplösning.Utgången är ackumulatorns högsta bit.

När du använder den för att ge en kvadratvåg kan kanterna bara ändras med inmatningsklockan (eller mjukvaruslingningshastigheten), så kantskärningarna skakar från var det ska vara, men över tiden finns det inget kumulativt fel - du kangör upplösningen så hög som du vill.

Du kan göra det i mjukvara ganska enkelt (t.ex. på AVR), och vissa micros har nu NCO-hårdvara. http://ww1.microchip.com/downloads/en/AppNotes/90003131A.pdf En liten PIC kan göra detta i hårdvara med 20 bitars (1 ppm) upplösning, från en 32 kHz xtal eller från en exakt 10 MHz ugn.

D Duck
2018-07-17 23:31:06 UTC
view on stackexchange narkive permalink

Tänk på att få en ugnsanpassad kvartskristall som körs på en heltalsmultipel av önskad frekvens.De kostar inte mycket mer än en standardfrekvens.Webbsökning "anpassad kvartskristall"



Denna fråga och svar översattes automatiskt från det engelska språket.Det ursprungliga innehållet finns tillgängligt på stackexchange, vilket vi tackar för cc by-sa 3.0-licensen som det distribueras under.
Loading...