FM радиоприемник с ИС TEA5767 и дистанционно
управление под управление на Arduino
/kn34pc.com/конструкции/...
продължение от:
www.kn34pc.com: FM радиоприемник с
ИС TEA5767 под управление на Arduino
Като разглеждах новата
конструкция на Мигел, PY2OHH [7] възникна идея да тествам посочената от него библиотека за управление с
дистанционно управление (IR Control).
Настройката е лесна, методиката е добре описана (tnx,
Mr. Miguel, PY2OHH!).
Небрежното ми търсене из запасите със стари, свалени от неработещи апаратури чаркалаци, се увенча с успех - първите два IR приемника от снимката по-долу "се спотайваха" от дълги години, прилежно прибрани, заедно с други "джунджурии" в кибритени кутийки (залепени и надписани като чекмедженца за съхранение на електронни елементи).
Хрумна ми да използвам дистанционното
управление като "екстра" на самоделното си FM
приемниче. IR Control (вляво долу) е от тунер
DVB-T+DAB+FM с ИС RTL2832U и остана неизползваемо заради друга моя
конструкция. Дистанционното управление (вдясно долу) е с други надписи (и други кодове)
и е
втори, достъпен вариант за използване (tnx LZ2WNW!).
При липса на неизползвани дистанционни управления и
приемници към тях, на китайския пазар има подходящи за целта такива / приемник
(вдясно на горната снимка) с комплект дистанционно управление (вдясно на долната
снимка).
За обработка на върнатите кодове на натиснатите бутони
използвам примерния код IRrecvDemo във външната използвана библиотека
IRremote. За избягване на конфликта с вътрешната библиотека
RobotIRremote от Arduino
IDE във помощния файл и във форумите
препоръчват архивирането й с последващо премахване от текущите библиотеки.
Така или иначе RobotIRremote никога не съм
използвал досега.
След това е необходимо да се стартира серийния монитор в средата Arduino IDE, като Arduino-модулът остане свързан със съединителния USB кабел към компютъра.
Поради многократното ми превключване между двете програми (моята и демо-програмата за кодовете на бутоните) за мое улеснение добавих редовете за тест от библиотеката в моята си програма и това тестване работи непрекъснато (примерно за описване на друго дистанционно управление, промяна на функции на бутони и др.). Възможно е да се спре при настроена вече програма и избрано дистанционно, като се маркира като коментар ред 295, но не считам това за необходимо. Посочената функция по никакъв начин не "товари" процесора и не бави изпълнението на другите функции.
За улеснение съм "сканирал" върнатите кодове на всички
бутони на дистанционното (вкл. неизползваните), както и кодовете на второто
дистанционно управление (вдясно на снимката). При условие, че се избере това
дистанционно, трябва да се отмаркират от коментар съответните бутони (от ред 47,
до ред 69), а предишните - да се маркират като коментар (от ред 22, до ред 44).
Ще се получи това:
При избор на друго дистанционно стартирайте програмния код (със свързан Arduino-модул), стартирайте серийния монитор, натиснете бутон на дистанционното и ще се появи число в шестнадесетичен вид, който е необходимо да се препише към реда на исканата функция.
По-долу: примерен код на бутон "0" от IR.
След дублиране на функциите от по-горната конструкция (ръчен
и режим със запаметени станции, превключване нагоре-надолу из запаметените вече
станции, запаметяване на нови станции и ръчно избиране на честота (без директно
набиране) вече и с дистанционното устройство реших, че ще е изключително полезно
да регулирам гръмкостта на радиоприемника по някакъв начин.
Вариантът с друг радиоприемен модул (примерно: с вградено
усилване по I2C шина) засега не разглеждам. Не
разглеждам и добавяне на специализирани интегрални схеми-електронни
потенциометри с управление по напрежение или с програмен код
(по
I2C, SPI и др.). Оставям това за бъдещи конструкции.
Искаше ми се да повторя регулиране на усилването по начин, който да се вписва в
самоделното устройство, като препрочитам то да бъде с дискретни
елементи.
Все пак удоволствието ми от направата е не да изработя
още един приемник, работещ и управляващ се по абсолютно същия начин, както
другите мои приемници в къщи, закупени от пазара.
Тествах посочената по-долу схема - Г-образен атенюатор на
пътя на сигнала, като звеното към земя е заместено с полеви транзистор като
управляемо съпротивление.
Още като подавах статично с потенциометър нива от 0 до 5
волта на управляващия електрод, слухово схемата не се представи добре, но
умишлено пропуснах момента на по-подробните измервания на характеристиката на
регулиране (примерно със SpectraLab). Въпросната схема
съм използвал само във вериги на аудио-сигнал (който не е музика) и без
изисквания към параметрите - напр. за микрофонен компресор към самоделен
приемо-предавател, та този вариант от началото беше само да удовлетворя желанието
си да пиша безсмислен, непотребен програмен код
.
По същия елементарен начин "изработих" и управляващото
напрежение към полевия транзистор - без външен ЦАП (DAC),
при използване на (само) 255 стъпковия ШИМ (PWM) от цифровите изходи на Arduino, през обикновен
интегратор (който дори не пресметнах, а "набучих" с времеконстанти "на око"
от 10 kΩ и 10 μF).
Е, вярно, схемата "пееше", усилваше
се и се намаляваше експериментално примерно 5 дни, но все повече ми правеше
впечатлението на странното "промодулиране" със звук "като на робот", особено
забележимо на гласа на водещия на новинарските емисии на националното радио.
"Схемата тръгна към разваляне" след като измерих честотата на
изходните импулси на PWM от примерно 500
Hz и си представях какъв филтър съм сложил
за изглаждане - "жива" АМ си се получава с подтисната носеща, с "обогатяване" на звуковия спектър с
несъществуващи звуци и "инвертиране" на "басовата" част от речта...
Отрицателният резултат е също резултат ...
Регулиране на усилването с PWM
Нуждаех се от друго елементарно решение на схема за
електронен потенциометър.
Използваната схема на електронен потенциометър с аналогови
мултиплексори бяхме използвали (с подобна конфигурация) примерно в 1991-а
година, след публикация в списание "Радио, телевизия, електроника",
брой 8, 1989 год. на електрическа схема на дистанционно управление по
радиовълни на 27 MHz към телевизионни приемници "София" и "Велико Търново".
Схемата тогава беше пригодена към самоделен нискочестотен
усилвател, като по радиоканал се включваше устройството, усилваше се и му се намаляваше гръмкостта. След модификацията с подобната схема се появи схема с 10 битовата ИС КР572ПА1, където с два реверсивни брояча до 16
-
К155ИЕ7 / 74193, комфортът в брой стъпки на регулатора за усилване
беше вече достигнат ...
Регулиране на усилването с CD4051
Без много да мисля, дори без предварителен чертеж на
разположението на компонентите "нахвърлях" на стъклотекстолит посочената схема.
Нищо неподозиращите ИС CD4051 бяха безмилостно
"осакатени" с къси изводи за последвалия "полулегнал" монтаж и по идея, че
"там ще си стоят, докато са интегрални схеми"
.
И без това се "залежаха" при мен вероятно повече от 20 г. в кутийките с електронни
компоненти ...
![]() |
![]() |
![]() |
![]() |
За мое учудване звукът се регулира прилично добре, без звукови ефекти и "ушечуйни"
изкривявания. Дори активните 7 стъпки (без "нулевата" при намаляване на
звука докрай) са достатъчно на брой. Така конструкцията много ми напомня
регулиране на гръмкостта на
радиоточка
(примерно "Тонмайстор").
Използването на дистанционното управление за регулиране на
гръмкостта за мен е по-скоро за някаква свобода при експлоатацията (примерно
при последвал телефонен разговор или при положение на използващия
радиоприемника: отпочиващ на леглото и др. подобни).
За изключващата захранването схема и помощните стабилизатори използвах първия
вариант, който се сетих - без специални и без специализирани ИС и с наличните
(по масата
)
компоненти. Не е оптимално, но работи и си изпълнява задачата. В други
конструкции ще бъде по друг начин.
Имаше вариант да "приспивам" Arduino-платката при POWER OFF и тя да се буди примерно на всеки от 1 до 8 секунди, но това ми се стори безсмислено за небатерийно захранване, така че Ардуино UNO (или Ардуино NANO) при гасене в момента остава работещ и сканиращ дистанционния приемник (или бутон на енкодера) за разрешена команда за включване (бутони от 0 до 9).
![]() |
![]() |
![]() |
Arduino sketch: arduino_fm_rx_tea5767_lz2wsg_v49a.zip [ino,spl7,gif,txt,h,cpp][9,5mb]
Вярно, конструкцията се получи голяма, с голям брой дискретни компоненти, която като конструкция друг трудно би се навил да повтори 1:1, но с дискретни компоненти я поисках аз. Като цяло всеки възел може да се оптимизира, изменя, допълва и съкращава при желание.
FM радиоприемник с IR под
управление на Arduino UNO
Какви са функциите на FM стерео-радиоприемникa с ИС TEA5767 и дистанционно управление:
- консумация в режим "Изключено" (с два светещи светодиода): 32,8 mA на 12 волтовата шина;
- консумация в режим "Включено"
, с индикация с подсветка, без консумацията на
нискочестотния усилвател: 96,8 mA;
- честотен диапазон: (87,6 ÷ 108,0) MHz
(за моя екземпляр, захранен на 5V: реален честотен диапазон: (78 ÷ 117) MHz;
- индикатор на честота на приеманата
станция (ХХ,Х MHz);
- стъпка на изменение на честотата:
± 100 kHz;
- STEREO/MONO
режим с индикатор, без възможност за ръчно превключване на режимите;
- стандартна след-корекция на двата
канала: deemphasis 50 μS (Европа, Австралия) / 75 μS (Северна Америка)
с избор - в кода;
- индикатор за силата на сигнала (в
случая: нивото на AGC) с числена стойност и бар-граф;
- управление с механичен енкодер с бутон
и дистанционно управление;
- първоначално стартово състояние
след подаване на захранващото напрежение: Загасено ! ;
- загасене на приемника: с
дистанционното управление, червен бутон (POWER OFF);
- пускане на приемника: с
дистанционното управление, избирателно, на запаметени станции, с бутони 0-9;
- пускане на приемника: с
бутон на енкодера: на запаметена станция с номер "0".
- превключване между запаметените
радиостанции:
а) чрез едкондер: с въртене вляво/вдясно, от 0 до 15, кръгово;
б) чрез
дистанционното управление: с бутони CH+/CH-, от 0 до
15, кръгово;
в) чрез
дистанционно управление: избирателно, с директен достъп, с бутони 0-9;
- усилване / намаляване на
гръмкостта: в 7 + 1 стъпки (4-та позиция - при старт, 0 - без звук), с бутони
VOL+/VOL- на с дистанционното управление и
показание върху дисплея с бар-граф за стойността;
- режим "БЕЗ ЗВУК": с
дистанционно управление, зелен бутон (MUTE);
- режим "ЗАПАМЕТЕНИ СТАНЦИИ" и
"НАСТРОЙКА" (TU). Двата режима се превключват
алтернативно с кратко натискане на бутона на енкодера или с натискане на бутон
"Full Screen" на дистанционното управление.
- запомняне на станции
от енкодера (от 0 до 15, броя им лесно се променя в кода). Записът се извършва с по-дълго
натискане на бутона на енкодера в режим "НАСТРОЙКА" (TU) върху
клетка с текущ номер, изобразена в "ЗАПАМЕТЕНИ СТАНЦИИ";
- запомняне на станции от
дистанционното управление: в режим "НАСТРОЙКА" (TU)
и дълго натискане на желан бутон от 0 до 9.
- възможност за нулиране на
запаметените станции (reset default). Извършва се
с много дълго задържане на бутона на енкодера (> 5 сек) и включване на
устройството. Всички запомнени честоти в EEPROM
се заместват с 87,6 MHz.
Програмният ред за корекция на честотата на кварцовия осцилатор от Допълнение 2 е вече с номер 555:
в програмния код е: frequencyB = 4 * (frequency * 100000 + 225000) /
32768;
след корекцията става примерно:
frequencyB = 4 * (frequency * 100000 + 225000) / 32760;
Както писах по-горе: с вашия радиоприемен модул на ИС TEA5767 корекция може
да не е необходима или тя да е с друг знак или стойност.
В програмния код най-вероятно има пропуски, неоптимални
функции (особено в IR Control !), "спагети-код" (където и авторът
забрави вече кое какво "вика"
),
но допълненията оставям за друг, бъдещ период.
С пожелания за хубава музика. Приятно слушане
.
Помощни препратки:
1. Подключение FM-радиомодуля TEA5767 к Arduino [madebyme]
2. AD9850 DDS VFO, Richard Visokey, AD7C
3. Arduino
4. Wikipedia, CamelCase
5. Wikipedia, Spaghetti code
6.
AR1010, RDA5807M, RDA5820, SI4730, TEA5767 [zip,pdf][3,8mb]
7.
VFO DDS Arduino - AD9850 - IR Remote,
PY2OHH
LZ2WSG, KN34PC
14 март 2017 година