Сообщение от Dovganya
|
Я не настаиваю, Я прошу. Но дело даже не в исходниках, интересен метод (реализованный вами) пересчета скорости в угол положения заслонки, не знаю как поточнее выразится,надеюсь вы меня поняли. Прошу или предлагаю написать даже статью на эту тема с подробным описанием.
|
Метод очень простой.
С датчика раз в секунду считываются период импульсов, пересчитывается в скорость. Вычисляется ускорение вычитанием скоростей за период измерения. Вычисляется ошибка скорости - разница между текущей скоростью и требуемой. Зная ошибку скорости, направление и величину ускорения по двухмерной таблице, где одно измерение ошибка скорости, а другое ускорение подбираем величину и направление перемещения дросселя. Знать текущий угол дросселя не требуется совершенно, т.к. оперируем не самим углом, а его изменением.
Фрагмент кода с таблицей для лучшего понимания:
{Термы}
nvb : byte = 0; // Отрицательный очень большой NVB
nb : byte = 1; // Отрицательный большой NB
nm : byte = 2; // Отрицательный средний NM
ns : byte = 3; // Отрицательный малый NS
nvs : byte = 4; // Отрицательный очень малый NVS
z : byte = 5; // Нулевой Z
pvs : byte = 6; // Положительный очень малый PVS
ps : byte = 7; // Положительный малый PS
pm : byte = 8; // Положительный средний PM
pb : byte = 9; // Положительный большой PB
pvb : byte = 10; // Положительный очень большой PVB
{--------------Набор таблиц №2 НОРМА--------}
{Таблица фазификации для ошибки скорости ОС в см/сек}
speederror_table1 : table[0..31] of integer = (-3000, -557, -556, -279, -278, -139, -138, -53, -52, -25, -24, 24, 25, 52, 53, 138, 139, 278, 279, 556, 557, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
{Таблица фазификации для ускорения УС в см/сек^2}
acceleration_table1 : table[0..31] of integer = (-1000, -241, -240, -121, -120, -56, -55, -35, -34, -16, -15, 15, 16, 34, 35, 55, 56, 120, 121, 240, 241, 1000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
{Таблица дефазификации для перемещения дросселя ПД в процентах}
throttleshft_table1 : table[0..15] of integer = (-15, -7, -3, -2, -1, 0, 1, 2, 3, 7, 15, 0, 0, 0, 0, 0);
{Массив термов для ПД}
fuztable1 : array[nvb..pvb, nvb..pvb] of byte = (
{По горизонтали ошибка скорости ОС, по вертикали ускорение УС}
{ ОС nvb nb nm ns nvs z pvs ps pm pb pvb }
{УС }
{nvb} (pvb,pvb,pvb, pb, pb, pb, pb, pm, pm, pm, ps),
{nb } (pvb,pvb, pb, pb, pb, pm, pm, pm, pm, ps, z),
{nm } (pvb, pb, pb, pb, pm, ps, ps, ps, ps, z,nvs),
{ns } ( pb, pb, pb, pm, pm,pvs,pvs, z, z,nvs, ns),
{nvs} ( pb, pb, pm, ps,pvs,pvs, z, z,nvs, ns, nm),
{z } ( pm, pm, ps,pvs,pvs, z,nvs,nvs, ns, nm, nb),
{pvs} ( pm, pm, ps,pvs, z,nvs,nvs, ns, nm, nm, nb),
{ps } ( ps, ps, ps,pvs,nvs,nvs, ns, nm, nb, nb,nvb),
{pm } ( ps, ps,pvs, z, ns, ns, nm, nb, nb,nvb,nvb),
{pb } (pvs,pvs, z, ns, nm, nm, nb,nvb,nvb,nvb,nvb),
{pvb} ( z, z, ns, nm, nb, nb,nvb,nvb,nvb,nvb,nvb));
Сообщение от Dovganya
|
На мультируле установлен подвижной спиральный переходник с 6 контактами 3 из них подушка и сигнал остальные 3 это управление музыкой и круизом. не буду переписывать количество кнопок скажу только одно вся логика управляется таким способом как я предложил, и проблем не наблюдается не у одной из систем.
|
Боже! Так там ещё и скользящий контакт есть, с окислением дорожек! Сопротивление будет плавать.
Там профессионаля делают, у них всё это учтено в железе.