Управление спутниковым мотоподвесом при помощи микроконтроллера



 

В совсем недалекую эпоху 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 x.x° (Goto X), в паспорте МП д.б. указано, что он понимает эту команду.

Достаточно.

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 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 < 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):

1
2
3
4
5
6
7
8
9
10
int8 odd(int8 n)
{int8 p;
 p=n >> 1;   
 p ^= n;    // XOR
 n= p >> 2;
 p ^= n;  
 n= p >> 4;
 p ^= n;  
 return !(p & 1); // возврат младщего бита как бита нечетности
}

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

1
2
3
4
5
void sendbyte(int8 b)
{int8 i,bb; bb=b;
 for(i=0;i<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”, А. Данилин, СОВРЕМЕННАЯ ЭЛЕКТРОНИКА № 7 2009.
Только вместо двух диодов VD5,VD6 (1N4004) поставлен один.

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

Список радиоэлементов

Обозначение Тип Номинал Количество
U1 МК PIC 8-бит
PIC16F886
1  
Q1 Биполярный транзистор
BC338
1  
Q2 Биполярный транзистор
BC328
1  
D1 Выпрямительный диод
1N4002
1  
R1 Резистор
4.7 кОм
1  
R2 Резистор
1 кОм
1  
R3 Резистор
10 кОм
1  
RLOAD Резистор
100 Ом
1  
SW1 Тактовая кнопка   1  
BATIN Батарея питания 12 В 1  
  Исполнительный механизм мотоподвеса   1  

 

Взято с сайта cxem.net



Категория: Разное, Схемы и сервис мануалы
Метки: , ,

Написать коментарий

*
= 3 + 8

Добавить изображение

Последние статьи