Vintage DAC för RaspberryPi ljud (5 / 6 steg)
Steg 5: Bygga en 6 x klocka multiplikator
Som kallas "Klocka multiplikator med fördröjningslinje". Det är typ av enkelt. Fördröja ursprungliga klocksignalen av 1/6th period och göra lite logik med dessa fördröjd signaler resulterar i en ny klocka 6 gånger så snabb som ursprungliga.
Problem: Att hitta en väl definierad fördröjningslinje.
Lösning: prova! Jag hittade de 40098 CMOS växelriktare har runt 150 ns överföringsfördröjning. Detta är ganska nära den önskade 708ns/6 118ns (44100 prover med 16-bitars och 2 kanaler -> 44100 * 16 * 2 är 1.4112 MHz SCLK som är en ~ 708ns klocka period)
Lite mer eller mindre fördröjning fortfarande ger samma frekvens bara inte så smidigt, upp-och nedgångar kommer att ha olika längd.
Simulering
Från tidigare projekt vet jag Xilinx ISE verktyg, som är fritt tillgängliga att göra FPGA och CPLD programmering. De kan göra logik simulering med hjälp av Schematisk, VHDL eller Verilog design posten. Schematiskt kan vara bra för nybörjare men det är ganska smärtsamt att förändra saker i den. Ett hårdvarubeskrivande språk är mycket mer flexibel men naturligtvis mer att lära.
Anyway, simuleringen är bara för mig att se om idén fungerar och kontrollera vad logik skulle göra susen. Om du är intresserad, kan du hitta simulering projektet kopplat, packa upp den och öppna "ClockMult.xise" med ISE. När du gjort det så långt du kan bränna den till en CPLD, något sätt, du vill ha lite vintage kul! :)
Resultatet kan ses i bilderna. Klockan går igenom 40098 5 gånger (6 inverter oanvända), på varje utgång du se tidigare input inverterad och fördröjd. signalerna som kallas clk_Xp och clk_Xn för positiva och negativa (lite irriterande här eftersom alla utgångar av 40098 kallas p även om de växla... Varje utgång och den ursprungliga klockan köra genom en andra (snabb) inverter som är en 74hc04 så att varje fördröjd signal finns tillgänglig som positivt (icke inverterad) och negative(inverted).
Efter invertering plocka jag två signaler som kan vara AND'ed att bilda en enda puls med 1/6th längden av perioden som klocka.
Pulserna kan sedan OR'ed att tillsammans ge sista 6 x klockan.
OCH är faktiskt NAND eftersom jag fick 74hc00 ICs (det är en och med utgång inverterad) att göra pulsen negativt. För att få samma resultat dessa måste vara (N) AND'ed i stället för OR'ed. NAND eller och spelar ingen roll eftersom jag inte bryr mig om slutliga klockor polariteten, eller på laest jag kan helt enkelt Invertera det igen med 74hc00 eller 74hc04.
OK, fungerar detta verkligen i teorin ;-)
För att använda den nya 8.4672 MHz klockan den Kenwood PCB måste ändras lite. SM5807 körs med 16.9344 MHz, vilket är dubbelt så mycket som 6xCLK men databladet säger det också kör med 8.4..MHz när pin 3 (CKSL) är ansluten till "L" istället för "H". Ursprungliga klocksignalen måste naturligtvis tas bort från stift 1. Vår fina nya klocka matas sedan in i detta stift.
Låt oss få PCB igen och ändra pin 3 av SM5807 till GND och lägga till en Stiftlist för klockan.
Från DP3010 servicemanual det verkar bäst att ta bort 16.9344 kristallen och tillägga rubriken pin istället (pin inför stift 5 av 7402) då klockan kommer inverteras, spelar ingen roll, gör bara ändring enkelt. Stift 2 och 3 i SM5807 verka osammanhängande, så jag bara lägga till en bro från stift 3 i marken. Det borde göra det. Ganska enkelt.
plugg, plugg...
Och?
YYYYYYYYYYYYEEEEEEEEEESSSSSSSSSSSSS!!!
Verk, inga klick längre, cool.
Det var ju kul :-)
Inga nackdelar?
Bakbord är väl inte den mest tillförlitliga tech, touch här och där gör det hela gå galet. Kanske CPLD på en enkel lödde PCB är inte en så dålig idé trots allt.