Налагоджувальна плата ПЛІС — Франкенштейн. Телеграфний передавач

Біжать останні деньки минає. Передноворічна метушня. А для тих, у кого видалася вільна хвилинка на роботі, я пропоную серію статей про саморобну налагоджувальну плату на базі ПЛІС Altera EPM 7064.



Нещодавно мені потрібно було знайти пару 1U корпусів під мій проект. І в якості альтернативи новим, ми вирішили пошукати старі прилади в 1U форматі, нутрощі викинути, а корпус використовувати за призначенням. Але, відкривши корпус, я був приємно здивований! Цілих чотири ПЛІС від Altera, та до того ж 5 вольтів. Я не зміг втриматися, щоб одну з них не спробувати в ділі!

Паяльної станції у мене немає, ЛУТ технологію я не практикую. Тому я взяв будівельний фен на 250 градусів і отковырял мікросхему ПЛІС від плати. Перехідною плати для такого корпусу у мене теж не було, тому я взяв звичайну макетку, впаяв в неї стійки і за допомогою накрутки і пайки, поєднав висновки мікросхеми зі стійками. Вивів роз'єм JTAG і харчування, прикрутив генератор. Це все, що потрібно для початку роботи з мікросхемою

Що можна зробити з такої маленької ПЛІС? Радіоаматори вирішують таку проблему дуже просто: у будь незрозумілої ситуації ми робимо передавачі! З чого? Та з чого завгодно, що під руку потрапило в даний момент! А сьогодні у нас Altera EPM7064.

Що не так з Altera EPM7064?
А з нею все в порядку! Величезною перевагою цієї мікросхеми є її робоче напругу, рівну 5 вольт. А це означає, що у нас немає проблем з її харчуванням, нам не потрібно узгоджувати рівні, при її поєднанні з будь старої ТТЛ логікою: старими комп'ютерами, типу ZX Spectrum або логічними схемами на дискретних мікросхемах ТТЛ.

Ще ця ПЛІС зберігає конфігурацію під вбудованої енергонезалежної пам'яті. Зовнішніх мікросхем flash пам'яті не потрібно.

Однак, обсяг її не надто великий: всього 64 клітинки. Це не так і багато. У проекті на ПЛІС Lattice нам вдалося зібрати годинник. Там теж було 64 клітинки. Цікаво, чи вміститься та ж HDL схема в ПЛІС того ж об'єму, тільки від Altera?



Робимо передавач
Насправді, зробити передавач дуже просто! Достатньо взяти генератор певної частоти і з'єднати його з антеною (про узгодження, хвильовий опір лінії зв'язку і резонансну частоту антени поки говорити не будемо). Після цього, якщо у нас є приймач на частоту і модуляцію, ми зможемо прийняти сигнал. На невеликих відстанях, на приймач можна приймати тактові генератори навіть від звичайної плати з мікроконтролером.

Якщо просто включити передавач-генератор на певній частоті, то він не буде передавайть якоїсь корисної інформації. Тому, сигнал передавача потрібно якось модулювати. Є багато видів модуляції.

У радіоаматорський практиці, найпростішим видом зв'язку є «Телеграф» (CW). Телеграф — багато в чому унікальний вид зв'язку. З одного боку — його можна вважати цифровим видом зв'язку, і навіть самим першим цифровим видом зв'язку. З іншого боку, підготовлена людина здатний декодувати цей цифровий сигнал на слух. Зараз для цього існують програми декодери. Але людське вухо до цих пір вважається найбільш точним інструментом для прийому. Ще телеграф — один з найбільш «далекобійних» видів зв'язку. За рахунок передачі на одній частоті і низькій швидкості передачі, вся енергія сигналу концентрується на одній частоті, це позитивно позначається на дальності передачі. Для прийому можуть бути використані вузькосмугові фільтри. Телеграфний сигнал складається з крапок і тире. Кожен символ телеграфного алфавіту — це комбінація точок і тире. Найбільш часто застосовуються літери складаються з меншої кількості елементів.



Крапки й тире — це факти включення передавача. У проміжках між точками і тире, передавач вимикається, сигнал в ефір не передається. Існують правила, за якими тире повинна мати тривалість, рівну трьом точкам. Проміжок між точками або тире в одному символі, повинен дорівнювати тривалості однієї точки. Проміжок між буквами в одному слові повинен дорівнювати трьом точкам. А між словами повинна бути пауза не менше семи точок.

Якщо ми підключимо до висновку ПЛІС провід невеликої довжини (в якості антени) і подамо на цей висновок сигнал тактового генератора, то ми зможемо приймати цей сигнал, як немодулированную несучу частоту. Дозволяючи, і забороняючи виведення сигналу на антену, ми будемо модулювати несучу. А формуючи правильні тимчасові інтервали для точок і тире, ми сформуємо телеграфний радіосигнал.

Формування телеграфного сигналу
Для формування часових інтервалів в частках секунди, нам потрібно поділити сигнал тактового генератора. У моєму випадку, частота тактового генератора дорівнює 25175000 Гц. Я вирішив взяти 23 розрядний двійковий лічильник. Частота, одержана в результаті буде дорівнює:

лічильник 2^22 = 4194304
тактова частота 25175000 Гц
підсумкова частота 25175000 / 4194304 = 6 Гц

Цілком достатньо для формування інтервалу в одну точку.

Тепер спробуємо сформувати щось дуже просте. Наприклад, сигнал SOS: три крапки, три тире, три крапки. Намалюємо тимчасову діаграму:



З неї бачимо, що нам потрібно 30 кроків. Це 5 біт. Тобто до 22 бітам лічильника ми зверху додаємо ще 5 біт. І у нас виходить 27 біт.

Тепер логіка дуже проста (т. к. складну логіку ми не зможемо помістити в таку маленьку ПЛІС): коли значення лічильника дорівнює 0, 2, 4, 8, 9, 10 (і далі по діаграмі ми видаємо одиницю, інакше — нуль. Цей сигнал (CW) вже можна вивести з ПЛІС і проконтролювати його, припустимо, світлодіодом. А щоб модулювати радіосигнал, ми будемо виводити сигнал тактового генератора на висновок тільки якщо значення сигналу CW дорівнює одиниці.

module epm7064_test(clk, out_lf, out_rf);
input wire clk;
output wire out_lf;
output wire out_rf;

reg [27:0] cnt; initial cnt <= 28'd0;

завжди @(posedge clk) cnt <= cnt + 1'b1;

wire [4:0] hi_bits = cnt[26:26-4]; // 5 біт старших біт лічильника для формування символів

wire cw = (hi_bits == 5'd0) ||
(hi_bits == 5'd2) ||
(hi_bits == 5'd4) ||
(hi_bits == 5'd8) ||
(hi_bits == 5'd9) ||
(hi_bits == 5'd10) ||
(hi_bits == 5'd12) ||
(hi_bits == 5'd13) ||
(hi_bits == 5'd14) ||
(hi_bits == 5'd16) ||
(hi_bits == 5'd17) ||
(hi_bits == 5'd18) ||
(hi_bits == 5'd22) ||
(hi_bits == 5'd24) ||
(hi_bits == 5'd26);

assign out_lf = cw;
assign out_rf = cw & clk;

endmodule


Ось і все, пора включити приймач

Приймаємо сигнал нашого передавача
На жаль, нам не підійде мовний приймач для нашого передавача. По-перше, через діапазонів частот — такий частоти просто може і не бути в мовній приймачі. По-друге, за виду модуляції. Мовний приймач буде приймати в амплітудної модуляції (АМ), тому, коли сигналу телеграфу не буде, то приймач буде приймати ефірний шум, а коли буде несуча, з приймачі буде тиша (т. к. несуча ніяк не модулирована по амплітуді). У підсумку, АМ приймач буде видавати шум, переривчастий тишею на моменти точок і тире.

Який потрібен приймач? Для прийому телеграфу потрібен односмуговий приймач. Буду чесний, вибираючи частоту я трохи схитрував. У мене є USB приймач, нижня межа прийому у якого 24 МГц, тому і частоту генератора я вибирав з урахуванням того, щоб сигнал можна було прийняти на цей приймач. Такий приймач можна купити на ebay/aliexpress приблизно за 500 рублів. Шукати за словами R820T2. В якості програми для прийому я використовую SDRSharp.



Модифікуємо передавач для прийому на АМ приймач
Трохи подумавши, я згадав, що у мене є средневолновый приймач. Частота прийому 530 — 1600 КГц. Модуляція — амплітудна. Найчастіше, приймач на цей діапазон є практично в кожній автомагнітоли. А ми зібрали з сином такий приймач з конструктора.

Для того, щоб отримати несучу частоту в діапазоні частот цього приймача, нам потрібно поділити частоту тактового генератора. Якщо ми будемо брати окремі біти з нашого лічильника, то ми якраз і отримаємо значення тактового генератора, поділені на ступінь двійки. Приміром 4-й біт — це буде поділ на 16 і результат — 1573 КГц, я вибрав 5-й біт і частоту 786 КГц (т. к. китайський змінний конденсатор виявився злегка бракованим, і не перекриває весь діапазон частот).

Тепер нам потрібно зробити амплітудну модуляцію сигналу. Нам простіше — у нас телеграфний сигнал, тому нам досить переривати несучу частоту зі звуковою частотою. Вийде 100% модуляція. Для прийому на АМ-приймач (для роботи амплітудного детектора в приймачі) цього буде достатньо. Виберемо відповідний біт з лічильника-дільника частоти. Це 14-й біт, що рівнозначно розподілу на 16384. У підсумку вийде частота — 1536 Гц. Ця частота знаходиться в чутному людиною діапазоні, і в діапазоні частот, які здатний вивести АМ приймач.

Код на Verilog треба трохи підправити:
wire audio = cnt[13]; // 14ї біт - 1536 Гц - тон звукової частоти
wire rf = cnt[ 4]; // 5й біт - ~786 RГц - радіочастота

assign out_rf = cw & rf & audio;


І у нас вийшла амплитундая телеграфия.


Висновок
Для проекту використовувалися: ПЛІС Altera EPM7064, Quartus II 11.1, китайський програматор. Кількість зайнятих клітинок — 30 з 64-х. А це значить, що можна ускладнити проект для передачі більш довгих текстів.

github.com/UA3MQJ/epm7064_cw_tx

Будь ласка, не переживайте за Франкенштейна, дуже скоро я віддам ПЛІС своєму другові, а він зробить для неї гідну друковану плату.

Продовження пригод Френкі чекайте вже завтра з ранку!
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.