Алгоритмы РХХ и не только (Algorithms of idling regulators)
Moderator: STC
-
- LQFP144 - On Top Of The Game
- Posts: 1664
- Joined: Fri Jul 01, 2011 2:10 pm
- Location: г Уфа
Re: Алгоритмы РХХ и не только
напишу тут , так как ближе сюда
предлагаю
так как система стремится к инжектору .
сделать еще одну таблицу , имеющуюся в любом инжекторе
а именно - обороты , от температуры
просто таблица оборотов ХХ для разной температуры
сейчас ее значения будут использованы в РХХ по уоз . как целевые обороты . правда много не поставиш . но если например карб с авто заслонкой , то у него есть некая характеристика регулирования оборотов . и если заложить ее в таблицу . мы получим потдержку по УОЗ этих оборотов и на режиме прогрева - как делает любой инжектор .
а потом добавиться просто сам рхх в алгоритм , когда будет инжектор.
сам я такое пожалуй не осилю .так как с менеждером не дружу вообще пока . да в Си . только "плаваю"
предлагаю
так как система стремится к инжектору .
сделать еще одну таблицу , имеющуюся в любом инжекторе
а именно - обороты , от температуры
просто таблица оборотов ХХ для разной температуры
сейчас ее значения будут использованы в РХХ по уоз . как целевые обороты . правда много не поставиш . но если например карб с авто заслонкой , то у него есть некая характеристика регулирования оборотов . и если заложить ее в таблицу . мы получим потдержку по УОЗ этих оборотов и на режиме прогрева - как делает любой инжектор .
а потом добавиться просто сам рхх в алгоритм , когда будет инжектор.
сам я такое пожалуй не осилю .так как с менеждером не дружу вообще пока . да в Си . только "плаваю"
WAZ21051 gti 1.7i SECU3Ts + mm1.2.3(1)
ВАЗ21310 1.7i Я7.2 2001г
ВАЗ21310 1.7i Я7.2 2001г
-
- LQFP144 - On Top Of The Game
- Posts: 1664
- Joined: Fri Jul 01, 2011 2:10 pm
- Location: г Уфа
Re: Алгоритмы РХХ и не только
подниму тему .. ребят .... я пока ваще не сильно разобрался с Си ((( что печально .... не мог бы кто помочь немнооожко совсем для реализации вышеописаной функции , хотябы чисто в единичном экземпляре и как угодно криво косо ...
я совершенно не понял как создаються таблицы в секу3 и как с ними работать (((
также я несовсем понял как температура там представлена ...
не мог бы кто помочь
мне нужно сделать одномерный масиив данных по типу [1300,1200,1100,1000,900,800] ну если сделать шаг 50 то еще лучше но хотябы так , и выбирать эти числа от температуры ...
можно даже просто расказать мне как сделать правильно формулу вида --- обороты= Тдивгателя* коэфициент преобразования , так будет даже лучше ....
куда поставлять обороты в алгоритме РХХ я понял , где это все писать тоже ... но вот с переводом температуры ничего не понятно .... ((((она там в какихто хитрых величинах!!!! ....
просто очень хочу делсть наконец нормальную потдежку оборотов на прогреве .. как в моновпрыске!!! .. иначе плавает балин и все тут (((
я еще даже точно угол на прогреве не выставил (
самое верное было еще один график оборотов иметь ... ну или както брать числа из графика УОЗ от т умножать на коэфициент и получать обороты ....
например так , coolant_function(d) дает число с графика Уоз от Т умноженом на 32 так?
param.idling_rpm это у нас дает обороты те что задал пользователь в РХХ в менаджере
тогда я переписываю РХХ так , что везьде где у нас есть param.idling_rpm я добавляю свою переменную
например idl_coolant_rpm
а ее высчитываю так
idl_coolant_rpm = coolant_function(d) / 32 *100
получим если на графике уоз стоит 6 , то я получу 600 тоесть целевые обороты буду 800 +600 =1400 .. что и требоволоась доказать!!!
я прав?
ну и конечно же в рхх нужно будет убрать граничения по оборотам и темерературе на включение ...
пока писал кажетсья понял что я прав )
я совершенно не понял как создаються таблицы в секу3 и как с ними работать (((
также я несовсем понял как температура там представлена ...
не мог бы кто помочь
мне нужно сделать одномерный масиив данных по типу [1300,1200,1100,1000,900,800] ну если сделать шаг 50 то еще лучше но хотябы так , и выбирать эти числа от температуры ...
можно даже просто расказать мне как сделать правильно формулу вида --- обороты= Тдивгателя* коэфициент преобразования , так будет даже лучше ....
куда поставлять обороты в алгоритме РХХ я понял , где это все писать тоже ... но вот с переводом температуры ничего не понятно .... ((((она там в какихто хитрых величинах!!!! ....
просто очень хочу делсть наконец нормальную потдежку оборотов на прогреве .. как в моновпрыске!!! .. иначе плавает балин и все тут (((
я еще даже точно угол на прогреве не выставил (
самое верное было еще один график оборотов иметь ... ну или както брать числа из графика УОЗ от т умножать на коэфициент и получать обороты ....
например так , coolant_function(d) дает число с графика Уоз от Т умноженом на 32 так?
param.idling_rpm это у нас дает обороты те что задал пользователь в РХХ в менаджере
тогда я переписываю РХХ так , что везьде где у нас есть param.idling_rpm я добавляю свою переменную
например idl_coolant_rpm
а ее высчитываю так
idl_coolant_rpm = coolant_function(d) / 32 *100
получим если на графике уоз стоит 6 , то я получу 600 тоесть целевые обороты буду 800 +600 =1400 .. что и требоволоась доказать!!!
я прав?
ну и конечно же в рхх нужно будет убрать граничения по оборотам и темерературе на включение ...
пока писал кажетсья понял что я прав )
WAZ21051 gti 1.7i SECU3Ts + mm1.2.3(1)
ВАЗ21310 1.7i Я7.2 2001г
ВАЗ21310 1.7i Я7.2 2001г
-
- LQFP144 - On Top Of The Game
- Posts: 1664
- Joined: Fri Jul 01, 2011 2:10 pm
- Location: г Уфа
Re: Алгоритмы РХХ и не только
Code: Select all
//Пропорциональный регулятор для регулирования оборотов ХХ углом опережения зажигания
// Возвращает значение угла опережения в целом виде * 32.
int16_t idling_pregulator(struct ecudata_t* d, volatile s_timer8_t* io_timer)
{
int16_t error,factor,idl_coolant_rpm;
//зона "подхвата" регулятора при возвращени двигателя из рабочего режима в ХХ
uint16_t capture_range = 100;
//вычисляем добавку к целевым оборотам по графику УОЗ от Т
idl_coolant_rpm = coolant_function(d)/32 * 100;
//если PXX отключен или обороты значительно выше от нормальных холостых оборотов
// или обороты не упали ниже целевые +10 первый раз после выхода с рабочего режима , то выходим с нулевой корректировкой
if ((d->sens.frequen >(d->param.idling_rpm + idl_coolant_rpm + 10)) && !idl_enable.output_state)
return 0;
else
idl_enable.output_state = 1;
if (!d->param.idl_regul || (d->sens.frequen >(d->param.idling_rpm + idl_coolant_rpm + capture_range)))
return 0;
//вычисляем значение ошибки, ограничиваем ошибку (если нужно), а также, если мы в зоне
//нечувствительности, то используем расчитанную ранее коррекцию.
error = d->param.idling_rpm + idl_coolant_rpm - d->sens.frequen;
restrict_value_to(&error, -200, 100);
if (abs(error) <= d->param.MINEFR)
return idl_prstate.output_state;
//выбираем необходимый коэффициент регулятора, в зависимости от знака ошибки
if (error > 0)
factor = d->param.ifac1;
else
factor = d->param.ifac2;
//изменяем значение коррекции только по таймеру idle_period_time_counter
//if (s_timer_is_action(*io_timer))
{
//s_timer_set(*io_timer,IDLE_PERIOD_TIME_VALUE);
// функция реализации П регулятора
idl_prstate.output_state = (error * factor) / 4;
}
//ограничиваем коррекцию нижним и верхним пределами регулирования
restrict_value_to(&idl_prstate.output_state, d->param.idlreg_min_angle, d->param.idlreg_max_angle);
return idl_prstate.output_state;
}
и как бы выяснить уже где какая переменая в чем храниться .. с температурой неопнтно совсем чтото мне (
тут уже реализован функция , если после перехода от рабочего режима к холостым обороты не упали ниже целевые +10 то не включать РХХ . как только обороты упадут , то рхх включается . сделано так для того чтобы не иметь скачок оборотов при переходе от рабочего к хх , как было До этого . на моновпрыске это очень заметно ... теперь все плавно и чудно .... могу привести все вкрапления кода для реализации этой функции ...
WAZ21051 gti 1.7i SECU3Ts + mm1.2.3(1)
ВАЗ21310 1.7i Я7.2 2001г
ВАЗ21310 1.7i Я7.2 2001г
- STC
- LQFP144 - On Top Of The Game
- Posts: 2420
- Joined: Fri Oct 22, 2010 10:47 pm
- Location: Ukraine, Kiev
- Contact:
Re: Алгоритмы РХХ и не только
Так как используемый процессор не имеет поддержки чисел с плавающей точкой, а вычисления нужно проводить быстро, то используются целые числа. Если нужно представить дробное число, то оно умножается на определенное число (в зависимости от того, какую точность нужно получить). Все расчеты проводятся с числами в таком формате, а на выходе происходит деление.
Еще посмотри макросы в файле magnitude.h
При переводе из дробного представления в целочисленное используется макрос ROUND(), который округляет до ближайшего целого. Он используется для констант.
coolant_function(d) возвращает УОЗ умноженный на 32.
Еще посмотри макросы в файле magnitude.h
При переводе из дробного представления в целочисленное используется макрос ROUND(), который округляет до ближайшего целого. Он используется для констант.
coolant_function(d) возвращает УОЗ умноженный на 32.
Author of the SECU-3 project. SECU-3 Engine control unit / Ignition control system
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
-
- LQFP144 - On Top Of The Game
- Posts: 1664
- Joined: Fri Jul 01, 2011 2:10 pm
- Location: г Уфа
Re: Алгоритмы РХХ и не только
спасибо , чуть попонятнее стало , значит выше описаный код думаеться мне верен ... буду пробывать .. жаль нету докумендации на мой моновпрыск на предмет таблицы - обороты vs температура , буду искать опытным путем .
тоесть я правильно понял если я хочу получить из d->sens.temperat текущуюю температуру в градусах как положено я должен ее обработать в ROUND(d->sens.temperat) ?
тоесть я правильно понял если я хочу получить из d->sens.temperat текущуюю температуру в градусах как положено я должен ее обработать в ROUND(d->sens.temperat) ?
WAZ21051 gti 1.7i SECU3Ts + mm1.2.3(1)
ВАЗ21310 1.7i Я7.2 2001г
ВАЗ21310 1.7i Я7.2 2001г
- STC
- LQFP144 - On Top Of The Game
- Posts: 2420
- Joined: Fri Oct 22, 2010 10:47 pm
- Location: Ukraine, Kiev
- Contact:
Re: Алгоритмы РХХ и не только
Так как ты работаешь с исходными текстами проекта, то тебя это тоже касается viewtopic.php?f=52&t=1325&p=18278#p18278
Тебе не нужно получать текущую температуру в градусах (она и так в градусах, только умножена на число). В пределах прошивки работай непосредственно с этим значением (d->sens.temperat), без всяких преобразований.
Если тебе например нужно сравнить текущую температуру с 70-ю градусами, то это будет выглядеть так:
if (d->sens.temperat > TEMPERATURE_MAGNITUDE(70))
{
температура больше 70-ти градусов.
}
макрос TEMPERATURE_MAGNITUDE(x) просто умножает входное значение на число и округляет до ближайшего целого.
В пределах кода прошивки вообще не возникает необходимость манипулировать с дробным представлением чисел. Все в целом виде с умножением на число. Все что приходит из менеджера или хранится в EEPROM уже заведомо умножено на число.
Например. В окне менеджера ты меняешь температуру с точностью до десятых долей градуса, каждый раз перед тем как полылать значение в SECU-3 менеджер переводит значение в целочисленный вид путем умножения на число. И наоборот, если менеджер получает значание из SECU-3, то он делит его на число.
Нет. ROUND только округляет, он не преобразовывает.тоесть я правильно понял если я хочу получить из d->sens.temperat текущуюю температуру в градусах как положено я должен ее обработать в ROUND(d->sens.temperat) ?
Тебе не нужно получать текущую температуру в градусах (она и так в градусах, только умножена на число). В пределах прошивки работай непосредственно с этим значением (d->sens.temperat), без всяких преобразований.
Если тебе например нужно сравнить текущую температуру с 70-ю градусами, то это будет выглядеть так:
if (d->sens.temperat > TEMPERATURE_MAGNITUDE(70))
{
температура больше 70-ти градусов.
}
макрос TEMPERATURE_MAGNITUDE(x) просто умножает входное значение на число и округляет до ближайшего целого.
В пределах кода прошивки вообще не возникает необходимость манипулировать с дробным представлением чисел. Все в целом виде с умножением на число. Все что приходит из менеджера или хранится в EEPROM уже заведомо умножено на число.
Например. В окне менеджера ты меняешь температуру с точностью до десятых долей градуса, каждый раз перед тем как полылать значение в SECU-3 менеджер переводит значение в целочисленный вид путем умножения на число. И наоборот, если менеджер получает значание из SECU-3, то он делит его на число.
Author of the SECU-3 project. SECU-3 Engine control unit / Ignition control system
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
-
- LQFP144 - On Top Of The Game
- Posts: 1664
- Joined: Fri Jul 01, 2011 2:10 pm
- Location: г Уфа
Re: Алгоритмы РХХ и не только
это я понял , но вот пример , я хочу в формулу подставить именно текущую Т в градусах . ну например Т*10 = переменная . то вот как тогда ? если я просто подставлю d->sens.temperat то она будет в какойто величине , но не 70 градусов , и вместо ожидаемого 700 и получу что то ... вот в этом я и запутался ....
уже нашел график прогревочных оборотов моего моновпрыска , выше описаный алгоритм буду испытывать на днях .
по поводу Git я постараюсь почитать на работе когда будет время , если разберусь , то попробую поработать через него .
но мне пока проще только тут писать что я хочу , что думаю , что пытаюсь програмировать . так как в Сия пока еще полный ноль (
уже нашел график прогревочных оборотов моего моновпрыска , выше описаный алгоритм буду испытывать на днях .
по поводу Git я постараюсь почитать на работе когда будет время , если разберусь , то попробую поработать через него .
но мне пока проще только тут писать что я хочу , что думаю , что пытаюсь програмировать . так как в Сия пока еще полный ноль (
WAZ21051 gti 1.7i SECU3Ts + mm1.2.3(1)
ВАЗ21310 1.7i Я7.2 2001г
ВАЗ21310 1.7i Я7.2 2001г
- STC
- LQFP144 - On Top Of The Game
- Posts: 2420
- Joined: Fri Oct 22, 2010 10:47 pm
- Location: Ukraine, Kiev
- Contact:
Re: Алгоритмы РХХ и не только
Вместо 700 получишь 700 * число, но тебе не нужно заморачиваться по этому поводу. Я тебе уже приводил пример.ну например Т*10 = переменная . то вот как тогда ? если я просто подставлю d->sens.temperat то она будет в какойто величине , но не 70 градусов , и вместо ожидаемого 700 и получу что то ... вот в этом я и запутался ....
Это как две части уравнения - если умножить 2 части уравнения на число, то ничего не поменяется.
Да, если например T*70 = 7000 а не 700, то это не проблема, так как ты будешь сравнивать не с 700, а с 7000 (используя макрос).
Это элементарно!
Это как преобразование валют! Скажем 1 доллар = 40 рублей.
1 доллар это 1 градус Цельсия, 1 рубль это 0.025 градуса Цельсия
Вообразим что SECU-3 это банк, который берет депозиты только рублями, а ты приехал из Америки и у тебя только доллары. Перед тем как ложить деньги на депозит, ты меняешь доллары на рубли и несешь в банк. Через год ты приходишь и забираешь рубли и сразу меняешь их на доллары.
Сколько по математике было в 6-м классе?
Все вопросы по Git задавать в той теме, обещаю помочь!
Author of the SECU-3 project. SECU-3 Engine control unit / Ignition control system
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
-
- LQFP144 - On Top Of The Game
- Posts: 1664
- Joined: Fri Jul 01, 2011 2:10 pm
- Location: г Уфа
Re: Алгоритмы РХХ и не только
блин ... чтото мы обо одном , но на разных ...
смотри
у меня предположим , получилась формула , что мне нужно текущую Т умножить на 10 и получить переменную . переменнная должна подставится в следующее выражение математическое имено в виде числа , тоесть Т=70 , переменная равна 700 , не 7000 и не 70 а именно 700 . как быть тогда ?
как узнать чему равно это число на которое умножено d->sens.temperat ?
вот тоже пример мне нужно к 800 прибавить 600 чтобы получить 1400 , 600 я должен получить исходя из температуры , тоесть из d->sens.temperat как тогда то быть?
то что умножено , например на 32 , я уже учел в выше приведенном коде , вот я хочу также узнавать реальную Т ) или просто знать на сколько она умножена чтобы коректировать расчеты все
по математике было нормально ) но очень давно(
смотри
у меня предположим , получилась формула , что мне нужно текущую Т умножить на 10 и получить переменную . переменнная должна подставится в следующее выражение математическое имено в виде числа , тоесть Т=70 , переменная равна 700 , не 7000 и не 70 а именно 700 . как быть тогда ?
как узнать чему равно это число на которое умножено d->sens.temperat ?
вот тоже пример мне нужно к 800 прибавить 600 чтобы получить 1400 , 600 я должен получить исходя из температуры , тоесть из d->sens.temperat как тогда то быть?
то что умножено , например на 32 , я уже учел в выше приведенном коде , вот я хочу также узнавать реальную Т ) или просто знать на сколько она умножена чтобы коректировать расчеты все
по математике было нормально ) но очень давно(
WAZ21051 gti 1.7i SECU3Ts + mm1.2.3(1)
ВАЗ21310 1.7i Я7.2 2001г
ВАЗ21310 1.7i Я7.2 2001г
Re: Алгоритмы РХХ и не только
Stranger21
Не так давно осваивал СИ в начале пользовался информацией http://www.avr123.nm.ru/05.htm все очень доступно и понятно.
Не так давно осваивал СИ в начале пользовался информацией http://www.avr123.nm.ru/05.htm все очень доступно и понятно.