Studie av mottagare och sändare av dtmf-signaler. Dual-tone multi-frequency (DTMF) generator på AVR Nu ska vi se vad vi har

Den första delen av denna applikation beskriver hur man genererar DTMF-signaler med MSP430-mikrokontrollern. En förklaring ges av de viktigaste specifikationerna som används i detta fall, och den teoretiska och matematiska motiveringen för att generera sinusvågor med fyrkantvågor med lämpliga analoga filter ges. Exemplet inkluderar också testade demoprogram för att generera fyrkantsvågssignaler baserade på olika timerkonfigurationer av MSP430-mikrokontroller. Den sista delen tillhandahåller ett kretsschema för generering av DTMF-signaler från fyrkantsvågsignaler.

2 DTMF-signalspecifikation

Förkortningen DTMF står för "Dual Tone Multi Frequency" och är en metod att representera siffror vid olika frekvenser i syfte att överföra dem över analoga kommunikationslinjer, t.ex. telefonlinje. Vid utvecklingen av standarden togs hänsyn till villkoret - alla frekvenser måste vara i "röst" -området, vilket gjorde det möjligt att minska kraven på överföringskanalen. Telefonnätverk använder DTMF-signaler för uppringning och annan information. Trots att pulsuppringningsmetoden fortfarande används i stor utsträckning, vilket är standarden, till exempel i Tyskland, ökar uppringningstiden avsevärt, vilket leder till improduktiv belastning på kommunikationslinjer. Dessutom många Ytterligare tjänster Kommunikation är endast möjlig med tonval. Vid kodning med DTMF-metoden, nummer 0-9 och bokstäverna A-D, */E och #/F representerar kombinationer av två frekvenser:

Frekvens 1209Hz 1336 Hz 1477Hz 1633 Hz
697 Hz 1 2 3 A
770 Hz 4 5 6 B
852Hz 7 8 9 C
941 Hz */E 0 #/F D

I det här systemet representerar kolumnen frekvensen från den "övre" frekvensgruppen (Hi-Group: 1209-1633 Hz), och raden representerar frekvensen från den "lägre" frekvensgruppen (Lo-Group: 697-941 Hz) . Tonala frekvenser väljs för att eliminera påverkan av övertoner. Frekvenserna är inte multiplar av varandra och ingen DTMF-frekvens kan erhållas genom att addera eller subtrahera andra frekvenser. För att generera en uppringare på Deutsche Telekom-nätverket krävs följande specifikationer (hämtade från Zulassungsvorschrift des Bundesamtes fur Post und Telekommunikation, BAPT 223 ZV 5 (Officiell specifikation för det federala ministeriet för post och telekommunikation):

3 Generera DTMF-signaler

Som beskrivits ovan är DTMF-signaler analoga och består av två oberoende sinusvågor. Det är således inte möjligt att generera enbart sådana signaler digitalt. Digitala signaler måste konverteras med hjälp av ADC:er och/eller analoga filter till den nödvändiga sinusvågformen.

3.1 Generering med fyrkantsvågor

Om fyrkantsvågssignaler används för att generera DTMF-signaler, kommer programvaran och hårdvara minimal. Varje kontinuerlig signal med en period T kan representeras av en Fourier-serie bestående av en oändlig summa av sinus- och cosinusvågor enligt följande:

Där a0/2 är den konstanta komponenten av signalen. Summaelementet med den lägsta vinkelfrekvensen (w0) kallas huvud (fundamentala) övertoner, resten är övertoner eller högre övertoner.

Den enklaste kontinuerliga signalen som implementeras med hjälp av en mikrokontroller är en fyrkantsvåg, Fourier-serien för vilken har formen:

Bidraget från varje frekvenskomponent till den totala signalen visas bäst av amplitudspektrumet (se fig. 2):


Ris. 2: Amplitudspektrum för en fyrkantvågssignal

Vid användning av ett analogt filter undertrycks likströmskomponenten och högre övertoner effektivt, medan vi vid utgången har en sinusformad signal med en frekvens lika med den ursprungliga fyrkantvågens frekvens.

3.2 Programvara för att generera meander

Meandergenereringsprogrammet måste uppfylla följande krav:

  • Kunna syntetisera två oberoende rektangulära signaler.
  • För att separera signalerna krävs två utgångsstift för att generera signaler från den "övre" (Hi-Group) och "nedre" (Lo-Group) frekvensområden respektive.
  • Mjukvaran ska kunna ställa in den erforderliga signallängden i intervallet cirka 65 ms - 100 ms.

MSP430-seriens mikrokontroller har olika inbyggda timers som kan generera fyrkantsvågssignaler. '31x/'32x-familjen använder en 8-bitars timer och en timerport för att generera båda fyrkantsvågsignalerna. Det här programmet testad vid MCLK-frekvens lika med 1,048 MHz. Timer_A i 33x-familjen kan oberoende generera båda nödvändiga signalerna. Det andra programmet använder denna timer för att generera fyrkantsvågor och fungerar med alla MCLK-frekvenser. Båda programmen kommer att diskuteras i detalj nedan.

3.2.1 Generera fyrkantsvågor med en 8-bitars timer och timerport

I fig. 3 är ett flödesschema över initieringsproceduren för generering av DTMF-signaler. För att syntetisera de två frekvenserna används timerporten och 8-bitars timerräknare. Var och en av dem är ett programmerbart räknarregister som är nödvändigt för exakt syntes av de erforderliga frekvenserna. Om timer-port-räknarna kaskadkopplas till en enda 16-bitars timer och klockas vid systemfrekvensen MCLK, då kan högfrekvensfrekvenserna genereras med hög noggrannhet. När ett avbrott inträffar, kopplas motsvarande utgång och båda 8-bitars räknarregistren återställs. Laddade värden lagras i två variabler i RAM för att spara interna register för andra uppgifter.

De låga frekvenserna genereras av en 8-bitars timer. Eftersom räknarregistret för denna timer är 8 bitar brett, orsakar endast vart tredje avbrott en nivåändring på det erforderliga utgångsstiftet, vilket gör att samma frekvensräknare kan genereras.

Två timerutgångar - portar används för att bilda två meandrar med olika frekvenser.

Ris. 3 Flödesschema för initialiseringsprocedur för generering av DTMF-signaler

Initieringsproceduren utförs endast en gång. Efter dess slutförande läses det hexadecimala värdet av det överförda tecknet från den globala variabeln i RAM. När de två frekvenserna som bildar de höga och låga DTMF-tonerna har genererats från de två tabellerna, är allt som krävs att initiera och starta båda timers. Sändningens varaktighet styrs genom att räkna halvcyklerna för den "lägre" frekvensen och läses från en extra tabell. När denna procedur har slutförts återgår du till pollingfunktionen. Motsvarande rutiner för avbrottshantering byter portstiften. Denna process visas i fig. 4 och 5.

Timerportens uppgifter inkluderar endast att spela in loggen. nivå vid portutgången och ladda om räknaren från RAM, medan driften av en 8-bitars timer har en något mer komplex struktur: varje ingång till avbrottet räknas av ett räknarregister. Utgången kan ändra tillstånd först efter tre avbrott. Dessutom räknas också varje halvcykel. Genereringen avbryts när ett visst antal halvcykler uppnås.


Ris. 4 Block – avbrottskrets från en 8-bitars timer (Lo-Group)


Ris. 5 Block – timer-port avbrottskrets (Hi-Group)

; Anpassade definitioner FLLMPY ekv 32 ; Frekvensmultiplikator FLL vid 1,048 MHz TCLK ekv FLLMPY*32768 ; TCLK: FLLMPY x f kvarts DL ekv 85; DTMF-signalens varaktighet (65..100 ms) LO_OUT ekv 02h ; Utmatning av "lägre" frekvens HI_OUT ekv 04h ; Högfrekvent utgång RCOUNT ekv r14 ; Längdräknare DTMF RTEMP ekv r15 ; tjänst register.global DTMF_NR ; global variabel i RAM; för DTMF-nummer (0..F); Definitioner RAM.even .bss DTMF_TL ; Även adressjustering.bss DTMF_TH .bss DTMF_NR ; global variabel i RAM; för DTMF-nummer (0..F).jämn ; Definitioner för 8-bitars timer TCCTL EQU 42H TCPLD EQU 43H TCDAT EQU 44H ; Definitioner för den universella timerporten TPCTL equ 04bh ; Timer-port kontroll TPCNT1 equ 04ch ; Timer-porträknare 1 TPCNT2 equ 04dh ; Timer-port räknare 2 TPD equ 04eh ; Timer-port data TPE equ 04fh ; Timer-port-resolution.text ; DTMF-frekvenstabeller: tabellen innehåller; antal MCLK-cykler under en halvcykel. ; Tabell för den "övre" frekvensen; Korrigerande ändring tillagd; att ta hänsyn till tidpunkten för inträde i avbrottet DTMF_HI .word 0ffffh-(TCLK/(1336*2))+25 ; Hög frekvens för 0 .ord 0ffffh-(TCLK/(1207*2))+28 ; Hög frekvens för 1 .ord 0ffffh-(TCLK/(1336*2))+25 ; Hög frekvens för 2 .ord 0ffffh-(TCLK/(1477*2))+24 ; Hög frekvens för 3 ord 0ffffh-(TCLK/(1207*2))+28 ; Hög frekvens för 4 .ord 0ffffh-(TCLK/(1336*2))+25 ; Hög frekvens för 5 .ord 0ffffh-(TCLK/(1477*2))+24 ; Hög frekvens för 6 .ord 0ffffh-(TCLK/(1207*2))+28 ; Hög frekvens för 7 .ord 0ffffh-(TCLK/(1336*2))+25 ; Hög frekvens för 8 .ord 0ffffh-(TCLK/(1477*2))+24 ; Hög frekvens för 9 .ord 0ffffh-(TCLK/(1633*2))+22 ; Hög frekvens för A .ord 0ffffh-(TCLK/(1633*2))+22 ; Hög frekvens för B .ord 0ffffh-(TCLK/(1633*2))+22 ; Hög frekvens för C .ord 0ffffh-(TCLK/(1633*2))+22 ; Hög frekvens för D .ord 0ffffh-(TCLK/(1207*2))+28 ; Hög frekvens för * .ord 0ffffh-(TCLK/(1477*2))+24 ; Hög frekvens för # ; Tabell för den "lägre" frekvensen DTMF_LO .byte 0ffh-(TCLK/(941*2*3)) ; Låg frekvens för 0 .byte 0ffh-(TCLK/(697*2*3)); Låg frekvens för 1 .byte 0ffh-(TCLK/(697*2*3)); Låg frekvens för 2 .byte 0ffh-(TCLK/(697*2*3)); Låg frekvens för 3 .byte 0ffh-(TCLK/(770*2*3)); Låg frekvens för 4 .byte 0ffh-(TCLK/(770*2*3)); Låg frekvens för 5 .byte 0ffh-(TCLK/(770*2*3)); Låg frekvens för 6 .byte 0ffh-(TCLK/(853*2*3)); Låg frekvens för 7 .byte 0ffh-(TCLK/(853*2*3)); Låg frekvens för 8 .byte 0ffh-(TCLK/(853*2*3)); Låg frekvens för 9 .byte 0ffh-(TCLK/(697*2*3)); Låg frekvens för A .byte 0ffh-(TCLK/(770*2*3)); Låg frekvens för B .byte 0ffh-(TCLK/(853*2*3)); Låg frekvens för C .byte 0ffh-(TCLK/(941*2*3)); Låg frekvens för D .byte 0ffh-(TCLK/(941*2*3)); Låg frekvens för *.byte 0ffh-(TCLK/(941*2*3)); Låg frekvens för # ; Signalvaraktighetstabell DTMF_L .byte 2*941*DL/1000 ; Halva cykler för 0 .byte 2*697*DL/1000; Halva cykler för 1 .byte 2*697*DL/1000; Halva cykler för 2 .byte 2*697*DL/1000; Halva cykler för 3 .byte 2*770*DL/1000; Halva cykler för 4 .byte 2*770*DL/1000; Halva cykler för 5 .byte 2*770*DL/1000; Halva cykler för 6 .byte 2*852*DL/1000; Halva cykler för 7 .byte 2*852*DL/1000; Halva cykler för 8 .byte 2*852*DL/1000; Halva cykler för 9 .byte 2*697*DL/1000; Halva cykler för A .byte 2*770*DL/1000 ; Halva cykler för B.byte 2*852*DL/1000; Halva cykler för C.byte 2*941*DL/1000; Halva cykler för D .byte 2*941*DL/1000; Halvcykler för *.byte 2*941*DL/1000 ; Halvcykler för # ;********************************************* ********** ******************************* ; DTMF-TX DTMF subrutin ;********************************************* ********************************* DTMF_TX mov.b DTMF_NR,RTEMP ; Lagra numret i ett tillfälligt register mov.b DTMF_L(RTEMP),RCOUNT ; Spara varaktighetsräknare, förbered 8-bitars timer för DTMF-Lo frekvens mov.b #0a8h,&TCCTL ; Klocka från MCLK mov.b DTMF_LO(RTEMP),&TCPLD ; Registerförberedelse; förladda mov.b #000,&TCDAT ; Ladda en räknare från ett register; förladda bis.b #008h,&IE1 ; Aktivera avbrott; från en 8-bitars timer; förbereda en timerport för DTMF-Hi-frekvensen rla r15; * 2 för 16-bitars tabell mov DTMF_HI(RTEMP),&DTMF_TL ; spara ord för högfrekvent mov #003,RTEMP ; räknare för 8-bitars timer bis.b #008h,IE2 ; Aktivera avbrott; från timer-port mov.b &DTMF_TH,&TPCNT2 ; Laddar den höga byten i TC2 mov.b &DTMF_TL,&TPCNT1 ; Laddar låg byte till TC1 bis.b #080h,&TPD ; Aktivera 16-bitars timer bis.b #HI_OUT+LO_OUT,&TPE ; Aktivera DTMF-Hi/Lo-utgångar mov.b #090h,&TPCTL ; Aktivera timer ret ;************************************************** ********** ******************************* ; Timer-port avbrott;********************************************* *** ******************************* TP_INT xor.b #HI_OUT,&TPD ; Invertera DTMF-Hi-utgång mov.b &DTMF_TH,&TPCNT2 ; Laddar senior ba

3.2.2 1 Generera fyrkantvågor med Timer_A

Denna DTMF-signalgenereringsrutin använder endast Timer_A för att fyrkantsvåga båda önskade frekvenserna. Monteringsprocessen beräknar lämpliga värden för timern för att använda programmet oavsett MCLK-frekvensvärdet. Varaktigheten av utsignalen specificeras av DL-konstanten i millisekunder.

; Hårdvarudefinitioner; FLLMPY .equ 32; Frekvensmultiplikator FLL vid 1,048 MHz TCLK .equ FLLMPY*32768; TCLK: FLLMPY x f kvarts DL .equ 82; DTMF-signalens varaktighet i ms; (65..100 ms) STACK .equ 600h ; Stackinitieringsadress; RAM-definitioner; STDTMF.equ 202h; Hi and Lo frekvensstatus TIM32B .equ 204 ; Timerregisterförlängning LENGTH .equ 206h ; DTMF varaktighetsräknare; .text 0F000h ; Startadress för programmet; ; Timer_A-initiering: MCLK, kontinuerligt läge, avbrott aktiverade; Förbereda timerutgångsmoduler Timer_A MCLK = 1,048 MHz (automatisk) ; INIT MOV #STACK,SP ;Initialisering av stackpekaren CALL #INITSR ;Initialisering av multiplikatorn; FLL-frekvenser och RAM MOV #ISMCLK+TAIE+CLR,&TACTL ; Initiering av timern MOV.B #TA2+TA1,&P3SEL ; Utgångar TA2 och TA1 på portarna P3.5/4 CLR TIM32B; Rensa utökat timerregister BIS #MCONT,&TACTL ; Starttimer Timer_A EINT ; Generellt avbrott aktivera MAINLOOP ... ; Huvudslinga; ;Tangenttryckning: SDTMF innehåller tabelloffset; för 2 frekvenser (0..6,0..6) i hög och låg byte; MOV&TAR,R5 ; För att starta omedelbart: LÄGG TILL FDTMFLO,R5 ; Offset för kortare tid MOV R5,&CCR1 ; Första tillståndsändring efter 0,71 ms MOV R5,&CCR2 ; 1/(2x697) = 0,71ms MOV #OMT+CCIE,&CCTL1 ; Utgångsinvertering, bitavbrott. MOV #OMT+CCIE,&CCTL2 ; Invertera utgång, avbrottsbit MOV.B STDTMF,R5 ; 82 ms räknare RRA R5 ; antal lägre frekvenstillståndsändringar MOV.B DTMFL(R5),LENGTH ; för signalens varaktighet... ; fortsättning på programmet; ; Avbrottshanterare från CCR0 (används inte här); TIMMOD0 ... RETI ; ; Avbrottshanterare från fångst-jämförelseregister 1..4; TIM_HND ADD &TAIV,PC ; Behandling av begäran med högsta; RETI-prioritet; ingen avbrottsbegäran: RETI JMP HCCR1 ; begäran från CCR1 (DTMF lågfrekvens) JMP HCCR2 ; begäran från CCR2 (DTMF högfrekvens) JMP HCCR3 ; begäran från CCR3 JMP HCCR4 ; begäran från CCR4; TIMOVH INC TIM32B ; Utöka Timer_A till 32 bitar RETI ; ; DTMF lågfrekvens: TA1 inverterar utgången från utgångsenhet 1; Varje tillståndsändring räknas för att styra signalens varaktighet; HCCR1 PUSH R5 ; Spara använda register MOV.B STDTMF,R5 ; Lågfrekvensstatus DTMF ADD FDTMFLO(R5),&CCR1 ; Lägg till halvcykellängd DEC.B LENGTH ; Är DL-signalens varaktighet klar? JNZ TARET ; Nej; ; Ja, stoppa DTMF-signal: inaktivera avbrott; BIC #OMRS+OUT+CCIE,&CCTL1 ; Återställ TA1 BIC #OMRS+OUT+CCIE,&CCTL2 ; Återställ TA2 TARET POP R5 ; Återställ R5 RETI; Återgå från avbrott; ; Högfrekvent DTMF: TA2 inverterar utgången från utgångsenhet 2; HCCR2 PUSH R5 ; Spara använda MOV-register. B STDTMF+1,R5; Högfrekvensstatus DTMF ADD FDTMFHI(R5),&CCR2 ; Lägg till halvcykellängd POP R5 ; Återställ R5 RETI; Återgå från avbrott; HCCR3 ... ;Uppgift kontrollerad av register CCR3 RETI HCCR4 ... ;Uppgift kontrollerad av register CCR4 RETI ; ; DTMF Frekvenstabell: Tabellen innehåller; antal MCLK-cykler per halvcykel. Värden justerade för; effektiv frekvens MCLK under monteringsprocessen; och avrundat till ett minimum möjligt misstag frekvenser; FDTMFLO .ord ((TCLK/697)+1)/2; Lågfrekvent DTMF 697Hz .ord ((TCLK/770)+1)/2 ; 770Hz.ord ((TCLK/852)+1)/2; 852Hz.ord ((TCLK/941)+1)/2; 941Hz FDTMFHI.ord ((TCLK/1209)+1)/2; Högfrekvent DTMF1209Hz .ord ((TCLK/1336)+1)/2 ; 1336Hz.ord ((TCLK/1477)+1)/2; 1477Hz.ord ((TCLK/1633)+1)/2; 1633 Hz; ; Tabellen innehåller antalet halvcykler för varaktigheten av DL-signalen (ms). ; Den lägre DTMF-frekvensen används för räkning; DTMFL .byte 2*697*DL/1000 ; Antal halvcykler.byte 2*770*DL/1000 ; för DL i ms.byte 2*852*DL/1000 ; .byte 2*941*DL/1000 ; ; .sect "TIMVEC",0FFF0h ; Timeravbrottsvektorer Timer_A .word TIM_HND ; Vektor av moduler 1..4 timers.word TIMMOD0 ; Timermodul 0 vector.sect "INITVEC",0FFFEh ; Vektor Återställa.word INIT

Nedan finns en lite snabbare lösning. Men det kräver mer RAM eftersom... Data som erhålls från tabellerna räknas inte om varje gång, utan lagras i ett nötskal i RAM DTMFLO och DTMFHI. Avläsning görs från Timer_A-timeravbrottsrutinerna. Tabellerna som används är identiska med de som visas i föregående exempel.

FLLMPY .equ 32; Frekvensmultiplikator FLL vid 1,048 MHz TCLK .equ FLLMPY*32768; TCLK: FLLMPY x f kvarts DL .equ 82; DTMF-signalens varaktighet; i ms (65..100 ms) STDTMF = ekv 202h; Hi and Lo frekvensstatus TIM32B .equ 204 ; Timerregisterförlängning LENGTH .equ 206h ; DTMF varaktighetsräknare DTMFLO .equ 208h; Halvcykel av den lägre frekvensen DTMFHI .equ 20Ah; Övre frekvens halvcykel STAPEL .equ 600h ; Stackinitiering address.text 0F000h ; Startadress för programmet; Timer_A-initiering: MCLK, kontinuerligt läge, avbrott aktiverade; Förbereda timerutgångsmoduler Timer_A MCLK = 1,048 MHz (automatisk) ; INIT MOV #STACK,SP ; Initiera stackpekaren CALL #INITSR ; Multiplikatorinitiering; FLL-frekvenser och RAM MOV #ISMCLK+TAIE+CLR,&TACTL ; Starttimer MOV.B #TA2+TA1,&P3SEL ; Utgångar TA2 och TA1 på portarna P3.5/4 CLR TIM32B; Rensa det utökade timerregistret BIS #MCONT,&TACTL ;Starta timern Timer_A EINT ; Generellt avbrott aktivera MAINLOOP ... ; Huvudslinga;Tangenttryckning: SDTMF innehåller tabelloffset; för 2 frekvenser (0..6,0..6) i hög och låg byte; MOV&TAR,R5 ; För att starta omedelbart LÄGG TILL FDTMFLO,R5 ; Offset för kortare tid MOV R5,&CCR1 ; Första tillståndsändring efter 0,71 ms MOV R5,&CCR2 ; 1/(2x697) = 0,71 ms; ; Hämta de två cykelräkningarna för DTMF-frekvenserna; MOV.B STDTMF+1,R5; Högfrekvent DTMF MOV FDTMFHI(R5),DTMFHI ; Halvcykellängd MOV.B STDTMF,R5 ; Lågfrekvent DTMF MOV DTMFLO(R5),DTMFLO ; Halvcykelns varaktighet; ; Varaktighetsräknare RRA R5 ; Förbered byteindex MOV.B DTMFL(R5),LENGTH ; antal tillståndsändringar med lägre frekvens MOV #OMT+CCIE,&CCTL1 ; Utgångsinvertering, bitavbrott. MOV #OMT+CCIE,&CCTL2 ; Utgångsinvertering, bitavbrott. ... ; Återgå till huvudslingan; ; Avbrottshanterare från CCR0 (används inte här); TIMMOD0 ... RETI ; ; Avbrottshanterare från fångst-jämförelseregister 1..4; TIM_HND ADD &TAIV,PC ; Behandling av begäran med högsta; RETI-prioritet; ingen avbrottsbegäran: RETI JMP HCCR1 ; begäran från CCR1 (DTMF lågfrekvens) JMP HCCR2 ; begäran från CCR2 (DTMF högfrekvens) JMP HCCR3 ; begäran från CCR3 JMP HCCR4 ; begäran från CCR4; TIMOVH INC TIM32B ; Utöka Timer_A till 32 bitar RETI ; ; DTMF lågfrekvens: TA1 inverterar utgången från utgångsenhet 1; HCCR1 ADD DTMFLO,&CCR1 ; Lägg till halvcykellängd DEC.B LENGTH ; Är DL-signalens varaktighet klar? JNZ TARET ; Nej; ; Ja, stoppa DTMF-signal: inaktivera avbrott; BIC #OMRS+OUT+CCIE,&CCTL1 ; Återställ TA1 BIC #OMRS+OUT+CCIE,&CCTL2 ; Återställ TA2 TARET RETI ; Återgå från avbrott; Högfrekvent DTMF: TA2 inverterar utgången från utgångsenhet 2; HCCR2 ADD DTMFHI,&CCR2 ; Lägg till halvcykels varaktighet RETI ; Återgå från avbrott; HCCR3. .. ;Uppgift kontrollerad av register CCR3 RETI HCCR4 ... ;Uppgift kontrollerad av register CCR4 RETI ; ; Avbrottstabellerna och vektorerna är identiska med de som visas i föregående exempel.

3.3 Hårdvara för generering av DTMF-signaler

Som nämnts ovan, i frekvensområdet 200 Hz.. 4600 Hz, måste signalnivån för sändningsfrekvensen vara minst 20 dB över nivån för främmande signaler (brus). Dessutom, baserat på specifikationen, måste signaler från de "övre" och "nedre" grupperna ha olika nivåer, så varje signal kräver sitt eget filter. Sinusformade frekvensamplituder kan erhållas från Fourier-serien.

För att välja gränsfrekvenser när du designar ett analogt filter måste du följa följande krav baserat på:

  • Därför att det är nödvändigt att säkerställa möjligheten för alla kombinationer av frekvenser i den "lägre" gruppen med frekvenser i den "övre" gruppen; skillnaden i nivåer mellan de lägsta och högsta frekvenserna i gruppen bör inte överstiga 3 dB.
  • För den lägsta frekvensen i gruppen (f1) bör övertonsundertryckningen (3f1) inte vara sämre än 20 dB. Uppfyllelsen av detta villkor är mest kritisk för den lägre frekvensen i gruppen, eftersom det är så långt bort från filtrets gränsfrekvens som möjligt.

Formeln beskriver kvadraten på det absoluta värdet vid utgången av ett högpass-butterworth-filter av ordningen n:

Denna formel representerar beroendet av Butterworths högpassfilterförstärkning på frekvensen. Parametrarna fg och n bestämmer gränsfrekvensen respektive ordningen för filtret.

Först och främst är det nödvändigt att beräkna den erforderliga filterordningen, med hänsyn till överensstämmelse med ovanstående krav.

För att uppfylla det första villkoret får förhållandet mellan kvadraterna av de absoluta värdena för de lägsta och högsta frekvenserna i gruppen inte vara mer än 3 dB eller:

Det andra villkoret kommer att uppfyllas automatiskt om förhållandet mellan kvadraterna av absolutvärdena för frekvenserna f1 och 3f1 är mer än 10/3, i detta fall är den tredje övertonen i den rektangulära signalen 1/3 mindre (se Fourier serie och Fig. 2):

Som ett resultat av beräkningar för frekvenserna för båda grupperna har vi den erforderliga filterordningen n=1,15. Därmed kommer kraven att uppfyllas av ett 2:a ordningens filter, som kan byggas på en operationsförstärkare. Om du använder ett 3:e ordningens filter behöver du bara två extra element. Detta kommer dock att minska kraven på spridning av komponentparametrar. Båda ovanstående krav kommer att uppfyllas om gränsfrekvensen är inom följande gränser:

Nedre grupp fg>880 Hz fg<1418 Гц
Övre grupp fg>1527 Hz fg<2460 Гц

Om gränsfrekvensen är på sitt minimum, kommer maximal övertonsreduktion att inträffa. Men i detta fall blir skillnaden mellan de lägsta och högsta frekvenserna i gruppen 3 dB. Vid högsta möjliga gränsfrekvens är nivåskillnaden minimal, men övertonskomponenter dämpas endast med 20 dB.

Vid beräkning av filtret ägnades ökad uppmärksamhet åt övertonsundertryckning, nivåskillnaden inom gruppen var fixerad till 2 dB. Som ett resultat är gränsfrekvenserna 977 Hz och 1695 Hz. Den resulterande övertonsdämpningen överstiger avsevärt kraven. Skillnaden i frekvensnivåer i gruppen ligger inom kraven även vid avvikelse av gränsfrekvensen förknippad med spridningen i parametrarna för de komponenter som används. Vid beräkning av filterelementens värden valdes motstånd baserat på deras maximala närhet till standardvärdena för E12-serien.

Vid filterutgångarna blir resultatet två sinusformade signaler med signifikant undertryckta övertoner. För att kombinera dessa signaler introduceras en extra adderare.

Således, med endast 3 op-amps och några passiva element, kan vi generera DTMF-signaler med en mikrokontroller utan att använda betydande beräkningsresurser.

Med hjälp av simulatorprogram kontrollerades ungefärliga värden. Filtrens respons matchar det beräknade frekvenssvaret mycket nära.


Ris. 6: Amplitudspektrum för en rektangulär signal med en frekvens på 697 Hz vid utgången av ett 3:e ordningens filter

I fig. Figur 6 visar amplitudspektrumet för en rektangulär signal med en frekvens på 697 Hz, passerad genom ett 3:e ordningens filter. Som framgår av figuren är den tredje och femte övertonen (2091 Hz och 3485 Hz) avsevärt dämpad (-25,6 dB).


Ris. 7: Amplitudspektrum för en rektangulär signal med en frekvens på 941 Hz vid utgången av ett 3:e ordningens filter

I fig. Figur 7 visar spektrumet för en fyrkantsvågssignal med en frekvens på 941 Hz. I frekvensområdet av intresse för oss, upp till 4600 Hz, finns det bara en överton. Efter att ha passerat filtret dämpas denna 2823 Hz överton avsevärt (-27,9 dB). Nivåskillnaden mellan de lägsta och högsta frekvenserna i gruppen överstiger inte 1,9 dB.

För att använda lågkostnadskomponenter med stor variation i parametrar genomfördes ytterligare modellering. Simuleringsresultaten visade att den tillåtna spridningen i värdena på motstånd och kondensatorer är 10 %.


Figur 8: Histogram – fördelning av signalnivåer i en grupp


Figur 9: Histogram – Harmonisk dämpning

I fig. 8 och 9 visar histogram erhållna med användning av Monte Carlo-analys. I det här fallet varierade komponentvärdena slumpmässigt inom en spridning på 10 %. Efter 100 iterationer plottas resultaten för alla simulerade filter i histogram. I histogrammet i fig. Figur 8 visar nivåskillnaden mellan frekvenser inom gruppen. Den maximalt tillåtna skillnaden på 3 dB mellan lägsta och högsta frekvensen uppnåddes inte i något fall. Medelvärdet är 1,6 dB, vilket är något bättre än det beräknade värdet på 2 dB.

I fig. Figur 9 visar dämpningen av övertoner för den "lägre" frekvensgruppen. Det erforderliga värdet på 20 dB uppnås i alla fall, medelvärdet är cirka 27 dB. I värsta fall dämpas övertonen med 24,2 dB.

Värdena som beräknas för filtret i den "lägre" frekvensgruppen utförs också för filtret i den "övre" frekvensgruppen.

Båda filtren har identiska kretsar. Den enda skillnaden ligger i gränsfrekvenserna för filtren för de övre och nedre frekvensgrupperna. R1 och C1 bildar ett 1:a ordningens högpassfilter. Därför att kretsens ingångsresistans beror också på R1, värdet på detta element bör inte vara för litet; annars kommer mikrokontrollerns utgångar att överbelastas och fyrkantsvågformen kommer att förvrängas. I detta fall kommer ytterligare frekvenser som är ett resultat av intermodulationsdistorsion att läggas till signalen, vilket kommer att påverka signal-brusförhållandet negativt.

Överföringsfunktionen för filter av högre ordning kan inte erhållas med enbart passiva komponenter.

Således måste filtret av 2:a ordningen innehålla en op-amp. Den aktiva filterförstärkningen är inställd på 0,2 med hjälp av motstånden R1-1 och R1-2. Som ni ser är signalen något försvagad. Detta är nödvändigt för att undvika överbelastning av op-amp, eftersom toppamplituden för den grundläggande sinusformade övertonen för fyrkantvågssignalen överstiger amplituden för själva fyrkantvågssignalen (se Fourier-serien och fig. 2). En extra adderare justerar önskad effektnivå. På grund av den konstanta komponenten av den rektangulära signalen ställs operationspunkten för op-förstärkaren in på nivån Vcc/2 (se även Fourier-serien och fig. 2). I detta fall kan den konstanta komponenten inte elimineras av ingångsdelaren R1-1/R1-2. För att koppla bort OS-kretsen med DC-spänning används kondensator C3.

Vid var och en av utgångarna på det analoga filtret genereras en signal från de övre respektive undre frekvensgrupperna. I en extra adderare läggs dessa signaler till. I detta kretselement kan du ställa in förhållandet mellan de "nedre" och "övre" frekvenserna i den totala signalen och utsignalnivån med hjälp av motstånden R4 och R5. Således kan utgångsamplituden enkelt justeras för att passa olika krav i olika länder.

Vid beräkning av komponentvärdena var kondensatorvärdena, som vanligt, fasta och motståndsvärdena beräknades i enlighet med dem. I denna krets användes kondensatorer och motstånd i standardserien E12 med en spridning på 10 %.

I fig. Figur 10 visar ett schematiskt diagram över analoga filter och en adderare:


Ris. 10: Schematiskt diagram analoga filter med extra adderare

Kondensatorerna C1-1 och C1-2 kombinerar de två signalerna tillsammans vid Vcc/2-driftpunkten. Du bör inte välja för stora värden för dessa element, eftersom de är lågpassfilterelement för att eliminera lågfrekventa undertoner. Filterkondensator C5 eliminerar referensspänningsbrus. En extra kondensator C6 ansluten parallellt med återkopplingsmotståndet R6 bildar ett första ordningens högpassfilter. Om den lägsta filtrets gränsfrekvens väljs, förbättrar ytterligare filtrering av högfrekvent intermodulationsstörning kvaliteten på utsignalen, men det kommer att bli en viss dämpning av de högsta frekvenserna i den "övre" gruppen. I vissa fall är det inte nödvändigt att generera den högsta DTMF-frekvensen på 1633 Hz eftersom den används endast för att bilda tjänstesymboler A-D, och signal-brusförhållandet kan förbättras genom att sänka filtrets gränsfrekvens. En ökning av gränsfrekvensen leder således till en ökning av nivån av högfrekvent interferens, men samtidigt minskar den negativa påverkan på de högsta frekvenskomponenterna i DTMF-signalen.

4 Resultat av studier av DTMF-sändarsignaler

Spektrogrammen nedan (fig. 11 och 12) visar utsignalerna från DTMF-sändaren vid olika frekvenser. I fig. Figur 11 visar amplitudspektrumet för symbolen "1". Frekvenserna som krävs för dess överföring - 697 och 1207 Hz - ligger på nivån -10,5 dB respektive -8,5 dB. Övertoner vid 2091 och 3621 Hz undertrycks med nästan 30 dB. För att sända "D"-symbolen genereras de två högsta frekvenserna - 941 och 1633 Hz. Som framgår av fig. 12 är lågfrekvensnivån -12 dB, högfrekvensnivån är -11 dB. Motsvarande övertoner dämpas med mer än 30 dB. Således motsvarar de uppmätta värdena simuleringsresultaten och specifikationskraven.


Ris. 11: Amplitudspektrum för symbol "1": 697 och 1207 Hz


Ris. 12: Amplitudspektrum för symbol "D": 941 och 1633 Hz

Absolut frekvensnoggrannhet för de genererade fyrkantvågssignalerna kan inte uppnås när man använder två olika timers; resultatet kommer att bero på kombinationen av de två frekvenserna och vilken typ av timer som används. Anledningen till detta är en timeravbrottskonflikt. Den erforderliga noggrannheten på ±1,8 % uppfylls dock med stor marginal.

Om en 8-bitars timer och en Timer Port-timer används vid en systemfrekvens på MCLK 1,048 MHz, genereras frekvenserna för den "lägre" gruppen med en noggrannhet på inte sämre än 0,3%. För frekvenserna för den "övre" gruppen erhölls i praktiken en avvikelse på högst 0,5 %.

Det enda undantaget är DTMF-tecknet "D", för vilket de högsta frekvenserna genereras. Som ett resultat, i denna kombination har frekvensen för den "övre" gruppen 1633 Hz en avvikelse på -0,97%.

Utan detta undantag genereras även den högsta frekvensen på 1633 Hz med en noggrannhet på bättre än 0,5 %. De maximala avvikelserna för olika frekvenser anges i tabellen:

Om Timer_A används för att generera frekvenser kommer felet att bero på MCLK-frekvensen som används:

MCLK, MHz 1,048 2,096 3,144 3,800
Multiplikator FLL 32 64 96 116
697 Hz +0,027% +0,027% +0,027% +0,027%
770 Hz -0,015% -0,016% +0,033% -0,016%
852 Hz +0,059% -0,023% +0,005% +0,031%
941 Hz +0,029% +0,029% +0,029% +0,035%
1209 Hz -0,079% +0,036% +0,036% -0,003%
1336 Hz +0,109% -0,018% +0,025% +0,025%
1447 Hz -0,009% -0,009% -0,009% -0,009%
1633 Hz +0,018% +0,018% +0,018% +0,018%

5. Sammanfattning

Mjukvaran för det här exemplet är mycket enkel och kräver en liten mängd RAM och ROM, som upptar cirka 300 byte. Tack vare den inbyggda timermodulen genereras de erforderliga frekvenserna med hög noggrannhet utan att slösa CPU-belastning. I en konfiguration där en 8-bitars timer och en timer/port används för generering, upptar avbrottsrutiner ungefär 12 % av CPU-resursen. I det fall då frekvenser genereras av Timer_A-timern, reduceras CPU-belastningen för bearbetning av avbrottsrutiner till 6 %. Som ett resultat kan andra uppgifter köras medan DTMF-signaler sänds, eller så kan CPU:n sättas i ett lågeffektläge för att minska strömförbrukningen.

Den goda funktionaliteten hos den beskrivna modulen för att generera DTMF-signaler med fyrkantsvågsignaler demonstreras av hårdvarukretsdesignen. Därför att Det är möjligt att använda komponenter med ett brett spektrum av parametrar i kretsen; priset för en sådan lösning är mycket lågt. Alla specifikationskrav uppfylls i stor utsträckning, så en separat DTMF-signalgeneratormodul krävs inte i instrument som använder MSP430 som styrenhet.

Om det i ett särskilt fall är nödvändigt att öka signal-brusförhållandet, med hjälp av en extra op-amp, kan ett filter konstrueras för att ytterligare undertrycka intermodulationsdistorsion. En sådan extra operationsförstärkare finns redan i quad op-amp i DIL14-paketet.

6 länkar

Bundesamt fur Post und Telekommunikation (Federal Office for Post and Telecommunications): BAPT 223 ZV 5, Zulassungsvorschrift fur Endeinrichtungen zur Anschaltung an analoge Wahlanschlusse (ausgenommen Notruf- und Durchwahlanschlusse) des Telefonnetzes (officiell specifikation för terminalenheter anslutna till analoga telefonlinjer säkerhets- och samtalskrav) / ISDN från Deutschen Bundespost Telekom; Bundesministerium fur Post und Telekommunikation, Utkast, Bonn april 1994 Papula: Mathematik fur Ingenieure 2 (Mathematics for Engineers); Vieweg Verlag, Braunschweig 1990 Tietze / Schenk: Halbleiterschaltungstechnik; (Titze/Schenk, Semiconductor Circuit Engineering), 10:e upplagan; Springer Verlag, Berlin 1993 Lutz Bierl / Texas Instruments: MSP430 Family, Metering Application Report, Texas Instruments, Issue 2.1, Jan 1997, SLAAE10B Texas Instruments: MSP430 Family, Architecture User's Guide and Module Library, Texas Instruments, 1996, SLAUE10B Texas Instruments: MSP430 Family, Software User's Guide, Texas Instruments, 1996 Texas Instruments: MSP430 Family, Assembly Language Tools User's Guide, Texas Instruments, 1996 Siwy, Robert: Systementwicklung einer Telekom-Applikation zum Senden och Empfangen av DTMF-Signalen med dem Microcontroller MSP430 (Development MSP430) telekommunikationssystem för att ta emot och sända digitala signaler baserat på MSP430 mikrokontroller); Diplomarbeit, Fachhochschule Landshut, maj 1997

När det gäller enkla enheter bestämde jag mig för att montera en DTMF-signalgenerator med samma ATtiny2313. För de som inte vet är DTMF (Dual-Tone Multi-Frequency) en tvåtons flerfrekvens analog signal som används för att slå ett telefonnummer. Läs Wikipedia.

Beslutet att montera en sådan enhet dikterades av önskan att försöka implementera komplexa analoga signaler med hjälp av en mikrokontroller. Ingen praktisk tillämpning var planerad för den här enheten, men kanske någon skulle tycka att en sådan enhet är användbar? Använd den!

DTMF-generatorkälla


Nu ska vi se vad vi har.

Signalen genereras med PWM och en RC-krets används för att ge den önskad form. Som ett resultat, efter RC-kedjan, får vi följande signal (knapp 6 trycks):

Längs hela kurvan för den användbara signalen observerar vi en högfrekvent kam (frekvensen är högre än hörbar, så det kommer inte att skapa brus) - det här är RC-kretsens arbete. Du kan göra linjen jämnare genom att öka kondensatorns kapacitans eller motståndet på motståndet, men i det här fallet kommer området för den användbara signalen att minska avsevärt.

Vi tittar på signalens spektrum och ser till att det finns två separata frekvenser (PWM-frekvensen har gått utanför visningsområdet), vilket betyder att allt är bra - enheten fungerar som den ska.

Färdiga lösningar

Det finns färdiga lösningar för uppgifterna att generera och avkoda en DTMF-signal. Här är ett par datablad för dessa mikrokretsar.

DTMF-generator
- DTMF-avkodare


P.S. Det är synd att ATtiny2313 inte har en ADC - du kan också använda en DTMF-avkodare! Men det är okej, jag upprepar det på mega, jag kommer definitivt att bifoga det.

(Besökt 6 868 gånger, 1 besök idag)

Tonuppringning (Dual-tone multi-frequency signaling, DTMF) utvecklades av Bell Labs på 50-talet av förra seklet för den då revolutionerande tryckknappstelefonen. För att representera och sända digitala data i tonläge används ett par frekvenser (toner) av talfrekvensområdet. Systemet definierar två grupper om fyra frekvenser, och informationen kodas genom att två frekvenser sänds samtidigt, en från varje grupp. Detta ger totalt sexton kombinationer för att representera sexton olika siffror, symboler och bokstäver. DTMF-kodning används nu i ett stort antal kommunikations- och styrtillämpningar, vilket exempelvis framgår av International Telecommunication Unions (ITU) rekommendation Q.23.

Den här artikeln beskriver kretsen för en DTMF-tongenerator som reproducerar alla åtta frekvenser och genererar den resulterande tvåtonsutsignalen. Systemet i fråga byggdes på Silego GreenPAK™ SLG46620V-chippet och operationsförstärkare Silego SLG88104V. Den resulterande signalen som produceras är summan av två frekvenser som bestäms av raden och kolumnen på telefonens knappsats.

Den föreslagna kretsen använder fyra ingångar för att välja den frekvenskombination som ska genereras. Kretsen har också en aktiveringsingång, som utlöser generering och bestämmer hur lång tid signalen sänds. Generatorns utgångsfrekvens överensstämmer med ITU-standarden för DTMF.

DTMF-toner

DTMF-standarden definierar kodningen av siffrorna 0-9, bokstäverna A, B, C och D, och tecknen * och # som en kombination av två frekvenser. Dessa frekvenser är uppdelade i två grupper: en högfrekvensgrupp och en lågfrekvensgrupp. Tabell 1 visar frekvenser, grupper och motsvarande symbolrepresentationer.

Bord 1. DTMF-tonkodning

Diskantgrupp

Lågpassgrupp

Frekvenser valdes för att undvika flera övertoner. Dessutom resulterar deras summa eller skillnad inte i en annan DTMF-frekvens. På detta sätt undviks övertoner eller modulationsdistorsion.

Q.23-standarden specificerar att felet för varje sänd frekvens måste ligga inom ±1,8 % av det nominella värdet, och den totala distorsionen (på grund av övertoner eller modulering) måste vara 20 dB under grundfrekvenserna.

Den resulterande signalen som beskrivs ovan kan beskrivas som:

s(t) = Acos(2πfhight)+ Acos(2πflödet),

där fhigh och flow är motsvarande frekvenser från hög- och lågfrekvensgrupperna.

Figur 1 visar den resulterande signalen för siffran "1". Figur 2 visar det frekvensspektrum som motsvarar denna signal.

Ris. 1. DTMF-ton

Ris. 2. DTMF-tonspektrum

Längden på DTMF-toner kan variera beroende på det specifika programmet som använder tonkodning. För de vanligaste applikationerna ligger varaktighetsvärdena vanligtvis mellan manuell och automatisk uppringning. Tabell 2 visar en sammanfattning av den typiska tidslängden för de två rekryteringstyperna.

Tabell 2. Varaktighet för tonvalssignaler

Typ av urtavla

Diskantgrupp

Diskantgrupp

Manuell uppringning

Automatisk uppringning

För att ge större flexibilitet är DTMF-generatorn som erbjuds i denna manual utrustad med en aktiveringsingång, som används för att starta signalgenereringen och bestämma dess varaktighet. I detta fall är varaktigheten av signalen lika med varaktigheten av pulsen vid aktiveringsingången.

Analog del av DTMF-generatorkretsen

ITU Rekommendation Q.23 definierar DTMF-signaler som analoga signaler skapade av två sinusvågor. I den föreslagna DTMF-generatorkretsen genererar Silego GreenPAK SLG46620V IC fyrkantsvågsignaler med önskade DTMF-frekvenser. För att erhålla sinusformade signaler med önskad frekvens och bilda den resulterande signalen (summan av två sinusformade vågor), krävs analoga filter och en adderare. Av denna anledning beslutades i detta projekt att använda filter och en combiner baserad på SLG88104V operationsförstärkare.

Figur 3 visar strukturen för den föreslagna analoga delen av anordningen.

Ris. 3. Analog bearbetningskrets för mottagning av DTMF-signal

Analoga filter används för att erhålla sinusformade signaler från rektangulära pulser. Efter att filtrering utförts summeras de två signalerna och den önskade tvåtons-DTMF-signalen alstras.

Figur 4 visar resultatet av Fouriertransformen som används för att erhålla spektrumet för fyrkantvågssignalen.

Ris. 4. Spektrum för en fyrkantsvågssignal

Som du kan se innehåller fyrkantvågen bara udda övertoner. Om vi ​​representerar en sådan signal med amplitud A i form av en Fourier-serie, kommer den att ha följande form:

Analys av detta uttryck tillåter oss att dra slutsatsen att om analoga filter har tillräcklig dämpning för övertoner, så är det fullt möjligt att erhålla sinusformade signaler med en frekvens som är lika med frekvensen för den ursprungliga fyrkantvågssignalen.

Med hänsyn till interferensnivåtoleransen som definieras i Q.23-standarden är det nödvändigt att säkerställa att alla övertoner dämpas med 20 dB eller mer. Dessutom måste valfri frekvens från lågpassgruppen kombineras med valfri frekvens från högpassgruppen. Med hänsyn till dessa krav utvecklades två filter, ett för varje grupp.

Båda filtren var lågpassfilter från Butterworth. Dämpningen av en order n Butterworth-filter kan beräknas som:

A(f)[dB] = 10 log(A(f) 2) = 10log(1+(f/fc) 2n),

där fc är filtrets gränsfrekvens, n är filterordningen.

Skillnaden i dämpning mellan den lägsta frekvensen och den högsta frekvensen för varje grupp kan inte vara mer än 3 dB, så:

A(fHÖGRE)[dB] - A(FLOWER)[dB] > 3 dB.

Givna absoluta värden:

A(fHÖGRE) 2 / A(FLOWER) 2 > 2.

Dessutom, som vi sa tidigare, bör harmonisk dämpning vara 20 dB eller mer. I detta fall kommer det värsta fallet att vara den lägsta frekvensen i gruppen, eftersom dess 3:e överton är den lägsta frekvensen och ligger närmast filtrets gränsfrekvens. Med tanke på att den 3:e övertonen är 3 gånger mindre än den grundläggande, måste filtret uppfylla villkoret (absoluta värden):

A(3fLOWER) 2 / A(FLOWER) 2 > 10/3.

Om dessa ekvationer tillämpas på båda grupperna måste filtren som används vara andra ordningens filter. Det betyder att de kommer att ha två motstånd och två kondensatorer vardera om de implementeras med op-förstärkare. Om tredje ordningens filter användes skulle känsligheten för komponenttoleranser vara lägre. De valda filtrets gränsfrekvenser är 977 Hz för lågpassgruppen och 1695 Hz för högpassgruppen. Vid dessa värden är skillnader i signalnivåer i frekvensgrupper förenliga med ovanstående krav, och känsligheten för förändringar i gränsfrekvensen på grund av komponenttoleranser är minimal.

Schematiska diagram av filter implementerade med SLG88104V presenteras i figur 5. Klassificeringarna för den första RC-par väljs på ett sådant sätt att utgångsströmmen från SLG46620V-chippet begränsas. Den andra filterlänken bestämmer förstärkningen, som är 0,2. Amplituden för fyrkantvågssignalerna sätter operationsförstärkarens arbetspunkt till 2,5 V. Oönskade spänningar blockeras av utgångsfilterkondensatorer.

Ris. 5. Schematiska diagram av utgångsfilter

Vid utgången summeras filtersignalerna, och den resulterande signalen är summan av övertoner valda från gruppen låga och höga frekvenser. För att kompensera för filterdämpning kan amplituden på utsignalen justeras med två motstånd R9 och R10. Figur 6 visar adderarkretsen. Figur 7 visar hela den analoga delen av kretsen.

Ris. 6. Schematisk bild av adderaren

Ris. 7. Analog del av kretsen

Digital del av DTMF-tongeneratorkretsen

Den digitala delen av DTMF-tongeneratorkretsen inkluderar en hel uppsättning fyrkantvågsgeneratorer - en för varje DTMF-frekvens. Eftersom åtta räknare krävs för att skapa dessa generatorer valdes GreenPAK SLG46620V-chippet för deras implementering. Vid utgångarna på den digitala kretsen alstras två rektangulära signaler, en för varje frekvensgrupp.

Fyrkantsvågssignaler genereras med hjälp av räknare och D-vippor och har en arbetscykel på 50 %. Av denna anledning är räknarväxlingsfrekvensen två gånger den erforderliga DTMF-frekvensen, och DFF-vippan delar utsignalen i två.

Klockkällan för räknarna är en inbyggd 2 MHz RC-oscillator, vars frekvens delas ytterligare med 4 eller 12. Delaren väljs med hänsyn till bitkapaciteten och det maximala värdet för varje räknare som krävs för att erhålla en specifik frekvens.

För att generera höga frekvenser krävs färre sampel, så 8-bitars räknare används för att generera dem, klockade från en intern RC-oscillator vars signal delas med 4. Av samma anledning implementeras lägre frekvenser med hjälp av 14-bitars räknare.

SLG46620V har bara tre standard 14-bitarsräknare, så en av de lägre frekvenserna implementerades med en 8-bitars CNT8-räknare. För att antalet sampel skulle falla inom intervallet 0...255, för att klocka denna CNT8 var det nödvändigt att använda en RC-oscillatorsignal dividerad med 12. För denna krets, frekvensen med det största antalet sampel, som is, den lägsta frekvensen, valdes. Detta gjorde att vi kunde minimera felet.

Tabell 3 visar parametrarna för varje fyrkantsvåg.

Tabell 3. Parametrar för fyrkantspulsgeneratorer

Klocka

Frekvensfel [%]

Lågpassgrupp

Diskantgrupp

Som framgår av tabellen har alla frekvenser ett fel på mindre än 1,8 %, så de överensstämmer med DTMF-standarden. Dessa beräknade egenskaper, baserade på den ideala RC-oscillatorfrekvensen, kan justeras genom att mäta RC-oscillatorns utfrekvens.

Även om i den föreslagna kretsen alla generatorer arbetar parallellt, kommer signalen från endast en generator från varje grupp att skickas till utgången på mikrokretsen. Valet av specifika signaler bestäms av användaren. Detta görs med fyra GPIO-ingångar (två bitar för varje grupp) med en sanningstabell som visas i Tabell 4.

Tabell 4. Tabell för val av frekvenser från lågfrekvensgruppen

Lågpassgrupp

Tabell 5. Frekvensvalstabell från högfrekvensgruppen

Diskantgrupp

Figur 8 visar logikkretsen för en 852 Hz fyrkantvågsgenerator. Detta mönster upprepas för varje frekvens med lämpliga räknarinställningar och LUT-konfiguration.

Ris. 8. Rektangulär pulsgenerator

Räknaren genererar en utfrekvens som bestäms av dess inställningar. Denna frekvens är lika med två gånger frekvensen för motsvarande DTMF-ton. Mätarens konfigurationsparametrar visas i figur 9.

Ris. 9. Exempel på inställning av en rektangulär pulsgeneratorräknare

Räknarens utsignal är ansluten till klockingång D-flip flop avtryckare. Eftersom DFF-utgången är konfigurerad som inverterad, om du ansluter DFF-utgången till dess ingång, konverteras D-vippan till en T-vippa. DFF-konfigurationsparametrarna kan ses i figur 10.

Ris. 10. Exempel på inställning av en rektangulär pulsgeneratortrigger

Signalen från DFF-utgången matas till LUT-sanningstabellingången. LUT:er används för att välja en signal för varje specifik R1-R0-kombination. Ett exempel på en LUT-konfiguration visas i figur 11. B i detta exempel, om R1 tar emot en "1" och R0 tar emot en "0", sänds insignalen till utgången. I andra fall innehåller utgången "0".

Ris. 11. Exempel på att sätta upp sanningstabellen för en fyrkantspulsgenerator

Som nämnts ovan har den föreslagna kretsen en aktiveringsingång. Om det finns en logisk enhet "1" vid enable-behörighetsingången, så matas de genererade rektangulära signalerna till ett par utgångar på mikrokretsen. Sändningslängden är lika med pulslängden vid aktiveringsingången. För att implementera denna funktion krävdes flera fler LUT:er.

Högpassgruppen använder en 4-bitars LUT och en 2-bitars LUT, som visas i figur 12.

Ris. 12. Diskantgrupputgångskrets

4-bitars LUT1 konfigurerad som logiskt element ELLER, så den matar ut en logisk etta "1" om en "1" finns vid någon av dess ingångar. C1/C0-sanningstabellerna tillåter endast en av oscillatorerna att väljas, så 4-bitars LUT1 bestämmer vilken signal som matas ut. Utgången på denna LUT är ansluten till 2-bitars LUT4, som endast sänder en signal om aktiveringsingången är en logisk "1". Figurerna 13 och 14 visar konfigurationerna av 4-bitars LUT1 och 2-bitars LUT4.

Ris. 13. 4-bitars LUT1-konfiguration

Ris. 14. 2-bitars LUT4-konfiguration

Eftersom det inte längre fanns 4-bitars sanningstabeller LUT, användes två 3-bitars LUT för lågpassgruppen.

Ris. 15. Lågpassgrupputgångskrets

Den kompletta interna kretsen för GreenPAK SLG46620V visas i figur 16. Figur 17 visar det slutliga kretsschemat för DTMF-generatorn.

Ris. 16. Blockschema över DTMF-tongenerator

Ris. 17. Schematisk bild av en DTMF-tongenerator

Testa DTMF-generatorkretsen

I det första steget av att testa den föreslagna DTMF-generatorn beslutades det att kontrollera frekvenserna för alla genererade rektangulära signaler med hjälp av ett oscilloskop. Som ett exempel visar figurerna 18 och 19 fyrkantvågsutgångarna för 852 Hz och 1477 Hz.

Ris. 18. Fyrkantsvåg 852 Hz

Ris. 19. Fyrkantsvåg 1477 Hz

När frekvenserna för alla fyrkantsvågssignaler kontrollerats började testning av den analoga delen av kretsen. Utsignalerna för alla kombinationer av låga och höga frekvenser undersöktes. Som ett exempel visar figur 20 summan av 770 Hz- och 1209 Hz-signalerna, och figur 21 visar summan av 941 Hz- och 1633 Hz-signalerna.

Ris. 20. DTMF-ton 770 Hz och 1209 Hz

Ris. 21. DTMF-ton 941 Hz och 1633 Hz

Slutsats

I denna artikel föreslogs en krets för en DTMF-tongenerator baserad på Silego GreenPAK SLG46620V-chippet och Silego SLG88104V operationsförstärkare. Generatorn låter användaren välja kombinationer av önskade frekvenser med hjälp av fyra ingångar och styra aktiveringsingången, som bestämmer varaktigheten för utsignalerna.

Egenskaper för SLG46620V-chippet:

  • Typ: Programmerbar blandad signal-IC;
  • Analoga block: 8-bitars ADC, två DAC, sex komparatorer, två filter, ION, fyra integrerade oscillatorer;
  • Digitala block: Upp till 18 I/O-portar, sammankopplingsmatris och kombinatorisk logik, programmerbara fördröjningskretsar, programmerbar funktionsgenerator, sex 8-bitars räknare, tre 14-bitars räknare, tre PWM-oscillatorer/komparatorer;
  • Kommunikationsgränssnitt: SPI;
  • Matningsspänningsområde: 1,8…5 V;
  • Drifttemperaturområde: -40…85 °C;
  • Paketversion: 2 x 3 x 0,55 mm 20-stift STQFN.

Utmärkande egenskaper:

  • Generera sinusvågor med pulsbreddsmodulering (PWM)
  • Kombinera olika sinusvågssignaler till en DTMF-signal
  • Källkoder i assembly och C-språk
  • Designad för att fungera med STK500
  • Programkodstorlek 260 byte / konstant tabellstorlek 128 byte
  • Använda tabellkonverteringsmetoden

Introduktion

Detta dokument beskriver en teknik för att generera DTMF-signaler (dual-tone multi-frequency signals) med användning av valfri AVR-mikrokontroller som innehåller en pulsbreddsmodulationsenhet (PWM) och statiskt RAM. Dessa signaler används i stor utsträckning inom telefoni, där de återges när du trycker på uppringningsknapparna på en telefon. För att generera en DTMF-signal på rätt sätt måste du lägga två frekvenser över varandra: låg frekvens(fb) och högfrekvens (fa). Tabell 1 visar hur olika frekvenser blandas för att producera DTMF-toner när olika tangenter trycks ned.

Figur 1 – DTMF-signalgeneratorkrets

Tabell 1 – Tonsignalgenereringsmatris

fb/fa 1209 Hz 1336 Hz 1477 Hz 1633 Hz
697 Hz 1 2 3 A
770 Hz 4 5 6 B
852 Hz 7 8 9 C
941 Hz * 0 # D

Raderna i Tabell 1 visar lågfrekvensvärden och kolumnerna visar högfrekvensvärden. Till exempel visar matrisen att när du trycker på “5”-knappen ska frekvenserna fb = 770 Hz och fa = 1336 Hz blandas. Som ett resultat av tillägget av två sinusformade signaler med olika frekvenser bildas en DTMF-signal

var är amplitudförhållandet K=Ab/Aa källsignaler måste uppfylla villkoret

Funktionsprincip

Förutom allmän information Om användningen av pulsbreddsmodulering kommer det att visas nedan hur pulsbreddsmodulering låter dig generera sinusformade signaler. Nästa stycke beskriver hur man använder basomkopplingsfrekvensen för att erhålla olika frekvenser. Efter övervägande teoretiska grunder En beskrivning av själva DTMF-signalgeneratorn kommer att ges. Generering av sinusvågor

Beroende på förhållandet mellan varaktigheten av höga VH- och låga VL-spänningsnivåer ändras medelvärdet vid PWM-utgången. Om förhållandet mellan varaktigheterna för båda nivåerna hålls konstant, kommer en konstant VAV-spänningsnivå att genereras som ett resultat. Figur 2 visar en pulsbreddsmodulerad signal.


Figur 2 – Generering av likspänningsnivå

Spänningsnivån bestäms av uttrycket:

(3)

En sinusformad signal kan genereras förutsatt att medelvärdet för spänningen som genereras av pulsbreddsmoduleringen ändras varje PWM-cykel. Förhållandet mellan höga och låga nivåer måste ställas in i enlighet med sinusvågens spänningsnivå vid motsvarande tidpunkt. Figur 3 illustrerar denna process. Källdata för PWM beräknas för var och en av dess perioder och registreras i konverteringstabellen (TC).

Figur 3 illustrerar också förhållandet mellan frekvensen av den grundläggande sinusvågen och antalet sampel. Ju högre antal sampel (Nc), desto högre är noggrannheten för att modellera den resulterande signalen:

(4)

PWM-frekvensen beror på PWM-upplösningen. Vid 8-bitars upplösning är det slutliga värdet (överst av räkningen) för timern 0xFF (255). Därför att Timern räknar sedan framåt och bakåt givet värde bör fördubblas. Därför kan omkopplingsfrekvensen beräknas genom att dividera klockfrekvens timer f CK vid 510. Sålunda, med en timerklockfrekvens på 8 MHz, blir den resulterande PWM-frekvensen 15,6 kHz.


Figur 3 – Generering av en sinusformad signal med PWM

Ändra frekvensen för en sinusvåg

Låt oss anta att sinusformade prov läses från uppslagstabellen inte sekventiellt, utan ett i taget. I detta fall kommer en signal med dubbel frekvens att genereras med samma samplingshastighet (se figur 4).


Figur 4 – Fördubbling av den resulterande frekvensen (XSW = 2)

I analogi, om du inte läser vartannat värde, utan vart tredje, fjärde, femte (respektive stegbredden är 3, 4, 5...), etc. det är möjligt att generera Nc-frekvenser i området. Observera att för höga frekvenser kommer den resulterande vågformen inte att vara sinusformad. Vi betecknar stegbredden enligt omvandlingstabellen som XSW, Var

(5)

Beräkning av den aktuella positionen i TP för nästa PWM-period (när timern svämmar över) utförs med hjälp av uttryck (6). Nytt värde i position X LUT beror på dess tidigare läge i position X" LUT med ökande stegbredd XSW

(6)

Lägga till olika frekvenser för att få en DTMF-signal

DTMF-signalen kan genereras med hjälp av uttryck (1) och (2). För att förenkla aritmetiska operationer tas värdet på koefficienten K lika med 0,75 för att ersätta den aritmetiska operationen med logiska skift. Med hänsyn till uttryck (6) kan det aktuella värdet för PWM-kontroll beräknas med uttrycket:

och med hänsyn till det X LUTa=X" LUta + XSWa ,X LUTb=X" LUTb + XSWb, låt oss äntligen skriva ner det

Implementering av en DTMF-generator

I den här applikationen diskuterar konstruktionen av en DTMF-tongenerator som använder en 8-bitars PWM-utgång (OC1A) och en tabell med 128 sinusfunktions (Nc) sampel, var och en specificerad av 7 bitar (n). Följande uttryck visar detta beroende och visar också hur man beräknar posterna i uppslagstabellen:

(9)

Fördelen med att använda 7 bitar är att summan av hög- och lågfrekventa signalvärden är en byte stor. För att stödja hela uppsättningen DTMF-toner måste 8 värden för varje DTMF-frekvens från Tabell 1 beräknas och matas in i uppslagstabellen.

För att uppnå högre noggrannhet implementerades följande lösning: värdena beräknade med uttryck 5 kräver endast 5 byte. För att använda alla 8 byte, vilket kommer att minska avrundningsfel, multipliceras detta värde med 8. Pekaren till uppslagstabellen skrivs på samma sätt. Men i det här fallet tar det två byte att lagra 8 gånger värdet. Detta innebär att 3 högerskift och en radix Nc-moduloperation (logisk multiplikation med Nc-1) måste utföras innan dessa bytes används som pekare till sinusvågsvärdena i


Figur 5 – Moduldiagram för anslutning till STK500

PWM-signalen genereras vid stift OC1A (PD5). Ett extra utgångsfilter hjälper till att göra signalen mer kompatibel med den sinusformade vågformen. Vid sänkning av PWM-frekvensen kan det vara nödvändigt att använda ett filter med en brantare frekvensgång för att få ett bra resultat.

Tangentbordsanslutningen visas i figur 1. Tangentbordets funktion måste organiseras på ett sådant sätt att det är möjligt att avgöra vilken tangent som trycks ned. Detta kan göras med hjälp av följande algoritm:

  1. Bestämma strängen för den nedtryckta tangenten
    • konfigurera den lågordnade bärbara datorn för port B som en utgång och ställ in loggen. "0"
    • konfigurera den höga tetrad för port B som en ingång med anslutning av pull-up-motstånd
    • linjen med den nedtryckta knappen definieras som siffran för den högsta tetraden med log. "0"
  2. Definiera kolumnen för nedtryckt tangent
    • konfigurera den höga bärbara datorn för port B som en utgång och ställ in loggen. "0"
    • konfigurera lågordningens tetrad för port B som en ingång genom att ansluta pull-up-motstånd
    • kolumnen med den nedtryckta knappen definieras som siffran för den låga ordningens tetrad med log. "0"

Obs: I STK200 är motstånd anslutna i serie mellan PORTB-kontaktstiften och mikrokontrollerstiften BP5, PB6 och PB7 (se STK200-diagram). Detta kommer att orsaka problem om tangentbordet är anslutet till PORTB-kontakten.

Figur 6 illustrerar funktionen av subrutinen för att bestämma den nedtryckta tangenten. Beroende på vilken tangent som trycks in bestäms intervallets varaktighet. Avbrottsrutinen använder detta värde för att beräkna PWM-inställningarna för de två DTM-tonsinusvågorna. Proceduren för avbrottshantering visas i figurerna 7 och 8.

Denna rutin beräknar ett värde att jämföra med timerutgången för nästa PWM-period. Avbrottsrutinen beräknar först positionen för nästa sampelvärde i uppslagstabellen och läser värdet som lagrats där.

Provets position i uppslagstabellen bestäms av pulsbredden och den faktiska pulsbredden bestäms av den genererade frekvensen.

Det slutliga värdet som skrivs till timerjämförelseregistret bestäms med formeln (7), som tar hänsyn till sampelvärdena för båda DTMF-frekvenserna.


Figur 6 – Blockschema över huvudprogrammet

Med introduktionen av modern digital växel I Ryska federationens telefonnät sprids gradvis en flerfrekvensmetod för att överföra uppringningssignaler, betecknad med den engelska förkortningen DTMF (Dual-Tone Multiple-Frequency). Ibland används en annan engelsk term för att namnge detta system för överföring av uppringningssignaler - Touch-None (tonval). Denna metod utvecklades 1960, men dess verkliga spridning började på 80-talet med spridningen av digitala (elektroniska) telefonväxlar.

Med denna metod för att sända styrsignaler består varje flerfrekvenssiffrig signal av två toner i enlighet med ITU-T Rekommendation Q.23 "Technical Features of Touch-Dial Telephones".

DTMF-frekvenser väljs inte harmoniskt. Det betyder att frekvenserna inte har en annan heltalsdelare än 1. Till exempel är frekvenserna 1200 och 1600 Hz övertoner av frekvensen 400 Hz (3x400=1200 och 4x400=1600), och frekvenserna 697 och 770 Hz är icke-harmoniska.

Varje signal innehåller två frekvenser: en vald från den nedre och den andra från den övre gruppen av frekvenser.

Överensstämmelsen mellan den överförda informationen och frekvenserna visas i tabellen på laboratorieinstallationens frontpanel.

Överföringsnivån i ett tvåfrekvenspaket, mätt vid en belastning på 600 Ohm, är: för den undre frekvensgruppen - minus 6 dBmO ± 2 dB, för den övre frekvensgruppen - minus 3 dBmO ± 2 dB. Frekvensnivån för den övre gruppen av frekvenser i den totala signalen är 2 ±1 dB högre än frekvensnivån för den undre gruppen. Den totala nivån för alla högre ordningens frekvenskomponenter är minst 20 dB under den lägre ordningens frekvensnivå.

Förhållandena under vilka normal signalmottagning bör ske är följande: närvaron av två frekvenser i signalen, av vilka en väljs från den nedre gruppen och den andra från den övre; frekvenser skiljer sig inte från deras nominella värden med mer än 1,8%; nivån för var och en av de två frekvenserna sträcker sig från minus 7 till minus 30 dBmO; skillnaden mellan nivåerna för de två frekvenserna inte överstiger 3 dB; varaktigheten av frekvenssignalen är minst 40 ms.

Utför följande åtgärder innan du slår på installationen:

Ställ omkopplaren S6 i det nedre läget;

Ställ omkopplaren S13 i det övre läget;

Ställ omkopplarna för generatorerna för de övre och nedre frekvensgrupperna till "Av" -läget;

Ställ den analoga nyckelomkopplaren (AK) i läge "På";

Vrid vreden för att justera utspänningen från generatorerna och motståndet R3 moturs tills de stannar.

dtmf-signalkonditionering

1.1 Aktivera installation.

1.2 Anslut oscilloskopet till KT3-testpunkten.

1.3 Slå på generatorn för den övre frekvensgruppen, genom att trycka på en av omkopplarknapparna, välj någon av frekvenserna i denna grupp.

1.4 Vrid generatorns utgångsspänningsjusteringsratt för att ställa in signalamplituden i CT3 till 0,5 volt.

1.5 Växla oscilloskopingången till KT4-testpunkten. Upprepa steg 1.3, 1.4 för generatorn i den lägre frekvensgruppen, ställ in spänningen i KT4 till 0,5 V.

NOTERA: Som ett resultat av de utförda operationerna tillförs signaler med samma amplitud från de övre och nedre frekvensgrupperna till adderarens ingång. Efter att ha ställt in dessa nivåer, lås generatorns utspänningsjusteringsknappar.

1.6 Växla oscilloskopingången till KT7-testpunkten. Ställ in spänningen i CT7 till 0,5 volt genom att vrida på motståndsratten (R3) för att justera utspänningen från DTMF-signalbehandlaren.

NOTERA: Som ett resultat av de utförda operationerna tillförs en kontinuerlig tvåtonssignal till mottagaringången, och symbolen som motsvarar kombinationen av frekvenser för generatorerna i de övre och nedre frekvensgrupperna ska visas på indikatorn för den mottagna symbolen , i enlighet med tabellen. En indikation på en mottagen och identifierad signal är närvaron av en signal vid utgången av STD-mottagaren (LED-glöd).

      Genom att byta frekvenser för de övre och nedre frekvensgrupperna, se till att kombinationerna av dessa frekvenser motsvarar de mottagna symbolerna.