Автор Тема: Укзатель радиокомпаса в качестве индикатора поворотки  (Прочитано 36859 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн UA9FAD

  • Ветеран
  • *****
  • Сообщений: 9323
  • Репутация: +1638/-107
  • QRA: LO88AA
Итак, для продолжения предметной беседы, с вас: алгоритм (не реферат из Дзен-помойки), исходники (желательно портируемые), схема без ошибок, описание протокола обмена.

Добавлю: желательно сделать таблицу нелинейности в Exel с построенным графиком - как это предлагает  VK5DJ. Хорошо, если будет использоваться в измерительном стенде делительная головка с нониусом 0.1 градуса, но и без неё можно добиться точности измерений в 0.5 градуса - тот же Corel позволяет построить шкалу-транспортир до 0.1 градуса.

На скрине - что удалось "выжать" из магнитного энкодера AS5045
« Последнее редактирование: 23 Февраль 2024, 13:35:12 от UA9FAD »
Victor Виктор

Оффлайн vlad-70

  • Пользователь
  • **
  • Сообщений: 20
  • Репутация: +9/-1
  • Подпись находится в стадии разработки
  • QRA: LN05XA
 Ну мне отвечать особо больше нечего. Я высказал свое мнение как использовать радиокомпас в качестве индикатора поворотки. И этот
метод работает. Можно еще раз зайти по ссылке https://datagor.ru/practice/elektroprivod/826-datchik-ugla-povorota-selsin.html.
У кого будут конкретные вопросы, постараюсь ответить.

Онлайн UA3IDQ

  • Ветеран
  • *****
  • Сообщений: 663
  • Репутация: +347/-1061
  • QRA: KO66JF
Что то не открывается ссылка. А себестоимость какая получается  при оцифровки сельсинов?

Оффлайн UD2F

  • Модератор форума
  • Ветеран
  • *****
  • Сообщений: 4349
  • Репутация: +820/-31
  • UA2 Contest Club
  • QRA: KO04HR
Что то не открывается ссылка.

Открывается, точку в конце надо просто убрать
https://datagor.ru/practice/elektroprivod/826-datchik-ugla-povorota-selsin.html
73! Валентин   ex: RU2FM

Оффлайн RC3UE

  • Ветеран
  • *****
  • Сообщений: 1507
  • Репутация: +281/-72
  • 13 el F9FT/21 el F9FT
  • QRA: LO07NG
Можно подать все напряжения снизу и обработать принятый сигнал с сельсина тоже внизу. Для этого используются родные 5 проводов идущие к сельсину.
Если это действительно так, то оба узла (датчик и приёмник) без проблем "влезут" в одну ардуино нано.
Вероятно, даже отдельный компаратор не потребуется, в нано он есть.
Вся проблема в том, что исходники на ассемблере, который мало кто уже помнит.. Во всяком случае, я за 40 лет его забыл почти до "0".

алгоритм и пр. для обратного преобразования: т.е. повернуть стрелку на сельсине-указателе согласно кода по протоколу GS232B
С этим проблем нет. Я отдаю и принимаю "стрелку" в RotorCraft по стандартному Serial(COM).

А вот "перевести" код с ассемблера в С++, чтобы всё это реализовать на ардуино - увы.. :(
73! Александр RC3UE (ex RA3UJ, UA3UES)

Оффлайн R2GKH Виталий

  • Ветеран
  • *****
  • Сообщений: 4325
  • Репутация: +580/-355
  • the Truth is out There...
    • Мысли вслух :)
  • QRA: KO92GP
Вся проблема в том, что исходники на ассемблере, который мало кто уже помнит..

И даже те, кто помнит, ничего с этим кодом не сделают.
По этому поводу много лет назад было обсуждение на CQHAM и на РадиоКоте. 
В выложенном "исходнике" нет ничего по данной теме. И автор статьи в журнале типа признавался,
что рабочая версия еще не оформлена, и он дает только заготовки к коду. 

Как видите, некто vlad-70 тоже всеми путями уходит от ответа на прямо поставленные вопросы.
 

 
Мы стояли на плоскости,
                  С переменным углом отражения...

Оффлайн Mildi

  • Ветеран
  • *****
  • Сообщений: 1859
  • Репутация: +150/-366
  • Три дня расстрела и каждый день до смерти.
  • QRA: KP67lx
Можно использовать включение сельсинов в трансформаторной схеме, у приемного сельсина ротор стопорится а на его обмотке ротора напряжение пропорционально углу поворота. Это требует также двух сельсинов, но оцифровка становится простой. И у аналоговых девиц есть еще специальные микросхемы интерфейсов для сельсинов, правда там цена не хилая, для промышленности решение однако.
73! Василий (ex\RA1OGS/1)

Оффлайн R2GKH Виталий

  • Ветеран
  • *****
  • Сообщений: 4325
  • Репутация: +580/-355
  • the Truth is out There...
    • Мысли вслух :)
  • QRA: KO92GP
... но оцифровка становится простой.

Как три копейки? Однако...
Василий, если у вас есть реальный рабочий проект, то не поделитесь?
Мы тут не один год уже бьемся, и все никак.
Мы стояли на плоскости,
                  С переменным углом отражения...

Оффлайн Mildi

  • Ветеран
  • *****
  • Сообщений: 1859
  • Репутация: +150/-366
  • Три дня расстрела и каждый день до смерти.
  • QRA: KP67lx
Рабочего нет, просто пока следил за вашим диалогом решил посмотреть что пишут в статьях.
Там как раз упоминается про трансформаторное включение сельсина приемника.
То есть сельсинов все равно надо 2 штуки, сэкономить не получится.
Как я понимаю основная трудность это высчитать из трех значений напряжений(токов) угол поворота. При трансформаторном включении сельсин приемник с зафиксированным ротором как раз и делает преобразование этих трех значений в одно напряжение пропорциональное углу поворота.  То есть основная задача выполнена остается только выпрямить напряжение и замерит с помощью АЦП.
73! Василий (ex\RA1OGS/1)

Оффлайн R2GKH Виталий

  • Ветеран
  • *****
  • Сообщений: 4325
  • Репутация: +580/-355
  • the Truth is out There...
    • Мысли вслух :)
  • QRA: KO92GP
Как я понимаю основная трудность это высчитать из трех значений напряжений(токов) угол поворота. При трансформаторном включении сельсин приемник с зафиксированным ротором как раз и делает преобразование этих трех значений в одно напряжение пропорциональное углу поворота.

К сожалению, это не так :( Расчет сделать не так уж и сложно. В параллельной ветке я приводил пример. Вот как раз получить адекватное напряжение - основная сложность. Важно учесть не сколько напряжение, сколько ФАЗУ по отношению к этим самым трем питающим напряжениям. При этом замер должен производиться с точностью лучше, чем 1/3 градуса на каждую фазу, если мы хотим получить точность 1 градус. Сельсин-индикатор по большому счету не нужен. Вместо него справится обычный резистор.

Теоретизировать и ссылаться на "у Пети типа видел" можно долго. А нужно делать. Два варианта уже в корзине (мусорной).
Теперь вот прикидываю третий - формировать на каждую обмотку свой зондирующий импульс, и исследовать, что на обмотке нагруженного якоря. Далее векторное построение. Да, потребует относительно большой мощности по питанию. Да - есть опасность генерации помех. Но, надо пробовать, а не выдавать за истину какие то теоретические изыскания из журнала мурзилка.
   
« Последнее редактирование: 23 Февраль 2024, 18:01:30 от R2GKH Виталий »
Мы стояли на плоскости,
                  С переменным углом отражения...

Оффлайн RC3UE

  • Ветеран
  • *****
  • Сообщений: 1507
  • Репутация: +281/-72
  • 13 el F9FT/21 el F9FT
  • QRA: LO07NG
Там как раз упоминается про трансформаторное включение сельсина приемника.
То есть сельсинов все равно надо 2 штуки
А смысл? Вытащить "градусы" на комп? Я это уже сделал (в индикаторном режиме).
При этом, на случай отказа "электроники", у меня остаётся работающий "железный" вариант.
Вариант, который озвучил vlad-70, интересен (для меня, например) тем, что не требует 400Гц. относительно мощного источника питания (который у меня, к сожалению, пока не получается).
И как я понимаю, он работает с любыми сельсинами (на любую частоту/напряжение).
Наверное, это самый большой его "плюс".
Наличие 2-х 50Гц сельсинов, сводит этот "интерес" почти к нулю.
Хотя, вероятно, "электронный" метод обладает ещё и повышенной точностью показаний.
Для меня это не актуально. Но интерес всё же есть. :)


73! Александр RC3UE (ex RA3UJ, UA3UES)

Оффлайн RC3UE

  • Ветеран
  • *****
  • Сообщений: 1507
  • Репутация: +281/-72
  • 13 el F9FT/21 el F9FT
  • QRA: LO07NG
Ещё раз поразмыслил насчёт
Можно подать все напряжения снизу и обработать принятый сигнал с сельсина тоже внизу.
Пришёл к выводу, что в этом случае, из-за "длинной линии" от сельсина до контроллера, надёжной работы вряд ли стОит ожидать.
Плюсом будет ещё приличный риск спалить контроллер.
В авторском варианте эти отрицательные моменты сведены к минимуму, т.к. "датчик" находится максимально близко к сельсину.
И для передачи данных "вниз" используется вполне надёжный метод (RS-485).
Иначе всё становится очень непредсказуемо. Как в плане достоверности передачи данных, так и в плане надёжности..

Ну в плане защиты от всяких неожиданностей можно, конечно, применить гальваническую развязку на высокоскоростных оптронах.
А вот во всём остальном..
В авторском варианте тоже есть риск надолго "ослепнуть", в случае отказа "датчика".
Всё же "железный вариант" на сельсинах намного надёжнее. Т.к. его, как говориться, писАли кровью..

Вообщем, для "выхода в поле" этот вариант (датчик "внизу") худо-бедно можно применить, а вот для "стационара", да ещё и с ограниченным доступом к "телу" (антенне)...

Так-что, если уж "оцифровывать" сельсин, то только в его стандартных режимах - указательном, или трансформаторном.
Ну или по "методу RC3UE" ;)

P.S.
что удалось "выжать" из магнитного энкодера AS5045
Виктор, а какой "выход" использовался? Аналоговый(ШИМ), или Serial?
« Последнее редактирование: 23 Февраль 2024, 19:59:17 от RC3UE »
73! Александр RC3UE (ex RA3UJ, UA3UES)

Оффлайн UA9FAD

  • Ветеран
  • *****
  • Сообщений: 9323
  • Репутация: +1638/-107
  • QRA: LO88AA
или Serial?

Типа RS232.
На шкале-транспортире стрелку испытуемого энкодера можно установить достаточно точно, а отсчет брать по электронной шкале трекера с точностью 0.1 градуса.
У Джона есть предложение - составив такой график вычитать погрешность из показаний, тогда и AS5045 в аналоговом режиме можно сделать "прецизионным". Но нужен программист - мне эта задача не по плечу. А в цифровом режиме такая компенсация, как я понимаю, потребует "вычислительную мощность".
Victor Виктор

Оффлайн vlad-70

  • Пользователь
  • **
  • Сообщений: 20
  • Репутация: +9/-1
  • Подпись находится в стадии разработки
  • QRA: LN05XA
Пришёл к выводу, что в этом случае, из-за "длинной линии" от сельсина до контроллера, надёжной работы вряд ли стОит ожидать.
Здесь проблемы нет. Сельсин хорошо гальванически развязан. Напряжения с контроллера на сельсин подаются через ключи на полевых сборках с защитными диодами и через резисторы в 50 Ом. на входе в контроллер тоже стоят большие резисторы с защитными диодами. Практика многих лет показала надежную работу в этом плане.

 У меня такое впечатление что никто из тех кто здесь написал не открыл указанный журнал Радио и не прочел указанную статью. Там расписана вся теория и даны расчеты. Все очень просто. Генерим 3 фазы с периодом 2880мкс.( я раньше написал герц – ошибка). Делим на 6. Это время прерывания таймера0. Через каждые 60 град. нам надо чередовать фазы.  Вот кусок кода обработки прерывания. Где мы генерим 3 фазы.
void TMR0_ISR(void)
{    // Clear the TMR0 interrupt flag
    INTCONbits.TMR0IF = 0;
    TMR0 = timer0ReloadVal;
    if(TMR0_InterruptHandler)
    {
        TMR0_InterruptHandler();
    }
   switch(i){ //переключение
case 0:
     RB5=1;
    i=1;
    CCP1CON  =0;
   TMR1H=0;
   TMR1L=0;
   CCP1CON  =4;
break;
case 1:
   RB7=0;   
    i=2;
  break;
case 2:
    RB6=1; 
    i=3;
break;
case 3:
    RB5=0;
    i=4;
 
break;
case 4:
    RB7=1;   
    i=5;
break;
case 5:
    RB6=0; 
    i=0;
  break;
    }     
    // add your TMR0 interrupt custom code
}
Одновременно с 1-й фазой чистим таймер1 и модуль ССР. На входе таймера1 делим тактового генератора контроллера на 8 и считаем каждый восьмой импульс до тех пор пока не сработает компаратор на который приходит сигнал от обмотки возбуждения (это сигнал угла поворота). Сколько импульсов насчитали на столько градусов повернут ротор сельсина. Данные таймера1 перехватываются модулем ССР, их мы спокойно в любое время считываем и передаем в txreg usart на выход. Редко где можно считывать текущие значения таймера. В других контроллерах задача усложнится, но она решаемая.
void main(void)
{
    // initialize the device
    SYSTEM_Initialize();
   INTERRUPT_GlobalInterruptEnable();
    // Enable the Peripheral Interrupts
    INTERRUPT_PeripheralInterruptEnable();
    // Disable the Global Interrupts
    //INTERRUPT_GlobalInterruptDisable();
     while (1)     
      {
      //  INTCONbits.GIE = 0; 
        // INTCONbits.PEIE = 0;
    f0=CCPR1L;   
    f1=CCPR1H;   
        while(!TRMT) ;
       TXREG = f0;    //CCPR1L;  //        ;посылаем инфо
       while(!TRMT) ;
       TXREG = f1;    //CCPR1L;  //        ;посылаем инфо
        CLRWDT();
        __delay_ms(200); //
    } }
В моем коде много лишнего. Я использую другой контроллер, там у меня еще 2 ацп, обмен данными и конфигурацией между контроллерами и др. Поэтому выкладывать его нет никакого смысла он просто сам по себе не заработает.


Оффлайн vlad-70

  • Пользователь
  • **
  • Сообщений: 20
  • Репутация: +9/-1
  • Подпись находится в стадии разработки
  • QRA: LN05XA
Специально для  R2GKH Виталий снял видео. Пусть посмотрит и "покрутит пуговицу фрака."
Заходите в ютуб, набираете поиск и по ссылке:
https://youtu.be/fzNL07zIXnU
« Последнее редактирование: 24 Февраль 2024, 14:58:24 от vlad-70 »