Мануалы инетные

Обожаю, сцука тьюториалы по HAL STM32 в интернете. 99% — типичный мануал «как нарисовать сову». Тыкаем менюшки в MXCube, копипастим получившийся код — профит!!!





Некропостинг v2.0

Божечки, три года прошло с прошлой некрозаписи… Иногда появляются мысли что-то написать, но то пароль надо вспоминать, то с телефона неудобно.

Муки с широкополосным трансформатором

Потребовалось скрестить HackRF cо спутниковой передающей головкой.

Засада была в следующем:

а) Голова имеет вход 75 ом

б) Голова получает питание по сигнальному кабелю

в) Голова получает опорный сигнал 10 МГц по сигнальному кабелю.


Все проблемы решаемы, но после ознакомления с ценами на какой-нибудь инжектор питания/10 Mhz для передающей головки сразу просыпается тяга к знаниям, и желание сделать это самому.


Так как IF частота равна 950-1450 MHz, а это уже СВЧ, то логично было бы сваять трансформатор на микрополосках. Начал копать эту тему и обнаружил такую вещь как широкополосный биномиальный четвертьволновой трансформатор.

Лучше всего эта тема рассмотрена вот в этом документе: http://studylib.net/doc/5628390/design-a-three-section-binomial-transformer-to-match-a-10


Основываясь на этом учебном пособии набросал скрипт на питоне, который расчитывает требуемое волновое сопротивление для каждой четвертьволоновой секции.


#!/usr/bin/env python
from __future__ import division
import cmath
import math
N = 4
ZL = 75 #desired impedance
Z0 = 50 #input impedance
F = 1.2e9
MRn = 0.005
c = 299792458
impedances = [0]*(N+2)
impedances[0]= Z0
impedances[-1] = ZL
quater_len_cm = (0.25 * (c/F)) * 100

A = (1/ (math.exp( (N+1) * math.log(2) ))) * math.log(ZL/Z0)
print A
for i in range (0, N):
    MR = ((A*math.factorial(N)) / (math.factorial(N - i) * math.factorial(i)))
    impedances[i+1] = impedances[i] * math.exp(2*MR)
print impedances

Df = 2*F - (4*F/math.pi)*math.acos(0.5 * (MRn/math.fabs(A))**(1/N) )
print "Center freq, Mhz " + str(F/1e6)
print "Band, Mhz " + str (Df/1e6) + " Low: " + str((F-(Df/2))/1e6) + " High: " + str((F+(Df/2))/1e6)
print "Quater wavelength, cm: " + str(quater_len_cm)

Небольшое пояснение по переменным:

N — кол-во секций трансформатора. Больше секций — шире полоса

ZL — желаемый импеданс

Z0 — входной импеданс

F — центральная частота на которой коэффициент отражения минимален.


Скрипт мне насчитал следующее:

$ ./tlcalc.py

0.0126707846284

[50, 51.28326982332162, 56.75426749658315, 66.07432648524212, 73.12326247759357, 75]

Center freq, Mhz 1200.0

Band, Mhz 622.569807826 Low: 888.715096087 High: 1511.28490391

Quater wavelength, cm: 6.2456762083


Теперь берем утилиту RFSim99,  и вгоняем то что получилось


И запускаем симуляцию, прогоняя частоту от 700Мгц до 2 Ггц


Выглядит приемлимо. На частоте 950 МГц -52dB, на 1450 МГц -54dB, в центре на 1200 МГц -100dB


Следующий этап — раззвести печатную плату. И тут у меня засада. Каждый четвертьволновой участок около 6 см. Следовательно дорожки надо согнуть. Но пока я не знаю как это отразится на трансформаторе. Будем думать.

Мелкий ремонт самодельного китайского авиационного приемника.

Итак, пятничный вечер. Чем бы развлечь себя? О! Доведу-ка я до ума приемник авиадиапазона, что я купил себе на Новый Год.

IMG_20140725_224840

Данный приемник продавался в виде набора "сделай сам", плата + кучка деталек. Позиционировался как "спаял - включил - работает".  Но вот работать сразу не захотел, и был отложен на полку. Проблема была в том, что вместо авиадиапазона из динамика бодро орало радио "Шансон", и прочие местные FM станции. Как можно догадаться, китайский автор данной схемы немного промахнулся в колебательном контуре, в результате чего частота приема сползла вниз.

Так как делать нечего, исправим эту маленькую оплошность. Открываем схему.

b39e2585cb5308d55af0f24820c02170

Так.. Все крутится на микросхеме-миксере NE602, микросхеме-демодуляторе MC1350, и трех операционных усилителях. Нас интересует обвязка вокруг миксера NE602, ибо в ней генерируется сигнал для смешивания с эфирным. Открываем даташит, и читаем что входом для осциллирующего сигнала являются ноги 6 и 7. Изучаем что там такое к ним идет. Видим элементарный LC колебательный контур из катушки, конденсатора C14 и варикапа D1. Крутим ручку насторойки частоты -> меняется напряжение на варикапе -> меняется его емкость -> меняется общая емкость C14 и варикапа -> меняется частота колебательного контура.

Так как катушки выполнены в виде дорожек на печатной плате, и повлиять на их емкость нельзя, поиграем с конденсатором С14. По схеме он 27 пФ. Впаиваем 18 пФ. Проверяем. О! Радио Шансон и прочие, исчезли. Осталось лишь 2 станции на краю вещательного FM диапазона. Мы на верном пути! Впаиваем на 10 пФ. Включаем. Тишина. Музыки и болтовни ведущих нет. Уже хорошо. Крутим ручку настройки... Опа! Слышим АТИС на частоте 127.000. Радуемся!

P.S. Как показал мой печальный опыт, все китайские радиоконструкторы жутко не любят питаться от моего блока питания ROBITON. Хорошо и бесшумно работают только от "Кроны".

Доделка USB звуковушки PD553

IMG_20140705_175503
Купил себе такую внешнюю звуковушку в Ситилинке для будущего APRS маяка. Почитал комменты - а там народ жалуется что эта звуковуха греет наушники, и очень быстро умирает. Там же в комментах пояснено почему так происходит - в аудиовыходе отсутвуют оконечные конденсаторы, и на выходе висит постоянная составляющая.

Ну что ж.. берем паяльник и доделываем за нашими узкоглазыми братьями.

IMG_20140705_171449

На фото я обвел места под оконечные конденсаторы. Вместо них сейчас просто отверстия, а между отверстиями - перемычки. Берем острый нож, разрезаем перемычки меж контактными площадками.

IMG_20140705_172120

Я решил напаять SMD конденсаторы сзади.

IMG_20140705_174633

Ну вот и все. Собираем, выткаем, и проверяем. Работает!

Передача данных в GnuRadio используя TCP Source

Итак, небольшая заметка.

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

Было проведено небольшое исследование, в каком формате GnuRadio передает данные через блок TCP Sink

Сначала я организовал простую схему: Signal Source (Square, 10 sampl/sec, 1Hz) -> Throttle -> File Sink. Тип данных везде использовался float

data_hex

Как видно есть 5 похожих последовательностей.  Длина одной последовательности - 64 бита. С учетом того, что использовался только float тип данных, первые 32 бита отведены для использования при передаче комплексных чисел. Затем я проверил свою догадку запустив wireshark и сняв дамп трафика между блоками TCP Sink и TCP Source (кстати следует учесть что эти блоки не работают, если помещены на одной схеме). Wireshark показал что при передаче используется такая же структура.

Ну что ж, если схема передачи значений ясна, то пора приступать к делу. Из сверхполезной книги Робачевского "Операционная система UNIX" был выдран образец tcp сервера, и грязно скрещен с программой считивания данных с ADC. Результат - блестящий! GnuRadio без всяких проблем соединился с моим самописным сервером, и начал обрабатывать данные.
Далее скриншоты...

Схема приема и визуализации

simple_adc_visualisation
Схема в работе:

adc_run

Port forwarding в VirtualBox NAT

Сделаю записульку по NAT в VirtualBox.
Для перенаправления порта гостевой машины, следует добавить в xml файл в секцию ExtraData следующее:
<extradataitem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestrdp/GuestPort" value="3389"></extradataitem>
<extradataitem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestrdp/HostPort" value="3390"></extradataitem>
<extradataitem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestrdp/Protocol" value="TCP"></extradataitem>


В данном примере перенаправляется порт 3390 хостовой машины на порт 3389 гостевой машины при использовании виртуальной сетевой карты PCnet.

Вечный источник лулзов.

Когда мне становится скучно, я набираю во вконтактике в видеопоиске "сатанизм". И настроение мое сразу уличшается от многочисленных клоунов и душевнобольных.
Вот и сейчас.



Доставляет его голос. Именно таким голосом были озвучены видеоролики в Diablo II.