Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

Задержка или опережение импульса

Непрочитано 17.04.2012, 09:52  
SAHA_T
Прописка
 
Регистрация: 23.07.2007
Сообщений: 209
Сказал спасибо: 109
Сказали Спасибо 1 раз в 1 сообщении
SAHA_T на пути к лучшему
По умолчанию Re: Задержка или опережение импульса

Сборисов я повторюсь что движок 2т и не инжекторный поэтому моновпрыск тут будет лишним.

Alex9797 а с чем я могу столкнуться на практике ?
Реклама:
SAHA_T вне форума  
Непрочитано 17.04.2012, 12:28  
Сборисов
Прописка
 
Регистрация: 21.11.2010
Адрес: Донецк
Сообщений: 236
Сказал спасибо: 37
Сказали Спасибо 40 раз(а) в 28 сообщении(ях)
Сборисов на пути к лучшему
По умолчанию Re: Задержка или опережение импульса

Люди моноинжектор на 2109 прилепили и катаются...
Сборисов вне форума  
Непрочитано 17.08.2014, 13:12  
SAHA_T
Прописка
 
Регистрация: 23.07.2007
Сообщений: 209
Сказал спасибо: 109
Сказали Спасибо 1 раз в 1 сообщении
SAHA_T на пути к лучшему
По умолчанию Re: Задержка или опережение импульса

Прошло много лет. Сейчас все же решил разобраться с данным вопросом и программой https://kazus.run/forums/showpost.ph...2&postcount=56

хотелось бы разобраться как читается данная строчка и какие значения возвращаются в counter_rpm
counter_rpm=(TCNT1L|((int)TCNT1H‹‹8 )); //читаем скорость вращения

i=60000/counter_rpm; //вычисляем ячейку таблицы

откуда взята такая формула ?
bufer=counter_rpm-(counter_rpm*tablica[i]/36)-150; //вычисляем задержку
OCR1BH=(char)(bufer››8 ); //заносим задержку
OCR1BL=(char)bufer; //в счётчик


bufer=bufer-2000; //длительность импульса 2мс
OCR1AH=(char)(bufer››8 );
OCR1AL=(char)bufer;


также я не совсем понимаю в какой последовательности берутся значения из таблицы flash char tablica[104]=
{....}

Также не могу понять эту строку if(i›18&i‹104) PORTB.4=1; на порт б4 будет 1 если i будет больше 18 или меньше 104, почему эта строчка не написана таким образом if(i›0&i‹103) PORTB.4=1; ?

Заранее спасибо.

Последний раз редактировалось SAHA_T; 17.08.2014 в 13:20.
SAHA_T вне форума  
Непрочитано 18.08.2014, 01:31  
omercury
Почётный гражданин KAZUS.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Задержка или опережение импульса

Сообщение от SAHA_T Посмотреть сообщение
Прошло много лет.
Всего-то 2 года с гаком.

Сообщение от SAHA_T Посмотреть сообщение
хотелось бы разобраться как читается данная строчка и какие значения возвращаются в counter_rpm
counter_rpm=(TCNT1L|((int)TCNT1H‹‹8 )); //читаем скорость вращения
Старший байт счётчика таймера-1 сдвигается на 8 разрядов влево и складывается по ИЛИ с младшим байтом - в переменную читается 16-битное слово из счётного регистра Таймера-счётчика1.

Сообщение от SAHA_T Посмотреть сообщение
i=60000/counter_rpm; //вычисляем ячейку таблицы
Здесь вычисляется номер ячейки таблицы.
Сообщение от SAHA_T Посмотреть сообщение
откуда взята такая формула ?
bufer=counter_rpm-(counter_rpm*tablica[i]/36)-150; //вычисляем задержку
OCR1BH=(char)(bufer››8 ); //заносим задержку
OCR1BL=(char)bufer; //в счётчик
Думаю, подобрана экспериментально.

Сообщение от SAHA_T Посмотреть сообщение
bufer=bufer-2000; //длительность импульса 2мс
OCR1AH=(char)(bufer››8 );
OCR1AL=(char)bufer;
Две тысячи тиков таймера при такте в 1МГц как раз и есть 2 миллисекунды.

Сообщение от SAHA_T Посмотреть сообщение
также я не совсем понимаю в какой последовательности берутся значения из таблицы flash char tablica[104]=
{....}
Это совсем просто, элемент массива с номером, который вычислили по этой формуле -
PHP код:
i=60000/counter_rpm; 
читается в той самой откуда-то взявшейся формуле
PHP код:
bufer=counter_rpm-(counter_rpm*tablica[i]/36)-150; 
Сообщение от SAHA_T Посмотреть сообщение
Также не могу понять эту строку if(i›18&i‹104) PORTB.4=1; на порт б4 будет 1 если i будет больше 18 или меньше 104, почему эта строчка не написана таким образом if(i›0&i‹103) PORTB.4=1; ?
Таким образом отсекаются максимальные обороты двигателя в районе 6000prm, которые, видимо, были признаны слишком высокими. Катушка зажигания просто не включается и искрообразования нет.
omercury вне форума  
Непрочитано 18.08.2014, 14:58  
SAHA_T
Прописка
 
Регистрация: 23.07.2007
Сообщений: 209
Сказал спасибо: 109
Сказали Спасибо 1 раз в 1 сообщении
SAHA_T на пути к лучшему
По умолчанию Re: Задержка или опережение импульса

omercury, Рад снова Вас слышать.
Спасибо за помощь.

Вчера экспериментировал в отладчике Studio 4, хотелось бы улучшить и довести до ума данную программу .
мы имеем скорость вращения
counter_rpm=(TCNT1L|((int)TCNT1H‹‹8 )); //читаем скорость вращения
макс значение будет составлять FFFF=65535.

В каких единицах будет измерятся counter_rpm скорость вращения и в каких пределах будет изменятся ?

i=60000/counter_rpm; //вычисляем ячейку таблицы i›=1 and i‹=104 но из данной формулы i может быть и больше чем 104

как бы сделать что бы * i * возвращало значения таблицы tablica[104]={....} от 1 до 104 т.е при скажем малых оборотах равных 500, i = 5 при 6000 i= 60 и при 10000 i= 100
а в самой таблице вводить значения угла смещения(задержка)

как рассчитать сколько миллисекунд нужно для смещения на 1 градус или 10-ть градусов ? и вот эти миллисекунды забить в таблицу обороты - градус

в результате
bufer= tablica[i] ; tablica[i] будет возвращать значение угол-обороты.

как рассчитать значение переменной bufer что бы оно соответствовало реальной задержке в таймере т.е 1 к 1
OCR1BH=(char)(bufer››8 ); //заносим задержку
OCR1BL=(char)bufer; //в счётчик

Я наверняка написал много непонятного, не судите плиз строго, логику МК мне трудно понять
Миниатюры:
Нажмите на изображение для увеличения
Название: Таблица-значений-.jpg
Просмотров: 67
Размер:	210.0 Кб
ID:	68716  

Последний раз редактировалось SAHA_T; 18.08.2014 в 15:02.
SAHA_T вне форума  
Непрочитано 19.08.2014, 00:51  
SAHA_T
Прописка
 
Регистрация: 23.07.2007
Сообщений: 209
Сказал спасибо: 109
Сказали Спасибо 1 раз в 1 сообщении
SAHA_T на пути к лучшему
По умолчанию Re: Задержка или опережение импульса

еще такой вопросик, как быть если к примеру у меня 4-х тактный двигатель, в 4-х тактном за цикл происходит 2 оборота вала, возможно ли сделать таким образом ?

counter_rpm= (((TCNT1L|((int)TCNT1H‹‹8 ))) * 2;
SAHA_T вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не отрабатывается нужная задержка begun Микроконтроллеры, АЦП, память и т.д 8 13.06.2011 18:39
Задержка подачи питания при первом включении LUMENoff Электроника - это просто 14 05.03.2011 17:34
задержка таймера PIC worldmasters Микроконтроллеры, АЦП, память и т.д 13 08.07.2009 11:11
задержка подачи питания dgvozd Отвлекитесь, эмбеддеры! 51 08.07.2009 09:58
Задержка включения kviper Микроконтроллеры, АЦП, память и т.д 5 12.08.2007 15:57


Часовой пояс GMT +4, время: 14:51.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.