Обработка управляющих сигналов в кодере RC-аппаратуры

А вот теперь вернемся к операциям нелинейного преобразования, применяемым при обработке УС.
Собственно, их всего две — это функции «экспонента» (EXP) и «произвольная кривая» (CURVE).
На Рис. 5 показано преобразование линейной пропорциональной зависимости в экспоненциальную:

gl144

Очевидно, что экспонента имеет два определяющих параметра — это знак экспоненты и коэффициент (размер) ее «кривизны».
Знак — определяет, в какую сторону будет модифицироваться линейная функция управления (на графике — вверх или вниз). Положительной экспонентой принято считать кривую, выгнутую вниз — при этом соотношение (пропорциональность) ВС от УС вначале растет медленно, а с увеличением УС (при бóльшем отклонении ручки управления) ВС растет все быстрее и быстрее — это равносильно плавному увеличению чувствительности ручки управления. Отрицательная экспонента (кривая изгибается вверх) наоборот, уменьшает чувствительность ручки, с увеличением угла ее отклонения.
Таким образом, положительная экспонента (ПЭ) как бы растягивает зону нейтрали ручки, и предъявляет меньшие требования к точности позиционирования. Отрицательная экспонента (ОЭ) наоборот, позволяет увеличить степень контроля над моделью именно при нейтральном положении ручки.
Коэффициент экспоненты показывает, насколько сильно выражен эффект изменения чувствительности ручки управления — чем больше выгнута кривая в ту или другую сторону, тем сильнее ее воздействие на изменение чувствительности ручки.
Математически описать такую кривую довольно просто — это обычная степенная функция:

ВС = (УС)^Х, (8 )

где Х — показатель степени (для ПЭ — Х>1, для ОЭ — Х<1.),

но вот реализовать ее вычисление силами простого микроконтроллера, да еще в реальном времени, задача практически не осуществимая. Именно поэтому многие разработчики применяют табличные методы формирования подобных кривых — заранее рассчитывают «по точкам» значения ВС от уровня УС, записывают их в память микроконтроллера, а при работе просто «достают» из памяти нужное значение, и генерируют на выходе КУ рассчитанный еще на этапе написания программного кода ВС.
И все бы ничего, только подобный подход загружает память контроллера так, что иногда в ней не остается места даже для текущих вычислений. Смотрите сами: допустим требуется разместить в памяти табличные значения для одной-единственной положительной экспоненты, описанной с выбранной нами точностью (8 двоичных разрядов). Это значит, что мы должны будем только для этой кривой занять 256 ячеек памяти. И еще столько же — для ее зеркального отражения (для ОЭ). Уже — 512 ячеек выведено «из оборота». А таких кривых для работы кодера нужно иметь не одну, и не две, а как минимум — три-четыре десятка (опять же, для того, чтобы обеспечить требуемую точность). В итоге под 40 табличных экспонент мы должны будем занять уже более 20 кБ адресного пространства памяти! Честно говоря, я не знаю микроконтроллеров с такими аппаратными возможностями…
Конечно, можно описывать кривую не 256 точками, а всего 64-мя, или даже 16-ю, да и количество кривых можно сократить, но при этом мы существенно снизим точность преобразования — тот параметр, который вызывает столько досужих разговоров!
А можно решить задачу иначе, и при этом практически без потери точности преобразования, да еще и не занимая аппаратную память контроллера «мертвым балластом» табличных данных.
На Рис. 6 изображена положительная экспоненциальная кривая с произвольной кривизной, а на нее наложена ломаная, состоящая из трех отрезков. Как видим — ломаная, в целом, не сильно отличается от гладкой экспоненты:

gl145

При необходимости можно увеличить количество прямых отрезков в ломаной линии до пяти, девяти, или пятнадцати, существенно увеличивая точность аппроксимации, и в пределе две линии сольются в одну. Но пока ограничимся лишь тремя отрезками, и попробуем математически смоделировать эту простейшую ломаную.
В общем случае описание подобной линии (функции) невозможно выполнить в «удобоваримом» виде — получается «многоэтажная» система уравнений, вычисление которой силами простого контроллера будет занимать очень много времени. Гораздо проще разложить ломаную на составляющие, и обрабатывать их по отдельности. Вот и рассмотрим три отдельных линейных функции, ограниченные точками (а — b), (b — c) и (c — d):

ВС(a-b) = К(a-b) * УС(a-b) + В(a); |
ВС(b-c) = К(b-c) * УС(b-c) + В(b); | (9)
ВС(c-d) = К(c-d) * УС(c-d) + В(c), |

где К — коэффициент пропорциональности (масштабирования), аналогичный описанному в (2), а В(х) — постоянный для данного участка коэффициент (вспомним школьное уравнение прямой: Y = K*X + B), численно равный максимальному значению ВС в точке начала текущего отрезка функции (для участка (a-b) В(a) = 0). В дальнейших формулах коэффициенты В(х) будем заменять на их аналитические и числовые эквиваленты.

Без приведения подробных расчетов и объяснений скажу, что изменять кривизну кусочно-аппроксимированной экспоненты можно простым изменением значения К (a-b) и К(c-d). Для формирования ПЭ К(a-b) уменьшается, а К(c-d) — увеличивается относительно начального К данного канала управления. Для формирования ОЭ коэффициенты изменяются в противоположную сторону.
В результате двухдневных графических «проб и ошибок» (дублировать их здесь я не буду) мне удалось подобрать значения координат точек перегибов, позволяющих с достаточной, на мой взгляд, точностью формировать нужный вид функции. Эти координаты отмечены на осях УС обоих графиков, и в дальнейшем, при вычислениях эквивалентов В(х), просто буду подставлять эти значения в формулы, без дополнительных пояснений.
На приведенных графиках (Рис. 7, Рис. 8 ) показаны трех-, и пяти-«кусочные» способы аппроксимации экспоненциальной зависимости ВС от УС (каждый пример сделан для двух положительных, и двух отрицательных экспонент произвольной кривизны):

gl146 gl147

Как можно понять из приведенных графиков, точки перегибов жестко привязаны к одной из координат — к оси УС. Это позволило для трех-кусочного варианта свести практическую настройку требуемой крутизны экспоненты к выбору всего лишь одного параметра — Х (аналогичного показателю степени для гладкой экспоненты), при этом все остальные коэффициенты К(a-b) и К(c-d) автоматически рассчитываются в ходе настройки по приведенным ниже формулам, после чего сохраняются в памяти контроллера, как обычные параметры модели. Аналогичный расчет производится и для варианта с пятью отрезками (К(a-b), К(b-c), К(d-e) и К(e-f) также вычисляются микроконтроллером автоматически, и хранятся в настройках модели).
Так как все коэффициенты К(х-х) вычисляются во время настройки параметров конкретной модели, и в дальнейшем на их вычисление времени уже не требуется, расчет такой линейно-аппроксимированной «экспоненты» в режиме реального времени сводится к элементарной функции масштабирования.

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

Для трех-кусочной ПЭ границы участков УС в должны находиться в пределах:

0 < УС(a-b) < 0,5 < УС(b-c) < 0,75 < УС(c-d) < 1. (11)

Коэффициент Х вводится при настройке параметров кривой, его значения должны находиться в диапазоне:

0 <= Х < 0,35.

Значения К(х-х) при этом должны быть (вывод этих коэффициентов пропускаю):

К(a-b) = 1 — 1,5*Х; (12)
К В нашем случае, микширование — это ПОДмешивание к УС одного канала, УС другого канала. Канал к которому добавляется внешний сигнал будем называть основным (master) каналом (ОКУ), канал от которого будет получаться сигнал назовем дополнительным (slave) каналом (ДКУ).p(b-c) = 1;
К(c-d) = 3 — 2*К(a-b). (13)

Вспомогательные константы, вычисляемые при настройке модели для сокращения времени последующих вычислений в реальном времени (также хранятся в памяти):

ВС(b) = К(a-b) / 2; (14)
ВС(c) = ВС(b) + 0,25. (15)

С учетом (11 — 15), вычисление ВС для ПЭ в реальном времени должно выполняться по следующим формулам (надеюсь, что контроль границ участков описывать не требуется):

ВС(a-b) = К(a-b) * УС(a-b); (16)
ВС(b-c) = К * (УС(b-c)-УС(b)) + ВС(b) = УС(b-c) — 0,5 + ВС(b); (17)
ВС(c-d) = К(c-d) * (УС(c-d) — 0,75) + ВС(c). (18 )

Прошу извинить за некоторую вольность (не академичность), допущенную при написании формул и в преобразованиях, это сделано для упрощения и сокращения объема записей. Надеюсь, это не ухудшает их восприятие. Далее буду пропускать и промежуточные преобразования, при их очевидности.

Описывая ОЭ применим индексное обозначение отрезков.
Для трех-кусочной ОЭ границы участков УС в должны находиться в пределах:

0 < УС(a-b’) < 0,25 < УС(b’-c’) < 0,5 < УС(c’-d) < 1, (11′)

а коэффициент Х ограничен диапазоном:

-0,35 < Х’ < 0.

Значения К'(х’-х’) при этом должны быть:

К'(a-b’) = 1 — 3 * Х; (12′)
К'(b’-c’) = 1;
К'(c’-d) = 1,5 — К'(a-b’) / 2. (13′)

Вспомогательные константы:

ВС(b’) = К'(a-b’) / 4; (14′)
ВС(c’) = ВС(b’) + 0,25. (15′)

С учетом (11′ — 15′), вычисление ВС для ОЭ в реальном времени должно выполняться по следующим формулам:

ВС(a-b’) = К'(a-b’) * УС(a-b’); (16′)
ВС(b’-c’) = УС(b’-c’) — 0,25 + ВС(b’); (17′)
ВС(c’-d) = К'(c’-d) * УС(c’-d) + ВС(c’). (18′)

Математическая модель описанного преобразования (смотри в «Файловом архиве»), выполненная по приведенным формулам в Excel’е, позволяет визуально проконтролировать характер «экспоненциальной» зависимости ВС от УС при изменении Х в заданном диапазоне (от -0,35 до 0,35).

Страницы: 1 2 3 4 5 6 7