Studie av mottaker og sender av dtmf-signaler. Dual-tone multi-frequency (DTMF) generator på AVR La oss nå se hva vi har

Den første delen av denne applikasjonen beskriver hvordan du genererer DTMF-signaler ved å bruke MSP430-mikrokontrolleren. Det gis en forklaring på de viktigste spesifikasjonene som brukes i dette tilfellet, og den teoretiske og matematiske begrunnelsen for å generere sinusbølger ved bruk av firkantbølger ved bruk av passende analoge filtre er gitt. Eksemplet inkluderer også testede demoprogrammer for å generere firkantbølgesignaler basert på ulike timerkonfigurasjoner av MSP430-mikrokontrollerne. Den siste delen gir et kretsskjema for generering av DTMF-signaler fra firkantbølgesignaler.

2 DTMF-signalspesifikasjon

Forkortelsen DTMF står for "Dual Tone Multi Frequency" og er en metode for å representere sifre ved forskjellige frekvenser med det formål å sende dem over analoge kommunikasjonslinjer, f.eks. telefonlinje. Ved utviklingen av standarden ble tilstanden tatt i betraktning - alle frekvenser må være i "stemme" -området, noe som gjorde det mulig å redusere kravene til overføringskanalen. Telefonnettverk bruker DTMF-signaler for oppringing og annen informasjon. Til tross for at pulsoppringingsmetoden fortsatt er mye brukt, som er standarden, for eksempel i Tyskland, øker oppringingstiden betydelig, noe som fører til uproduktiv belastning på kommunikasjonslinjer. I tillegg mange Tilleggstjenester Kommunikasjon er kun mulig med toneoppringing. Ved koding med DTMF-metoden, tallene 0-9 og bokstavene A-D, */E og #/F representerer kombinasjoner av to frekvenser:

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

I dette systemet representerer kolonnen frekvensen fra den "øvre" frekvensgruppen (Hi-Group: 1209-1633 Hz), og raden representerer frekvensen fra den "nedre" frekvensgruppen (Lo-Group: 697-941 Hz) . Tonale frekvenser er valgt for å eliminere påvirkningen av harmoniske. Frekvensene er ikke multipler av hverandre, og ingen DTMF-frekvens kan oppnås ved å legge til eller trekke fra andre frekvenser. For å generere en oppringer på Deutsche Telekom-nettverket, kreves følgende spesifikasjoner (hentet fra Zulassungsvorschrift des Bundesamtes fur Post und Telekommunikasjon, BAPT 223 ZV 5 (Offisiell spesifikasjon av det føderale departementet for post og telekommunikasjon):

3 Generer DTMF-signaler

Som beskrevet ovenfor er DTMF-signaler analoge og består av to uavhengige sinusbølger. Dermed er det ikke mulig å generere bare slike signaler digitalt. Digitale signaler må konverteres ved hjelp av ADC-er og/eller analoge filtre til den nødvendige sinusbølgeformen.

3.1 Generering ved hjelp av firkantbølger

Hvis firkantbølgesignaler brukes til å generere DTMF-signaler, vil programvaren og maskinvare minimal. Ethvert kontinuerlig signal med en periode T kan representeres av en Fourier-serie som består av en uendelig sum av sinus- og cosinusbølger som følger:

Hvor a0/2 er den konstante komponenten av signalet. Sumelementet med den laveste vinkelfrekvensen (w0) kalles hoved (fundamental) harmoniske, resten er overtoner eller høyere harmoniske.

Det enkleste kontinuerlige signalet implementert ved hjelp av en mikrokontroller er en firkantbølge, Fourier-serien som har formen:

Bidraget til hver frekvenskomponent til det totale signalet demonstreres best av amplitudespekteret (se fig. 2):


Ris. 2: Amplitudespekteret til et firkantbølgesignal

Ved bruk av analogt filter blir DC-komponenten og høyere harmoniske effektivt undertrykt, mens vi ved utgangen har et sinusformet signal med en frekvens lik frekvensen til den opprinnelige firkantbølgen.

3.2 Programvare for å generere meander

Meandergenerasjonsprogrammet må tilfredsstille følgende krav:

  • Kunne syntetisere to uavhengige rektangulære signaler.
  • For å skille signalene, kreves det to utgangspinner for å generere signaler fra den "øvre" (Hi-Group) og "nedre" (Lo-Group) frekvensområder hhv.
  • Programvaren skal kunne stille inn nødvendig signalvarighet i området ca. 65 ms - 100 ms.

MSP430-seriens mikrokontrollere har forskjellige innebygde timere som er i stand til å generere firkantbølgesignaler. '31x/'32x-familien bruker en 8-bits timer og en timerport for å generere begge firkantbølgesignalene. Dette programmet testet ved MCLK-frekvens lik 1,048 MHz. Timer_A i '33x-familien kan uavhengig generere begge nødvendige signaler. Det andre programmet bruker denne timeren til å generere firkantbølger og fungerer med alle MCLK-frekvenser. Begge programmene vil bli diskutert i detalj nedenfor.

3.2.1 Generering av firkantbølger ved hjelp av en 8-bits timer og timerport

I fig. 3 er et flytskjema over initialiseringsprosedyren for å generere DTMF-signaler. For å syntetisere de to frekvensene, brukes timerporten og 8-bits timertellere. Hver av dem er et programmerbart tellerregister som er nødvendig for nøyaktig syntese av de nødvendige frekvensene. Hvis timer-port-tellerne er kaskaded til en enkelt 16-bits timer og klokket til systemfrekvensen MCLK, så kan høyfrekvensfrekvensene genereres med høy nøyaktighet. Når et avbrudd oppstår, blir den tilsvarende utgangen svitsjet og begge 8-bits tellerregistrene tilbakestilles. Lastede verdier lagres i to variabler i RAM for å lagre interne registre for andre oppgaver.

Lavfrekvensfrekvensene genereres av en 8-bits timer. Siden tellerregisteret til denne timeren er 8 bits bredt, forårsaker bare hvert tredje avbrudd en nivåendring på den nødvendige utgangspinnen, slik at den samme frekvenstelleren kan genereres.

To timerutganger - porter brukes til å danne to meandere med forskjellige frekvenser.

Ris. 3 Flytskjema for initialiseringsprosedyre for generering av DTMF-signaler

Initialiseringsprosedyren utføres kun én gang. Etter fullføringen leses den heksadesimale verdien til det overførte tegnet fra den globale variabelen i RAM. Når de to frekvensene som danner de høye og lave DTMF-tonene er generert fra de to tabellene, er alt som kreves å initialisere og starte begge tidtakerne. Varigheten av sendingen kontrolleres ved å telle halvsyklusene til den "lavere" frekvensen og leses fra en ekstra tabell. Når denne prosedyren er fullført, går du tilbake til pollingfunksjonen. De tilsvarende rutinene for avbruddshåndtering bytter portpinnene. Denne prosessen er vist i fig. 4 og 5.

Oppgavene til timer-porten inkluderer kun registrering av loggen. nivå ved portutgangen og omlasting av telleren fra RAM, mens driften av en 8-bits timer har en litt mer kompleks struktur: hver inngang til avbruddet telles av et tellerregister. Utgangen kan endre tilstand bare etter tre avbrudd. I tillegg telles også hver halvsyklus. Genereringen stopper når et visst antall halvsykluser er nådd.


Ris. 4 blokk – avbruddskrets fra en 8-bits timer (Lo-Group)


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

; Egendefinerte definisjoner FLLMPY equ 32 ; Frekvensmultiplikator FLL ved 1,048 MHz TCLK equ FLLMPY*32768 ; TCLK: FLLMPY x f kvarts DL equ 85 ; DTMF signal varighet (65..100 ms) LO_OUT equ 02h ; Utgang av "lavere" frekvens HI_OUT equ 04h ; Høyfrekvent utgang RCOUNT equ r14 ; Lengdeteller DTMF RTEMP equ r15 ; tjeneste register.global DTMF_NR ; global variabel i RAM; for DTMF-nummer (0..F); Definisjoner RAM.even .bss DTMF_TL ; Even adresse alignment.bss DTMF_TH .bss DTMF_NR ; global variabel i RAM; for DTMF-nummer (0..F).even ; Definisjoner for 8-bits timer TCCTL EQU 42H TCPLD EQU 43H TCDAT EQU 44H ; Definisjoner for den universelle timerporten TPCTL equ 04bh ; Timer-port kontroll TPCNT1 equ 04ch ; Timer-port teller 1 TPCNT2 equ 04dh ; Timer-port teller 2 TPD equ 04eh ; Timer-port data TPE equ 04fh ; Timer-port-resolution.text ; DTMF-frekvenstabeller: tabellen inneholder; antall MCLK-sykluser for en halvsyklus. ; Tabell for "øvre" frekvens; Korrigerende endring lagt til; å ta hensyn til tidspunktet for inntreden i avbruddet DTMF_HI .word 0ffffh-(TCLK/(1336*2))+25 ; Høy frekvens for 0 .ord 0ffffh-(TCLK/(1207*2))+28 ; Høy frekvens for 1 .ord 0ffffh-(TCLK/(1336*2))+25 ; Høy frekvens for 2 .ord 0ffffh-(TCLK/(1477*2))+24 ; Høy frekvens for 3 ord 0ffffh-(TCLK/(1207*2))+28 ; Høy frekvens for 4 .ord 0ffffh-(TCLK/(1336*2))+25 ; Høy frekvens for 5 .ord 0ffffh-(TCLK/(1477*2))+24 ; Høy frekvens for 6 .ord 0ffffh-(TCLK/(1207*2))+28 ; Høy frekvens for 7 .ord 0ffffh-(TCLK/(1336*2))+25 ; Høy frekvens for 8 .ord 0ffffh-(TCLK/(1477*2))+24 ; Høy frekvens for 9 .ord 0ffffh-(TCLK/(1633*2))+22 ; Høy frekvens for A .ord 0ffffh-(TCLK/(1633*2))+22 ; Høy frekvens for B .ord 0ffffh-(TCLK/(1633*2))+22 ; Høy frekvens for C .ord 0ffffh-(TCLK/(1633*2))+22 ; Høy frekvens for D .ord 0ffffh-(TCLK/(1207*2))+28 ; Høy frekvens for * .ord 0ffffh-(TCLK/(1477*2))+24 ; Høy frekvens for # ; Tabell for "lavere" frekvens DTMF_LO .byte 0ffh-(TCLK/(941*2*3)) ; Lav frekvens for 0 .byte 0ffh-(TCLK/(697*2*3)); Lav frekvens for 1 .byte 0ffh-(TCLK/(697*2*3)); Lav frekvens for 2 .byte 0ffh-(TCLK/(697*2*3)); Lav frekvens for 3 .byte 0ffh-(TCLK/(770*2*3)); Lav frekvens for 4 .byte 0ffh-(TCLK/(770*2*3)); Lav frekvens for 5 .byte 0ffh-(TCLK/(770*2*3)); Lav frekvens for 6 .byte 0ffh-(TCLK/(853*2*3)); Lav frekvens for 7 .byte 0ffh-(TCLK/(853*2*3)); Lav frekvens for 8 .byte 0ffh-(TCLK/(853*2*3)); Lav frekvens for 9 .byte 0ffh-(TCLK/(697*2*3)); Lav frekvens for A .byte 0ffh-(TCLK/(770*2*3)); Lav frekvens for B .byte 0ffh-(TCLK/(853*2*3)); Lav frekvens for C .byte 0ffh-(TCLK/(941*2*3)); Lav frekvens for D .byte 0ffh-(TCLK/(941*2*3)); Lav frekvens for *.byte 0ffh-(TCLK/(941*2*3)); Lav frekvens for # ; Signalvarighetstabell DTMF_L .byte 2*941*DL/1000 ; Halve sykluser for 0 .byte 2*697*DL/1000; Halve sykluser for 1 .byte 2*697*DL/1000; Halve sykluser for 2 byte 2*697*DL/1000; Halve sykluser for 3 byte 2*770*DL/1000; Halve sykluser for 4 byte 2*770*DL/1000; Halve sykluser for 5 .byte 2*770*DL/1000; Halve sykluser for 6 .byte 2*852*DL/1000 ; Halve sykluser for 7 .byte 2*852*DL/1000 ; Halve sykluser for 8 .byte 2*852*DL/1000 ; Halve sykluser for 9 .byte 2*697*DL/1000 ; Halve sykluser for A .byte 2*770*DL/1000 ; Halve sykluser for B.byte 2*852*DL/1000; Halve sykluser for C.byte 2*941*DL/1000; Halve sykluser for D .byte 2*941*DL/1000; Halve sykluser for *.byte 2*941*DL/1000 ; Halve sykluser for # ;********************************************* ********** *********************************** ; DTMF-TX DTMF subrutine ;********************************************* ********************************* DTMF_TX mov.b DTMF_NR,RTEMP ; Lagre nummeret i et midlertidig register mov.b DTMF_L(RTEMP),RCOUNT ; Lagre varighetsteller; klargjør 8-bits timer for DTMF-Lo frekvens mov.b #0a8h,&TCCTL ; Klokke fra MCLK mov.b DTMF_LO(RTEMP),&TCPLD ; Registrer forberedelse; forhåndslast mov.b #000,&TCDAT ; Laste en teller fra et register; forhåndslast bis.b #008h,&IE1 ; Aktiver avbrudd; fra en 8-bits timer; klargjøring av en timerport for DTMF-Hi-frekvensen rla r15; * 2 for 16-biters tabell mov DTMF_HI(RTEMP),&DTMF_TL ; lagre ord for høyfrekvent mov #003,RTEMP ; teller for 8-bits timer bis.b #008h,IE2 ; Aktiver avbrudd; fra timer-port mov.b &DTMF_TH,&TPCNT2 ; Laster den høye byten inn i TC2 mov.b &DTMF_TL,&TPCNT1 ; Laster lav byte inn i TC1 bis.b #080h,&TPD ; Aktiver 16-bits timer bis.b #HI_OUT+LO_OUT,&TPE ; Aktiver DTMF-Hi/Lo-utganger mov.b #090h,&TPCTL ; Aktiver timer ret ;************************************************** ********** *********************************** ; Timer-port avbrudd;********************************************* ***** ******************************* TP_INT xor.b #HI_OUT,&TPD ; Inverter DTMF-Hi-utgang mov.b &DTMF_TH,&TPCNT2 ; Laster senior ba

3.2.2 1 Generering av firkantbølger ved hjelp av Timer_A

Denne DTMF-signalgenereringsrutinen bruker bare Timer_A for å firkantbølge begge ønskede frekvenser. Monteringsprosessen beregner de riktige verdiene for timeren for å bruke programmet uavhengig av MCLK-frekvensverdien. Varigheten av utgangssignalet er spesifisert av DL-konstanten i millisekunder.

; Maskinvaredefinisjoner; FLLMPY .equ 32; Frekvensmultiplikator FLL ved 1,048 MHz TCLK .equ FLLMPY*32768; TCLK: FLLMPY x f kvarts DL .equ 82 ; DTMF-signalets varighet i ms; (65..100 ms) STAKKE .equ 600h ; Stabelinitialiseringsadresse; RAM definisjoner; STDTMF.equ 202h; Hi og Lo frekvensstatus TIM32B .equ 204 ; Forlengelse av timerregister LENGTH .equ 206h ; DTMF varighet teller; .tekst 0F000h ; Startadressen til programmet; ; Timer_A initialisering: MCLK, kontinuerlig modus, avbrudd aktivert; Klargjøring av timerutgangsmoduler Timer_A MCLK = 1,048 MHz (automatisk) ; INIT MOV #STACK,SP ;Initialisering av stabelpekeren CALL #INITSR ;Initialisering av multiplikatoren; FLL-frekvenser og RAM MOV #ISMCLK+TAIE+CLR,&TACTL ; Initialisere timeren MOV.B #TA2+TA1,&P3SEL ; Utganger TA2 og TA1 på portene P3.5/4 CLR TIM32B; Slett utvidet tidtakerregister BIS #MCONT,&TACTL ; Start timer Timer_A EINT ; Generell avbrudd aktiver MAINLOOP ... ; Hovedsløyfe; ;Tasttrykk: SDTMF inneholder tabellforskyvningen; for 2 frekvenser (0..6,0..6) i høy og lav byte; MOV&TAR,R5 ; For å starte umiddelbart: ADD FDTMFLO,R5 ; Offset for kortere tid MOV R5,&CCR1 ; Første tilstandsendring etter 0,71 ms MOV R5,&CCR2 ; 1/(2x697) = 0,71ms MOV #OMT+CCIE,&CCTL1 ; Utgangsinversjon, bitavbrudd. MOV #OMT+CCIE,&CCTL2 ; Inverter utgang, avbruddsbit MOV.B STDTMF,R5 ; 82 ms teller RRA R5 ; antall tilstandsendringer med lavere frekvens MOV.B DTMFL(R5),LENGTH ; for signalets varighet... ; fortsettelse av programmet; ; Interrupt handler fra CCR0 (brukes ikke her); TIMMOD0 ... RETI ; ; Interrupt handler fra fangst-sammenligningsregistre 1..4; TIM_HND ADD &TAIV,PC ; Behandle forespørselen med den høyeste; RETI prioritet; ingen avbruddsforespørsel: RETI JMP HCCR1 ; forespørsel fra CCR1 (DTMF lavfrekvent) JMP HCCR2 ; forespørsel fra CCR2 (DTMF høy frekvens) JMP HCCR3 ; forespørsel fra CCR3 JMP HCCR4 ; forespørsel fra CCR4; TIMOVH INC TIM32B ; Utvide Timer_A til 32 bits RETI ; ; DTMF lav frekvens: TA1 inverterer utgangen fra utgangsenhet 1; Hver tilstandsendring telles for å kontrollere varigheten av signalet; HCCR1 PUSH R5 ; Lagring av brukte registre MOV.B STDTMF,R5 ; Lavfrekvensstatus DTMF ADD FDTMFLO(R5),&CCR1 ; Legg til halv syklus varighet DEC.B LENGTH ; Er DL-signalets varighet fullført? JNZ TARET ; Nei; ; Ja, stopp DTMF-signal: deaktiver avbrudd; BIC #OMRS+OUT+CCIE,&CCTL1 ; Tilbakestill TA1 BIC #OMRS+OUT+CCIE,&CCTL2 ; Tilbakestill TA2 TARET POP R5 ; Gjenopprett R5 RETI; Retur fra avbrudd; ; Høyfrekvent DTMF: TA2 inverterer utgangen fra utgangsenhet 2; HCCR2 PUSH R5 ; Lagre brukte MOV-registre. B STDTMF+1,R5; Høyfrekvent status DTMF ADD FDTMFHI(R5),&CCR2 ; Legg til halvsyklus varighet POP R5 ; Gjenopprett R5 RETI; Retur fra avbrudd; HCCR3 ... ;Oppgave kontrollert av register CCR3 RETI HCCR4 ... ;Oppgave kontrollert av register CCR4 RETI ; ; DTMF Frekvenstabell: Tabellen inneholder; antall MCLK-sykluser per halv syklus. Verdier justert for; effektiv frekvens MCLK under monteringsprosessen; og avrundet til minimum mulig feil frekvenser; FDTMFLO .ord ((TCLK/697)+1)/2 ; Lavfrekvent 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øyfrekvent DTMF1209Hz .ord ((TCLK/1336)+1)/2 ; 1336Hz.ord ((TCLK/1477)+1)/2; 1477Hz.ord ((TCLK/1633)+1)/2; 1633 Hz; ; Tabellen inneholder antall halvsykluser for varigheten av DL-signalet (ms). ; Den nedre DTMF-frekvensen brukes for telling; DTMFL .byte 2*697*DL/1000 ; Antall halve sykluser.byte 2*770*DL/1000 ; for DL ​​i ms.byte 2*852*DL/1000 ; .byte 2*941*DL/1000 ; ; .sect "TIMVEC",0FFF0h ; Timer avbrudd vektorer Timer_A .word TIM_HND ; Vektor av moduler 1..4 timers.word TIMMOD0 ; Timermodul 0 vektor.sect "INITVEC",0FFFEh ; Vektor Nullstille.word INIT

Nedenfor er en litt raskere løsning. Det krever imidlertid mer RAM fordi... Dataene hentet fra tabellene blir ikke beregnet på nytt hver gang, men lagres i et nøtteskall i RAM DTMFLO og DTMFHI. Lesing gjøres fra Timer_A timer avbruddsrutiner. Tabellene som brukes er identiske med de som er vist i forrige eksempel.

FLLMPY .equ 32; Frekvensmultiplikator FLL ved 1,048 MHz TCLK .equ FLLMPY*32768; TCLK: FLLMPY x f kvarts DL .equ 82 ; DTMF-signalets varighet; i ms (65..100 ms) STDTMF ekv 202h; Hi og Lo frekvensstatus TIM32B .equ 204 ; Forlengelse av timerregister LENGTH .equ 206h ; DTMF varighet teller DTMFLO .equ 208h ; Halvsyklus av den nedre frekvensen DTMFHI .equ 20Ah; Øvre frekvens halv syklus STAK .equ 600h ; Stack initialisering address.text 0F000h ; Startadressen til programmet; Timer_A initialisering: MCLK, kontinuerlig modus, avbrudd aktivert; Klargjøring av timerutgangsmoduler Timer_A MCLK = 1,048 MHz (automatisk) ; INIT MOV #STACK,SP ; Initialisere stabelpekeren CALL #INITSR ; Multiplikatorinitialisering; FLL-frekvenser og RAM MOV #ISMCLK+TAIE+CLR,&TACTL ; Start timer MOV.B #TA2+TA1,&P3SEL ; Utganger TA2 og TA1 på portene P3.5/4 CLR TIM32B; Sletting av det utvidede timerregisteret BIS #MCONT,&TACTL ;Starte timeren Timer_A EINT ; Generell avbrudd aktiver MAINLOOP ... ; Hovedsløyfe; Tastetrykk: SDTMF inneholder tabelloffset; for 2 frekvenser (0..6,0..6) i høy og lav byte; MOV&TAR,R5 ; For å starte umiddelbart ADD FDTMFLO,R5 ; Offset for kortere tid MOV R5,&CCR1 ; Første tilstandsendring etter 0,71 ms MOV R5,&CCR2 ; 1/(2x697) = 0,71ms; ; Hent de to syklustellingene for DTMF-frekvensene; MOV.B STDTMF+1,R5; Høyfrekvent DTMF MOV FDTMFHI(R5),DTMFHI ; Halvsyklus varighet MOV.B STDTMF,R5 ; Lavfrekvent DTMF MOV DTMFLO(R5),DTMFLO ; Halv syklus varighet; ; Varighetsteller RRA R5 ; Forbered byteindeks MOV.B DTMFL(R5),LENGDE ; antall tilstandsendringer med lavere frekvens MOV #OMT+CCIE,&CCTL1 ; Utgangsinversjon, bitavbrudd. MOV #OMT+CCIE,&CCTL2 ; Utgangsinversjon, bitavbrudd. ... ; Gå tilbake til hovedsløyfen; ; Interrupt handler fra CCR0 (brukes ikke her); TIMMOD0 ... RETI ; ; Interrupt handler fra fangst-sammenligningsregistre 1..4; TIM_HND ADD &TAIV,PC ; Behandle forespørselen med den høyeste; RETI prioritet; ingen avbruddsforespørsel: RETI JMP HCCR1 ; forespørsel fra CCR1 (DTMF lavfrekvent) JMP HCCR2 ; forespørsel fra CCR2 (DTMF høy frekvens) JMP HCCR3 ; forespørsel fra CCR3 JMP HCCR4 ; forespørsel fra CCR4; TIMOVH INC TIM32B ; Utvide Timer_A til 32 bits RETI ; ; DTMF lav frekvens: TA1 inverterer utgangen fra utgangsenhet 1; HCCR1 ADD DTMFLO,&CCR1 ; Legg til halv syklus varighet DEC.B LENGTH ; Er DL-signalets varighet fullført? JNZ TARET ; Nei; ; Ja, stopp DTMF-signal: deaktiver avbrudd; BIC #OMRS+OUT+CCIE,&CCTL1 ; Tilbakestill TA1 BIC #OMRS+OUT+CCIE,&CCTL2 ; Tilbakestill TA2 TARET RETI ; Retur fra avbrudd; Høyfrekvent DTMF: TA2 inverterer utgangen fra utgangsenhet 2; HCCR2 ADD DTMFHI,&CCR2 ; Legg til halvsyklus varighet RETI ; Retur fra avbrudd; HCCR3. .. ;Oppgave kontrollert av register CCR3 RETI HCCR4 ... ;Oppgave kontrollert av register CCR4 RETI ; ; Avbruddstabellene og vektorene er identiske med de som er vist i forrige eksempel.

3.3 Maskinvare for generering av DTMF-signaler

Som nevnt ovenfor, i frekvensområdet 200 Hz.. 4600 Hz, må signalnivået til overføringsfrekvensen være minst 20 dB over nivået for fremmede signaler (støy). I tillegg, basert på spesifikasjonen, må signaler fra de "øvre" og "nedre" gruppene ha forskjellige nivåer, så hvert signal krever sitt eget filter. Sinusformede frekvensamplituder kan fås fra Fourier-serien.

For å velge grensefrekvenser når du designer et analogt filter, må du overholde følgende krav basert på:

  • Fordi det er nødvendig å sikre muligheten for kombinasjoner av frekvenser i den "nedre" gruppen med frekvenser i den "øvre" gruppen; forskjellen i nivåer mellom de laveste og høyeste frekvensene i gruppen bør ikke overstige 3 dB.
  • For den laveste frekvensen i gruppen (f1), bør harmonisk undertrykkelse (3f1) ikke være dårligere enn 20 dB. Oppfyllelsen av denne betingelsen er mest kritisk for den lavere frekvensen i gruppen, fordi den er så langt unna filterets grensefrekvens som mulig.

Formelen beskriver kvadratet av den absolutte verdien ved utgangen av et høypass Butterworth-filter av orden n:

Denne formelen representerer avhengigheten av Butterworth høypassfilterforsterkningen på frekvensen. Parametrene fg og n bestemmer henholdsvis cutoff-frekvensen og rekkefølgen til filteret.

Først av alt er det nødvendig å beregne den nødvendige filterrekkefølgen, under hensyntagen til overholdelse av kravene ovenfor.

For å tilfredsstille den første betingelsen, må forholdet mellom kvadratene av de absolutte verdiene for de laveste og høyeste frekvensene i gruppen ikke være mer enn 3 dB eller:

Den andre betingelsen vil bli oppfylt automatisk hvis forholdet mellom kvadratene av de absolutte verdiene til frekvensene f1 og 3f1 er mer enn 10/3, i dette tilfellet er den tredje harmoniske i det rektangulære signalet 1/3 mindre (se Fourier serie og fig. 2):

Som et resultat av beregninger for frekvensene til begge gruppene har vi den nødvendige filterrekkefølgen n=1,15. Dermed vil kravene tilfredsstilles av et 2. ordens filter, som kan bygges på en operasjonsforsterker. Hvis du bruker et 3. ordens filter trenger du bare to ekstra elementer. Dette vil imidlertid redusere kravene til spredning av komponentparametere. Begge kravene ovenfor vil bli oppfylt hvis grensefrekvensen er innenfor følgende grenser:

Nederste gruppe fg>880 Hz fg<1418 Гц
Øvre gruppe fg>1527 Hz fg<2460 Гц

Hvis grensefrekvensen er på minimum, vil maksimal harmonisk reduksjon forekomme. Men i dette tilfellet vil forskjellen mellom de laveste og høyeste frekvensene i gruppen være 3 dB. Ved høyest mulig grensefrekvens er nivåforskjellen minimal, men harmoniske komponenter undertrykkes med kun 20 dB.

Ved beregning av filteret ble det gitt økt oppmerksomhet til harmonisk undertrykkelse; nivåforskjellen i gruppen ble fastsatt til 2 dB. Som et resultat er grensefrekvensene 977 Hz og 1695 Hz. Den resulterende harmoniske undertrykkelsen overstiger kravene betydelig. Forskjellen i frekvensnivåer i gruppen er innenfor kravene selv ved avvik i grensefrekvensen knyttet til spredningen i parameterne til komponentene som brukes. Ved beregning av verdiene til filterelementene ble motstander valgt basert på deres maksimale nærhet til standardverdiene til E12-serien.

Ved filterutgangene er resultatet to sinusformede signaler med betydelig undertrykte harmoniske. For å kombinere disse signalene introduseres en ekstra adderer.

Ved å bruke bare 3 op-ampere og noen få passive elementer, er vi i stand til å generere DTMF-signaler ved hjelp av en mikrokontroller uten å bruke betydelige dataressurser.

Ved hjelp av simulatorprogrammer ble omtrentlige verdier sjekket. Responsen til filtrene samsvarer veldig tett med den beregnede frekvensresponsen.


Ris. 6: Amplitudespekteret til et rektangulært signal med en frekvens på 697 Hz ved utgangen av et 3. ordens filter

I fig. Figur 6 viser amplitudespekteret til et rektangulært signal med en frekvens på 697 Hz, ført gjennom et 3. ordens filter. Som det fremgår av figuren, er tredje og femte harmoniske (2091 Hz og 3485 Hz) betydelig dempet (-25,6 dB).


Ris. 7: Amplitudespekteret til et rektangulært signal med en frekvens på 941 Hz ved utgangen av et 3. ordens filter

I fig. Figur 7 viser spekteret til et firkantbølgesignal med en frekvens på 941 Hz. I frekvensområdet av interesse for oss, opp til 4600 Hz, er det bare en harmonisk. Etter å ha passert filteret, er denne 2823 Hz harmoniske betydelig dempet (-27,9 dB). Nivåforskjellen mellom de laveste og høyeste frekvensene i gruppen overstiger ikke 1,9 dB.

For å bruke lavkostkomponenter med stor variasjon i parametere, ble det utført ytterligere modellering. Simuleringsresultatene viste at den tillatte spredningen i verdiene til motstander og kondensatorer er 10%.


Figur 8: Histogram – fordeling av signalnivåer i en gruppe


Figur 9: Histogram – Harmonisk undertrykkelse

I fig. 8 og 9 viser histogrammer oppnådd ved bruk av Monte Carlo-analyse. I dette tilfellet varierte komponentverdiene tilfeldig innenfor en spredning på 10 %. Etter 100 iterasjoner er resultatene for alle simulerte filtre plottet i histogrammer. I histogrammet i fig. Figur 8 viser nivåforskjellen mellom frekvenser innen gruppen. Den maksimalt tillatte forskjellen på 3 dB mellom minimums- og maksimumsfrekvensen ble ikke oppnådd i alle tilfeller. Gjennomsnittsverdien er 1,6 dB, som er litt bedre enn den beregnede verdien på 2 dB.

I fig. Figur 9 viser dempningen av harmoniske for den "lavere" frekvensgruppen. Den nødvendige verdien på 20 dB oppnås i alle tilfeller, gjennomsnittsverdien er omtrent 27 dB. I verste fall undertrykkes den harmoniske med 24,2 dB.

Verdiene beregnet for filteret til den "nedre" frekvensgruppen er også utført for filteret til den "øvre" frekvensgruppen.

Begge filtrene har identiske kretser. Den eneste forskjellen er i cutoff-frekvensene til filtrene for de øvre og nedre frekvensgruppene. R1 og C1 danner et 1. ordens høypassfilter. Fordi inngangsmotstanden til kretsen avhenger også av R1, verdien av dette elementet bør ikke være for liten; ellers vil mikrokontrollerutgangene bli overbelastet og firkantbølgeformen vil bli forvrengt. I dette tilfellet vil ytterligere frekvenser som følge av intermodulasjonsforvrengning legges til signalet, noe som vil påvirke signal-til-støy-forholdet negativt.

Overføringsfunksjonen til høyere ordens filtre kan ikke oppnås ved bruk av passive komponenter alene.

Dermed må 2. ordens filter inneholde en op-amp. Den aktive filterforsterkningen settes til 0,2 ved hjelp av motstandene R1-1 og R1-2. Som du ser er signalet noe svekket. Dette er nødvendig for å unngå overbelastning av op-ampen, fordi toppamplituden til den fundamentale sinusformede harmoniske til firkantbølgesignalet overstiger amplituden til selve firkantbølgesignalet (se Fourier-serien og fig. 2). En ekstra adderer justerer ønsket utgangsnivå. På grunn av den konstante komponenten til det rektangulære signalet settes driftspunktet til op-ampen på nivået Vcc/2 (se også Fourier-serien og fig. 2). I dette tilfellet kan den konstante komponenten ikke elimineres av inngangsdeleren R1-1/R1-2. For å koble fra OS-kretsen ved likespenning, brukes kondensator C3.

Ved hver av utgangene til det analoge filteret genereres et signal fra henholdsvis øvre og nedre frekvensgruppe. I en ekstra adderer legges disse signalene til. I dette kretselementet kan du stille inn forholdet mellom "nedre" og "øvre" frekvenser i det totale signalet og utgangssignalnivået ved hjelp av motstandene R4 og R5. Dermed kan utgangsamplituden enkelt justeres for å passe ulike krav i forskjellige land.

Ved beregning av komponentverdiene var kondensatorverdiene som vanlig faste, og motstandsverdiene ble beregnet i samsvar med dem. I denne kretsen ble det brukt kondensatorer og motstander i standard E12-serien med en spredning på 10%.

I fig. Figur 10 viser et skjematisk diagram av analoge filtre og en adderer:


Ris. 10: Skjematisk diagram analoge filtre med ekstra adderer

Kondensatorer C1-1 og C1-2 kombinerer de to signalene sammen ved Vcc/2-driftspunktet. Du bør ikke velge for store verdier for disse elementene, fordi de er lavpassfilterelementer for å eliminere lavfrekvente subharmoniske. Filterkondensator C5 eliminerer referansespenningsstøy. En ekstra kondensator C6 koblet parallelt med tilbakekoblingsmotstanden R6 danner et førsteordens høypassfilter. Hvis den laveste filtergrensefrekvensen er valgt, vil ytterligere filtrering av høyfrekvent intermodulasjonsinterferens forbedre kvaliteten på utgangssignalet, men det vil være en viss dempning av de høyeste frekvensene i den "øvre" gruppen. I noen tilfeller er det ikke nødvendig å generere den høyeste DTMF-frekvensen på 1633 Hz fordi den brukes kun til å danne tjenestesymboler A-D, og ​​signal-til-støy-forholdet kan forbedres ved å senke filterets grensefrekvens. Økning av cutoff-frekvensen fører således til en økning i nivået av høyfrekvent interferens, men samtidig reduseres den negative påvirkningen på de høyeste frekvenskomponentene til DTMF-signalet.

4 Resultater av studier av DTMF-sendersignaler

Spektrogrammene nedenfor (fig. 11 og 12) viser utgangssignalene til DTMF-senderen ved forskjellige frekvenser. I fig. Figur 11 viser amplitudespekteret til symbolet "1". Frekvensene som kreves for overføringen - 697 og 1207 Hz - er på nivået på henholdsvis -10,5 dB og -8,5 dB. Overtoner ved 2091 og 3621 Hz undertrykkes med nesten 30 dB. For å overføre "D"-symbolet genereres de to høyeste frekvensene - 941 og 1633 Hz. Som man kan se av fig. 12, er lavfrekvensnivået -12 dB, høyfrekvensnivået er -11 dB. De tilsvarende harmoniske dempes med mer enn 30 dB. Dermed samsvarer de målte verdiene med simuleringsresultatene og spesifikasjonskravene.


Ris. 11: Amplitudespektrum for symbol "1": 697 og 1207 Hz


Ris. 12: Amplitudespekter for symbol "D": 941 og 1633 Hz

Absolutt frekvensnøyaktighet for de genererte firkantbølgesignalene kan ikke oppnås ved bruk av to forskjellige tidtakere; resultatet vil avhenge av kombinasjonen av de to frekvensene og typen tidtakere som brukes. Årsaken til dette er en tidsavbruddskonflikt. Den nødvendige nøyaktigheten på ±1,8 % oppfylles imidlertid med stor margin.

Hvis en 8-bits timer og en Timer Port-timer brukes ved en systemfrekvens på MCLK 1,048 MHz, genereres frekvensene til den "nedre" gruppen med en nøyaktighet på ikke dårligere enn 0,3 %. For frekvensene til den "øvre" gruppen ble det i praksis oppnådd et avvik på ikke mer enn 0,5%.

Det eneste unntaket er DTMF-tegnet "D", som de høyeste frekvensene genereres for. Som et resultat, i denne kombinasjonen har frekvensen til den "øvre" gruppen 1633 Hz et avvik på -0,97%.

Uten dette unntaket genereres selv den høyeste frekvensen på 1633 Hz med en nøyaktighet på bedre enn 0,5 %. Maksimale avvik for ulike frekvenser er gitt i tabellen:

Hvis Timer_A brukes til å generere frekvenser, vil feilen avhenge av MCLK-frekvensen som brukes:

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. Konklusjon

Programvaren for dette eksemplet er veldig enkel og krever en liten mengde RAM og ROM, som opptar omtrent 300 byte. Takket være den innebygde timermodulen genereres de nødvendige frekvensene med høy nøyaktighet uten å sløse med CPU-belastning. I en konfigurasjon der en 8-bits timer og en timer/port brukes til generering, opptar avbruddsrutiner omtrent 12 % av CPU-ressursen. I tilfellet når frekvenser genereres av Timer_A-timeren, reduseres CPU-belastningen for behandling av avbruddsrutiner til 6 %. Som et resultat kan andre oppgaver kjøres mens DTMF-signaler overføres, eller CPU-en kan settes i lavstrømmodus for å redusere strømforbruket.

Den gode funksjonaliteten til den beskrevne modulen for å generere DTMF-signaler ved bruk av firkantbølgesignaler demonstreres av maskinvarekretsdesignet. Fordi Det er mulig å bruke komponenter med et bredt spekter av parametere i kretsen; prisen på en slik løsning er veldig lav. Alle spesifikasjonskrav oppfylles i stor grad, så det er ikke nødvendig med en separat DTMF-signalgeneratormodul i instrumenter som bruker MSP430 som kontrollkontroller.

Hvis det i et spesielt tilfelle er nødvendig å øke signal-til-støy-forholdet ved å bruke en ekstra op-amp, kan et filter konstrueres for ytterligere å undertrykke intermodulasjonsforvrengning. En slik ekstra operasjonsforsterker finnes allerede i quad op-ampen i DIL14-pakken.

6 lenker

Bundesamt fur Post und Telekommunikasjon (Federal Office for Post and Telecommunications): BAPT 223 ZV 5, Zulassungsvorschrift fur Endeinrichtungen zur Anschaltung an analoge Wahlanschlusse (ausgenommen Notruf- und Durchwahlanschlusse) des Telefonnetzes (offisiell spesifikasjon for terminalenheter koblet til analoge telefonforbindelser) sikkerhets- og anropskrav) / ISDN fra 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. utgave; 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 og Empfangen av DTMF-Signalen med dem Microcontroller MSP430 (Development MSP430) telekommunikasjonssystem for mottak og overføring av digitale signaler basert på MSP430 mikrokontroller); Diplomarbeit, Fachhochschule Landshut, mai 1997

Når det gjelder enkle enheter, bestemte jeg meg for å sette sammen en DTMF-signalgenerator ved å bruke den samme ATtiny2313. For de som ikke vet, er DTMF (Dual-Tone Multi-Frequency) et to-tone multi-frekvens analogt signal som brukes til å ringe et telefonnummer. Les Wikipedia.

Beslutningen om å sette sammen en slik enhet ble diktert av ønsket om å prøve å implementere komplekse analoge signaler ved hjelp av en mikrokontroller. Ingen praktisk applikasjon var planlagt for denne enheten, men kanskje noen ville finne en slik enhet nyttig? Bruk det!

DTMF-generatorkilde


La oss nå se hva vi har.

Signalet genereres ved hjelp av PWM og en RC-krets brukes for å gi det ønsket form. Som et resultat, etter RC-kjeden, får vi følgende signal (knapp 6 trykkes):

Langs hele kurven til det nyttige signalet observerer vi en høyfrekvent kam (frekvensen er høyere enn hørbar, så den vil ikke skape støy) - dette er arbeidet til RC-kretsen. Du kan gjøre linjen jevnere ved å øke kapasitansen til kondensatoren eller motstanden til motstanden, men i dette tilfellet vil rekkevidden til det nyttige signalet reduseres betydelig.

Vi ser på spekteret til signalet og forsikrer oss om at det er to separate frekvenser (PWM-frekvensen har gått utenfor visningsområdet), noe som betyr at alt er i orden – enheten fungerer som den skal.

Klare løsninger

Det finnes ferdige løsninger for oppgavene med å generere og dekode et DTMF-signal. Her er et par dataark for disse mikrokretsene.

DTMF generator
- DTMF-dekoder


P.S. Det er synd at ATtiny2313 ikke har en ADC - du kan også bruke en DTMF-dekoder! Men det er greit, jeg gjentar det på mega, jeg vil definitivt legge det ved.

(Besøkt 6 868 ganger, 1 besøk i dag)

Toneoppringing (Dual-tone multi-frequency signaling, DTMF) ble utviklet av Bell Labs på 50-tallet av forrige århundre for den da revolusjonerende trykkknapptelefonen. For å representere og overføre digitale data i tonemodus, brukes et par frekvenser (toner) i talefrekvensområdet. Systemet definerer to grupper på fire frekvenser, og informasjon kodes ved å sende to frekvenser samtidig, en fra hver gruppe. Dette gir totalt seksten kombinasjoner for å representere seksten forskjellige tall, symboler og bokstaver. DTMF-koding brukes nå i et bredt spekter av kommunikasjons- og kontrollapplikasjoner, slik det for eksempel fremgår av International Telecommunication Union (ITU) Recommendation Q.23.

Denne artikkelen beskriver kretsen til en DTMF-tonegenerator som reproduserer alle åtte frekvenser og genererer det resulterende to-tone utgangssignalet. Det aktuelle systemet ble bygget på Silego GreenPAK™ SLG46620V-brikken og operasjonsforsterkere Silego SLG88104V. Det resulterende signalet som produseres er summen av to frekvenser bestemt av raden og kolonnen på telefontastaturet.

Den foreslåtte kretsen bruker fire innganger for å velge frekvenskombinasjonen som skal genereres. Kretsen har også en aktiveringsinngang, som utløser generering og bestemmer hvor lenge signalet skal sendes. Generatorens utgangsfrekvens samsvarer med ITU-standarden for DTMF.

DTMF-toner

DTMF-standarden definerer kodingen av tallene 0-9, bokstavene A, B, C og D, og ​​tegnene * og # som en kombinasjon av to frekvenser. Disse frekvensene er delt inn i to grupper: en høyfrekvensgruppe og en lavfrekvensgruppe. Tabell 1 viser frekvensene, gruppene og tilsvarende symbolrepresentasjoner.

Tabell 1. DTMF-tonekoding

Diskantgruppe

Lavpassgruppe

Frekvenser ble valgt for å unngå flere harmoniske. I tillegg resulterer ikke summen eller forskjellen i en annen DTMF-frekvens. På denne måten unngås harmoniske eller modulasjonsforvrengning.

Q.23-standarden spesifiserer at feilen for hver overført frekvens må være innenfor ±1,8 % av den nominelle verdien, og den totale forvrengningen (på grunn av harmoniske eller modulasjon) må være 20 dB under grunnfrekvensene.

Det resulterende signalet beskrevet ovenfor kan beskrives som:

s(t) = Acos(2πfhight)+ Acos(2πflowt),

hvor fhigh og flow er de tilsvarende frekvensene fra høy- og lavfrekvensgruppene.

Figur 1 viser det resulterende signalet for sifferet "1". Figur 2 viser frekvensspekteret som tilsvarer dette signalet.

Ris. 1. DTMF-tone

Ris. 2. DTMF tonespektrum

Varigheten av DTMF-toner kan variere avhengig av den spesifikke applikasjonen som bruker tonekoding. For de vanligste applikasjonene faller varighetsverdier vanligvis mellom manuell og automatisk oppringing. Tabell 2 viser en oppsummering av typisk tidsperiode for de to rekrutteringstypene.

Tabell 2. Varighet av toneoppringingssignaler

Skivetype

Diskantgruppe

Diskantgruppe

Manuell oppringing

Automatisk oppringing

For å gi større fleksibilitet er DTMF-generatoren som tilbys i denne håndboken utstyrt med en aktiveringsinngang, som brukes til å starte signalgenereringen og bestemme dens varighet. I dette tilfellet er varigheten av signalet lik varigheten av pulsen ved aktiveringsinngangen.

Analog del av DTMF-generatorkretsen

ITU-anbefaling Q.23 definerer DTMF-signaler som analoge signaler skapt av to sinusbølger. I den foreslåtte DTMF-generatorkretsen genererer Silego GreenPAK SLG46620V IC firkantbølgesignaler med de ønskede DTMF-frekvensene. For å oppnå sinusformede signaler med den nødvendige frekvensen og danne det resulterende signalet (summen av to sinusformede bølger), kreves det analoge filtre og en adderer. Av denne grunn ble det i dette prosjektet besluttet å bruke filtre og en kombinator basert på SLG88104V operasjonsforsterkere.

Figur 3 viser strukturen til den foreslåtte analoge delen av enheten.

Ris. 3. Analog prosesseringskrets for mottak av DTMF-signal

Analoge filtre brukes for å få sinusformede signaler fra rektangulære pulser. Etter at filtrering er utført, summeres de to signalene og det ønskede to-tone DTMF-signalet genereres.

Figur 4 viser resultatet av Fourier-transformasjonen brukt for å oppnå spekteret til firkantbølgesignalet.

Ris. 4. Spektrum av et firkantbølgesignal

Som du kan se, inneholder firkantbølgen bare odde harmoniske. Hvis vi representerer et slikt signal med amplitude A i form av en Fourier-serie, vil det ha følgende form:

Analyse av dette uttrykket lar oss konkludere med at hvis analoge filtre har tilstrekkelig dempning for harmoniske, så er det fullt mulig å oppnå sinusformede signaler med en frekvens lik frekvensen til det opprinnelige firkantbølgesignalet.

Med hensyn til interferensnivåtoleransen definert i Q.23-standarden, er det nødvendig å sikre at alle harmoniske dempes med 20 dB eller mer. I tillegg skal enhver frekvens fra lavpassgruppen kombineres med en hvilken som helst frekvens fra høypassgruppen. Med hensyn til disse kravene ble det utviklet to filtre, ett for hver gruppe.

Begge filtrene var lavpass Butterworth-filtre. Dempningen av en ordre n Butterworth-filter kan beregnes som:

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

hvor fc er filterets grensefrekvens, n er filterrekkefølgen.

Forskjellen i demping mellom den laveste frekvensen og den høyeste frekvensen for hver gruppe kan ikke være mer enn 3 dB, så:

A(fHØYERE)[dB] - A(FLOWER)[dB] > 3 dB.

Gitt absolutte verdier:

A(fHØYERE) 2 / A(FLOWER) 2 > 2.

Også, som vi sa tidligere, bør harmonisk demping være 20 dB eller mer. I dette tilfellet vil det verste tilfellet være den laveste frekvensen i gruppen, fordi dens 3. harmoniske er den laveste frekvensen og er nærmest filterets grensefrekvens. Tatt i betraktning at den tredje harmoniske er 3 ganger mindre enn den grunnleggende, må filteret oppfylle betingelsen (absoluttverdier):

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

Hvis disse ligningene brukes på begge gruppene, må filtrene som brukes være andreordens filtre. Dette betyr at de vil ha to motstander og to kondensatorer hver hvis de implementeres ved bruk av op-ampere. Hvis tredjeordens filtre ble brukt, ville følsomheten for komponenttoleranser være lavere. De valgte filtergrensefrekvensene er 977 Hz for lavpassgruppen og 1695 Hz for høypassgruppen. Ved disse verdiene er forskjeller i signalnivåer i frekvensgrupper i samsvar med kravene ovenfor, og følsomheten for endringer i grensefrekvensen på grunn av komponenttoleranser er minimal.

Skjematiske diagrammer av filtre implementert ved bruk av SLG88104V er presentert i figur 5. Rangeringene til den første RC-par valgt på en slik måte at utgangsstrømmen til SLG46620V-brikken begrenses. Den andre filterlenken bestemmer forsterkningen, som er 0,2. Amplituden til firkantbølgesignalene setter operasjonsforsterkerens driftspunkt til 2,5 V. Uønskede spenninger blokkeres av utgangsfilterkondensatorer.

Ris. 5. Skjematiske diagrammer av utgangsfiltre

Ved utgangen summeres filtersignalene, og det resulterende signalet er summen av harmoniske valgt fra gruppen av lave og høye frekvenser. For å kompensere for filterdempning kan amplituden til utgangssignalet justeres ved hjelp av to motstander R9 og R10. Figur 6 viser addererkretsen. Figur 7 viser hele den analoge delen av kretsen.

Ris. 6. Skjematisk diagram av addereren

Ris. 7. Analog del av kretsen

Digital del av DTMF-tonegeneratorkretsen

Den digitale delen av DTMF-tonegeneratorkretsen inkluderer et helt sett med firkantbølgegeneratorer - en for hver DTMF-frekvens. Siden det kreves åtte tellere for å lage disse generatorene, ble GreenPAK SLG46620V-brikken valgt for implementeringen. Ved utgangene til den digitale kretsen genereres to rektangulære signaler, ett for hver frekvensgruppe.

Firkantbølgesignaler genereres ved hjelp av tellere og D-flip-flops og har en driftssyklus på 50 %. Av denne grunn er tellersvitsjefrekvensen to ganger den nødvendige DTMF-frekvensen, og DFF-flip-flop deler utgangssignalet i to.

Klokkekilden for tellerne er en innebygd 2 MHz RC-oscillator, hvis frekvens er videre delt med 4 eller 12. Divideren velges under hensyntagen til bitkapasiteten og den maksimale verdien av hver teller som kreves for å oppnå en spesifikk Frekvens.

For å generere høye frekvenser kreves det færre samples, så 8-bit tellere brukes til å generere dem, klokket fra en intern RC-oscillator hvis signal er delt med 4. Av samme grunn implementeres lavere frekvenser ved hjelp av 14-bit tellere.

SLG46620V har bare tre standard 14-bits tellere, så en av de lavere frekvensene ble implementert med en 8-bits CNT8-teller. For at antallet sampler skulle falle innenfor området 0...255, for å klokke denne CNT8 var det nødvendig å bruke et RC-oscillatorsignal delt på 12. For denne kretsen, frekvensen med det største antallet sampler, som is, den laveste frekvensen, ble valgt. Dette gjorde at vi kunne minimere feilen.

Tabell 3 viser parameterne for hver firkantbølge.

Tabell 3. Parametre for kvadratpulsgeneratorer

Klokking

Frekvensfeil [%]

Lavpassgruppe

Diskantgruppe

Som det fremgår av tabellen har alle frekvenser en feil på mindre enn 1,8 %, så de overholder DTMF-standarden. Disse beregnede karakteristikkene, basert på den ideelle RC-oscillatorfrekvensen, kan justeres ved å måle RC-oscillatorens utgangsfrekvens.

Selv om alle generatorer i den foreslåtte kretsen opererer parallelt, vil signalet til bare én generator fra hver gruppe sendes til utgangen til mikrokretsen. Valget av spesifikke signaler bestemmes av brukeren. Dette gjøres ved å bruke fire GPIO-innganger (to bits for hver gruppe) med en sannhetstabell vist i tabell 4.

Tabell 4. Tabell for valg av frekvenser fra lavfrekvensgruppen

Lavpassgruppe

Tabell 5. Frekvensvalgtabell fra høyfrekvensgruppen

Diskantgruppe

Figur 8 viser den logiske kretsen til en 852 Hz firkantbølgegenerator. Dette mønsteret gjentas for hver frekvens med passende tellerinnstillinger og LUT-konfigurasjon.

Ris. 8. Rektangulær pulsgenerator

Telleren genererer en utgangsfrekvens som bestemmes av innstillingene. Denne frekvensen er lik to ganger frekvensen til den tilsvarende DTMF-tonen. Målerkonfigurasjonsparametrene er vist i figur 9.

Ris. 9. Eksempel på oppsett av rektangulær pulsgeneratorteller

Tellerutgangssignalet er koblet til klokkeinngang D-flip flop-utløser. Siden DFF-utgangen er konfigurert som invertert, hvis du kobler DFF-utgangen til inngangen, blir D-flip-flop konvertert til en T-flip-flop. DFF-konfigurasjonsparametrene kan sees i figur 10.

Ris. 10. Eksempel på oppsett av en rektangulær pulsgeneratorutløser

Signalet fra DFF-utgangen mates til LUT-sannhetstabellinngangen. LUT-er brukes til å velge ett signal for hver spesifikke R1-R0-kombinasjon. Et eksempel på en LUT-konfigurasjon er vist i figur 11. B i dette eksemplet, hvis R1 mottar en "1" og R0 mottar en "0", blir inngangssignalet sendt til utgangen. I andre tilfeller inneholder utgangen "0".

Ris. 11. Eksempel på å sette opp sannhetstabellen til en kvadratisk pulsgenerator

Som nevnt ovenfor har den foreslåtte kretsen en aktiveringsinngang. Hvis det er en logisk enhet "1" ved Enable-tillatelsesinngangen, blir de genererte rektangulære signalene levert til et par utganger på mikrokretsen. Overføringsvarigheten er lik pulsvarigheten ved aktiveringsinngangen. For å implementere denne funksjonen var det nødvendig med flere LUT-er.

Høypassgruppen bruker en 4-bits LUT og en 2-bits LUT, som vist i figur 12.

Ris. 12. Diskantgruppeutgangskrets

4-bits LUT1 konfigurert som logisk element ELLER, så den sender ut en logisk en "1" hvis en "1" er til stede ved noen av inngangene. C1/C0-sannhetstabellene lar bare én av oscillatorene velges, så 4-bit LUT1 bestemmer hvilket signal som sendes ut. Utgangen til denne LUT er koblet til 2-bit LUT4, som bare sender et signal hvis aktiveringsinngangen er en logisk "1". Figurene 13 og 14 viser konfigurasjonene av 4-bit LUT1 og 2-bit LUT4.

Ris. 13. 4-bits LUT1-konfigurasjon

Ris. 14. 2-bits LUT4-konfigurasjon

Siden det ikke lenger var 4-bits sannhetstabell-LUT-er, ble to 3-bits LUT-er brukt for lavpassgruppen.

Ris. 15. Lavpass gruppe utgangskrets

Den komplette interne kretsen til GreenPAK SLG46620V er vist i figur 16. Figur 17 viser det endelige kretsskjemaet til DTMF-generatoren.

Ris. 16. Blokkskjema over DTMF-tonegenerator

Ris. 17. Skjematisk diagram av en DTMF-tonegenerator

Testing av DTMF-generatorkretsen

I den første fasen av testingen av den foreslåtte DTMF-generatoren ble det besluttet å sjekke frekvensene til alle genererte rektangulære signaler ved hjelp av et oscilloskop. Som et eksempel viser figur 18 og 19 firkantbølgeutgangene for 852 Hz og 1477 Hz.

Ris. 18. Firkantbølge 852 Hz

Ris. 19. Firkantbølge 1477 Hz

Når frekvensene til alle firkantbølgesignaler ble kontrollert, begynte testing av den analoge delen av kretsen. Utgangssignalene for alle kombinasjoner av de lave og høye frekvensene ble undersøkt. Som et eksempel viser figur 20 summen av 770 Hz og 1209 Hz signalene, og figur 21 viser summen av 941 Hz og 1633 Hz signalene.

Ris. 20. DTMF-tone 770 Hz og 1209 Hz

Ris. 21. DTMF-tone 941 Hz og 1633 Hz

Konklusjon

I denne artikkelen ble det foreslått en krets for en DTMF-tonegenerator basert på Silego GreenPAK SLG46620V-brikken og Silego SLG88104V operasjonsforsterkere. Generatoren lar brukeren velge kombinasjoner av ønskede frekvenser ved hjelp av fire innganger og kontrollere aktiveringsinngangen, som bestemmer varigheten av utgangssignalene.

Egenskaper til SLG46620V-brikken:

  • Type: Programmerbar blandet signal-IC;
  • Analoge blokker: 8-bits ADC, to DAC, seks komparatorer, to filtre, ION, fire integrerte oscillatorer;
  • Digitale blokker: Opptil 18 I/O-porter, sammenkoblingsmatrise og kombinatorisk logikk, programmerbare forsinkelseskretser, programmerbar funksjonsgenerator, seks 8-bit tellere, tre 14-bit tellere, tre PWM oscillatorer/komparatorer;
  • Kommunikasjonsgrensesnitt: SPI;
  • Forsyningsspenningsområde: 1,8…5 V;
  • Driftstemperaturområde: -40…85 °C;
  • Pakkeversjon: 2 x 3 x 0,55 mm 20-pin STQFN.

Karakteristiske trekk:

  • Generering av sinusbølger ved hjelp av pulsbreddemodulasjon (PWM)
  • Kombinere forskjellige sinusbølgesignaler til ett DTMF-signal
  • Kildekoder i assembly og C-språk
  • Designet for å fungere med STK500
  • Programkodestørrelse 260 byte / konstant tabellstørrelse 128 byte
  • Bruke tabellkonverteringsmetoden

Introduksjon

Dette dokumentet beskriver en teknikk for å generere DTMF-signaler (dual-tone multi-frequency signals) ved å bruke en hvilken som helst AVR-mikrokontroller som inneholder en pulsbreddemodulasjonsenhet (PWM) og statisk RAM. Disse signalene er mye brukt i telefoni, hvor de gjengis når du trykker på ringeknappene på et telefonapparat. For å generere et DTMF-signal på riktig måte, må du legge to frekvenser sammen: lav frekvens(fb) og høyfrekvens (fa). Tabell 1 viser hvordan ulike frekvenser blandes for å produsere DTMF-toner når forskjellige taster trykkes.

Figur 1 – DTMF-signalgeneratorkrets

Tabell 1 – Tonesignalgenereringsmatrise

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

Radene i Tabell 1 viser lavfrekvensverdier, og kolonnene viser høyfrekvensverdier. For eksempel viser matrisen at når du trykker på “5”-knappen, skal frekvensene fb = 770 Hz og fa = 1336 Hz blandes. Som et resultat av tillegg av to sinusformede signaler med forskjellige frekvenser, dannes et DTMF-signal

hvor er amplitudeforholdet K=A b/A a kildesignaler må oppfylle betingelsen

Driftsprinsipp

I tillegg generell informasjon Om bruken av pulsbreddemodulasjon vil det vises nedenfor hvordan pulsbreddemodulasjon lar deg generere sinusformede signaler. Det neste avsnittet beskriver hvordan du bruker basesvitsjefrekvensen for å oppnå forskjellige frekvenser. Etter vurdering teoretiske grunnlag En beskrivelse av selve DTMF-signalgeneratoren vil bli gitt. Generering av sinusformede signaler

Avhengig av forholdet mellom varigheten av høye VH- og lave VL-spenningsnivåer, endres gjennomsnittsverdien ved PWM-utgangen. Hvis forholdet mellom varighetene til begge nivåene holdes konstant, vil et konstant VAV-spenningsnivå genereres som et resultat. Figur 2 viser et pulsbreddemodulert signal.


Figur 2 – Generering av likespenningsnivå

Spenningsnivået bestemmes av uttrykket:

(3)

Et sinusformet signal kan genereres forutsatt at gjennomsnittsverdien av spenningen generert av pulsbreddemodulasjonen endres hver PWM-syklus. Forholdet mellom høye og lave nivåer må settes i samsvar med spenningsnivået til sinusbølgen på tilsvarende tidspunkt. Figur 3 illustrerer denne prosessen. Kildedataene for PWM beregnes for hver av periodene og registreres i konverteringstabellen (TC).

Figur 3 illustrerer også forholdet mellom frekvensen til den grunnleggende sinusbølgen og antall sampler. Jo høyere antall prøver (Nc), desto høyere er nøyaktigheten av å modellere det resulterende signalet:

(4)

PWM-frekvensen avhenger av PWM-oppløsningen. Ved 8-bits oppløsning er den endelige verdien (toppen av tellingen) for timeren 0xFF (255). Fordi Tidtakeren teller fremover og bakover gitt verdi bør dobles. Derfor kan svitsjefrekvensen beregnes ved å dele klokkefrekvens timer f CK på 510. Dermed, med en timer-klokkefrekvens på 8 MHz, vil den resulterende PWM-frekvensen være 15,6 kHz.


Figur 3 – Generering av et sinusformet signal ved bruk av PWM

Endring av frekvensen til en sinusbølge

La oss anta at sinusformede prøver leses fra oppslagstabellen ikke sekvensielt, men én om gangen. I dette tilfellet, med samme samplingshastighet, vil et signal med dobbel frekvens genereres (se figur 4).


Figur 4 – Dobling av den resulterende frekvensen (XSW = 2)

I analogi, hvis du leser ikke annenhver verdi, men hver tredje, fjerde, femte (henholdsvis trinnbredden er 3, 4, 5 ...), etc. det er mulig å generere Nc-frekvenser i området. Merk at for høye frekvenser vil den resulterende bølgeformen ikke være sinusformet. Vi betegner trinnbredden i henhold til konverteringstabellen som XSW, Hvor

(5)

Beregning av gjeldende posisjon i TP for neste PWM-periode (når timeren renner over) utføres ved hjelp av uttrykk (6). Ny verdi i posisjon X LUT avhenger av dens tidligere tilstand i posisjon X" LUT med økende trinnbredde XSW

(6)

Legge til forskjellige frekvenser for å oppnå et DTMF-signal

DTMF-signalet kan genereres ved å bruke uttrykk (1) og (2). For enkelhet av aritmetiske operasjoner, er verdien av koeffisienten K tatt lik 0,75 for å erstatte den aritmetiske operasjonen med logiske skift. Med hensyn til uttrykk (6), kan gjeldende verdi for PWM-kontroll beregnes ved hjelp av uttrykket:

og tatt i betraktning det X LUTa=X" LUta + XSWa ,X LUTb=X" LUTb + XSWb, la oss endelig skrive det ned

Implementering av en DTMF-generator

I denne søknaden diskuterer konstruksjonen av en DTMF-tonegenerator ved bruk av en 8-bits PWM-utgang (OC1A) og en tabell med 128 sinusfunksjon (Nc)-sampler, hver spesifisert med 7 biter (n). Følgende uttrykk viser denne avhengigheten og viser også hvordan du beregner oppslagstabelloppføringene:

(9)

Fordelen med å bruke 7 bits er at summen av høy- og lavfrekvente signalverdier er en byte stor. For å støtte hele settet med DTMF-toner, må 8 verdier for hver DTMF-frekvens fra Tabell 1 beregnes og legges inn i oppslagstabellen.

For å oppnå høyere nøyaktighet ble følgende løsning implementert: verdiene beregnet med uttrykk 5 krever kun 5 byte. For å bruke alle 8 byte, som vil redusere avrundingsfeil, multipliseres denne verdien med 8. Pekeren til oppslagstabellen skrives på samme måte. Men i dette tilfellet tar det to byte å lagre 8 ganger verdien. Dette betyr at 3 høyreforskyvninger og en radiks Nc-moduloperasjon (logisk multiplikasjon med Nc-1) må utføres før disse bytene brukes som en peker til sinusbølgeverdiene i


Figur 5 – Modulskjema for tilkobling til STK500

PWM-signalet genereres ved pin OC1A (PD5). Et ekstra utgangsfilter vil bidra til å gjøre signalet mer kompatibelt med den sinusformede bølgeformen. Ved reduksjon av PWM-frekvensen kan det være nødvendig å bruke et filter med brattere frekvensrespons for å få et godt resultat.

Tastaturtilkoblingen er vist i figur 1. Betjeningen av tastaturet må organiseres på en slik måte at det er mulig å bestemme hvilken tast som er trykket. Dette kan gjøres ved hjelp av følgende algoritme:

  1. Bestemme strengen til den trykket tasten
    • konfigurer lavordre-notebooken til port B som en utgang og still inn loggen. "0"
    • konfigurer den høye tetrad av port B som en inngang med tilkobling av pull-up motstander
    • linjen med den trykket knappen er definert som sifferet til den høyeste tetrad med logg. "0"
  2. Definerer den trykket tastekolonnen
    • konfigurer den høye notebooken til port B som en utgang og still inn loggen. "0"
    • konfigurer lavordens tetrad til port B som en inngang ved å koble til pull-up motstander
    • kolonnen med den trykket knappen er definert som sifferet til lavordens tetrad med logg. "0"

Merk: I STK200 er motstander koblet i serie mellom PORTB-kontaktpinnene og mikrokontrollerpinnene BP5, PB6 og PB7 (se STK200-diagram). Dette vil forårsake problemer hvis tastaturet er koblet til PORTB-kontakten.

Figur 6 illustrerer operasjonen av subrutinen for å bestemme den nedtrykte tasten. Avhengig av tasten som trykkes, bestemmes varigheten av intervallet. Avbruddsrutinen bruker denne verdien til å beregne PWM-innstillingene for de to DTM-tonesinusbølgene. Prosedyren for avbruddshåndtering er vist i figur 7 og 8.

Denne rutinen beregner en verdi som skal sammenlignes med timerutgangen for neste PWM-periode. Avbruddsrutinen beregner først posisjonen til neste prøveverdi i oppslagstabellen og leser verdien som er lagret der.

Plasseringen av prøven i oppslagstabellen bestemmes av pulsbredden, og den faktiske pulsbredden bestemmes av den genererte frekvensen.

Den endelige verdien som skrives til bestemmes ved hjelp av formel (7), som tar hensyn til prøveverdiene til begge DTMF-frekvensene.


Figur 6 – Blokkskjema over hovedprogrammet

Med introduksjonen av moderne digital PBX I den russiske føderasjonens telefonnettverk spres gradvis en flerfrekvensmetode for overføring av ringesignaler, betegnet med den engelske forkortelsen DTMF (Dual-Tone Multiple-Frequency). Noen ganger brukes et annet engelsk begrep for å navngi dette ringesignaloverføringssystemet - Touch-None (toneoppringing). Denne metoden ble utviklet i 1960, men dens virkelige utbredelse begynte på 80-tallet med utbredelsen av digitale (elektroniske) telefonsentraler.

Med denne metoden for overføring av kontrollsignaler, består hvert flerfrekvenssiffersignal av to toner i samsvar med ITU-T-anbefaling Q.23 "Technical Features of Touch-Dial Telephones".

DTMF-frekvenser velges ikke harmonisk. Dette betyr at frekvensene ikke har annen heltallsdeler enn 1. For eksempel er frekvensene 1200 og 1600 Hz harmoniske av frekvensen 400 Hz (3x400=1200 og 4x400=1600), og frekvensene 697 og 770 Hz er ikke-harmoniske.

Hvert signal inneholder to frekvenser: en valgt fra den nedre og den andre fra den øvre gruppen av frekvenser.

Korrespondansen mellom den overførte informasjonen og frekvensene er vist i tabellen på frontpanelet til laboratorieinstallasjonen.

Overføringsnivået i en to-frekvenspakke, målt ved en belastning på 600 Ohm, er: for den nedre frekvensgruppen - minus 6 dBmO ± 2 dB, for den øvre frekvensgruppen - minus 3 dBmO ± 2 dB. Frekvensnivået til den øvre gruppen av frekvenser i det totale signalet er 2 ±1 dB høyere enn frekvensnivået til den nedre gruppen. Det totale nivået for alle høyere-ordens frekvenskomponenter er minst 20 dB under lavere-ordens frekvensnivå.

Forholdene under hvilke normal signalmottak skal skje er som følger: tilstedeværelsen av to frekvenser i signalet, hvorav den ene er valgt fra den nedre gruppen, og den andre fra den øvre; frekvenser avviker ikke fra deres nominelle verdier med mer enn 1,8%; nivået til hver av de to frekvensene varierer fra minus 7 til minus 30 dBmO; forskjellen mellom nivåene til de to frekvensene ikke overstiger 3 dB; varigheten av frekvenssignalet er minst 40 ms.

Før du slår på installasjonen, utfør følgende operasjoner:

Sett bryter S6 til nedre posisjon;

Sett bryter S13 til øvre posisjon;

Sett bryterne til generatorene til de øvre og nedre frekvensgruppene til "Av" -posisjon;

Sett den analoge nøkkelbryteren (AK) til "På"-posisjon;

Vri knottene for å justere utgangsspenningen til generatorene og motstanden R3 mot klokken til de stopper.

dtmf signalbehandling

1.1 Aktiver installasjon.

1.2 Koble oscilloskopet til KT3-testpunktet.

1.3 Slå på generatoren til den øvre frekvensgruppen, ved å trykke på en av bryterknappene, velg en av frekvensene i denne gruppen.

1.4 Drei generatorens utgangsspenningsjusteringsknapp for å stille inn signalamplituden i CT3 til 0,5 volt.

1.5 Bytt oscilloskopinngangen til KT4-testpunktet. Gjenta trinn 1.3, 1.4 for generatoren til den nedre frekvensgruppen, og still inn spenningen i KT4 til 0,5 V.

MERK: Som et resultat av de utførte operasjonene tilføres signaler med lik amplitude fra de øvre og nedre frekvensgruppene til inngangen til addereren. Etter innstilling av disse nivåene, lås knottene for å justere utgangsspenningen til generatorene.

1.6 Bytt oscilloskopinngangen til KT7-testpunktet. Ved å rotere motstandsknappen (R3) for justering av utgangsspenningen til DTMF-signalbehandleren, still inn spenningen i CT7 til 0,5 volt.

MERK: Som et resultat av operasjonene som utføres, tilføres et kontinuerlig to-tonesignal til mottakerinngangen, og symbolet som tilsvarer kombinasjonen av frekvenser til generatorene til de øvre og nedre frekvensgruppene skal vises på indikatoren til det mottatte symbolet , i samsvar med tabellen. En indikasjon på et mottatt og identifisert signal er tilstedeværelsen av et signal ved utgangen til STD-mottakeren (LED-glød).

      Ved å bytte frekvensene til de øvre og nedre frekvensgruppene, sørg for at kombinasjonene av disse frekvensene samsvarer med de mottatte symbolene.