Перейти к содержанию

Круиз-контроль для Mitsubishi Grandis Atmega8535


Гость еще один max

Рекомендуемые сообщения

  • 2 недели спустя...
  • Ответов 218
  • Создана
  • Последний ответ

Топ авторов темы

Топ авторов темы

Изображения в теме

Гость еще один max

Добрый день, всех с прошедшими!

Продолжаем грызть гранит науки.

Разобрался с ШИМ, замечательно, что он в МК Atmega8535 аппаратный.

И ШИМ, и АЦП могут быть 10-ти и 8-ми битные, т.е отсчеты 0-1023 или 0-254. Пробовал на Протеусе и тот и другой, разницы не увидел. Для положения педали 255 фиксированных точек с головой.

Программная реализация не просто простая, а очень простая:

Здесь был спойлер.
//Определяем функцию чтения из 8-битного АЦП порта А
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}
//По Таймеру_1 читаем содержимое двух АЦП и передаем на младшие разряды двух ШИМ
//Если на АЦП максимальное значение, присваиваем 0xFE, при 0xFF на выход передается 0 почему-то. Тут не разобрался пока...
// Timer 1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
// Place your code here
if (read_adc(1)>=0xFF) OCR1AL=0xFE;
else OCR1AL=read_adc(1);
if (read_adc(2)>=0xFF) OCR1BL=0xFE;
else OCR1BL=read_adc(2);
}

void main(void)
{
// Input/Output Ports initialization
//Инициализация порта А - вход
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTA=0x00;
DDRA=0x00;
//Инициализация порта D - выход
// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
PORTD=0x00;
DDRD=0xFF;
//Инициализация ШИМ
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 8000,000 kHz
// Mode: Fast PWM top=00FFh
// OC1A output: Non-Inv.
// OC1B output: Non-Inv.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: On
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0xA1;
TCCR1B=0x09;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;


// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x04;

//Инициализация АЦП
// ADC initialization
// ADC Clock frequency: 1000,000 kHz
// ADC Voltage Reference: AREF pin
// ADC High Speed Mode: Off
// ADC Auto Trigger Source: None
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x83;
SFIOR&=0xEF;

// Global enable interrupts
#asm("sei")

while (1)
  {
  // Place your code here

  };
}

Разумеется из листинга выбросил все, что идет по умолчанию.

Схема на Протеусе:

post-1142-1273562021_thumb.jpg

Осциллограммы:

post-1142-1273562032_thumb.jpg

При преобразовании АЦП-ШИМ-ЦАП есть небольшие флуктуации выходного напряжения в сотые доли вольта. Мне кажется это несущественным, т.к. при управлении педалью акселератора водителем (дубликация) нога дрожит постоянно (ну не кирпич же!), а при управлении от круиза эти флуктуации будут компенсироваться на циклах удержания скорости.

Поиграл немного номиналами ФНЧ. На схеме 2 пары значений RC-цепочки, при которых и значение ЦАП принимает быстро, и пульсаций нет.

 

Следующий этап - замер частоты с датчика скорости. Есть пара ссылок:

_https://www.chipenable.ru/index.php/programming-c/51-chastotomer-timer-t1.html

_https://electronix.ru/forum/index.php?showtopic=29796&st=0

Буду изучать. До практики пока не дошло, только вот с югов вернулись.

В соседней ветке тоже что-то с круизом делают:

_https://forum.datagor.ru/index.php?showtopic=5013

Как тема актуальна-то... Даже текст программы распознавания джойстика похож, бывают же такие совпадения :smile:

Ссылка на комментарий
Поделиться на другие сайты

Да у меня TOYOTA FIELDER с 1NZ, тросовой газ и еще есть универсальный круиз контроль, лет 10-12 валяется уже и рычажок потерялся. Есть возможность тоетовский рычажок прикрутить к рулю, на шлейфе есть жилы свободные, но у блока контактный вход, вот и понадобилось преобразовать резистивный в аналоговый сигнал. Но у меня беда случилась, система рухнула на буке, и все наработки пропали, ничего не смог восстановить.

Ссылка на комментарий
Поделиться на другие сайты

Гость еще один max

2diman27: резистивный и аналоговый сигнал вроде одно и то же? Видимо я чего-то недопонял.

Так или иначе продолжаем общаться (гей, славяне! вы где?)

Начитавшись программных реализаций частотомеров, все-таки написал свою программулинку, ибо прочитанные не устроили - либо Таймер1 надо задействовать (он у меня ШИМом занят), либо два таймера. Вроде и свободны оба, а жаба душит - нафига? Вдруг второй понадобится...

Ну в общем сваял, просто и со вкусом - в обработке прерывания Таймера0 несколько строчек на Си (изумительный язык!), и в счетном регистре скорость в км/ч в чистом виде, диапазон определения от 0 до 255 км/ч (так быстро мы не летаем :smile: ).

Вроде все датчики проанализировал. Теперь общая тестовая схема, свожу воедино все подпрограммы опроса датчиков, рисую блок-схему алгоритма, пишу прогу с учетом всякой всячины типа сторожевого таймера... Вот тут нужна подсказка - что там еще предусмотреть надо? Читал, что старые контроллеры могли запускаться при подаче питания с произвольного места программы, т.е. не с начала. На схеме предусмотрел подачу питания на RESET через цепочку (так когда-то на Спектрумах делали) и вроде внутри контроллера есть какая-то схема принудительного старта с нулевого адреса. Ну Watchdog... Что еще?

схема:

post-1142-1273666378_thumb.jpg

Ссылка на комментарий
Поделиться на другие сайты

Max, тут маленько подумал...Короче, хочется немного твою блок-схему изменить - когда педалька отключена от управления подать информацию с неё на контру, и сделать задержку переключения релюх (секунду, может). Цель - сделать сустейн при переходе от круиза к ручному режиму, чтобы обороты не резко сбрасывались в случае отпущенной педали газа и нажатой тормоза.

Ссылка на комментарий
Поделиться на другие сайты

Гость еще один max

Привет. Думаю, что обсуждаемо, но не поддерживаю. Обосновываю - едем на круизе, надо резко тормознуть (кошка, идиот на дороге, на горе появились ГАЙцы...) Резко бью по тормозу, а виртуальная нога мне плавненько еще секунду сбрасывает обороты :smile: Тормозной путь увеличится, это все равно как я бы одной педалью давил на тормоз, а второй на газ. Нет уж...

В тему - я вообще думаю от релюх отказаться. На крайняк чтобы просто при обесточке блока круиза перекидывали управление на педаль. Есть мысль ДО установки полноценного управления втулить блок на зашитом насмерть режиме дубликации и посмотреть, что изменится. Если разницы не будет, зачем огород городить? Не космическая же ракета :smile:

 

Миш, спасибо что читаешь. я уж думал совсем сам остался. Вы с Володей от Си, я так понял, отказались :smile: Абыдно...

Изменено пользователем еще один max
Ссылка на комментарий
Поделиться на другие сайты

MAX, введи еще обороты двигателя, сброс оборотов по превышению, это есть в штатных блоках, на случай нечаянного включения нейтралки, или крутого подъема, коробка перейдет на пониженную, обороты в ограничитель упрутся, не есть гуд. Если надо, то я могу поискать в мануалах алгоритм работы ограничителя, если он есть там, хотя должен быть. И на вход тормоза поставь стабилитрон, там же 12V появляется при нажатии.

Изменено пользователем diman27
Ссылка на комментарий
Поделиться на другие сайты

Привет. Думаю, что обсуждаемо, но не поддерживаю. Обосновываю - едем на круизе, надо резко тормознуть (кошка, идиот на дороге, на горе появились ГАЙцы...) Резко бью по тормозу, а виртуальная нога мне плавненько еще секунду сбрасывает обороты :smile: Тормозной путь увеличится, это все равно как я бы одной педалью давил на тормоз, а второй на газ. Нет уж...

Если надо резко жать на тормоз, то вместе со сцеплением ничего тормозить не будет, а просто обороты плавно опустятся без резкого рывка вниз до холостых. А теперь прикинь что ты едешь на круизе и надо просто с него сняться. Тогда жмёшь на тормоз и одновременно на педаль газа, но в тоже положение что конра ты не в жисть не попадаешь и можно запросто блокирнуть колёса при рывке вниз по оборотам (торможение двигателем как минимум обеспечено). Мне бы такой алгоритм не понравился...Надо смотреть как у муравьёв с этими режимами продумано.

 

P.S. :smile: читаю, но в программы и алгоритмы особо вникать некогда пока...Тем более что теперь не понятно как обсуждать, не видно кто в теме находится. Проще в Аську или Скайп писать.Мы с Вовой в Скайпе связь уже наладили, так быстрее.

Изменено пользователем mikky
Ссылка на комментарий
Поделиться на другие сайты

Гость еще один max

Всем привет!

У меня предыдущая машина была "Mitsubishi Eagle Summit" (американский) с фирменным круизом. Нет там сброса по оборотам двигателя. И на нейтралке включается.

Сегодня специально поехал на работу по объездной, разогнался до 80-ти и бросил педаль. Медленно-медленно начала падать скорость, за 1 сек упала до 76-78. Так что суспенда не нужно, он видимо обрабатывается ECU двигателя корректно.

При отключении круиза попадание в скорость вырабатывается с 3-4 раза, Миша, поверь на слово (это по прежней машине). Тем более с такой мягкой тяговой характеристикой. Это ведь все равно, что резко бросить педаль, а потом ловить скорость? И такой тест провел. Легко! До достижения нужной скорости машин никак не реагирует, а при достижении плавно подхватывает и поехали дальше.

По поводу того, что на подъеме коробка перейдет на пониженную и далее по тексту - это надо постараться я уж не знаю как. 2,4 л атмосферник, 165 лс, фирменная система электроподъема клапанов делают машину настолько тяговой, что мама дорогая! По старту со светофора я, конечно, Субару Легаси проиграю, но чтобы заставить мой движок захлебнуться от нагрузки... Ездил в Джубгу-Новороссийск с полной загрузкой (7 не худых человек плюс немного вещей плюс харчи), на Михайловском перевале на подъем только и пришлось на типтроник перейти, и на 2-й скорость набирала! Вот экипаж (еще я - фотографирую):

post-1142-1273732800_thumb.jpg

Уверен, что правильность сказанного может подтвердить Саша (alexandr59), у него такой же движок.

На фирменной схеме круиз-контроля нет упоминания о датчике оборотов. Можно предположить, что они где-то в другом месте заводятся в ECU (что и есть на самом деле) и сброс круиза по оборотам реализован программно. Но - датчик скорости тоже в любом случае заводится в ECU (хотя бы для спидометра и управления коробкой), а он-то в круизе показан! И в хелпе по диагностике и поиске неисправностей круиза про обороты двигателя нет ни слова.

Программно планирую предусмотреть отключение круиза при падении скорости ниже 40 или при падении более чем на 20 км/ч от заданной, а также при превышении 160 (допустим поставил 150 и пошел на спуск, хотя уже торможение двигателем будет). Думаю этого достаточно. В любом случае обороты в 6000 мне не повредят, при кикдауне на обгонах машина сама столько выдает, да и тахометр обнадеживает:

post-1142-1273733515_thumb.jpg

Ссылка на комментарий
Поделиться на другие сайты

Гость еще один max
Гуд, я просто идею кинул..
- вот за то и спасибо, вишь: ты сказал, я подумал и проверил. Подсказывай, высказывай мысли, будет самое то мне в помощь!

Начал писать совмещенную прогу опроса датчиков, заодно задал сторожевой таймер.

Может кому пригодится - то ли на Си нет команды сброса сторожевого таймера, то ли я ее не нашел. Оказывается надо вставлять фрагмент из Ассемблера:

#asm ("wdr")

Минут сорок по интернету рылся, везде только WDR написано. Нарвался на сравнительные листинги на Си и Ассемблере, только тогда понял. Век живи, век учись, и дураком помрешь!

Изменено пользователем еще один max
Ссылка на комментарий
Поделиться на другие сайты

Датчика оборотов нет, есть датчик положения коленвала и распредвала, на основании их ЭБУ рассчитывает обороты и многое другое. Посмотри схемы страрых круизов, еще с тросом, там есть вход оборотов двигателя, у TOYOTы точно есть, так как я себе блок буду ставить, пришлось литературу изучать. А еще у тебя датчика спидометра нет, а сигнал идет с блока АБС. Сделай развязку с резистором непосредственно в месте подключения провода к проводке, а то можешь болок АБС и панель попалить. Уже неоднократно анели делал после сигнализаторщиков, а АБС не ремонтируется.

Ссылка на комментарий
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...