Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы

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

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

Всем привет.

Уже несколько недель потею над данной задачей и
Имеется двигатель, от завода установлен датчик с ранним положением примерно 40 градусов т.е искра происходит раньше чем поршень дойдет до ВМТ.

Задача на холостых оборотах 600-800 сделать задержку скажем на 4мс(выставлять вручную) и в дальнейшем в зависимости от оборотов эта задержка должна уменьшаться т.е к примеру на 6000 оборотов задержка будет равна 0.

Датчик используется индукционный на входе мк стоит сопротивление диод и стабилитрон, т.е на выходе датчика происходит один импульс. Следовательно что бы измерить оборот двигателя нужно ждать 2 импульса датчика, поэтому мне нужно изначально сделать задержку на определенное время а в дальнейшем ее уменьшать.

обороты двигателя. -- минимальные от 600-800 оборотов, максимальные от 6000-10000 оборотов
период - время одного оборота. От 1/600 до 1/10000. Опять же в 16,66 раз разница.
максимальный угол ОЗ 40 градусов, значит рабочий диапазон = 40/360 = 1/9 или примерно 40% от времени полного оборота.

Пишу в CVAVR, использую тини2313, вход датчика PORTD.2, выход импульса PORTB.4.

с таймерами практически не работал, читаю книгу Белова микроконтроллеры АВР, но практики практически нет.

не совсем понимаю как работают прерывания т.е по переполнению и сравнению счетчика но как это происходит на практике (interrupt), также не могу понять как правильно выбрать делитель для моей задачи и как правильно сделать начальную задержку

8-ми битный таймер использовать для выходного импульса а 16-ти битный для подсчета оборотов двигателя.

flash char tablica[104]= {100.....10000}
в tablica[i] находятся значения задержек от 100 оборотов до 10000


interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
TCCR1B=0x00; //останавливаем счётчик 1Мгц
TCNT1L=TCNT1H=0xff; //заносим макс. значение
};

interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
PORTB.4=1; //включаем КЗ
//TCCR1B=0x00;
//PORTB.4=0;
#asm("nop")
};

interrupt [TIM1_COMPB] void timer1_compb_isr(void)
{
TCCR1B=0x00; //останавливаем счётчик 1Мгц
PORTB.4=0; //выключаем КЗ
//PORTB.4=1;
};

void main(void)
{
DDRA=DDRB=DDRD=0xff;
DDRD.2=0; //вход под датчик
PORTB.2=0;

OCR1AL=OCR1AH=0xff;
OCR1BL=OCR1BH=0xff;
TIMSK=0xE0;

OCR0A=0xff;
OCR0B=0xff;
TIMSK=0xE0;


PORTB.4=0;

while(1)
{

while(PIND.2==0); //делаем один опрос датчика
//#asm("nop")
#asm("cli")
PORTB.4=0; //выключаем КЗ
PORTB.3=1; //вкл. светодиод

TCNT0=0x00; //сбрасываем счётчик
TCCR0A=0x02; //запускаем счётчик 1Мгц для 0-го 8-ми битного таймера делитель 8

TCNT1L=TCNT1H=0x00; //сбрасываем счётчик
TCCR1B=0x02; //запускаем счётчик 1Мгц для 0-го 16-ти битного таймера делитель 8, наверное мало как это правильно рассчитать
// delay_us(500); //убираем дребезг

PORTB.3=0;
PIND.2=0;
#asm("sei")

while(PIND.2==0); ////делаем второй опрос датчика и измеряем скорость вращения
TCCR1B=0x00; //останавливаем счётчик 1Мгц

counter_rpm=(TCNT1L|((int)TCNT1H‹‹8 )); //частота вращения
//Таким образом частота вращения вала двигателя будет равна
// F=(1/N)*60*1000000 оборотов в минуту.
i=(1/counter_rpm)*60*1000000;

bufer=tablica[i];
OCR1BH=(char)(bufer››8 ); //заносим задержку
OCR1BL=(char)bufer; //в счётчик

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

TIFR=0xff; //сбрасываем флаги
//TCNT1L=TCNT1H=0x00; //сбрасываем счётчик
//TCCR1B=0x02; //запускаем счётчик 1Мгц

PIND.2=0;
#asm("sei")
//
};
};

Возможно есть какие то недочеты с моей стороны, не судите строго.

Всем заранее спасибо
Реклама:

Последний раз редактировалось SAHA_T; 07.09.2014 в 12:52.
SAHA_T вне форума  
Непрочитано 07.09.2014, 14:38  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,313
Сказал спасибо: 2,633
Сказали Спасибо 12,076 раз(а) в 6,082 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Задержка импульса

Что за движок такой?
Это ничего, что обычно на двигателе три датчика или два, а не один?
Один стоит на зубах маховика - импульсов миллион на один оборот, скорость вращения.
Второй тоже на маховике, но на один выступ или два - аналогичный Вашему. Фиксированный угол до ВМТ.
Третий - на распредвале, начало отсчета (первый цилиндр в четырехтактном цикле).
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 07.09.2014, 14:55  
SAHA_T
Прописка
 
Регистрация: 23.07.2007
Сообщений: 209
Сказал спасибо: 109
Сказали Спасибо 1 раз в 1 сообщении
SAHA_T на пути к лучшему
По умолчанию Re: Задержка импульса

Сообщение от akegor Посмотреть сообщение
Что за движок такой?
Это ничего, что обычно на двигателе три датчика или два, а не один?
Один стоит на зубах маховика - импульсов миллион на один оборот, скорость вращения.
Второй тоже на маховике, но на один выступ или два - аналогичный Вашему. Фиксированный угол до ВМТ.
Третий - на распредвале, начало отсчета (первый цилиндр в четырехтактном цикле).
Спасибо, что откликнулись,2т двигатель, стоит один индукционный датчик , индукционный датчик работает по следующему принципу, как только появляется металл(шторка) появляется положительный импульс, как только металл отдалятся от датчика, появляется отрицательный импульс.
SAHA_T вне форума  
Непрочитано 08.09.2014, 21:00  
SAHA_T
Прописка
 
Регистрация: 23.07.2007
Сообщений: 209
Сказал спасибо: 109
Сказали Спасибо 1 раз в 1 сообщении
SAHA_T на пути к лучшему
По умолчанию Re: Задержка импульса

И тишина !!!
SAHA_T вне форума  
Непрочитано 08.09.2014, 21:33  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,313
Сказал спасибо: 2,633
Сказали Спасибо 12,076 раз(а) в 6,082 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Задержка импульса

Сообщение от SAHA_T Посмотреть сообщение
Следовательно что бы измерить оборот двигателя нужно ждать 2 импульса датчика, поэтому мне нужно изначально сделать задержку на определенное время а в дальнейшем ее уменьшать.
Изначально безвредней обойтись без искры, пока не измерена частота.
Если бы сказали конкретней, что за задача, было бы проще.

Попробуйте посмотреть здесь.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.

Последний раз редактировалось akegor; 08.09.2014 в 21:43.
akegor вне форума  
Сказали "Спасибо" akegor
SAHA_T (08.09.2014)
Непрочитано 08.09.2014, 22:35  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Задержка импульса

Поставьте готовый модуль зажигания от китайского мопеда. Копейки стоит.
Easyrider83 вне форума  
Непрочитано 08.09.2014, 22:56  
SAHA_T
Прописка
 
Регистрация: 23.07.2007
Сообщений: 209
Сказал спасибо: 109
Сказали Спасибо 1 раз в 1 сообщении
SAHA_T на пути к лучшему
По умолчанию Re: Задержка импульса

Я уже думал об этом, но тогда для запуска двигателя понадобится грубо говоря 2 оборота маховика, поэтому я и решил сделать проще. Задача сделать начальную задержку после первого импульса датчика а в дальнейшем уже из этой задержки, вычитать задержку подсчитанную для оборотов двигателя.

Также как вариант, можно сделать подсчет по положительным и отрицательным импульсам, но для этого нужно задействовать АЦП, но это уже точно будут дебри.

Хочется это сделать на МК, т.к возможности у МК велики!!!


akegor, объясни мне плиз если у меня кварц на 8мгц какой мне нужно ставить делитель что бы сделать задержку в 40% от оборота. Мне просто не приходилось ранее сталкивать с таймерами.

Я думаю как то так из 600 оборотов вычисляем скорость для одного оборота т.е это примерно т.е 0.1сек 1 оборот, теперь берем 40% от одного оборота т.е от 0.1, получается 0.04 сек или 40000мкс. Я так понял что каждый тик таймера это 1мкс. Следовательно как мне нужно поставить делитель что бы я мог с помощью таймера сделать задержку в 40000мкс и в дальнейшем при повышении каждой сотни оборотов уменьшать эту задержку.

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

Сообщение от Easyrider83 Посмотреть сообщение
Поставьте готовый модуль зажигания от китайского мопеда. Копейки стоит.
У готового китайского модуля нет начальной задержки !!!
SAHA_T вне форума  
Непрочитано 08.09.2014, 23:22  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,313
Сказал спасибо: 2,633
Сказали Спасибо 12,076 раз(а) в 6,082 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Задержка импульса

Сообщение от SAHA_T Посмотреть сообщение
Я уже думал об этом, но тогда для запуска двигателя понадобится грубо говоря 2 оборота маховика
Один. После второго можно уже отсчитывать задержку.
Сообщение от SAHA_T Посмотреть сообщение
Также как вариант, можно сделать подсчет по положительным и отрицательным импульсам, но для этого нужно задействовать АЦП, но это уже точно будут дебри.
Вы не задавались вопросом - зачем два импульса? И как вообще работает система зажигания?
Сдается мне, что у Вас весьма поверхностные познания в этом вопросе.
Коротко, остальное поможет прояснить Паутина.
Скорость распространения фронта горения в камере сгорания около 40 м/с. Если поджигать в ВМТ, распространение фронта будет уже в такте рабочего хода - сжатия следующей порции. Т.е., это позднее зажигание. Для запуска устанавливают небольшой начальный угол. При росте оборотов в работу вступает центробежный регулятор и увеличивает угол опережения, потому как скорость горения от оборотов не зависит. Кстати, считать задержку надо через тригонометрию (проц надо посерьезней) или брать из таблицы, которую надо где-то хранить. Тинька для этого хиловата.
Два импульса используются для того, чтобы по первому импульсу катушка зажигания начала накапливать энергию, а по второму этот процесс заканчивается искрообразованием за счет накопленной энергии. Вот на это и нужно 40 градусов.
Посмотрите, почитайте.
Конкретно Ваш двигатель не знаю, изложил общую теорию работы системы зажигания, которая общая ДЛЯ ВСЕХ БЕНЗИНОВЫХ ДВС.
Удачи.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 08.09.2014, 23:47  
SAHA_T
Прописка
 
Регистрация: 23.07.2007
Сообщений: 209
Сказал спасибо: 109
Сказали Спасибо 1 раз в 1 сообщении
SAHA_T на пути к лучшему
По умолчанию Re: Задержка импульса

akegor - спасибо за быстрый ответ.

Наверное у меня поверхностные знания т.к с этими двигателями уже знаком больше 10-ти лет и лет 10ть назад делал обычный тиристорный коммутатор )

Объясняю 2 импульса нужно для того что бы подсчитать реальные обороты двигателя, в самом начале я привел код программы. т.е как только появляется первый импульс датчика включается счетчик и начинает считать, как только появляется второй импульс счетчик останавливается и у нас в счетчике будут тики 2 импульсов датчика т.е оборот и следовательно по формуле
(counter_rpm=(TCNT1L|((int)TCNT1H‹‹8 )); //частота вращения
//Таким образом частота вращения вала двигателя будет равна
// F=(1/N)*60*1000000 оборотов в минуту.
i=(1/counter_rpm)*60*1000000; ) можно вычислить количество оборотов.
Далее берем таблицуflash char tablica[104]= {100.....10000} которая находится в памяти тиньки и для определенный оборотов указываем нужную задержку.

мне не нужен импульс для накопления катушки, у меня стоит преобразователь который и заряжает емкость и уже импульс с МК управляет открытием тиристора, ведь я же выше написал тиристор )

а принцип и воспламенения для ВСЕХ БЕНЗИНОВЫХ ДВС действительно одинаковый, только время горения зависит от окната бензина. Все это уже давно прочитано

вы лучше мне объясните по какому принципу работает делитель в зависимости от частоты кварца, к примеру 8000000(8мгц)/1024= 7812

к примеру я хочу сделать превывание 8ми (256) битного счетчика по сравнению. к примеру я хочу что бы в данном счетчике была задержка в 40000мкс и она была равна в таймере 250 или OCR0A = 0xFA, как мне в данном случае рассчитать правильно делитель что бы применить 8-ми битный таймер

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

Последний раз редактировалось SAHA_T; 09.09.2014 в 00:13.
SAHA_T вне форума  
 
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задержка или опережение импульса SAHA_T Микроконтроллеры, АЦП, память и т.д 85 19.08.2014 00:51
Измерение длительности импульса STM32 anton_1000 ARM 28 22.10.2013 10:51
Ограничитель длительности импульса Pajatel Микроконтроллеры, АЦП, память и т.д 161 05.04.2012 00:35
Как выделить срез импульса? vicselc Поиск схем. Делимся схемами 10 09.07.2007 01:27
LCD DEM 16261(4 bit mode) + AT89C51 ajborman Микроконтроллеры, АЦП, память и т.д 8 21.03.2007 15:26


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


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