AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
11.09.2014, 23:13
|
|
Гражданин KAZUS.RU
Регистрация: 21.08.2006
Адрес: РА г.Майкоп
Сообщений: 863
Сказал спасибо: 31
Сказали Спасибо 221 раз(а) в 122 сообщении(ях)
|
Re: Задержка импульса
Сообщение от omercury
|
Я бы порекомендовал сначала заняться алгоритмом...
|
Видно не осознали Вашу подсказку. Остановить и сразу запустить.....
__________________
|
|
|
|
11.09.2014, 23:15
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Задержка импульса
Сообщение от akegor
|
Чем быстрее будет перезапущен счетчик, тем точнее определение периода оборота.
|
Не обязательно, главное, чтоб перезапуск был через одинаковое во всех циклах время.
|
|
|
Сказали "Спасибо" omercury
|
|
|
11.09.2014, 23:20
|
|
Прописка
Регистрация: 23.07.2007
Сообщений: 209
Сказал спасибо: 109
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Задержка импульса
ну как же остановить и сразу запустить, нужно еще и обнулить, т.к счетчик работает по сравнению а не по переполнению
TCCR1B=0x00; //- остановить Timer1
TCNT1L=TCNT1H=0x00; //- обнулить таймер
TCCR1B=0x04;
Последний раз редактировалось SAHA_T; 11.09.2014 в 23:22.
|
|
|
|
11.09.2014, 23:26
|
|
Гражданин KAZUS.RU
Регистрация: 21.08.2006
Адрес: РА г.Майкоп
Сообщений: 863
Сказал спасибо: 31
Сказали Спасибо 221 раз(а) в 122 сообщении(ях)
|
Re: Задержка импульса
Сообщение от SAHA_T
|
ну как же остановить и сразу запустить, нужно еще и обнулить, т.к счетчик работает по сравнению
TCCR1B=0x00; //- остановить Timer1
TCNT1L=TCNT1H=0x00; //- обнулить таймер
TCCR1B=0x04;
|
Подсказали. Не идите снизу вверх. Наооборот сверху вниз. Принципы программирования. Отработайте алгоритм. А потом уж , "вылизывайте" реализцию оного.
__________________
|
|
|
|
11.09.2014, 23:41
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Задержка импульса
Сообщение от SAHA_T
|
qq=(tablica[oborot]/11111)+100; +100
|
Откуда Вы взяли именно 100?
Сообщение от Yurkin2014
|
Пока ТС не врубится во внутренюю жизнь МК, ему останется только копировать чужие программы.
|
Либо написать алгоритм, разбить на элементарные (мелкие) задачи и решать эти задачи последовательно.
|
|
|
Сказали "Спасибо" omercury
|
|
|
11.09.2014, 23:42
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Задержка импульса
Сообщение от SAHA_T
|
-срабатывает внешнее прерывание
-останавливаем счетчик
-берем значение из счетчика и смотрим в таблицу
-сбрасываем счетчик
-запускаем счетчик
-подсчитываем длительность импульса с помощью таблицы, т.е оборот равен определенной длительности импульса с шагом 256мкс
-далее условие на заниженные обороты, т.е нижний порог оборотов
-заносим значение в регистр сравнения, в данном случае OCR1A
т.е получается что мы заносим в регистр сравнения длительность импульса а нужно ....
|
А нужно занести уже подготовленный результат предыдущих вычислений - ДВС очень меееедленный с точки зрения МК процесс.
Я бы сделал немного не так.
Сообщение от SAHA_T
|
-срабатывает внешнее прерывание....
|
-останавливаем счётчик;
- читаем таймер;
- запускаем таймер на отсчёт задержки искрообразования;
- подсчитываем длительность цикла, расчитываем УОЗ, считаем звёзды на небе, готовим данные для показометра оборотов и индикации угла, моргаем светлодиодами, т.е. занимаемся любой ерундой, главное, чтоб она не занимала времени больше, чем двигатель совершает полный оборот и всё это укладывалось в строго определённое время (кстати, для этого можно использовать второй таймер);
- запускаем таймер подсчёта времени оборота на новый цикл и ждём следующего импульса с датчика.
Хочу напомнить, что 10 к. оборотов, это целых 6 миллисекунд или 48000 тактов АВР-ки при 8МГц тактовой...
Это реально дофига.
|
|
|
Сказали "Спасибо" omercury
|
|
|
12.09.2014, 00:29
|
|
Заблокирован
Регистрация: 21.01.2014
Сообщений: 589
Сказал спасибо: 7
Сказали Спасибо 267 раз(а) в 206 сообщении(ях)
|
Re: Задержка импульса
Ладно, можно работу системы представить вот так.
Стадион, спортсмен бегает по кругу. Где-то на кругу стоит тренер по фамилии Таймер. Тренер измеряет время, за которое спортсмен пробегает круг. К сожалению, секундомер остался дома, и тренер просто решил считать вслух. Вот спортсмен пробежал мимо него. Тренер начал счёт 0, 1, 2, 3 ... Когда он бегун вновь поравнялся с Таймером, Таймер сказал 100, запомнил это число и снова начал считать: 0, 1, 2, 3 ... Тут всё понятно.
Но через четверть круга стоит фотокамера с дистанционным спуском, кнопка в руках тренера. Таймеру хочется сделать фотографию спортсмена. Он рассуждает так: четверть круга, значит, когда я досчитаю до 25, то как раз бегун будет напротив камеры. Так он и сделал, получился отличный снимок.
Но бегун начал уставать, и в следущий раз пробежал мимо Таймера при счёте 120. Не беда. Таймер начал как обычно: 0, 1, 2 , 3 ... Но в этот раз он нажал на кнопку спуска при счёте 30, так как это есть четверть от 120.
Третий круг. Бегун поравнялся с тренером при счете 132. Тут Таймер напрягся, делить 132 на 4 не так просто. Но Таймер был хитрый. Он заранее сделал таблицу деления на 4, в этой таблице в строчке 132 стояло число 33. Поэтому тренер не думал долго, а посмотрел в таблицу и нажал кнопку на счете 33. И снова отличный кадр!
Вот эта таблица
...
tabl[120] = 30
tabl[121] = 30
tabl[122] = 31
tabl[123] = 31
tabl[124] = 31
tabl[125] = 31
tabl[126] = 32
tabl[127] = 32
tabl[128] = 32
tabl[129] = 32
tabl[130] = 33
tabl[131] = 33
tabl[132] = 33
tabl[133] = 33
tabl[134] = 34
...
В квадратный скобках стоит время одного круга, а само значение таблицы tabl[] есть число для сравнения с текущим счётом. Мы измерили время круга, это же время-число и есть номер строки. Находим значение из таблицы, и когда табличное число сравняется с текущим счётом, тогда и нажимаем на кнопку.
|
|
|
Сказали "Спасибо" Yurkin2014
|
|
|
12.09.2014, 00:32
|
|
Прописка
Регистрация: 23.07.2007
Сообщений: 209
Сказал спасибо: 109
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Задержка импульса
Во я в замес попал
TCCR1B=0x00; // -останавливаем счётчик;
oborot = (TCNT1L|((int)TCNT1H‹‹8 )); //- читаем таймер;
OCR1AH=(int)(oborot››8 ); //- запускаем таймер на отсчёт задержки искрообразования;
OCR1AL=(int)oborot; //- запускаем таймер на отсчёт задержки искрообразования;
Т.к таймер у нас с делителем 256, то если мы сразу делаем отсчет таймера TCNT1, то в нем будет о или 1, не больше
cycle=(tablica[oborot]); //- подсчитываем длительность цикла
if(oborot›369)oborot = 369;
- рассчитываем УОЗ, как рассчитывать УОЗ, делать еще одну таблицу и присваивать номер равный длительности и равный задержке ? Не могу понять своей логикой, мы имеем длительность импульса, как можно это применить.
TCCR1B=0x04;
рассчитываем УОЗ, считаем звёзды на небе, готовим данные
//для показометра оборотов и индикации угла, моргаем светодиодами, т.е. занимаемся
//любой ерундой, главное, чтоб она не занимала времени больше, чем двигатель совершает
// полный оборот и всё это укладывалось в строго определённое время
//(кстати, для этого можно использовать второй таймер);
//- запускаем таймер подсчёта времени оборота на новый цикл и ждём следующего импульса с датчика.
Последний раз редактировалось SAHA_T; 12.09.2014 в 00:37.
|
|
|
|
12.09.2014, 00:34
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Задержка импульса
Сообщение от Yurkin2014
|
tabl[120] = 30
tabl[121] = 30
|
Ага, Case на диапазон.
|
|
|
Сказали "Спасибо" omercury
|
|
|
12.09.2014, 00:39
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Задержка импульса
Сообщение от SAHA_T
|
//для
|
SAHA_T, выделяете в посте нужную часть - вылазит окошко "цитировать" - клик по нему и будет частичной цитатой. Есть под каждым постом и кнопка "цитировать" - цитата всего поста. Лишнее между квотами можно удалить.
|
|
|
Сказали "Спасибо" omercury
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 02:52.
|
|