Digital SSB-Sändare med en PIC32

Berätta om dina pågående projekt.
Användarvisningsbild
YD1150
Inlägg: 1974
Blev medlem: 29 oktober 2010, 22:41:10

Digital SSB-Sändare med en PIC32

Inlägg av YD1150 »

Här är mitt första försök till att bygga en digital SSB-Sändare
där man slipper dyra och "svåra-att-få-ta-på" kristallfilter.
(SSB = Single Side Band eller enkelt sidband på svenska.)
PIC32_SSB_översidan.jpg
PIC32_SSB_undersidan.jpg
Skulle ha tagit bilderna i dagsljus istället men det var
kolsvart ute när detta skrevs.

PIC32 (en PIC32MX320F064H ) matas med mikrofonsignalen
på en av analoga ingångarna. Mjukvaran delar upp signalen
i två, där den inbördes fasskillnaden är exakt 90 grader.

Samplingsfrekvensen är 12kHz, FIR-filtret har ca 2 x 100 "tappar".
Använder 32-bit fixpunkt, flyttal gick inte alls att använda (för "slött" ! )
FIR-filter koefficienterna är för närvarande på 24-bitars ordlängd.
PIC32:an klockas med maximala 80MHz.
Strömförbrukningen för hela bygget ligger på ca 140mA @ 12V.
Ville inte använda switchade regulatorer p.g.a. risk för störningar.

Två stycken D/A-omvandlare MCP4821 matas via SPI-interfacet.
Signalen från D/A-omvandlarna går genom två stycken
lågpassfilter (analoga) som skär bort onödigt "skräp".
Utan dessa filter så kommer man att sända ut signaler
på en mängd frekvenser i multiplar av samplingsfrekvensen.

Den analoga signalen matas sedan till två stycken blandare
eller balanserade modulatorer av typ NE/SA612 "gilbert cell".

De balanserade modulatorerna matas även med två stycken
90 grader fasförskjutna signaler, i det här fallet 10MHz / 4 =2,5MHz
En 74AC74 (två D-vippor) fixar till fasförskjutningen.

Slutligen summeras 2,5MHz-signalerna från de balanserade modulatorerna
i en emitterföljare (där den ensamma trimpoten finns.)

På utgången måste ett passande lågpassfilter anslutas, utan det
kommer sändning att ske på oönskade (ev olagliga ) frekvenser.

Balanserade modulatorerna matas med fyrkantsvåg på ca 250-300mV.

Fourierserieutveckling av fyrkantsvåg visar att det finns frekvenser
på f=1 (grundtonen, 2,5MHz i det här fallet), 3*f, 5*f, 7*f o.s.v.
Så utsignal finns då på 3*2,5MHz = 7,5MHz o.s.v.

Undertryckningen av oönskat sidband ligger på ca -40dB.
Så om önskat sidband ger 10W så blir det andra på 1mW
vilket är acceptabelt.

---------------------------------------------------

Problem som uppstod under projektets gång var bl.a.
hur man skulle skala alla filterkoefficienter?

Hur stora (numeriska) tal får man i det digitala filtret?
Overflow ger en massa konstiga ljud ut.

Första försöken gav mest brus ut p.g.a. jag hade inte tagit
de 12-största bitarna ut till D/A-omvandlaren.

Fick en massa övning i hur man använder pekare i C.
(mest hur man inte använder :wink: )

Fick säga ett ord på tre bokstäver som börjar på f och slutar på n
rätt många gånger :lol:


Övrigt.......

Tal låter helt obegripligt om man vänder på bas och diskant.
Man kan låta som man skulle ha andats in helium, "Kalle Anka".
Musik är lite trixigt att lyssna på för det minsta lilla frekvensen
ligger fel så låter det falskt!
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
Oskar
Inlägg: 1938
Blev medlem: 6 september 2005, 15:11:36
Ort: Storsjö, Sorsele

Re: Digital SSB-Sändare med en PIC32

Inlägg av Oskar »

Intressant!!

Vad är modularkontakten till för?
Var det besvärligt att programmera filter? Måste läsa på lite om detta tror jag...

Men det här var inte bra, nu blev jag byggsugen... ujuj, behöver ju inte fler projekt! :)
Har spånat på SSB sändare ett tag själv, den här tråden väckte tankarna till liv igen :)
ds77
Inlägg: 2457
Blev medlem: 24 juli 2008, 09:38:07
Ort: småland

Re: Digital SSB-Sändare med en PIC32

Inlägg av ds77 »

Trevligt, demodulator på g också?
Användarvisningsbild
YD1150
Inlägg: 1974
Blev medlem: 29 oktober 2010, 22:41:10

Re: Digital SSB-Sändare med en PIC32

Inlägg av YD1150 »

6-pol modularkontakten är till för att ansluta programmeraren (ICD-3)

Blockschema i pdf:en
Blockschema.pdf
Färdig programvara i PIC tar bara ca 700-800bytes (kommer inte ihåg exakt)
för att göra allpassfiltret.

Filtret i sig var inte så svårt att göra när man fick ordning på
pekarna i C. Går att köra med vanlig indexering, typ: Mitt_filter
men det var betydligt långsammare än med pekare.

Läste filterkurser på högskolan men tyvärr var det inte några direkt
praktiska övningar då, allt var mer eller mindre i Matlab.
Blir roligare om man kan göra ett fristående bygge med en PIC32 t.ex. :D

Hur jag gick tillväga för att göra allpassfiltret :?:
Började med ett lågpassfilter med halva bandbredden
man vill sända ut, ca 1,5kHz i det här fallet.
Filtrets princip i pdf:en, den verkliga konstruktionen har ca 2 x 100 koefficienter.

fir filtret.pdf

Beräkning av filterkoefficienterna kan göras med Matlab t.ex.
Simulering av filtret kan också göras i Matlab.

Sen gör man om filtret till två stycken bandpassfilter som får dubbelt
så stor bandbredd, typ 3kHz vilket räcker bra för talöverföring.

Omräkning av koefficienterna görs med formlerna nedan.
Hilbert transform-formler.jpg
Har funderat på att göra en för mottagning också. Principen
är densamma fast tvärtom.

Fortsättning följer......
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
blueint
Inlägg: 23238
Blev medlem: 4 juli 2006, 19:26:11
Kontakt:

Re: Digital SSB-Sändare med en PIC32

Inlägg av blueint »

Du får gärna beskriva implementationen av FIR filtret mer :D
(dödsvanlig applikation för FPGA)

Var fick du programkoden till det? Hur kolla att processorn var snabb nog (tidsbudget) ? Vad slags flyttal används internt (ieee754) ?
Hur veta hur man använder FIR koden? ;)

En risk är väl att processorn skickar ut en massa frekvenser via matning och strålning?
Hur fungerar detta med kombinerad fasvridning och mixning i utgångssteget?
Användarvisningsbild
YD1150
Inlägg: 1974
Blev medlem: 29 oktober 2010, 22:41:10

Re: Digital SSB-Sändare med en PIC32

Inlägg av YD1150 »

Koden fick jag skriva själv, fick dock lite ledtrådar från
http://www.bores.com/courses/intro/program/7_misc.htm

För att mäta hur lång tid det tog för att köra koden
så använde jag en pinne som sattes = 1 före filtret
och efter koden hade körts så vart den pinnen = 0.
Vart som en PWM-signal, ju lägre spänning desto mer
överflödig tid finns.

PIC32:an använder 32-bitars heltal, inga "float" finns ingen
hårdvara för det.

SA612 är en blandare eller 4-kvadrants multiplikator.
Det är trigonometriska formler man får använda och
komplexa tal "j".

Lite mer info på:
http://en.wikipedia.org/wiki/Single-sideband_modulation
http://michaelgellis.tripod.com/mixerscom.html
ds77
Inlägg: 2457
Blev medlem: 24 juli 2008, 09:38:07
Ort: småland

Re: Digital SSB-Sändare med en PIC32

Inlägg av ds77 »

Här är en annan digital ssb modulator i en FPGA, lite annan metod om jag förstod din beskrivning rätt. Har haft lite funderingar på att göra något liknande själv, fast med någon Cortex M3. Både för skojs skull och lära mig lite mer om ARM.

http://www.microtelecom.it/ssbdex/ssbdex-e.htm
Användarvisningsbild
YD1150
Inlägg: 1974
Blev medlem: 29 oktober 2010, 22:41:10

Re: Digital SSB-Sändare med en PIC32

Inlägg av YD1150 »

Här finns det en komplett sändare/mottagare av den analoga
sorten som fungerar minst lika bra.

http://www.nikkemedia.fi/hohtola/dc-trcvr/dcradio.htm
Skriv svar