Elektriska konstruktioner

Från Wikibooks

Inledning[redigera]

Denna bok är tänkt att innehålla en massa elektriska konstruktioner som jag tänkt ut. Jag delar ut dom för jag gillar konceptet "Copyleft" och för att det är kul att ha dom samlade i en och samma bok.

KAP, Analog Processor[redigera]

Visar samtliga moduler i KAP-projektet

Detta är ett samlingsnamn för alla analoga projekt jag tänkt ut.

Översta bilden innehåller ett stimm moduler med dom reglage jag planerat använda, det finns även en liten "bruksanvisning".

Alla moduler tillhör egentligen inte KAP utan jag listar även några andra som också är analoga men får speciella lådor.

Jag avser ta fram PCB för alla dom moduler som listas även om det finns PCB redan för några få.

Bifogar också en preliminär plan hur jag avser bygga KAP-modulernas lådor.

Lådförslag[redigera]

Visar hur KAP-modulernas lådor är tänkta att byggas

Såhär skulle man kunna skapa alla lådor till KAP-projektet, det är lite B men ger en fingervisning. .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

KRM, RMS-meter[redigera]

Ett försök att bygga en RMS-mätare

Detta projekt genererar en utsignal motsvarande effektivvärdet (eller värmevärdet) hos en signal

Två stycken analoga kvadrerare tror jag krävs för att bygga en RMS-mätare, den ena sitter på ingången och kvadrerar insignalen, den andra sitter efter integratorn och i återkopplingsslingan hos en inverterande OP för att på så sätt generera analog roten ur som låter lite långsökt att det är möjligt men jag ska senare visa att det faktiskt går. Vad man måste komma ihåg är dock att insignalen måste vara negativ som är lite svårt att tänka sig ty roten ur minus ett är ju liksom imaginärt.

Projektet avser kopiera definitionen av RMS enligt

vilket jag brukar skriva som

för den formen är enklare, tycker jag.

OTA, LM13700[redigera]

Ni kan egentligen själva läsa databladet men jag tänkte här försöka förmedla vad jag tror mig ha förstått.

Först tror jag mig förstå följande formel (utan lijäriseringsdiodström, Id)

där Iabc är diffstegets totala biasström och tvåan kommer av att respektive trissa har Iabc/2 i biasström, för normala temperaturer resulterar detta uttryck i

dvs säg 20mS/mA/V där mA är vad kretsen klarar (typiskt max 2mA).

Detta kan användas som förstärkning med Iabc som modulerade ingång både vad gäller LF AM-modulering och DC-styrd förstärkning.

OTA, linjäriseringsdioder[redigera]

Genom att nyttja linjäriseringsdioderna fås denna formel

där Is i princip är ström in i plusingången och Id är linjäriseringsströmmarna via de inbyggda dioderna.

Det är lite oklart varför systemet linjäriseras av dioderna men jag tror att de, trots att de är en CM-störning som egentligen inte borde påverka diffsteget alls, lyfter arbetsströmmen hos transistorerna och alla vet då att I/V-diagrammet är "rakare", samtidigt tror jag ungefär följande gäller på den inverterande sidan

dvs Is kan göras större om Id finns där, nollan har att göra med att bias hos diffsteget är Iabc/2 för båda trissorna, den positiva sidan kan således höjas +Iabc/2 så att all ström går i den trissan MEN då går inget i andra trissan ty allt är drivet av en strömgenerator kallad Iabc.

Analog kvadrerare[redigera]

Visar hur själva kvadreringen går till

En analog kvadrerare kan skapas medels en så kallad OTA (Operational Transconductance Amplifier) och jag nyttjar en fascinerande enkel krets som heter LM13700.

Jag har formellt sett inte riktigt fått ordning på min kvadrerare för jag får den att bara fungera för positiva insignaler men jag har lite börjat tro att det inte spelar nån roll när jag numera helvågslikriktar insignalen för en helvågslikriktad sinussignal har ett effektivvärde som är exakt lika stort som för en ren sinussignal, skillnaden är bara att helvågssignalen är strikt positiv, typ.

Ekvation 1.4 visar hur OTA rent formelmässigt beter sig och jag repeterar den här:

Ekvationen kommer av att input till säg plus-trissan i diffsteget är strömmässigt

denna ström går sedan genom basmotståndet mellan bas och backe som ger en inspänning enligt

Alla trissor har sen vad man kallar för transkonduktans som förstärker spänning till ström enligt

där Ic är ena trissans kollektorström, sen är

och

så man får att

där Is alltså är en skillnadsström ström vilket ger

och

dvs

detta gör att

så att

Jag tycker LM13700 är en snygg och enkel krets, den är inte så enkel att förstå eller att driva men den är kraftfull och mycket enkelt uppbyggd medels ett diffpar, en strömgenerator (Iabc) och fyra strömspeglar, mycket enklare kan det inte bli! Sen att jag inte fattar att använda den optoimalt är en annan sak.

Analog roten ur[redigera]

Analog roten ur

Analog roten ur sker mha en kvadrerare i återkopplingsslingan hos en OP, teorin för det är denna:

Om vi först antar att Uin är positiv så får vi

Om R1=R2 gäller sedan att

där

så att

dvs

där FUo^2 onekligen är större än Uo dvs vi får

eller

Instrumentförstärkare[redigera]

Difförstärkare

En vanlig OP i difförstärkarkoppling kan tecknas

och den kan det för att potentialen vid plus-ingången är

söm, pga att spänningsskillnaden är noll över en opamps ingångar när den jobbar normalt, gör så att spänningen på minus-ingången är U+ också, strömmen in från U2 blir då

som rinner "rätt igenom" varvid utspänningen blir

Om vi nu sätter in utttrycket för U+ enligt ovan får vi

ur detta får man

Om vi nu tittar på uttrycket för Iin ovan och jag repeterar

så ser vi att denna ingångsström är beroende av U+ dvs spänningen på plus-ingången, med andra ord så är resistansen in på minus-ingången beroende av signalen på plusingången, genom att till exempel nyttja buffer på minusingången (eller båda) får man sen en så kallad instrumentförstärkare där impedanserna in på opampen är samma för plusingången som för miniusingången.

Normalt spelar detta ingen roll för difförstärkaren drivs normalt av typ opampar i sig men det finns situationer såsom t.ex utsignalen från en OTA (enbart ström) där samma ingångsresistans för dom båda benen är nödvändig.

Jag har för övrigt precis lärt mig räkna på opampar på ovanstående klockrena sätt, den som lärt mig heter Lars Molin (Analog elektronik)

Fyrkvadrantsmultiplikation[redigera]

Jag råkade plötsligt, efter att ha gett upp och släppt projektet i typ ett halvår, komma på ett trick som gör att man faktiskt kan multiplicera två analoga tal i alla fyra kvadranterna.

Det ursprungliga problemet var att Iabc är strikt större än noll och visst, jag tänkte man kunde biasera för AC men fattade inte hur jag skulle kunna typ dra bort den biten sen.

Resultatet blev en variant som jag faktiskt tror fungerar men BARA för sinus!

Vilket är lika kasst som för vanliga billiga DVM:er :D

Så jag var aldrig riktigt nöjd med den lösningen men ville köra den ändå "ifall" det skulle funka.

Men så plötsligt en dag blev jag att vilja multiplicera två analoga tal "igen" och såg på grejerna med "nya" ögon, såhär enkelt är det faktiskt, om man biaserar Iabc med Ib (och avser pendla +/-Ib) blir utgångsströmmen Io

där den sista termen måste dras bort för att det skall bli regelrätt multiplikation och eftersom det är en produkt av Is och Ib så gör man det inte helt enkelt.

Men jag kom på ett egentligen rätt själklart trick men ändå, använd en till OTA :D

Så nu leder jag Is till en andra OTA som jag låter multiplicera med Ib sen kör jag in

med

(där k sätts av 2/Idq) i en difförstärkare, instrumentförstärkare faktiskt pga att spänning bildas över ingångsmotstånden till backe ty OTA levererar bara ström samtidigt som ingångsresistansen hos den negativa ingången hos en vanlig difförstärkare är boroende av nivån hos den positiva ingången.

Ut får man då istället för Io

Vilket är vad jag vill ha.

Jag har sedan tom nyttjat att Id ju dividerar så jag har på skoj infört en "Z-ingång" för division av X*Y där RMS-mätaren normalt kopplar ihop X och Y för att skapa en kvadrering av insignalen men jag har gjort det så att man även kan ha separata ingångar.

Jag kör med en halv mA som quiscent Id (Idq), detta innebär att k=4000, kom på att k ju ingår i den andra OTA'n också så k är mycket enkel att ta hänsyn till OCH i fallet Z-styrning behöver den inte ens vara konstant.

Jag är osäker på hur jag vill ha det med ranget på Z-ingången, spänningsmässigt är den naturligtvis linjär (+/-5V) och genererar 0,5mA+/-0,5mA men divisionsmässigt är området [2;0] för jag kan bara dubbla strömmen uppåt (OTA tål max 1mA), mer önskvärt vore 0,32mA+0,68mA/-0,32mA vilket ger [3;0] men spänningsstyrningen blir förhållandemässigt (+3/-1)V typ.

Och då blir spänningsstyrningen inte symmetriskt samtidigt som detta kan ställas in efter PCB-produktion.

KFC, Frequency Counter[redigera]

Analog frekvensräknare

Detta projekt genererar, helt analogt, en utsignal motsvarande frekvensen hos insignalen. Projektet nyttjar en TTL-shaper som klockar en D-vippa som i sin tur släpper på en 1MHz klocka under en tid motsvarandes insignalens periodtid, dessa klockpulser får sedan de sex dekadräknarna att räkna, varje räknat värde motsvarar alltså 1us (1/1MHz), så ju längre periodtiden hos insignalen är desto fler klockpulser a' 1us hinner räknas.

På detta sätt kan man således mäta insignalens periodtid i multiplar av 1us (där alltså 1us blir maximal noggrannhet), ju fler us som hinner räknas desto större blir det digitala värdet för insignalen samtidigt som jag nyttjar tre dekader åt gången.

Så genom att nyttja R2R-stege och D/A-omvandla räknarvärdena så kan man skapa sig en analog signal som varierar från typ 5mV för 1us till 5V för 1ms, för frekvensavläsning måste sedan denna signal inverteras (f=1/T) vilket jag gör medels OTA.

Det är tyvärr inte slut där för signalen innehåller hela tre dekader med information som inte analoga instrument utan vidare kan hantera så jag nyttjar även en Lin2Log-omvandlare för att få plats med hela signalspannet i ett analogt panelinstrument.

Time-to-Frequency Converter[redigera]

Analog tid till frekvensomvandlare
Oscilloskåpbild på hur en tidssignal modell trekant ger 1/T

Konverteringen uföres av ovanstående OTA, den tar alltså den linjära insignalen motsvarandes hur lång periodtid insignalen har och inverterar den så att tid blir frekvens, jag har än så länge bara fått detta att fungera preliminärt, OTA'n ger en intressant 1/T-signal ut men jag är osäker på hur jag i slutändan skall kunna nyttja den till nåt hyfsat noggrant.

Jag nyttjar alltså ekvation 1.4 där jag fryser Is och Iabc och istället modulerar Id vilket enligt formeln innebär att följande gäller

Jag nyttjar sen Is=12V/10M=1,2uA och Iabc~22V/22k=1mA (där AMR för Iabc=2mA), dessa värden ger sedan Io=2,4mA^2/Id, framförallt ser man att när man fixerar Is och Iabc och bara modulerar Id så får man typ division med Id vilket gör att man kan invertera en signal motsvarandes till exempel en linjär ramp för periodtid (som i mitt fall går från 5mV till 5V) genom att modulera Id, i mitt fall kan man alltså skriva om 1.4 enligt

Där ett lastmotstånd på utgången sätter spänningen, jag nyttjar en specialare men tror den kan liknas vid 2k8 dvs då har jag 2k8*2,4mA=6,7V vilket är rätt nära det jag uppmätt dvs 6,4V.

Det har varit spännande och utmanande att försöka begripa och knåpa ihop det här, just nu är jag troende, men inte vetandes, att detta faktiskt kan fungera dock tror jag att fler än 3 dekader i praktiken är omöjligt att realisera och det är det för att "toppen"/max ändå är en linjär variant av minimum dvs kvoten max/min är vad som styr frekvensomvandlingsspannet, sen är OTA begränsad till max +/-15V matningsspänning med typ standard 2V från rail dvs mycket mer än 13V kan man inte få ut vilket i fallet tre dekader gör att minspänning är 13mV och en dekad till dvs 1,3mV är tuff att hantera (pga av bland annat brus).

Lin-to-Log Converter[redigera]

Lin till log omvandlare

Eftersom tre dekader ([1;1k]Hz respektive [1k;1M]Hz) avses bearbetas åt gången och avsett analogt visarinstrument inte kan visa mer än två dekader så måste signalen logaritmeras, jag håller precis på och ska bygga en testkrets för detta

Ut från första OP får man mha en återkopplad diod i inverterande koppling

diodströmmen Id kan sen skrivas som

där R1 är motståndet in på minusingången, detta gör att följande gäller

detta kan sedan skrivas om som

eller

här kan vi sätta in våra värden för Is är runt 50fA och vi väljer 10k som R1 för 0,1mA vid 1V in, vilket ger

Om vi istället skriver

för att vi har att göra med inverterande OP, på dess utgång får vi då

vid ett gain på minus 1, här är det dock tydligt att +0,56V måste dras bort från utgången och när OP är inverterande adderar man helt enkelt +0,56V på ingången (för då blir det minus :) ), vilket ger

detta ger Uo(2), delas sedan Uo(2) med 60mV (eller förstärks 16,7ggr) så får man

Observera att i Uo(3)-fallet får ingen invertering ske.

KMT, Module of Temperature[redigera]

Jag får inte riktigt ordning på min temperaturmätare (KMT) har jag förstått efter att precis läst ett TI-dokument jag fick av en snubbe på EF.

Det visar sig nämligen att jag nyttjar POSITIV temperaturkoefficient medans TI nyttjar negativ.

En sak är lite extra intressant för beloppet hos min temperaturkoefficient (ungefär 2mV/C@1mA) stämmer alldeles utmärkt med dokumentet från Texas Instrument.

Diodekvationsanalys[redigera]

Jag har bängstirrat på diodekvationen enligt

som för Vf>>26mV övergår i

och får den till

som kan skrivas om enligt

Ty Id och alla andra parametrar är konstanta.

Detta innebär för mig således en POSITIV temperaturkoefficient men alla vet ju att komplementära transistorslutsteg rusar i ström när dom blivit för varma.

Temperatorkoefficienten kommer av:

detta kan skrivas om som

dvs vid Id=1mA och experimentellt fasställd mättnadsström (Is) för 1N4148 på 48fA, kan man skriva

som alltså innebär en positiv temperaturkoeffficient :(

KDM, Distorsion Meter[redigera]

Jag har konstruerat en distorsionsmätare, den nyttjar 5st VSF-filter medels opampar.

Konstruktionen är primitiv för man rattar in grundtonen (f1), sätter nivån till fullt utslag på panelinstrument sen rattar man i tur och ordning in f2-f5 och får en linjär avläsning vad gäller repektive övertonshalt.

Jag har också byggt in så att man kan se en linjär summa av f1-f5 men jag är tveksam om THD räknas ut så.

Jag blev då att klura på hur mycket en sinus kan dista, borde max vara en fyrkant tänkte jag men hur mycket dist innehåller en fyrkant?

Distorsionsanalys[redigera]

Här måste man ta till Fourierserie enligt

detta kan skrivas om på ett enklare sätt enligt

där alpha bara är vinkelftekvensen gånger tid.

En fyrkant är legendariskt en funktion med enbart udda övertoner, bn-koefficienterna kan räknas ut enligt

denna enkla integral blir för f(t)=1 inom aktuellt intervall

eller

eller

dvs

här ser man att för jämna n så blir uttrycket noll medans det för udda n blir

där man alltså ser att första övertonshalten (n=3) är 33% av grundtonen (n=1) vilket jag har designat för i min KDM, tycker sen att nyttjande av wt hela tiden ger krångliga integreringar när allt ändå bara handlar om en vinkel (wt) som varierar, tänkte således prova om jag kan göra om ovanstående beräknngar medels alpha.

eller

eller

som blir pssso :)

Mycket enklare, slapp två led!

KRA, tube RIAA/MIC Amplifier[redigera]

Detta är mitt RIAA steg medels rör.

Förstärkaren har hitintills varit luftbyggd och denna senaste variant är det också, dock ligger PCB i planerna.

Tycker PCB vad gäller rörförstärkare suger rent allmänt men när det gäller så små strömmar och spänningar som hos försteg så kan det eventuellt funka.

Slutsteg komer jag dock alltid bygga i luften ty PCB är kasst på höga strömmar och höga spänningar.

Nåväl, jag är på G med två KRA som alltså luftbyggs.

Vad är nu problemet?

Jo, signalnivån är ynkligt liten och man riskerar lätt brum.

Så hur ska man göra då?

Brumanalys[redigera]

Jag kan inte säga att jag vet men jag har idèer modell Maxwell's ekvationer där två av dom fyra eventuellt kan skrivas:

som också kallas för Faraday's induktionslag, andra ekvationen blir

som jag tror kallas Ampere's lag, jag tror sen att Ifri typ är DC vilket vi alltså kan strunta i vad gäller brumaanalys, sen kan man förenkla ekvationerna på ett nästan barnsligt sätt (som dock är giltigt om B och D är homogena genom hela ytan S):

Med andra ord induceras en spänning i en slinga (SB) om det finns en tidsvarierande magnetisk flödestäthet (B) i närheten samtidigt som det induceras en ström i en ledares area (SD) om det finns en tidvarierande elektrisk flödestäthet (D) i närheten.

Detta kan eventuellt ses som om man har en slinga och den terminerar i ett motstånd typ ingångsmotståndet till röret och motståndet är av lite storlek, då blir den inducerade strömmen inte så stor och bara 1 gäller.

Om slingan terminerar i ett litet motstånd så borde dock även 2 behöva komma med i beräkningarna ty det kan då gå ström.

D är förresten epsilon gånger E där E är den elektriska intensiteten med enheten V/m, intensitet när det gäller "saker" per sträcka har jag hittat på, utöver x/m som intensitet kallar jag x/m^2 som täthet och x/m^3 som densitet (även om densitet lite är reserverat för kilo/m^3)

KCA, tube Computer Amplifier[redigera]

Detta rörförsteg har flera features där en är regelrätt förstärkning och volymjustering av Line-signal (Line Out), en annan är medels Ge-transistorer i Klass B leverera 2,5W i 4 Ohm och en tredje är en optionell hörlursutgång som när man pluggar i 6,3mm telepropp bryter signalen till PA.

Line Out bryts dock inte av hörlur och det har att göra med att jag vill ha endast rörljud ut till Line Out, både hörlursutgången och PA är drivna av halvledare.

Förlustberäkningar[redigera]

Jag kör alltså mer eller mindre ren Klas B, om matningen A och utsignalen B inledningsvis är ren DC gäller

sen gäller

med andra ord är förlusteffekten

således är mineffekt teoretiskt noll när A=B, för maxeffekt får vi derivera map B enligt

vilket ger

vilket inte är så konstigt för utspänningen (B) är då hälften av matningsspänningen (A), sätter vi in detta fås

Hitintills har vi alltså räknat på DC, nu tänker vi istället halvvågslikritad sinus med effektivvärdet

då borde formeln bli

Kan detta stämma?

I så fall får jag med A=6V och RL=4 Ohm en maximal förlust på 0,56W.

Maximal DC-ström blir A/RL, denna delas dock i två pga HW och vi får 0,75A.

AC127 tål bara 0,34W men jag lurar på om musik verkligen ger "kontinuerlig" effektförlust dvs 0,34W kan kanske ändå funka?

KSM, System of Mobile communication[redigera]

Bärvågsdetektor för GSM
Bärvågsdetektor för GSM

Detta är ett lekprojekt som bara har en gnutta allvar i sig för jag har nämligen en GSM-telefon (Ericsson T28s) som har dålig täckning där jag bor och önskar bygga en (liten) Yagi-antenn till den.

Men för att kunna bygga en antenn så behöver jag veta vilket band den går på, den sägs gå på två band dvs 900MHz eller 1800MHz.

Observera att bygger man en antenn för fel frekvens så kommer den mesta effekten studsa tillbaka till telefonen varvid dess RF-förstärkare kan gå sönder.

Så det gäller att veta vilket band telefonen går på.

Eftersom jag inte fick tag i Comviq så har jag tvingats bygga ett par bärvågsdetektorer för GSM.

Detta har varit kul men svaren från byggena har varit lite luddiga, första bygget var transistoriserat och såg ut som ett riktigt skatbo men det funkade i princip.

Dock bara i princip då jag blev att inse att våglängderna är så korta att längre komponentben blir till antenner!

Så jag har nu byggt en bärvågsdetektor där jag "deadbuggade" en LM324 (för RF finns bara före dioden, därefter finns bara DC var min tanke).

Denna fungerar faktiskt.

Visst, går man tillräckligt nära den avstämda 1800MHz-antennen med telefonen så lyser den dioden också men på lite avstånd så är 900Hz-antennen känsligast så jag tror med ganska stor sannolikhet att min telefon går på 900MHz.

Antennberäkningar[redigera]

Jag bifogar schemat på mitt senaste bygge och ger er lite beräkningsunderlag där jag alltså nyttjar en koaxialkabel med 50 Ohms impedans (Z) och en kapacitans (C) per meter på ungefär 100pF, först ut är definitionen på impedans

resonansfrekvensen hos en parallellresonanskrets är sedan

Kombinerar man dessa formler får man en mycket enkel formel enligt

som liksom är som "vanligt", i det här fallet kan man således styra resonansfrekvensen genom att klippa koax ty man vet ju vad man har för kapacitans per meter, sen ska själva antennerna vara lambda/4 långa ty sprötantenner, vilket innebär en längd (L) på

Det är alltså såhär jag gjort.

Rymdvinkelberäkningar[redigera]

En rymdvinkel kan beräknas modell en segmentarea på en sfär, denna kan tecknas i sfäriska koordinater

där R ansetts som 1 i detta fallet, då får man

som kan integreras upp till

där alfa är vinkeln uppifrån och till konen, detta ger

vilket är lika med

som är lika med

direktiviteten hos typ en parabol blir då

om nu alfa är 90 grader dvs half-space så fås att direktiviten blir 8, vilket är dubbla full-space, fast mer korrekt tecknar man rymdvinkeln

och man får att direktiviteten kan tecknas

där alltså direktiviteten blir normerad modell 1 för rundstrålande (alfa=pi), notera sedan att "konens" öppningsvinkel är 2 alfa.

KPA, tube Power Amplifier[redigera]

Jag håller på och tar fram ett eget rörslutsteg för jag har tröttnad på att planka D.T.N Williamson's konstruktion och vill ta fram en egen även om den lär bli sämre.

Jag bygger även rörförsteg för datorbruk och skivspelarbruk och jag har bestämt mig för att alltid nyttja Edison Bias i samtliga mina egna rörkonstruktioner.

Det är en kul finess som Edison upptäckte, problemet var då bara att han inte visste vad han skulle ha strömmen till när han försökte skärma av glödtråden från sotning av lamporna, samtidigt som han de facto uppfann rördioden som dock uppfans hela typ 20 år senare av Ian Flemming om jag inte minns fel.

Så hade Edison fattat vad han upptäckte så hade vi legat 20 år längre fram i utvecklingen.

Med andra ord är Edison Bias en rätt intressant finess för då behöver man inget katodmotstånd (där imperfektioner hos kondensatorerer annars förstärks) och kan sätta en negativ galler-arbetspunkt bara med hjälp av ett ovanligt högt gallermotstånd (storleksordningen 10M+).

Jag har lusläst en utprintning av Wireless World med avseende på Williamson's design från 1947, den konstuktionen tycket jag är världsbäst men den uppdaterade konstrukionen från 1949 tycker jag haltar på två plan där det ena är nåt tjafs om att ett direkt-upphettat liktarrör ger en "power-surge" vilket jag tycker är sofistikerat dynga för den gör ingenting så länge den är kall...

Det andra tjafset handlar om att splittern skall ha matchade motstånd.

Detta anser jag också är sofistikerat dynga för utgångsimpedansen på anoden är "mycket" högre än på katoden dvs när man belastar splittern så blir utspänningarna till nästa rör olika även om det handlar om knappt 10% i detta fall.

Men utspänningarna netto blir olika, det hjälper alltså inte med matchade motstånd i splittern.

Jag är rätt övertygat om att det inte är Williamson som "klantat sig" utan "The New Design" från 1949 är nåt Wireless World hittat på.

Jag känner för övrigt till vissa rörkonstruktörer som faktiskt lagt till ett motstånd i katodkretsen, som dom kallat "Build-out", pga detta "problem".

Härledning av avvikelse i nivå[redigera]

Balansberäkning för rör-splitter

Förstärkningen upp till anoden kan skrivas (utan belastning)

och förstärkningen ner till katoden kan skrivas

om Rk=Ra är dessa alltså exakt lika, men om vi betänker utgångsimpedanserna och en belastning på 470k kan vi teckna

med Rb får vi sen en förstärkning hos katoden på

Nu är

och för att få Avk=Ava så måste

dvs

där

och

vilket med my~20 och rp~7k ger Za=44,9k och Zk=2k6 och eftersom

tydligen gäller så blir Rb ungefär 42k.

Först då drivs nästa rör/slutrör med fullständig balans, några matchade motstånd hos splittern funkar alltså inte.

KSU, Supply Unit[redigera]

Spänningsagg

Denna enhet är tänkt att ta in glättad +/-25Vp som regleras till knappt +/-(0-25V) vid antingen 0,1A eller 1A, det är inget avancerat bygge men jag har sett prov på att det fungerar.

Jag bifogar två bilder där den ena bilden är schemat på konstruktionen och den andra bilden är ett förslag till hur man konfigurerar en frontpanel för enheten.

Enheten nyttjar en Vbe-multiplikator för att justera utspänningen, enheten funkar för dom flesta spänningar och strömmar men man måste speciellt tänka på att konfigurera om Vbe-multiplikatorn då samt även storleken på kylflänsarna.

Vissa motståndsvärden måste också ses över.

Beräkningar plus reglageförslag[redigera]

KSU, reglageförslag

Uträkningarna är ganska enkla.

Jag tänker alltså köra +/-25VDC in samtidigt som precis alla mina kondingar ska tåla 35V om inget annat anges.

Jag har alltså en del marginal i detta fallet.

Det gäller att mata KSU med en så stabil spänning som möjligt för annars sjunker maximal utspänning motsvarande.

Om man har ett drivande agg som ger 25Vp men ripplar säg 5Vpp så kan man inte få ut mer än 20V nånstans.

Så max stabil utspänning från KSU är inkomande peakspänning minus dess rippel.

Jag är osäker på detta för om utspänningen är xV så måste väl basspänningen vara x+2Vbe samtidigt som kollektor-bas:motståndet alltid måste försörja ström till transistorn, med andra ord borde max utspänning vara Vin-2Vbe, eller?

Vbe-multiplikatorn kan man specificera som

detsamma gäller R10/R4 som med R9/R3=100k/2k7 ger 27V dvs man kommer få ett litet dödläge på potten uppåt.

R5/R6 är sedan satt så att motståndet mellan kollektor och bas (Rcb) blir

och det är här jag tror mig inse att det alltid finns ett tapp på 2Vbe i mitt fall.

Hade förresten tänkt ha en switch som gör så att det mäts VCC/VSS omväxlande men det behövs faktiskt inte för det räcker att typ mäta VCC då KSU är ett balanserat nätagg, dessutom ser man på Current Limit-dioderna (CL+/CL-) om endera sida går ner.

Panelinstrumentet är tänkt att vara ett 100uA-instrument, mätningen sätts med hjälp av en resistor och panelinstrumentets inre resistans (Ri) enligt

Om man får för sig att ändra inspänning och uttagen ström bör man tänka på det rippel som uppstår på ingången pga uttagen ström gör som gör så att inspänningens rippelkrav peak-to-peak motsvarar peakspänningen minus tiiltänkt utspänning (minst 2Vbe lägre), formeln är enkel och klassisk

som med 6,6mF, 1A och dubbel nätfrekvens (10ms) ger ett pp-rippel på 1,5V, alltså måste inspänningen vara minst 1,5V högre än utspänningen, kylflänsarna beräknas sedan enligt (och detta är lite slarvigt)

ty kisel-chip tål 150C och jag har dragit av för en rumstemperatur på 25C men jag har struntat i termiska resistanser vad gäller övergången från chip till hölje och från hölje till fläns som egentligen tillkommer men om man tar min formel och drar av säg 25% så är man safe i alla praktiska lägen.

Spänning- och strömmätning medels panelinstrument[redigera]

Spänning- och strömmätning för splittat agg

För spänningsmätning enligt bild har vi att

där Ivu är strömmen för maximalt utslag, i mitt fall ynka 100uA, Ri är sedan preliminärt 1k och jag önskar mäta 25V varvid R2 blir 249k, Ivu är alltså mycket mindre än den ström jag önskar mäta på 2A så man kan ignorera det blödande av 100uA som annars sker vid maximal spänning (25V), då kan vi koncentrera oss på strömdelningen medels shunt (R1) istället, denna blir

så genom att använda ett mycket litet R1 i jämförelse med Ri så kan man mäta hög ström (Iout), för Iout på 2A får vi då att R1 ska vara 50mOhm.

Tekniska specifikationer[redigera]

Uin: 2-35V, designad för 25V

Iout: 0-3A, designad för 1A maximalt (begränsat till 3A pga valda dioder)

Uout: principiellt allt från noll till Uin minus 1,4V

|Uo_min|<30mV (open circuit, alltså före last)

I_Limit: begränsar utströmmen till vad man vill men jag har satt 0,1A repektive 1A (motstånd mellan de båda I_RES sätter den högre strömmen)

Kontinerlig strömgräns mha pot går inte riktigt att få pga låga motståndsvärden.

KJA, JFET Amplifier[redigera]

Denna förstärkare gjordes först för Power JFETs (LU1014A) men sen konstruerade jag om den för MOS (2SK175 som jag numera ändrat till 2SK135) istället pga tillgänglighet, förstärkaren är alltså en push-pull MOS-förstärkare medels utgångstrafo.

Trafoberäkningar[redigera]

Lämplig last för 2SK135 är 2-3Ohm per transistor, jag har valt ett varvtalsförhållande på

detta taget i kvadrat gånger 4 Ohm's last ger 11,1Ohm d-d (drain-to-drain) som delat med 4 ger lasten 2,8Ohm/trissa.

En idé har varit att pressa trissorna till det yttersta i Klass A och med max drainförlust på 100W och max drainström på 8A (typ) så kan man lägga sig på 4A vid arbetspunkten och då kan man inte köra med mer än 25Vds för 100W.

25V/8A=3Ohm vilket är den last/trissa man helst inte ska översiga (frågan är dock vad 8A är för typ av ström).

Med min d-d:last får man sedan att totala primärinduktansen bör vara

dvs L=0,5H.

Resten är svårt att räkna på men av min rörgud Williamson har jag fått lära mig att övre gränsfrekvensen bör sättas vid 60kHz och i rörfallet används 2rp+"nominal load" dvs i det här fallet en seriekoppling av 2rp och 11,1Ohm där rp är mycket hög ty MOS-trissor är mer som strömgeneratorer än spänningsgeneratorer.

Man kan alltså inte räkna ut nån "Leakage Inductance"-krav i detta fallet utan det blir nog mest ett krav på kapacitansen hos primärlindningen modell

dvs C-kravet blir 240nF men här vet jag inte vad jag gör, det enda jag tror mig veta är att den reflekterade impedansen är Zdd dvs 11,1Ohm och eftersom rp är så stort så blir det den som driver primärens kapacitans, men en lindning är knappast på 240nF så det är nog läckage som styr ändå modell

då är frågan vad rp är, om det är 100k ger det det löjliga läckagekravet 0,5H, men om rp är stort hur ska det då bli nån spänning kvar? Är det kanske som så att strömgeneratorerna (MOS) kan konverteras till theveninska ekvivalenter med Zdd som serieresistans? I så fall blir läckagekravet

dvs LL=29uH, detta låter i alla fall rimligare samtidigt som den induktansen är mycket låg.

Om man har en kärna med en area på 23x30mm^2=6,9E-4m^2 samt känner till att max flödestäthet (B) är typiskt 1,6T för järnet, då kan man räkna ut hur många varv man måste ha för att kärnan inte ska gå i mättning.

Vi sa ju 25V som matningsspänning, i push-pull över hela primären blir då spänningen 25Vp (samma över varje primärhalva), rms är lite mindre vid sinus men vi vill även kunna klippa gott också så låt rms vara 25V.

Vi har också sagt att lägsta frekvensen ska vara 3,3Hz, nu kan vi räkna ut vilket minimum antal varv vi behöver för att kärnan inte ska gå i mättning enligt

vilket ger ett minimum antal totala (2Np) primärvarv som 1500 varv, och jag kör alltså 500 varv, min minfrekvens för att undvika mättning är alltså 10Hz.

Nu är den här trafon inte tänkt att sitta i en HiFi-förstärkare utan i en gitarrförstärkare så kravet är inte samma.

KTD_S, Transformer Device_Switched[redigera]

LC-filter med belastning

Strömmen kan tecknas

KVL ger

sätts strömdefinitionen in fås

som kan skrivas om enligt

eller

här kan man eventuellt köra ett trick genom att gå över till komplexa tal enligt

man kan eventuellt det pga att en komplex signal kan tecknas

vars deriering innebär nerflyttning av jw, nu kan vi teckna

och eventuellt tolka det som det relativa rippel vi får, beloppsmässigt kan detta skrivas om som

där w0 är

här ser man att ett litet R (dvs stor belastning) bara förbättrar dämpningen (förmodligen för att spolar jobbar med ström), för stora R tar första termen över och dämpningen tycks mest bero på hur liten w0 är i jämförelse med faktiskt switchfrekvens (w). Ligger w0 10ggr under w så är dämpningen minst 40dB (100ggr) oavsett lastresistans (R). Med lite switchfrekvens (w) så behöver man således inte så stor spole (jag har tänkt köra 100uH ihop med 100uF som då ger ett "w0" på 1600Hz vilket är närmare 40ggr mindre än min switchfrekvens (65kHz) så dämpningen blir typiskt 64dB). Man ser också att när lastresistansen blir hög och närmar sig wL (40 Ohm) så blir dämpningen sämre.

Jag tittar här egentligen bara på grundtonen dvs switchfrekvensen men switchfrekvensen är en PWM-signal modell fyrkantsignal som bara har övertoner och w/w0 kommer göra så att dessa undertrycks ännu mer. Man kan titta på ett roligt något trivialt fall där man vill filtrera en helvågslikriktad signal från till exempel en rörlikriktare, nu är grundtonen 100Hz men säg att vi lägger w0 på "10Hz", då får vi med 33uF och 8H en dämpning på runt 40dB, dvs 100Hz är dämpad 100ggr. Om ripplet före filtret är på 5V (säger vi) så förs alltså bara 50mV vidare in i förstärkaren (som typ alltid har fler RC-länkar), tror man kallar denna typ av filter för Pi-filter.

KPU, Processing Unit[redigera]

Jag har redan byggt en primiv processor, den kunde bara göra JMP (Motorola MC6809 mnemonics) men detta betyder faktiskt väldigt mycket till exempel att bussarna fungerar och att sättandet av nytt PC-värde också fungerar, sen fick jag väl inga brancher att fungera men jag kommer jobba på det.

Ovan är min första CPU som vi kan kalla MkI, den gjordes mha en fantastisk krets från Xilinx som kallas CPLD, microkodningen för instruktionerna blev dock att läggas utanför kärnan för CPLD innehåller inte ROM, nyttjade totalt 6st 27C512 EPROM för microkodningen.

Nu har jag emellertid skapat ett nytt program medels grind-CAD (ECS) för min CPU MkII som byggs mha en Xilinx Spartan 3 FPGA istället där jag då kan implementera microkodningen i själva kapseln så jag behöver inga externa minnen vilket också gör att hastigheten går upp, har fått bekräftelse på att min design kan gå på 100MHz (läs 100ggr snabbare än MC6809).

Jag nyttjar alltså samma struktur och storlek på bussarna som MC6809 och alla instruktioner har samma namn (mnemonics).

I dagarna har jag blivit att lura på den begränsning vad gäller talrepresentation som enbart 8 bitar medger (max +/-128) och hittat på att jag ju kan låta processorn jobba med exponenter istället, på det sättet kan jag (mha tvåkomplement) representera så stora/små tal som

Eftersom processorn bara kan svara med max 8 bitar så kan man inte direkt realisera 10^38 men om man logaritmerar och istället bara tittar på exponenten så blir den ju max 38 i fallet 10-potens och detta kan en linjär byte spotta ur sig i form av att den bara representerar exponenten.

Min tanke mer i detalj är att man bara stoppar in 2-potensen av 10-potenstalet (som ju är det mer naturliga och intuitivt förståbart för oss männinskor) men för att kunna göra det måste man konvertera 10-potenstalet fast jag har råkat komma på att det faktiskt är ganska enkelt för man kan skriva

där bin är den linjära representationen i processaorn, detta kan man skriva om som

Lite intuitivt kan man se det som att 10-potensen måste vara mindre än 2-potensen ty större bas, det tal (bin) man stoppar in i processorn är således

där log 2 är mycket nära 0,3 vilket ger att bin blir typ 3,3ggr större, det värde som sen processorn spottar ut måste också konverteras fast då multiplicerar man bara bin-värdet med log2 (och får då ett mindre tal).

Så konverteringen för in/ut blev, efter mycket tänkande, enklare än jag trodde.

Sen har jag råkat komma på nåt roligt, eftersom stora delar av min idé handlar om att genom att bara låta processorn hantera potenser så kan man utföra MUL/DIV väldigt enkelt modell att MUL bara är regelrätt addition och DIV är subtraktion (där det alltså funkar med tvåkomplement ty exponenten i sig är linjär).

Detta visste jag dock och är som sagt den stora meningen med allt men vad jag inte riktigt hade fattat är att man faktiskt man multiplicera och dividera mha skiftning!

För ett vanligt binärt tal gäller att vänsterskift innebär en multiplikation med två och högerskift en division med två (båda per skiftad bit), i mitt fall gäller dock inte detta ty processorn sysslar ju med en binär exponent, dvs skiftandet kommer innebära

där n är antalet skiftningar dvs för en skiftning till vänster multipliceras talet med 4, för två skiftningar multipliceras talet med 16.

Eftersom jag måste realisera MUL/DIV innan jag ens har dom instruktionerna så är jag beroende av att kunna skifta istället, 1/4 när det gäller högerskift är emellertid mycket nära log två, en skiftning till höger ger alltså 0,25 istället och

är alltså bara -12% fel.

Jag tror jag börjar få praktisk koll på detta.

Upplösning[redigera]

Jag tror jag har fel ovan, eftersom och jag repeterar

så är tio-potensen (x) linjär i bin förutom en skalfaktor (log2), om då x är represenerad i processorn på detta sätt dvs genom att trycka in bin och skifta 2ggr åt höger vilket borde gå för bin är ett vanligt binärt tal och två skift åt höger innebär då en delning med 4 dvs ungefär log2.

Om man då tar kvoten mellan två närliggande positioner motsvarande exponenten x så motsvarar de t.ex

detta gör att man teoretiskt kan skifta med multiplar om två log2 vad beträffar exponenten x, men om man först delar exponenten x med log två (blir ett högre värde) och trycker in det binära värdet i processorn samt skiftar två steg åt höger så delar man uppenbarligen med 4 vilket är nära log2.

Det är sen svårt att säga nåt om upplösningen men av naturliga skäl lär den vara 2 som sämst fast detta gäller bara dom minst signifikanta bitarna för här

är inte upplösningen direkt dålig men här

är den det, men det är som sagt på dom minst signifikanta bitarna, sen ska vi inte glömma att x är en 10-potens, 10 upphöjt till ett litet tal blir lätt stort, 10^2 är till exempel 100, 10^1,008=1,02.

Jag tror att den dåliga upplösningen i de minst signifikanta bitarna inte har så stor betydelse, om vi tittar på att det minsta binära talet som "innan koefficienter" kan representeras är 1 (2^0) och nästa är 2 (2^1) och multiplicerat med 0,3 (log2) motsvarar det binära talet 10-exponenten x, med andra ord blir worst case hos kvoten hos dessa minst signifikanta bitar 2*0,3=0,6 dvs onnogrannheten i talet 10^x är alltså 4, lite mindre jobbigt än 100 :)

Så den sämsta upplösningen jag har är 4 och då hos dom minst signifikanta bitarna, om detta stämmer kan jag realisera 0 men nästa steg blir 4 vilket nog är priset för den exponentiella representationen för det händer ju liksom rätt olinjära saker...

Handhavande & upplösning[redigera]

Rent allmänt gäller att exponenter för 10-potenser är mindre än exponenter för 2-potenser av naturliga skäl, så om talet i processorn skall motsvara 10-potensen (x) så måste ju det binära talet i processorn vara större, inte mindre som jag kört ovan.

Om man då trycker in x rakt av binärt i processorn så måste det binära talet multipliceras med 1/0,3 dvs 3,33, först då kommer talet i processorn motsvara x.

Här hade jag tänkt skifta två snäpp åt vänster men då blir faktorn 4 (exponenten är linjär), räknar man då på vad som händer för till exempel x=4 (läs 10^4=10000) och man kodar upp det binära talet i processorn som 4*4 (läs 2^16=65536) vilket är en bra bit från 10000, hade jag emellertid kunnat multiplicerat exakt dvs med 1/log2 så hade jag fått rätt (läs 2^(4/log2)=10000) men det kan jag inte medels skiftning varvid felet alltså blir hela 6,5 nånstans vilket är över en halv dekad fel och det är oacceptabelt.

Men jag kom på nåt nästan trivialt idag, visst människor förstår 10-potenser bättre men all apparatur man eventuellt kopplar in kommer prata binärt och inte nog med det, precisionen om man kör binärt även "utifrån" blir bättre.

Så om man bara kör binärt så funkar allt rätt bra, precisionen är då nere i en faktor 2 "bara" dessutom får man finessen att tal med godtyckliga baser kan realiseras med en log-multiplikation, dock är som sagt precisionen fortfarande 2 och det spelar då alltså ingen roll om man skiftar eller om man trycker in säg 2-komplementet, precisionen blir lika dålig, men man får fördelen att det binära exponent-talet som spottas ut kan användas direkt.

Fast ett binärt exponent-tal kommer inte säga lika mycket som en exponent-tal på basen 10, men nu har vi ju MUL/DIV implementerat och kan räkna ut exponenttalet på basen 10 fast bara med precisionen 6,5.

Vi provar för skoj skull x=3 och lägger in det i processorn samt skiftar två steg åt vänster (läs ggr 4), då räknas 2^(3*4)=2^12=4096 men 2^x är bara 1000, här får vi alltså en annan precision (4 typ) så det verkar bero på hur stort x är.

Om vi provar med x=38 som typ är den maximala exponenten som kan representeras, då blir värdet 2^(38*4)=5,7*10^45, här är alltså precisionen 5,7*10^45/10^38=5,7*10^7!

Så man kan alltså påstå att jag inte kan realisera olika baser med nån nämnvärd precision.

Vänta nu lite, exponenten är ett linjärt binärt tal, kanske jag kan multiplicera med 3 i alla fall (om jag väljer att multiplicera istället för att skifta), 3 är närmare 3,3 än vad 4 är, vad händer då vid våra tre exempel?

Första exemplet ger 4096 isf 10000 (felkvot: 2,4), andra exemplet ger 512 isf 1000 (felkvot: 2) och sista exemplet ger 2*10^34 isf 10^38 (felkvot: 5000), detta ser onekligen bättre ut men maximalt relativt fel är hela 5000.

Jag gillar att sätta en precision på en halv dekad när jag överslagsräknar fysik, 2,4 är nära 3,16 så vi kan testa med 10^5, dess exponent skulle då representeras av 5*3 dvs ge ett tal på 2^15=33k, felet är nu mycket riktigt nära en halv dekad.

Detta är acceptabelt och man kan sammanfatta med att tal större än 10^5 inte får nån höjdarprecision men upp till 10^5 tycker jag faktiskt precisionen duger.

Med andra ord kan jag mha MUL generera 10-potenstal upp till 100 000 utan större problem.

Undrar lite vad datorer räknar med för storlekar på tal, en skärm lär ha högre upplösning än en megapixel så där gäller minst en miljon, varje pixel har väl dock RGB-färger på 2 byte? I så fall räknas det bara med 65k där (x3).

Men när i vanliga fall räknar en dator med extremt stora eller små tal?

Är det i olika beräkningsprogram, eller?

Det minsta talet jag känner till är Plank's konstant dvs 6,62*10^-34 (som jag brukar avrunda till 10^-33).

Men hur ofta hanteras så små tal i en dator?

Upplösning utan mantissa[redigera]

I fallet rent binära tal räknar processorn helt rätt men om jag behöver konvertera till godtycklig bas så räknar den fel.

I mitt fall där jag skippat mantissa blir det dock lite fel ändå för säg att x är 3,3 så kan jag bara representera heltal dvs 3, eftersom det här är i exponenten kan man skriva

och då blir felet

denna siffra gäller sedan för godtyckligt stora tal, det blir 23% fel, samtidigt har vi att decimalen kan variera från 0 till 9 och utan att en människa lägger sig i och avrundar så har vi ett fel som är maximalt lägsta värdesiffran dvs 2.

Utan mantissa kan jag alltså få en faktor 2 fel, det är ett problem som jag inte kan komma ifrån.

Samtidigt har ju jag sagt ovan att en precision på en halv dekad duger, en halv dekad är 3,16 så det här är bättre, sen är det en fördel att felet består oavsett hur stort eller litet talet är.

Håller på och studerar elementär digitalteknik vad beträffar de fyra räknesätten, har grovt gått igenom alla räknesätt vad gäller binära tal och har idag detaljstuderat heladderaren (FA).

Genom att även läsa lite har jag förstått att en FA inte är så snabb och att fördröjningen pga carry-kedjan är 2n gånger grindfördröjningen (tp) där n är antalet bitar hos talet.

Jag kör ju med bara 8 bitar vilket "råkar" minimera fördröjningen till 16*tp, jag vet dock inte vad min FPGA kan prestera men jag har några supersnabba SRAM på 2ns samtidigt som HCMOS har en grindfördröjning på runt 8ns och om vi då säger att FPGA knappast är snabbare än 5ns så innebär det en fördröjning på 16*5ns=80ns, 1/80ns=13MHz vilket alltså är den högsta frekvens jag kan köra min FPGA på trots att den klarar 100Hz enligt CAD-programmet.

Så nånstans 10MHz är alltså max vad jag kan addera mina 8-bitarstal med och detta suger!

Det är alltså carry-kedjan som är problemet och jag har provat addera utan carry modell

som utan carry blir 0 och med carry blir 30d vilket ju är en oacceptabel skillnad som eskalerar för högre tal som har många "parallella" ettor dvs det går inte att skippa carry-kedjan.

Samtidigt är detta ett erkänt problem och boken tar upp lite sådana lösningar, en carryacceleration på två är relativt lätt att införa men jag tycker inte det ger så mycket mer annat än 50% mer hårdvara, sen finns det nåt som heter carry-lookahead men det har jag inte ens orkat titta på mycket för att jag redan har implementerat FA.

Men det här var en aning tråkigt.

Om man kör processorn på högre frekvens kommer den alltså inte hinna addera så jag antar att man vid högre frekvenser måste lägga in lite NOP-instruktioner (No Operation) vilket ju gör att bara additionen dras ner i hastighet men då kan man faktiskt köra övriga delar hos processorn med 100MHz och lägger in 10 NOP för FA men då bör FA (eller ADD snarare) microkodas om.

Jag undrar hur riktiga processorer modell Intel gör, idag är väl deras bussar hela 64 bit samtidigt som grindfördröjningen i CMOS fortfarande knappast kan vara så mycket bättre än 5ns, 128*5ns=640ns=>1,5MHz...

Kanske att dom gör på samma sätt dvs kör på med 3GHz nånstans för all övrig datahantering men drar ner på hastigheten för ADD bara?

Ärligt talat tvivlar jag starkt på att Intel har en carry-lookahead eller dylik carryacceleration som genererar en högre hastighet än 10ggr det worst-case jag räknar ut dvs 1,5MHz, vilket gör att mina 13MHz är rätt bra trots allt.

Handhavande[redigera]

Från andra enheter får man alltid ett binärt tal, processorn hanterar binära tal (som exponent), vi som människor tycker dock mest om 10-potens, för att minimera fel så måste då 10-potensen konverteras, detta görs relativt enekelt genom att först checka exponenten i 2-potens enligt

sen trunkerar man n till n' och upphöjer från 2 enligt

sen drar man av

från x och gör samma sak om och om igen tills det inte finns några heltal kvar (eller att talet är så litet att man kan direktkoda).

Då har man konverterat 10-potensen till ett tal på basen 2, detta tal stoppar man in i processorn och sen låter man den bara räkna, ut får man sedan ett binärt tal igen och det skickas normalt till nån extern enhet fast om det skickas till skärm så blir det lite problem men binära tal är rätt lätta att räkna om speciellt om man använder hex-kod enligt

där HN står för High Nibbel och LN står för Low Nibbel och en nibbel är 4 bitar, that is the beuty of HEX.

Resume'[redigera]

Jag glömmer en sak här, x är exponenten hos 10-potensen, sen konverterar jag denna enligt ovan till exponenten (obs) för 2-potensen, det som sprutas ut ur processorn är då alltså ett svar modell exponenten för 2-potensen.

Om vi kallar hela talet, inklusive 2-potensen, för Tal' så är ju det alltså max 2^128, det är ju det talet som är vårt svar.

Jag måste alltså upphöja svaret från processorn från 2.

2^128 kan emellertid inte representeras av 8 bitar.

Det är ju naturligtvis därför jag bara sysslar med exponenter.

Men hur ska jag presentera det?

Om jag bara kör exponenten för 2 så får det plats på 8-bitar för så stort tal som

På skärmen kan man upphöja svaret från processorn från 2

Men en extern enhet kan bara hantera 8 bitar också säger vi så den kan bara få exponenten, hur ska jag få detta att funka?

Antal bitar som krävs för 2^128 är naturligtvis

Här kan man eventuellt fylla ett 16 byte stort "skiftregister"?

Skrattretande, eller hur?

Hantering av 32-bitarstal & rättelse[redigera]

Jag gjorde ett kardinalfel nyss, ett maskintal representeras redan av en exponent, talet i helhet kan tecknas

där jag dock inte använder nån Mantissa, men jag använder Exponent, här är alltså min representation inte så olik från ett ordinärt maskintal på flyttalsform.

Nu har jag dock idag fått reda på att jag inte kan addera två negativa tal med den FA jag redan implementerat, dock har jag kommit på att ett negativt tal fungerar men alltså inte två.

Om således bara det ena talet är negativt får jag ett resultat på tvåkomploentform vilket jag önskar.

Men hur gör jag med två negativa tal säg

en summering av dessa exponenter (modell MUL) innebär

sum ju ska vara -5 (tar man vara på overflow blir talet 19, men det är utanför range på typ +/-8), summerar vi istället

vilket är rätt även på tvåkomplementform.

Så jag kan alltså inte addera två negativa tal med min simpla heladderare (FA) MEN jag kan utföra en addition om bara det ena talet är negativt.

Detta gör att jag måste checka inkommande tal om dom är negativa eller ej, är bara ena talet negativt så kan jag köra på som vanligt, är båda talen negativa så har jag precis kommit på ett trick dvs jag negerar dom båda igen (varvid dom blir positiva), kör in dom i processorn och negerar svaret!

Så trots att jag var uppgiven ett tag verkar jag hittat en lösning på problemet.

Ser sedan i databladet för MC6809 att instruktionen NEG bara tar två klockcykler, fattade ingenting ett tag för jag har ju precis fått lära mig att carryfördröjningen vid addition är 2n*tp men det slog mig sen att Motorola förmodligen dragit ner klockfrekvensen till ett värde så att en godtycklig addition kan hinnas med och då stämmer det med två klockcykler för det enda man bever göra är att ladda in värdet till en bitvis inverterare kopiera det via den interna bussen till FA, ladda in resutatet på FA's andra "sida" och ut kommer resultatet.

Det tar alltså inte så många klockcykler.

Men detta förutsätter att huvudklockan är så långsam att FA hinner addera.

Verkar vara detta som begränsar hastigheten/klockfrekvensen hos processorer.

Men jag lurar på att ändå köra 100MHz som huvudklocka trots att jag beräknar att min FA inte klarar mer än 10MHz, dock blir detta lite lurigt för alla brancher (villkorshopp) involverar FA ty adresser skall ställas om med offset modell tvåkomplement så alla brancher behöver också slöas ner, det egentligen enda som inte behöver slöas ner är logiska operationer och skiftningar, en sån instruktion som CMP (Compare) nyttjar sedan också FA så det blir inte så många instruktioner kvar som kan köras "assnabbt".

Sen när det gäller data och datorer med lite större antal bitar (säg 32) som skall interfacea min KPU så har jag klurat ut en variant som eventuellt kan funka.

Säg att jag använder ett 32-bitars parallell/seriell/parallell skiftregister, då kan en extern maskin med 32 bitar koppla upp sig mot min KPU, eventuellt på ett sådant sätt att jag skapar en instruktion som vi kan kalla REC (som i Receive eller Record funkar också) som seriellt skiftar hem dom lägsta bitarna i talet (som jag leker är dom första) och använder en adress som via olika data på databussen styr skiftregistret.

Adressen gör Enable av skiftregistret, en bit i databussen gör Clock av skiftregistret och skiftar hem mina 8 bitar, en annan bit gör Clear på skiftregistret vilket gör KPU redo för ny data, nåt sånt har jag tänkt.

Innan Clear dumpar man alltså skiftregistrets innehåll rätt på KPU's databuss och typ laddar in det i en ackumulattor, då finns värdet i KPU.

Handhavande, två negativa tal samt program[redigera]

Jag är inte så hemma på assembler för MC6809 (som jag plankat det mesta ifrån) men jag ska göra ett försök, som algoritm kan man skriva

1) Checka om ena talet (X) är negativt

2) Checka om andra talet (Y) är negativt

3) Om bara ena talet är negativt, addera på vanligt sätt

4) Om båda talen är negativa, invertera båda talen, summera samt invertera resultatet

Ett assemblerprogram (för MUL i detta l läget ty addition av exponenter) skulle eventuellt kunna se ut såhär

LDA X

LDB Y

CMPA #$80 (checkar b7)

BNE #$9 (hopp om b7=0)

CMPB #$80 (checkar b7)

BNE #$7 (hopp oo b7=0)

NEGA

NEGB

STA $1000 (A sparas på adress 1000, för ADD kan bara jobba mot minnet)

ADDB $1000 (i B finns nu NEGA+NEGB)

NEGB (i B ligger nu MUL av X och Y där båda var negativa)

STA $1000 (samma adress kan nyttjas pga villkorshopp)

ADDB $1000 (i B finns MUL av X och Y)

Det här blir dock inte blixtsnabbt även om jag i alla fall tror att det funkar, snabbheten verkar enligt nyfunna kunskaper vara begränsat av FA och därmed bl.a CMP som måste involvera FA (med tvåkomplement för subtraktion), sen har vi villkorshoppet BNE som måste addera ett offset till PC vilket alltså också involverar FA, sen involverar även NEG (negering) FA ty den måste invertera talet och addera 1 (med carry), additition (ADD) involverar naturligtvis också FA, lagring till minnet (ST) utgör dock ingen direkt fördröjning och kan nog göras på en enda klockcykel (samma gäller laddning av ackumulatorer, LD).

Så om vi leker med att vi har 9st instruktioner som har grinddjupet 8 bitar så har vi max 72tp (alla 9 instruktioner används dock inte vid samma tillfälle), 72tp gånger världens snabbaste logikkrets på säg 5ns blir 2,8MHz vilket alltså blir den högsta frekvens som denna rutinen medger, dock gäller detta bara själva rutinen, ett enda nyttjande av FA innebär 16tp dvs 12,5MHz, mer ofta än så kan man/jag inte addera.

Källor[redigera]

  1. LM13700, Texas Instruments