Управління супутниковим мотопідвісом за допомогою мікроконтролера

  • Час 13-03-2015, 11:54
  • Автор admin
  • Коментарів 0 Комент.
  • Силка url

У зовсім недалеку епоху Dial-Up інтернету багато встановлювали супутникові тарілки з мотопідвісом для отримання доступу до порівняно швидкого інтернету і безкоштовному ТВ хорошої якості. Сьогодні на перший план вийшли ADSL та мобільний інтернет.

Мотопідвіси (МП) у багатьох залишилися не при справах. Але не використовувати таку класну річ просто гріх. Я вирішив використовувати МП (SG2100A, один з найпопулярніших і недорогих) для системи стеження за положенням сонця (планую робити сонячний водонагрівач). Адже МП - це кроковий двигун + редуктор + велика шестерня + кінцеві вимикачі + контролер.

Контролер МП працює по протоколу Diseqc, зазвичай версії 1.2 (односторонній, без відповідей). Контролер МП є slave-контролером на шині Diseqc і виконує команди master-пристрою (ресивера, плати в ПК, мікроконтролера ...). Вся документація по цьому протоколу є на сайті www.eutelsat.com (англійською).

Команда складається як мінімум з трьох байт: стартовий, адреса, команда [, доп. байти для команди].

Стартовий байт може бути різним, але для МП він дорівнює 0xE0.
Адреса може бути різним, але для МП він дорівнює 0x31.
МП може виконувати багато різних команд, але нас цікавлять тільки такі:
0x00 Reset, скидання МП, потрібна для запам'ятовування поточного становища як 0 градусів.
0x60 Stop, зупинка двигуна
0x63 Disable Soft Limits, потрібна для переміщення в крайнє доступне положення
0x66 Set East Soft Limit, задає макс кут повороту на Схід
0x67 Set West Soft Limit, задає макс кут повороту на Захід
0x68 Drive East, в 4-му байті задаються кроки чи секунди
0x69 Drive West, в 4-му байті задаються кроки чи секунди
0x6E Goto xx ° (Goto X), в паспорті МП д.б. вказано, що він розуміє цю команду.

Достатньо.

МП харчується постійною напругою 12-18 в (при подачі напруги світлодіод МП повинен горіти зеленим кольором!)
Живлення подається: плюс на жилу кабелю, мінус - на оплетку.
Команди представляють собою модуляцію цього постійної напруги імпульсами з частотою 22 кГц + -20%.
Амплітуда модуляції 650 мв + - 250 мв.
Байти передаються послідовно без пауз.
Кожен байт це 8 біт + 9-й біт доповнення до нечет (приклад: 111100001)
Кожен біт має тривалість 1500 мкс.
Причому біт "0" це 22 імпульсу загальною тривалістю 1000 мкс плюс пауза 500 мкс.
А біт "1" це 11 імпульсів загальною тривалістю 500 мкс плюс пауза 1000 мкс.
Тоді підпрограма видачі бітів для мікроконтролера PIC, що працює з F = 4МГц, виглядають так:

// CCS C Compiler #define MOPO PIN_B0 ********** void sendbit (int8 v) // v = 0 | 1; {Int8 k, n; if (v == 0) n = 23; else n = 12; // Значення n підібрано досвідченим шляхом виміром в Proteuse for (k = 1; k lt; n; k ++) {Output_high (MOPO); delay_us (19); // Дослідним шляхом output_low (MOPO); delay_us (12); // Дослідним шляхом} delay_us (500); if (v == 1) delay_us (500); // Фомірованіе паузи}

Звичайно, для формування імпульсів можна використовувати таймер і переривання.

Тепер необхідно сформувати байт для передачі в МП.
Байт передається, починаючи зі старшого біта, і закінчується бітом паритету.
Для його обчислення у нас є гарний алгоритм (див. Microchip AN774):

int8 odd (int8 n) {int8 p; p = n gt; gt; 1; p ^ = n; // XOR n = p gt; gt; 2; p ^ = n; n = p gt; gt; 4; p ^ = n; return! (p & 1); // Повернення младщего біта як біта непарності}

Тепер можемо видати в МП весь байт:

void sendbyte (int8 b) {int8 i, bb; bb = b; for (i = 0; ilt; 8; i ++) sendbit (shift_left (&bb, 1,0)); // Висновок, починаючи зі старшого біта sendbit (odd (b)); // Вивід біта Odd}

Порядок роботи з МП:
1) Подати харчування на МП (12-18 В)
2) Вручну, кнопкою перемістити МП в 0-точку (Північ)
3) Тонким стрижнем натиснути Reset (вузький отвір) і тримати ~ 2 сек., Поки світлодіод не займеться зеленим кольором. (МП запам'ятовує цю позицію, як Північ (0 гр.)).
4) Прошиваємо МК, збираємо схему формування імпульсів.
5) Видаємо команду Disable Soft Limits:
  sendbyte (0xE0); sendbyte (0x31); sendbyte (0x63);
Між командами необхідно витримувати паузу і видавати наступну після відпрацювання попередньої!
6) Тепер повернемо МП в крайнє положення, щоб дізнатися його можливості:

   sendbyte (0xE0); sendbyte (0x31); sendbyte (0x68); sendbyte (0x7F);

   -3-й байт команди 0x68 -Drive East
   -4-й байт команди це кроки чи секунди:
   - 0x01 - 0x7F -це секунди 
   (Тобто 0x7F це обертання протягом 127 секунд, швидкість обертання МП ок. 2гр. / Сек. При харчуванні 12 В)
   - 0x80 -0xFF -це кроки, причому 0xFF-це 1 крок, а 0x80 - 128 кроків
   - 0x00 -безупинне рух до кінцевого мех-го обмежувача

Вимірюємо кут повороту МП, якщо недостатній, то намагаємося зняти або перемістити кінцеві вимикачі. У мене вийшло + - 75 гр., Що відповідає паспорту. Після чого обов'язково задаємо граничні кути поворотів.

Але спочатку треба навчитися переміщати МП в задану кутову позицію:
Спочатку повернемо МП в точку "Північ":
   sendbyte (0xE0); sendbyte (0x31); sendbyte (0x6E); sendbyte (0x00); sendbyte (0x00);
Розглянемо структуру 4-го байта цієї команди:
   -для руху в точку схід Півночі (в моєму випадку 0-75) старщій напівбайт = 0xE.
   -для руху в точку західніше Півночі (0-75) старщій напівбайт = 0x0.
   -число в молодшому півбайті задає градуси: для отримання градусів це число множиться на 16 (приклад, 3х16 = 48градусов).
Структура 5-го байта цієї команди:   
   -старший напівбайт дає градуси (наприклад, 0xA це 10 градусів)
   -молодший напівбайт визначає дробову частину:
   1xxx додає 0,5 градуса
   х1xx додає 0,25 градуса
   хх1x додає 0,125 градуса
   ххх1 додає 0,0625 градуса

Розглянемо приклад команди: 0xE0,0x31,0x6E, 0xE5,0x3F
  
 - 0xE в 4-му байті каже, що треба рухатися на схід
   - 0x5 в 4-му байті каже, що треба рухатися в точку 5х16 = 80гр.
   - 0х3 в 5-му байті каже, що до 80 треба додати ще 3 градуси
   - 0хF в 5-му байті каже, що до 83 треба додати ще 0,5 + 0,25 + 0,125 + 0,0625 = 0,9375
   Разом МП д. Переміститься в точку 83,9375 гр. сх. довготи.
Не забувайте, якщо ми розмістимо МП 0-й точкою на Південь (що і робиться для антен або сонячних концентраторів), то Захід і Схід поміняються місцями.

Тепер перемістимося в крайню східну точку, наприклад E60:
   sendbyte (0xE0); sendbyte (0x31); sendbyte (0x6E); sendbyte (0xE3); sendbyte (0xC0);
Задамо цей кут як граничний для сходу:
   sendbyte (0xE0); sendbyte (0x31); sendbyte (0x66);
Тепер перемістимося в крайню західну точку, наприклад W60:
   sendbyte (0xE0); sendbyte (0x31); sendbyte (0x6E); sendbyte (0x03); sendbyte (0xC0);
Задамо цей кут як граничний для заходу:
   sendbyte (0xE0); sendbyte (0x31); sendbyte (0x67);
Тепер, у разі помилкової команди або збою МП не повернеться далі + - 60 градусів.

Управління супутниковим мотопідвісом за допомогою мікроконтролера

Схема формування імпульсів взята зі статті "Тестер DISEqC-пристроїв з підтримкою протоколів управління: 1.0, 1.1 та 1.2", А. Данілін, СУЧАСНА ЕЛЕКТРОНІКА № липня 2009.
Тільки замість двох діодів VD5, VD6 (1N4004) поставлений один.

Алгоритм і схема реально випробувані.

Tags

Коментарі до новини