Activity

Самодельный конвертер сингала PWM в PPM для регуляторов БК двигателей

Конвертер ШИМ 8 кГц в 2 кГц для подключения регуля от Валкеры.
Прошивки тут: files.shelek.su/limited/…/pwm8_to_pwm2/
Крутить там нечего и потому исходников не выкладываю.

Исключительно одноканальный. Ни два канала, ни совместить с конвертером ШИМ в PPM не получится. Если хочется что-то более качественное, нужно переходить с PIC10 на более серьезный микроконтроллер.

На вход можно подать не только 8 кГц, но и 4 кГц.
Точность определения скважности ШИМ порядка 4-5%.

Бесколлекторный "Чертенок" mCP-x Brushless. Добавим мощи?
cylllka:

Собирать дороже выйдет 😃 Только 6 ключей в лучшем случае по 1баксу + мега + другие детали + материаты для изготовления платы

И добавьте сюда труд программистов и тестировщиков…

Самодельный конвертер сингала PWM в PPM для регуляторов БК двигателей

Удивительно, но факт: цикл в 2 мс (но только один канал) работает!
Я так понял, что Саша использовал регуль с хвоста БК-Валкеры (модель D100 или D120 - не помню) .
Как он закончит эксперименты, выложу измененную прошивку.

Самодельный конвертер сингала PWM в PPM для регуляторов БК двигателей
cylllka:

Смотри, я вот чего сделал

PPM_IMPULSE 1 ; 1 ms
PPM_IMPULSE 2 ; 1 ms
;PPM_DELAY ; 1 ms
;PPM_DELAY ; 1 ms
goto ppm_loop

PPM_IMPULSE выполняется за 2 мс, а PPM_DELAY - за 1. Т.е. у тебя осталось в цикле только два PPM_IMPULSE? Значит цикл 4 мс.
После точки с запятой записан комментарий - он никак на программу не влияет.

Самодельный конвертер сингала PWM в PPM для регуляторов БК двигателей

Файл user_settings.inc - там CFG_PWM1_INVERSE и CFG_PWM1_INVERSE.

Инверсию PPM не предусмотрел. В прошлой прошивке была, но оказалась невостребованной.
Чтобы сделать ее в файле ppm_loop.asm найди вот это:


CLR_PPM macro p_ch

    bcf IO_PORT, PPM#v(p_ch)_BIT

    endm

SET_PPM macro p_ch

    bsf IO_PORT, PPM#v(p_ch)_BIT

    endm

Сделай так:


CLR_PPM macro p_ch

    bsf IO_PORT, PPM#v(p_ch)_BIT

    endm

SET_PPM macro p_ch

    bcf IO_PORT, PPM#v(p_ch)_BIT

    endm

Это повлияет на оба канала!

Или так, чтобы инверсия была индивидуальной:

Для ppm_loop.asm:


CLR_PPM macro p_ch
    if CFG_PPM#v(p_ch)_INVERSE == 0
        bcf IO_PORT, PPM#v(p_ch)_BIT
    else
        bsf IO_PORT, PPM#v(p_ch)_BIT
    endif
    endm

SET_PPM macro p_ch
    if CFG_PPM#v(p_ch)_INVERSE == 0
        bsf IO_PORT, PPM#v(p_ch)_BIT
    else
        bcf IO_PORT, PPM#v(p_ch)_BIT
    endif
    endm

Для user_settings.inc:


; Output PPM inversion.
; Инверсия PPM: 0 | 1
    constant CFG_PPM1_INVERSE = 0
    constant CFG_PPM2_INVERSE = 0

Самодельный конвертер сингала PWM в PPM для регуляторов БК двигателей

Проблема была в нехватке диапазона тяги ХР - ограничивался быстро. Попросту не тот винт на нем стоял - не обеспечивал должной тяги. Ведь штатные коллекторники существенно оборотистее.

Самодельный конвертер сингала PWM в PPM для регуляторов БК двигателей

Вот - 7 мс, прямая, под 202.

:020000040000FA
:1000000025000504810C0200090C060066000A0C9C
:100010002800060C2100010243070B0AE802090A26
:02002000530A81
:0400220000080008CA
:0A00260068000A0C29000606A80273
:100030000606A8020606A8020606A8020000060692
:10004000A8020606A80200000606A8020606A802E4
:100050000606A8020606A802E902160A08022A00F5
:1000600003046A03000868000A0C29006606A80257
:100070006606A8026606A8026606A80200006606D2
:10008000A8026606A80200006606A8026606A80284
:100090006606A8026606A802E902360A08022B00D4
:1000A00003046B0300084605060C21001309FF0C2E
:1000B00028003D0C2900040C8A0003076C0A3D0C43
:1000C0002800FF0C2900C20C8A0003066C0A4A02B1
:1000D0002800C90C8A002900010243076C0AEF0CB2
:1000E000210001024307710A0802210001024307AF
:1000F000760A460409022100010243077C0AE80C43
:10010000210001024307810A2605060C210033095C
:10011000FF0C28003D0C2900040C8B0003079D0AEE
:100120003D0C2800FF0C2900C20C8B0003069D0A21
:100130004B022800C90C8B002900010243079D0ACD
:10014000EF0C210001024307A20A0802210001026C
:100150004307A70A26040902210001024307AD0A4A
:10016000E80C210001024307B20A070C210001023A
:100170004307B70A070C210001024307BC0A070C1A
:0A018000210001024307C10A530ADF
:080400000000020000000400EE
:021FFE00EB0FE7
:00000001FF
Самодельный конвертер сингала PWM в PPM для регуляторов БК двигателей

Какой регуль? Могу собрать на 7 мс, а не на 6.

Мужики, из этого чипа чудес не выжмешь. Я тупо считываю состояние входной ноги и подсчитываю число единиц за период в 250 мс (соотв. одному периоду частоты 4 кГц). Для двухканальной схемы на этом чипе это единственный вариант. Другой вариант замера ШИМ - измерить время между фронтами сигнала. Т.к. сигнала может вообще не быть (0% скважности), то данный метод применить к двухканальной конфигурации затруднительно. Подумаю, конечно, но не обещаю.

Самодельный конвертер сингала PWM в PPM для регуляторов БК двигателей

Спасибо, Юрий, проедали мы как следует 😉

Как видите, с ОР - все путем, а с ХР не все. НЕт тестовых данных, что последняя прошивка работает нормально.
У меня на столе работает ровно. У Сергея - плавает. Нужно еще несколько тестеров.
Что касается тестирования на mCPX - вопрос к Саше (Сушке).

За вес спасибо Саше. Я произвожу только невесомые байты.

Китайский ответ MSr - Nine Eagles SOLO PRO

В первом режиме кнопки T4 играют роль триммера, состояние которого будет сохранено в памяти вертолета. В том же режиме кнопки T3 задают чувствительность гироскопа (я это понимаю как степень обратной связи через гироскоп в цепи “управление->ХР” - насколько вертолет будет сопротивляться разворачивающему моменту вокруг оси ОР и как быстро он будет поворачивать). Вот и все настройки для ХР.

Поведение светодиодов вертолета зависит от прошивки и версии платы. У меня были две разные и в плане восстановления связи они сильно отличались. Т.ч. в инструкцию такое вносить не стоит. Потом, первый режим включается уже после установления связи.

Самодельный конвертер сингала PWM в PPM для регуляторов БК двигателей

Кабель не нашел - пришлось корячиться.
В общем, прошил 200i.
ESC HK 3A. Движок AP-03. Снимаю сигнал с ключа (резистор 2 кОм).
Работает на обеих источниках - и ОР, и ХР. Тестировал только первый канал - программно они идентичны.

Самодельный конвертер сингала PWM в PPM для регуляторов БК двигателей

У хвостового двигателя специфичные условия работы. Я там намерял скважность ШИМ от 0 до 100%, в то время, как на ОР - от 40 до 77%. Но видео показывает, что обороты нестабильные даже на столе без движения.
Вот если собирать из исходников и поставить CFG_PWM_FREQUENCY = 8, то на 4 кГц ШИМ точно будут проблемы. Возможно даже похожие.

Насчет девиации в 4% я ошибся - 1.6% 😃

Самодельный конвертер сингала PWM в PPM для регуляторов БК двигателей

Плата Прошки стартует всегда с нулевым газом. Сперва идет соединение с пультом, потом на пульте ручку надо перевести в ноль и только тогда можно дать газ. Все это время конвертер выдает 1.1 мс. Т.ч. такая проблема тут исключена. Я полагаю тут проблема с детекцией, но не уверен. Мне бы самому на железе потестить. В симуляторе микроконтроллера все путем, но это рафинированные условия.

Пробую в симуляторе задать не точную частоту, а чуть меньшую или чуть большую - ±60 Гц. Тестирую на скважности 50%. Есть девиация на уровне ±4%, но не более.
Существенной девиации (12%) удалось добиться при уходе частоты ШИМ аж на 400 Гц - 3600 вместо 4000 Гц. Сомневаюсь, что у нас такие некачественные чипы. В даташите указана точность встроенного генератора на уровне 1-2%.

Самодельный конвертер сингала PWM в PPM для регуляторов БК двигателей

А в инструкции к регулю ничего не сказано про калибровку? HK, например, калибруется входом в режим программирования.

Однако…
А ведь тогда надежда, что прошивка рабочая, увеличивается! 😃

Самодельный конвертер сингала PWM в PPM для регуляторов БК двигателей

Частота у Прохи 4 кГц. Параметр частоты, по сути, вообще не нужен - ставь всегда 4. Но частота ШИМ (не настройка - физический сигнал) должна быть кратная 4 кГц, иначе будут разнообразные спецэффекты.

Попробуй в ppm_loop.asm так:

ppm_loop
    PPM_IMPULSE 1 ; 2 ms
    PPM_DELAY ; 1 ms
    PPM_IMPULSE 2 ; 2 ms
    PPM_DELAY ; 1 ms
    goto ppm_loop

и так

ppm_loop
    PPM_IMPULSE 1 ; 2 ms
    PPM_DELAY ; 1 ms
    PPM_IMPULSE 2 ; 2 ms
    PPM_DELAY ; 1 ms
    PPM_DELAY ; 1 ms
    goto ppm_loop

К данном куске кода строчки можно переставлять в любом порядке, добавлять и уменьшать задержки.

Самодельный конвертер сингала PWM в PPM для регуляторов БК двигателей

Исправленная прошивка.
files.shelek.su/…/pwm_to_ppm-RXL-2.0.4-hex/
Тестил только в отладчике. За пределы сигнал не уходил.
Цикл - 6 мс. Импульс от 1.1 до 1.9 мс.

Исходники.
files.shelek.su/…/pwm_to_ppm-RXL-2.0.4.zip
Ненужные имена секций удалил.

Самодельный конвертер сингала PWM в PPM для регуляторов БК двигателей

А я себе такой стенд сделал: к сашиному конвертеру (чип на плате) припаял шлейф и разъем. К плате вертолета тоже разъем. И еще один такой же разъем есть у программатора. Понятное дело, что это настольный стенд, зато переключиться с программатора на плату вертолета можно за пару секунд.
Кабель бы только найти… Куда я его дел…

Самодельный конвертер сингала PWM в PPM для регуляторов БК двигателей

Ошибки нашел. Править буду завтра или послезавтра. Основная ошибка была в расчете длительности импульса и паузы. В итоге, импульс мог достигать ширины 2.2 мс. Новые прошивки удаляю - слишком значительна ошибка. Потом выложу исправленные.

Самодельный конвертер сингала PWM в PPM для регуляторов БК двигателей

А у меня как специально куда-то делся шнур от программатора…
Попробую в отладчике понять, в чем может быть проблема.
От предыдущей прошивки импульсы PPM немного отличаются: раньше они имели ширину в диапазоне 1.1…1.9 мс, сейчас - 1…2 мс. Может в этом дело?

Самодельный конвертер сингала PWM в PPM для регуляторов БК двигателей

Настройки прошивки я перенес в файл “user_settings.inc”.
Разделив программу на модули мне стало намного удобнее писать. А вот собираться на иных системах будет непонятно как.

Самодельный конвертер сингала PWM в PPM для регуляторов БК двигателей

У меня MPLAB 8.63 и инструментарий:

Language tool versions: MPASMWIN.exe v5.39, mplink.exe v4.38, mplib.exe v4.38

Какие версии MPLAB и MPASM?

Babay:

Собираю с помощью gputils. И еще пара варнингов вышла:

Тогда понятно. Я использовал возможности именно MPASM.
ppm_loop, в первом случае - имя секции, во втором - метка. Видимо у тебя очень старый компилятор или вообще другой системы. Имя секции можно безболезненно задать другое или вообще убрать.

; ********************** Code **********************

ppm_loop code

ppm_loop

Сделай так:

; ********************** Code **********************

    code

ppm_loop

Второе предупреждение говорит, что у тебя имя заголовочного файла не совпадает с запрошенным при учете регистра.

Интересно, будет ли у тебя компилироваться scan_pwm.asm… Там макросы и, опять же, заточка под MPASM.

Самодельный конвертер сингала PWM в PPM для регуляторов БК двигателей

Новая прошивка на 7 мс.
files.shelek.su/…/pwm_to_ppm-RXL-2.0.3-hex/

Исходник.
files.shelek.su/…/pwm_to_ppm-RXL-2.0.3.zip
Процентов на 95 готово. Если есть желающие экспериментировать - попробуйте включать там фильтры (на каждый канал индивидуально).

Есть еще одна возможность для оптимизации - варьировать положение импульсов каналов относительно друг друга. В выложенных прошивках и исходнике - вариант 1.

Вариант 1.

Вариант 2.

Вариант 3.

Самодельный конвертер сингала PWM в PPM для регуляторов БК двигателей

Да, там была задержка в среднем на пол длины цикла, а тут обработка идет в начале импульса. Что характерно, качество определения скважности ШИМ от этого не пострадало - так же точность порядка 2-4%.

У меня там несколько экспериментальных нововведений - надо разобраться, какие не нужны, а какие полезны.
Дописал фильтр, который ускоряет реакцию на изменение входного сигнала.
Формула примерно такая: Y(n) = X(n) + f(X(n) - X(n-1))
Смысл фильтра: я считаю, что регуль тоже вносит задержку, т.к. ему нужно сперва замерить PPM, наверняка у него и фильтр сигнала есть, а потом инерция движка - (думаю, что у коллекторника она меньше, т.к. диаметр ротора меньше).

Самодельный конвертер сингала PWM в PPM для регуляторов БК двигателей

Исходники пока не выкладываю - сперва порядок там наведу 😃

Нового там, если с точки зрения программы, 90%, а если с утилитарной точки зрения, то меньший цикл PPM (6 мс и 4 мс), меньшая задержка между входным и выходным сигналами и по прежнему это для двух каналов. Сейчас работаю над фильтром для дальнейшего сокращения запаздывания. В перспективе еще - раздельная длительность цикла для каналов.

В тестах мне интересно:

  1. Заработает ли вообще на железе.
  2. Как отнесутся регули к 6 мс циклу, а тем более к 4 мс.
  3. Будет ли отличие от предыдущей версии (1.5.1).
Самодельный конвертер сингала PWM в PPM для регуляторов БК двигателей

Есть новые прошивки. Может кто-нибудь потестить их?
files.shelek.su/…/pwm-to-ppm-RXL-2.0.2-hex/
Пока собрал только для pic10f200. Если нужны другие - скажите. Прошивки пока в стадии доработки. В отладчике работает.