Сообщение от Dovganya
|
По поводу газа это не сложно, не вал редуктора привода дворников ставим шестерню, и на вал шкива троса тоже шестерню и через рычаг управляемый тяговым реле (например от магнитофона Маяк).
при включении КК подаём питание на реле и оно через рычаг притягивает шестерни в зацепление.
последовательно цепи реле NO концевик тормоза - нажал тормоз и газ вжик в исходное состояние.
|
Ну да, несложно.
Шестерни, рычаги... Тут механика получается совершенно неподъемная для изготовления, либо надо под рукой иметь механический цех.
Сообщение от Dovganya
|
исходник нужен для изучения алгоритма управления, хочу перевести на PIC где прерывания работают аппаратно и есть внутри система от зависания.
работу выложу на обозрение
|
Если интересует сам алгоритм управления, то там всё просто. Несколько таблиц посредством которых выбирается перемещение вала привода в процентах от его полного хода. Сначала вычисляется скорость и ускорение, а затем по табличкам получаем перемещение.
Вот такие таблицы:
{Термы}
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, -57, -56, -29, -28, 28, 29, 56, 57, 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, -201, -200, -101, -100, -51, -50, -31, -30, -16, -15, 15, 16, 30, 31, 50, 51, 100, 101, 200, 201, 1000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
{Таблица дефазификации для перемещения дросселя ПД в процентах}
throttleshft_table1 : table[0..15] of integer = (-30, -16, -8, -3, -2, 0, 2, 3, 8, 16, 30, 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,pvb, pb, pb, pb, pm, pm, pm, ps),
{nb } (pvb,pvb,pvb, pb, pb, pm, pm, pm, pm, ps, z),
{nm } (pvb, pb, pb, pb, pm, pm, ps, ps, ps, z,nvs),
{ns } ( pb, pb, pb, pm, pm, ps,pvs, z, z,nvs, ns),
{nvs} ( pb, pb, pm, pm, ps,pvs, z, z,nvs, ns, nm),
{z } ( pm, pm, pm, ps,pvs, z,nvs, ns, ns, nm, nb),
{pvs} ( pm, pm, ps, ps, z,nvs, ns, nm, nm, nm, nb),
{ps } ( ps, ps, ps,pvs,nvs, ns, nm, nb, nb, nb,nvb),
{pm } ( ps, ps,pvs, z, ns, nm, nb, nb, nb,nvb,nvb),
{pb } (pvs,pvs, z, ns, nm, nb,nvb,nvb,nvb,nvb,nvb),
{pvb} ( z, z, ns, nm, nb,nvb,nvb,nvb,nvb,nvb,nvb));