Управление мотором SG-2100A под Linux

SG-2100A_motorВсе современные спутниковые адаптеры снабжены генератором тонового сигнала 22 кгц. Он подаётся в коаксиальный кабель для переключения конвертера в режим HIGH BAND (диапазон частот выше 11700 мгц). Промодулировав данный тон-сигнал нулями (1 мсек) и единицами (0.5 мсек), можно с помощью такого генератора посылать команды и другим устройствам: коммутаторам, позиционерам, актуаторам и пр. Осуществляется это драйверами программно, т.е. сам по себе адаптер дополнительного хардваре в схемотехнике не требует. Такой протокол носит название DISEqC. В этой заметке я покажу как управлять мотоприводом SG-2100A (и другие подобные) из-под linux-а с помощью Cesbo Astra (возможность реализована начиная с версии 5.64).

Скрин ниже снят анализатором Saleae. Такая посылка должна быть отправлена, чтобы установить мотор в 0°E (по-сути 0°W то же самое) по градации на шкале мотора.

diseqc_analyze

Перечень команд (взят из драйверов):

[E0 31 60]            // Stop Positioner movemoment
[E0 31 63]            // Disable Limits
[E0 31 66]            // Set East Limit
[E0 31 67]            // Set West Limit
[E0 31 68 00]         // Drive Motor East continously
[E0 31 68 FF-nn]      // Drive Motor East nn steps
[E0 31 69 FF-nn]      // Drive Motor West nn steps
[E0 31 69 00]         // Drive Motor West continously
[E0 31 6A nn]         // Store nn
[E0 31 6B nn]         // Goto nn
[E0 31 6F XX XX XX]   // Recalculate Position
[E0 31 6A 00]         // Enable Limits
[E0 31 6E XX XX]      // Gotoxx
[E0 10 38 F4]         // User

diseqc = «[E0 31 6E D4 80]» — 74°W
diseqc = «[E0 31 6E D0 00]» — 0°W
diseqc = «[E0 31 6E E0 00]» — 0°E
diseqc = «[E0 31 6E E4 80]» — 74°E

Высчитываем один шаг: 74° / 0x480 = 0.064236°
Теперь, чтобы например установить на 10.5°E (по шкале мотора):
0xE000 + (10.5° / 0.064236) = 0xE0A3

Конфиг астры:

dvb_tune({
    adapter = 0,
    type = "S",
    frequency = 12155,   -- HIGH band [tone 22 khz]
    lnb_sharing = false, -- enable voltage lnb
    polarization = "H",  -- 18V
    symbolrate = 27500,  --
    lof1 = 9750,         --
    lof2 = 10600,        --
    slof = 11700,        --
    modulation = "QPSK", --
    diseqc_mode = "cmd", --
    diseqc = "t W50 [E0 31 6E E0 A3] W30 T"  -- set 10.5°E
});

Команду дисека можно и упростить — «t W50» (снятие и выдержка 50 мсек) можно не указывать. Так тоже будет работать. Но вернуть тон (если он был) в конце обязательно надо. А вот в случае с нижним поддиапазоном несколько попроще картина. Отключать/включать тон 22 кгц и выдерживать таймауты нет необходимости. Поэтому здесь конфиг выглядит так:

dvb_tune({
    adapter = 0,
    type = "S",
    frequency = 11555,   -- LOW band [no tone 22 khz]
    lnb_sharing = false, -- enable voltage lnb
    polarization = "H",  -- 18V
    symbolrate = 27500,  --
    lof1 = 9750,         --
    lof2 = 10600,        --
    slof = 11700,        --
    modulation = "QPSK", --
    diseqc_mode = "cmd", --
    diseqc = "[E0 31 69 FE]"  -- повернуть на один шаг на West
});

Запись опубликована в рубрике Linux, Программирование с метками , , . Добавьте в закладки постоянную ссылку.

Добавить комментарий