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

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

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

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

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

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

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
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,856
Сказал спасибо: 2,532
Сказали Спасибо 11,770 раз(а) в 5,896 сообщении(ях)
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
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,856
Сказал спасибо: 2,532
Сказали Спасибо 11,770 раз(а) в 5,896 сообщении(ях)
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,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
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
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,856
Сказал спасибо: 2,532
Сказали Спасибо 11,770 раз(а) в 5,896 сообщении(ях)
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, время: 10:14.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot