Стереофонический приёмник УКВ

 

     В  статье  представлен  стереофонический  приёмник  УКВ, работающий  в  диапазоне  87,5…108 МГц.  Схема  приёмного  тракта  подобна  схеме,  которая  была  представлена  в  статье  «Приёмник  УКВ  диапазона  с  плавной  настройкой»,  и  также  выполнена  на  микросхеме  КР174ХА34  (см. Рис.1) 

 

  Рис.1 - Схема  стереофонического приемника УКВ

      Отличиями  стереофонического  варианта  приёмника  являются:
- ёмкость  конденсатора  С17 – 0,01 мкФ;                                                                                
- комплексный  стерео – сигнал  (КСС)  снимается  с  вывода  14  микросхемы  DA2;                                                                                                                                                     
- КСС  проходит  через фильтр  низкой  частоты, образованного  R24, C22  и  R7,  и  далее  через  разделительный  конденсатор  С14  на  микросхему  DA4  (TDA7040T),  которая  является  стереодекодером.

        TDA7040T  декодирует  КСС  формата  CCIR  (с  пилот – тоном),  который  используется   при  вещании  в  указанном  диапазоне. DA4  обеспечивает  переходное  затухание  между  каналами  не  менее  40 дБ  и  нелинейные  искажения  0,1 – 0,3%.  КСС  поступает  на  вывод  8  микросхемы.  Выходные  сигналы  снимаются  с  выводов  5  (правый  канал)  и  6  (левый  канал)  и  далее  через  переменные  резисторы  R22  и  R23,  которые  регулируют  баланс  звука  между  каналами,  поступают  на  усилители  низкой  частоты  (УНЧ)  DA5, DA6.
     УНЧ  имеют  идентичные  принципиальные  схемы.  Они  собраны  на  микросхеме  К174УН14  (аналог  TDA2003).  Данный  УНЧ  был  также  применён  в  первом  варианте  приёмника.

     Следует  отметить, что  резисторы  R22  и  R23  входят  в  состав  одного  сдвоенного  резистора  типа  RK-1233G1.
     Данные  катушек  L1, L2  такие  же,  как  и  в  первом  варианте  приёмника:
          Катушка  L1 – бескаркасная, намотана  на  оправке  диаметром  3 мм  и  содержит   4,5 витка  провода  ПЭВ-2  диаметром   0,47 мм. Снятую  с  оправки  необходимо  растянуть, придавая  её  виткам  шаг  приблизительно  1 мм   (общая  длина -  4…5 мм). Катушка  L2 – бескаркасная  и  имеет  7,5 витков  того  же  провода, намотанного  виток  к  витку  на  такой  же  оправке.

     Основным  отличием  этого  варианта  приёмника  является  блок  управления,  который  состоит  из  микроконтроллера  DD1 - ATmega16  (тактовая  частота  от  внутреннего  генератора – 8 МГц),  интерфейса  RS-232  (разъём – DB9-F, микросхема преобразователя  уровней DD2 –  MAX3232),  жидко - кристаллического  индикатора  (LCD 16x2)  типа  MT-16S2H  (производитель  МЭЛТ),  8 – ми  битного  цифро – аналогово  преобразователя  (ЦАП)  DD3 – PCF8591  и  буферного  повторителя  DA7 – LM358N. Блок  управления  содержит  также  цепь  регистрации  «захвата»  частоты  радиостанции.  Она  имеет  ключ  на  транзисторе  VT1  и  резисторах  R4, R5, R2  и  формирователь  импульсов – на  слотах  микросхемы  CD4011B – DD4.1, DD4.4.  Сброс  микроконтроллера  осуществляется  посредством  цепи  сброса – на  элементах R1, C1  и  формирователе  импульсов – DD4.2, DD4.3.     

     Схема  работает  по  принципу  «следящего  аналогово – цифрового  преобразователя  (АЦП)».
     Код  напряжения  на  варикапе  VD1  задается  с  персонального  компьютера  (ПК)  через  интерфейс  RS-232  и  UART  микроконтроллера. При  этом  используется  среда  программирования  BASCOM,  в  частности   терминал  и  функция  «эхо»,  позволяющая  выводить  на  монитор  ПК  содержимое  команды  INPUT.

     Заданный  код  поступает  из  микроконтроллера  по  шине  I2C  в  ЦАП  (DD3),  поскольку  в  микроконтроллерах  AVR  (ATtiny, ATmega)  подобного  аппаратного  средства,  где  цифровой  код  преобразуется  в  постоянное  напряжение,  не  предлагается.  Данное  напряжение  фильтруется  фильтром  низкой  частоты  R12, C29  и  буферизируется  с  помощью  повторителя  DA7,  с  выхода  которого  подаётся  на  варикап  VD1  через  резистор  R13.  Одновременно  с  выхода  DA7  напряжение  поступает  и  на  вход  микроконтроллера  DD1 – ADC0  (PA0), который  является  входом  встроенного  в  контроллер  АЦП.

     АЦП  преобразует  это  напряжение  (на  варикапе)  в  цифровой  код,  который  сравнивается  с  заданным  кодом.  Если  значение, потупившего  с  варикапа  кода  напряжения  больше  или  меньше  заданного,  то  происходит  его  соответствующая  коррекция,  и  он  вновь  по  шине  I2C  отправляется  в  ЦАП  и.т.д..  Таким  образом,  осуществляется  слежение  за  напряжением,  а  следовательно  и  за  принимаемой  частотой.

       Для  того, чтобы  задать  какую – либо  команду  блоку  управления необходимо  (как  и  в  первом  варианте  приёмника)  нажать  на  клавиатуре  ПК  любую   клавишу  (курсор  должен  находиться  на  экране  терминала),  а  после  ввода  определённой  цифры  нажать  «ENTER». На  экране  терминала  появиться  надпись:  «Enter: READeeprom – (0),  > - (1),  <- (2),  WRITeeprom – (3):». Это  значит, что  если  вы  введёте  «0», то  данное  значение кода  напряжения  на  варикапе  будет  считано  из  энергонезависимой  памяти  микроконтроллера (EEPROM). Если  вы  введёте  «1», то  значение  кода увеличится  на  5.  При  введении  «2»  код  напряжения  уменьшится  на  5.   При  вводе  цифры  «3»  текущее  значение  кода,  а  следовательно  и  частота  выбранной  радиостанции,   будет  сохранено  в  энергонезависимой  памяти  микроконтроллера.

     На  экране  жидко – кристаллического  индикатора  (ЖКИ)  в  верхней  строке  высвечивается  значение  заданного  напряжения,  которое  дублируется  графическим  индикатором  уровня  в  нижней  строке.

     При  нахождении  сигнала  какой – либо  радиостанции  на  выводе  9  DA 2  появляется  постоянное  напряжение (2,5…3В),  загорается  светодиод  HL1, открывается  транзистор  VT1,  напряжение на  входе  INT0 контроллера  DD1  падает,  и  контроллер  входит  в  режим  обработки  внешнего  прерывания.  В  результате  на  верхней  строке  ЖКИ  (с  седьмого  знакоместа)   высвечивается  в  течении  двух  секунд надпись  «Radio  SС».  Надпись  «Radio  SCAN»  появляется  и  на  экране  терминала, что   свидетельствует  о  «захвате»  частоты  радиостанции  (см. Рис.2).

 

  Рис. 2

        Питание  приёмника  осуществляется  от  постоянного  стабилизированного  напряжения  12В,  и  от  последовательно  включённых  стабилизаторов  78L05  (5B),  78L03  (3B).  При  этом  следует  отметить,  что  питание  микросхем  DA2,  DA3  и  опорное  напряжение  АЦП -Vref  развязаны  LC  фильтрами.

    Программа  «Приёмник  УКВ  стерео»  содержит:                                                          
- основной  цикл   DO…LOOP;                                                                                                      
- подпрограмму  обработки  прерывания  по  приёму  «RxD»;                                         
- подпрограмму  обработки  внешнего  прерывания  «Send»;                                          
- подпрограмму  отсылки  по  I2C  в  ЦАП  кода  напряжения  «Sub  Upr».

     В  основном  цикле  происходит  преобразование  значения  напряжения,  приложенного  к  варикапу  в  восьмибитный   цифровой  код.  Следует  отдельно  остановиться  на  конфигурировании  АЦП  микроконтроллера,  поскольку  эта  тема  не  была  затронута  в  цикле  статей  «Bascom  для  начинающих»,  опубликованных  на нашем сайте. 

Конфигурирование  осуществляется  следующим  образом:
Config  Adc = Free|Single, Preskaler=Auto|коэфф. дел,
Reference=OFF|AVCC|Internal
где:                                                                                                                                                     
- Free – режим  непрерывного  преобразования;                                                                 
- Single – режим  одиночного  преобразования (запуск  каждого  преобразования  осуществляется  по  команде);                                                                 
- Auto – устанавливает  максимальную  частоту  преобразования;                                  
- коэффициент  деления  предделителя  АЦП=2|4|8|16|32|64|128. Отимальная  частота  преобразования= тактовая частота/коэфф.дел.=50…200 КГц;                                                                                                                                                    
- off – использование  внешнего  источника  опорного  напряжения;                            
- AVCC – использование  в  качестве  источника  опорного  напряжения  питания  АЦП;                                                                                                                                
- Internal – использование  в  качестве  источника  опорного  напряжения  внутреннего  источника  питания  – 2,56 В.

     Само  преобразование  осуществляется  так: w=Getadc (№ канала входа  аналогово  сигнала).  Здесь  w – переменная,  определяемая  as Byte  при  преобразовании  с  точностью  до  восьми  бит  или  as Word – с  точностью  до  десяти  бит.
     Командами  Start Adc, Stop Adc,  соответственно,  преобразование запускается  или  останавливается.
     Полученный  АЦП  код  сравнивается  с  заданным  кодом  при  помощи  условных  операторов  IF…THEN,  и  если  коды  неравны, то  полученный  код корректируется  в  соответствующую  сторону  (увеличение  или  уменьшение)  и  отправляется  (Cаll  Sub Upr)  в ЦАП.

     В  основном  цикле  осуществляется  также  пересчёт  кода  в  значение  напряжения  и  его  округление  до  двух  знаков  после  запятой. Также  происходит  определение  знакомест  для  индикатора  уровня.  В  конце  цикла  значение  заданного  напряжения  отображается  на  первой  строке  ЖКИ,  а  индикатор  уровня  в  цикле  FOR…NEXT – на  второй. (Более  подробно  работа  микроконтроллеров  AVR  с  ЖКИ  описана  в  статьях  №6, 18  цикла  статей  «Bascom  для  начинающих»).

     Подпрограмма  обработки  прерывания  по  приёму  использует,  как  уже  говорилось  выше,  функцию  Bascom  «эхо»  при  задании  команд  контроллеру  с  терминала  по  шине  RS-232:  «0» - чтение  кода  из  EEPROM,  «1» - увеличение  кода  на  5,  «2» - уменьшение  кода  на  5,  «3» - запись  кода  в  EEPROM.  Кроме  того, подпрограмма  содержит  условия  ограничения,  чтобы  при  изменении  кода его  величина  не была  бы  больше  255  или  равна  0.  При  входе  в  подпрограмму  процесс  преобразования  останавливается  (Stop Adc).

     Подпрограмма  обработки  внешнего  прерывания  «Send»  выводит  на  ЖКИ  с  помощью  команды  Locate  1, 7  в  первую  строку,  начиная  с  седьмого  знакоместа,  надпись  «Radio  SK»,  а  также  отправляет  сообщение  «RADIO  SKAN»  в  терминал.
    Подпрограмма  «Sub  Upr»  отсылает  код  напряжения  в  ЦАП  по  шине  I2C.  Подробно  работа  микроконтроллеров  AVR  c  данной  шиной  рассмотрена  в  статьях  №7, 8, 9  и  др.  цикла  статей  «Bascom  для  начинающих».

    Текст  программы  с  подробными  комментариями  приводится  ниже:

$regfile = "m16def.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 16
$framesize = 32

Config Adc = Single , Prescaler = 64 , Reference = Off       'АЦП режим  одиноч. ‘преобраз. ,делитель=64, Vref-внешнее
Config Pina.0 = Input              'вход АЦП
Config Int0 = Falling              'прерывание по спаду импульса
Config Pind.2 = Input              'вход INT0
Config Sda = Portc.1               'конфигурация шины I2C
Config Scl = Portc.0
Config I2cdelay = 10               'частота - 100 КГц
Config Pind.0 = Input              'UART-RXD
Config Portd.1 = Output            'UART-TXD
Config Debounce = 100              'задержка 100мс при начале обработ.внеш прерывания

Dim W As Byte                      'определение перем. А/Ц преобразования напряж. на варикане
Dim N As Byte                      'опред. заданного кода напряжения
Dim L As Byte                      'опред.реальнщго кода напряжения в ЦАП
Dim X As Byte                      'опред.кода, записанного в EEPROM
Dim Dn As Byte                     'опред приращения кода напряжения
Dim V As Single                    ' определение знач. напряжения
Dim Z As Byte                      'опред. знакоместа индикатора настройки
Dim I As Byte
Dim K As Byte                      'определение номера команды
Dim Vstring As String * 4          'опред. знач.напряж.для индикатора

Const Pcf8591write = &H91          'адрес для записи в ЦАП- PCF8591
Const Pcf8591config = &B01000000   'байт управления - включение аналогового выхода
Const Channel = 0                  'вход АЦП - ADC0

$eeprom                            'определение ячейки памяти
Number:
Data 10%

On Urxc Rxd                        'определение подпрограммы обраб. прер. по ‘приёму
On Int0 Send                       'по внешнему прерыванию

Declare Sub Upr                    'подпрограмма передачи данных в ЦАП

Enable Interrupts                  'разрешение прерываний
Enable Urxc
Enable Int0


I2cstart                           'включение ЦАП - PCF8591
I2cwbyte Pcf8591write
I2cwbyte Pcf8591config
I2cstop

Deflcdchar 0 , 32 , 31 , 31 , 31 , 31 , 31 , 31 , 32       'рис.квадрата для шкалы ‘настройки
N = 5                            ’начальные  условия
Portc = N

Do                                 'основной цикл

  Start Adc                        'старт преобразования А/Ц
  W = Getadc(channel)

  If W < N Then                    'напряжение на варикапе меньше заданного
  L = N
  Dn = L - W
  L = L + Dn                       'увеличение напряжения на варикапе
  Call Upr                         'передача в ЦАП
  End If
  If W > N Then                    'напряжение на варикапе больше заданного
  L = N
  Dn = W – L
If Dn >L Then                 ’в случае резкого уменьшения заданного кода
L=N
Else
  L = L - Dn                       'уменьшение  напряжения на варикапе
End If
  Call Upr
  End If

  V = N / 85                       'значение напряжения
  Z = V * 5                        'знакоместо напряжения на индикаторе
  Vstring = Fusing(v , "0.00")     'округление знач. напряжения для индикации
  Cls                              'очистка ЖКИ
  Lcd ; Vstring ; "V"              'отображение значения напряжения
  For I = 1 To Z Step 1            'отображение индикатора настройки
  Locate 2 , I                     '2-й ряд I-e знакоместо
  Lcd Chr(0)                       'графика (квадрат)
  Next I
Loop

Rxd:                               'обработка прерывания по приёму
Stop Adc                           'остановка преобразования А/Ц
Do
 Input "Enter: READeeprom-(0),>-(1), <-(2), WRITeeprom-(3) :" , K       'ввод управляющих команд

 If K = 0 Then                     'считывание значения кода из EEPROM
 Readeeprom X , Number
 N = X
Exit Do
 End If

 If K = 1 Then                     'увеличение значения кода
 N = N + 5
 If N => 255 Then                  'при достижении предельного значения
 N = N - 5
 End If
 Exit Do
 End If

 If K = 2 Then                     'уменьшение значения кода
 N = N - 5
 If N = 0 Then                     'при достижении пред. знач
 N = N + 5
 End If
 Exit Do
 End If

 If K = 3 Then                     'выход из цикла с записью значения кода в EEPROM
 X = N
 Writeeeprom X , Number
 Exit Do
 End If
Loop
Return

Send:
Print "RADIO SCAN."                'отсыл в терминал при захвате
Locate 1 , 7
Lcd "RADIO SC"                     'отображение на ЖКИ
Wait 2                             'задержка 2 сек
Return

Sub Upr
 I2cstart                          'отсыл кода напряжения в ЦАП
 I2cwbyte Pcf8591write
 I2cwbyte L
 I2cstop
End Sub

End                                'end program

     В  случае,  если  вы  не  сможете  или  не  захотите  приобрести  микросхему  ЦАП, то  тогда  можно  использовать  схему, где  в  качестве  ЦАП  используется  суммирующий  повторитель  напряжения, резисторы  которого  имеют  определённые  весовые  коэффициенты  и  подключены  к  PORTС.  Иными  словами  мы  имеем  32  возможных  значения  напряжения,  что  позволяет  преобразовывать  восьмибитный  цифровой  код  в  постоянное  напряжение. 

     Схема  третьего  варианта  приёмника  представлена  на  Рис.3.  Резисторы  R25…R32  прецизионные  типа  С2-29В  или  С2-36В  и  имеют  отклонение  от  номинала,  не превышающее  0,1%.  Повторитель  выполнен  на  микросхеме  DA7  (LM358N).  Конденсатор  С29  служит  для  сглаживания  бросков напряжения  при  изменении  кода.  В  остальном  схема  полностью  идентична  предыдущему  варианту. 

 

  Рис.3 - Схема стереофонического приемника УКВ с суммирующим повторителем

     Разумеется,  ЦАП,  созданный  из  дискретных  компонентов,  уступает  по  тонности  преобразования  и  другим  характеристикам  его  интегральному    исполнению,  но  с  точки  зрения  соотношения  цена – качество  для  данной  схемы – это  решение  вполне  приемлемо.
     Программа  «радиоприёмник  УКВ  стерео1» упрощается.  В  ней  отсутствуют  блок  и  подпрограмма  передачи  кода  по  шине  I2C   ЦАП.  В  данном  случае  откорректированный  код  передаётся  непосредственно  в  PORTС.
     Текст программы  приведён  ниже:

$regfile = "m16def.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 16
$framesize = 32

Config Adc = Single , Prescaler = 64 , Reference = Off       'АЦП режим одиноч.преобраз.,делитель=64,Vref-внешнее=3В
Config Pina.0 = Input              'вход АЦП
Config Int0 = Falling              'прерывание по спаду импульса
Config Pind.2 = Input              'вход INT0
Config Pind.0 = Input              'UART-RXD
Config Portd.1 = Output            'UART-TXD
Config Debounce = 100              'задержка 100мс при начале обработ.внеш ‘прерывания
Сonfig  Portc = Output

Dim W As Byte                      'определение перем. А/Ц преобразования напряж. на варикане
Dim N As Byte                      'опред. заданного кода напряжения
Dim L As Byte                      'опред.реальнщго кода напряжения в PORTC
Dim X As Byte                      'опред.кода, записанного в EEPROM
Dim Dn As Byte                     'опред приращения кода напряжения
Dim V As Single                    ' определение знач напряжения
Dim Z As Byte                      'опред. знакоместа индикатора настройки
Dim I As Byte
Dim K As Byte                      'определение номера команды
Dim Vstring As String * 4          'опред. знач.напряж.для индикатора

Const Channel = 0                  'вход АЦП - ADC0

$eeprom                            'определение ячейки памяти
Number:
Data 10%

On Urxc Rxd                        'определение подпрограммы обраб. прер. по приёму
On Int0 Send                       'по внешнему прерыванию

Enable Interrupts                  'разрешение прерываний
Enable Urxc
Enable Int0

Deflcdchar 0 , 32 , 31 , 31 , 31 , 31 , 31 , 31 , 32       'рис.квадрата для шкалы настройки
N =5                             ’начальные условия
Portc = N
Do                                 'основной цикл

  Start Adc                        'старт преобразования А/Ц
  W = Getadc(channel)

  If W < N Then                    'напряжение на варикапе меньше заданного
  L = N
  Dn = L - W
  L = L + Dn                       'увеличение напряжения на варикапе
  Portc = L                        'передача кода в PORTC
  End If
  If W > N Then                    'напряжение на варикапе больше заданного
  L = N
  Dn = W – L
If Dn > L Then                  ’в случае резкого уменьшения заданного кода
L = N
Else
  L = L - Dn                       'уменьшение  напряжения на варикапе
End If
  Portc = L                         ’передача кода в PORTC
  End If

  V = N / 85                       'значение напряжения
  Z = V * 5                        'знакоместо напряжения на индикаторе
  Vstring = Fusing(v , "0.00")     'округление знач. напряжения для индикации
  Cls                              'очистка ЖКИ
  Lcd ; Vstring ; "V"              'отображение значения напряжения
  For I = 1 To Z Step 1            'отображение индикатора настройки
  Locate 2 , I                     '2-й ряд I-e знакоместо
  Lcd Chr(0)                       'графика (квадрат)
  Next I
Loop

Rxd:                               'обработка прерывания по приёму
Stop Adc                           'остановка преобразования А/Ц
Do
 Input "Enter: READeeprom-(0),>-(1), <-(2), WRITeeprom-(3) :" , K       'ввод управляющих команд

 If K = 0 Then                     'считывание значения кода из EEPROM
 Readeeprom X , Number
 N = X
Exit Do
 End If

 If K = 1 Then                     'увеличение значения кода
 N = N + 5
 If N => 255 Then                  'при достижении предельного значения
 N = N - 5
 End If
 Exit Do
 End If

 If K = 2 Then                     'уменьшение значения кода
 N = N - 5
 If N = 0 Then                     'при достижении пред. знач
 N = N + 5
 End If
 Exit Do
 End If

 If K = 3 Then                     'выход из цикла с записью значения кода в EEPROM
 X = N
 Writeeeprom X , Number
 Exit Do
 End If
Loop
Return

Send:
Print "RADIO SCAN."                'отсыл в терминал при захвате
Locate 1 , 7
Lcd "RADIO SC"                     'отображение на ЖКИ
Wait 2                             'задержка 2 сек
Return

End                                'end program  


Программы можно скачать здесь.

   Автор andre