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

Теперь рассмотрим вторую нелинейную операцию — формирование «произвольной кривой» (в импортной аппаратуре эта функция называется CURVE).
Аналитически описать произвольную кривую (или — «курву», как ее обычно называют моделисты) я просто не возьмусь. Это просто нереально, да и вряд ли нужно. А вот смоделировать некую кривую с ограниченным числом параметров не так уж сложно. Этот процесс не будет сильно отличаться от способа линейной аппроксимации экспоненты. Необходимо лишь определить, из какого количества отрезков должна состоять будущая «курва» — это определит и количество точек, по которым она будет строиться. Количество точек построения «курвы» равно количеству отрезков плюс единица.
В аппаратуре чаще всего применяется пяти-точечный способ построения, т.е. кривая аппроксимируется всего лишь четырьмя отрезками, что во многих случаях не обеспечивает необходимой точности, и гибкости настройки. А мы попробуем сформулировать условия для формирования сразу девяти-точечной ломаной (состоящей из восьми отрезков) — этого наверняка должно хватить даже самым требовательным пилотам. Как и в случае формирования экспоненты, обозначим отрезки буквами: (a-b), (b-c), (c-d), (d-e), (e-f), (f-g), (g-i) и (i-h).
На Рис.9 изображена такая ломаная, построенная «из головы», т.е. без предварительных вводных данных. Обратите внимание, что в отличие от экспоненты, «курва» может начинаться не в точке начала координат, и к тому же, ее «кривизна» может неоднократно изменять знак в области построения! Есть и еще одно существенное отличие: произвольная кривая обычно строится сразу во всех четырех квадрантах системы координат, то есть и УС, и ВС могут принимать как положительные, так и отрицательные значения. Но мы пока ограничимся построением в первом квадранте, так же, как поступали до настоящего момента, а перевод «в полный формат» произведем позже, когда будем рассматривать реверсирование и триммирование КУ.

gl148

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

Как и при формировании экспоненты, зададим граничные условия отрезков:

0<УС(a-b)<0,125<УС(b-c)<0,25<УС(c-d)<0,375<УС(d-e)<0,5<УС(e-f)<0,625<УС(f-g)<0,75<УС(g-i)<0,875<УС(i-h)<1. (33)

Введем значения ВС для всех точек (эти значения фиксируются в памяти контроллера):

0<=ВС(a)<= ВС(b)<=ВС(c)<=ВС(d)<=ВС(e)<=ВС(f)<=ВС(g)<=ВС(i)<=ВС(h)<=1. (34)

Строго говоря, условие (34) может нарушаться в отдельных, не типичных случаях, например — при программировании канала управления дросселем двигателя в вертолетной программе, где для выполнения обратного пилотажа требуется реверсирование хода РМ при прохождении ручки управления через точку нейтрали. К этому моменту можно будет вернуться при рассмотрении структуры и особенностей вертолетных программ. Сразу скажу, что нарушение этого условия не приведет к изменению математики процесса формирования требуемой зависимости, и все приводимые ниже формулы останутся верны.

Для любого выбранного диапазона УС(х-у) (включая вариант с пропуском очередной точки перегиба), коэффициент К(х-у) будет вычисляться по формуле:

К(х-у) = (ВС(х) — ВС(у)) / (УС(х) — УС(у)), (35)

где (х-у) — участок на оси УС, ограниченный произвольно выбранными точками «х» и «у» (при условии, что х > y), а ВС(х) и ВС(у) — заданные значения ВС для этих точек.

Значения ВС для этого участка будут рассчитываться так:

ВС(х-у) = К(х-у) * УС(х-у) + ВС(у). (36)

Модифицируя (33), и используя (34), (35) и (36), можно построить ломаную с любым количеством точек перегиба. При этом будет изменяться только количество хранимых в памяти коэффициентов К(х-у) и значений ВС(а…i). Их общее требуемое количество (N) можно посчитать так:

N = 2 * (n — 1), (37)

где n — число точек, используемых для построения произвольной ломаной.

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

В качестве примера рассмотрим вариант произвольной семи-точечной кривой, при настройке которой использовано условие (33) с пропуском точек «b» и «f» (значения всех ВС(х) «высасывались из пальца»):

ВС(а) = 0,3;
ВС(с) = 0,35;
ВС(d) = 0,4;
ВС(е) = 0,5;
ВС(g) = 0,65;
ВС(i) = 0,65;.
ВС(h) = 0,85.

Отсюда коэффициенты К(х-у) будут равны:

К(а-с) = (ВС(с) — ВС(а)) / (УС(с) — УС(а)) = (0,35-0,3)/(0,25-0) = 0,05/0,25 = 0,2;
К(с-d) = ВС(с) — ВС(а)) / (УС(с) — УС(а)) = (0,4-0,35)/(0,375-0,25) = 0,05/0,125 = 0,4;
К(d-e) = ВС(с) — ВС(а)) / (УС(с) — УС(а)) = (0,5-0,4)/(0,5-0,375) = 0,1/0,125 = 0,8;
К(e-g) = ВС(с) — ВС(а)) / (УС(с) — УС(а)) = (0,65-0,5)/(0,75-0,5) = 0,15/0,25 = 0,6;
К(g-i) = ВС(с) — ВС(а)) / (УС(с) — УС(а)) = (0,65-0,65)/(0,875-0,75) = 0 / 0,125 = 0;
К(i-h) = ВС(с) — ВС(а)) / (УС(с) — УС(а)) = (0,85-0,65)/(1-0,875) = 0,2/0,125 = 1,6.

В соответствии с (36), уровень ВС для этой кривой будет рассчитываться так:

ВС(а-с) = К(а-с) * (УС(а-с) — УС(а)) + ВС(а) = 0,2 * (УС(а-с)-0) + 0,3;
ВС(с-d) = К(c-d) * (УС(c-d) — УС(с)) + ВС(c) = 0,4 * (УС(c-d)-0,25) + 0,35;
ВС(d-e) = К(d-e) * (УС(d-e) — УС(d)) + ВС(d) = 0,8 * (УС(d-e)-0,375) + 0,4;
ВС(e-g) = К(e-g) * (УС(e-g) — УС(е)) + ВС(e) = 0,6 * (УС(e-g)-0,5) + 0,5;
ВС(g-i) = К(g-i) * (УС(g-i) — УС(g)) + ВС(g) = 0 * (УС(g-i)-0,75) + 0,65 = 0,65;
ВС(i-h) = К(i-h) * (УС(i-h) — УС(i)) + ВС(i) = 1,6 * (УС(i-h)-0,875) + 0,65.

Построенная по этим данным произвольная ломаная изображена на Рис. 10:

gl149

Не трудно заметить, что для формирования самой сложной из рассмотренных выше нелинейных функций – девяти-точечной произвольной ломаной — требуется всего 16 ячеек памяти, что намного меньше аппаратных затрат при табличном способе формирования. В то же время, достижимая точность аппроксимации существенно выше, чем у табличного способа построения, при сохранении достаточно высокого быстродействия в режиме реального времени. Расчет показывает, что время нелинейного преобразования одной готовой выборки АЦП, с учетом времени чтения необходимых констант из ОЗУ, в самом сложном случае не превышает 6-8 машинных тактов, на выполнении которых при рабочей частоте контроллера 8 МГц требуется не более одной микросекунды.

И наконец, предлагаю еще один способ формирования произвольной ломаной, который, на мой взгляд, может оказаться самым оптимальным, и обеспечит максимальную гибкость настройки, при использовании минимума аппаратных ресурсов.
При этом способе количество точек перегиба не является фиксированным, а к оси УС будет жестко привязана только одна начальная точка, от которой начинается построение ломаной (УС(а) = 0). После ввода и фиксации уровня ВС(а) система автоматически предложит оператору настроить два параметра следующей точки ВС(b): ее координаты по обеим осям. При этом оператор сможет произвольно разместить проекцию второй (и каждой последующей) точки как на оси УС, так и на оси ВС. При этом требуется соблюдать только одно непременное условие: координата каждой последующей точки должна находиться на оси УС правее координаты предыдущей точки. Настройка точки ВС(b) завершается автоматическим расчетом К(a-b) по (35), и фиксацией в памяти введенных и рассчитанных значений, после чего последует предложение настроить следующую точку. Этот процесс будет продолжаться до тех пор, пока при настройке какой-то очередной точки не будет зафиксировано значение координаты УС(х), равное 100%. Минимальное количество точек, участвующих в построении при этом способе равно двум, а максимальное — отношению диапазона оси УС к шагу дискретности + 1 точка (при шаге 5%, возможна настройка до 21 точки). На Рис. 11 изображена условная произвольная кривая, построенная этим способом по шести точкам:

gl150

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

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