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

Частотомер На Atmega


Юрец

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

Раз выбрано внешнее тактирование - значит однократный "тик".

если по прихождению одного импульса на вход Т1 возникает однократное прерывание ISR(TIMER1_COMPA_vect){counter++;}

тогда возникает следующий вопрос:

а это не то-же самое (с алгоритмической точки зрения) что и подсчет количества прерываний interrupt [EXT_INT0] void ext_int0_isr(void){i++;} за 1 сек ?

не всё золото, что на контактах...

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

Нет. Таймер включен в режиме CTC, и прерывание будет происходить каждые 100 "тиков", когда TCTN1(он инкрементируется каждый "тик") совпадёт с OCR1A.

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

2.фактически это алгоритм автомобильного тахометра. скажем до 8000 оборотов. 8000 * 4 цилиндра = 32кГц. пока это будет максимумом.

Уважаемый Юрец, я не перестаю удивляться.. Это к тому, что 8000 об/мин коленчатого вала двигателя не есть 8000 Гц практически

никогда, а уж тем более 32кГц и ни на какое кол-во цилиндров умножать не нужно!!!

Правильная постановка задачи уже содержит половину ответов:) Поэтому начнем с приведения данных в систему.

Вот моё видение постановки задачи: есть вращающийся вал, датчик для измерения кол-ва оборотов в сек. - самое простое контактная

пара, оптодатчик и т.д. Допустим оптодатчик (светодиод-фототранзистор), на валу диск с одним отверстием, тогда оборот вала дает

1 импульс, если отверстия 2 - тогда 1 оборот - 2 импульса и т.д. Допустим отверстие одно - тогда частота в 1 Гц будет соответствовать

частоте вращения 60 об/мин.

После небольших преобразований 8000 об/мин / 60 сек = 133,33.. Гц.

Кстати можно реализовать программный пересчет Гц в об/мин.

Теперь о частотомере. Сам написал аж 3 варианта программы частотомера, пока не получил хорошие показатели по точности.

Не буду заморачивать подсчетом фронтов и прочей не заслуживающей внимания ерундой... вот насчет внешних прерываний - не знаю,

не пользовал.

Самый надежный вариант, тактирование 2-хбайтного таймера от внешнего источника - настрой регистр TCCR1B, вот кусок даташита

CS12 CS11 CS10 Description

1 1 0 External clock source on T1 pin. Clock on falling edge.

1 1 1 External clock source on T1 pin. Clock on rising edge.

т.е. по срезу и фронту импульса. Забиваешь 6(0b110) или 7(0b111) в TCCR1B таймер запустится, ждешь фиксированное время

скажем 1сек - pause_ms(1000) - это в кодевижн, остановил таймер, вывел результат и по новой. Не нравится с паузами, запустил

второй таймер... Время берешь любое - хочешь 10 сек - для очень низкочастотных процессов или 0,01сек, а потом пересчет к одной

секунде, так все частотомеры на пиках сделаны. Вот собственно и все, точность получается отличная, верхний предел измеряемой

частоты ограничен по даташиту Fclk/2, рекомендуется Fclk/2,5 т.е. с кварцем 16 МГц сможешь мерять до 8-ми...

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

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Если интересно, мой исходник тахометра из этой темы...

Точность можете оценить :) Модель там приложена. Среда разработки - AtmanAVR, компилятор GCC. Портируется элементарно...

tachomether.rar

Изменено пользователем Goodefine

Любой, заслуживающий внимания, опыт приобретается себе в убыток...

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

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

верхний предел измеряемой

частоты ограничен по даташиту Fclk/2, рекомендуется Fclk/2,5 т.е. с кварцем 16 МГц сможешь мерять до 8-ми...

Поправлю: верхний предел по Вашему методу получится 65кгц, если мерить до единиц Гц. 650кгц - десятков Гц. 6.5мгц - сотен Гц.

Таки в два байта не впишешь пару Мгц с точностью 1гц...

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

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Парни, учтите, что при одном импульсе на цилиндр, за 1 оборот коленвала с датчика поступают два импульса, т.к. срабатывают два цилиндра за 1 оборот. Не забудьте.

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

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

To Zenner:

Естественно точность такая, как ты сказал, но что такое 10Гц на пределе в 650кГц...

Максимальная погрешность тут будет на нижнем пределе диапазона 65кГц-650кГц и то примерно 0,015%

Я же не предлагаю мерять в данном случае единицы герц, правильно будет разбить на поддиапазоны и

в них мерять, что я и сделал. Повесил кнопки, переключаешь поддиапазоны.

Вопрос: есть решения измерения на пределе в несколько МГц с дискретностью отсчета 1Гц?

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

-> Вопрос: есть решения измерения на пределе в несколько МГц с дискретностью отсчета 1Гц?

На прошлой странице дали ссылку на мой проект LC-метра на меге, меряет 4мгц(гарантировано), может и больше, с точностью 1гц.

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

Да что вы прилипли к цилиндрам, вы меряете частоту вращения обычного вала,..

А чего бы к ним не прилипнуть? Количество импульсов зажигания свечи жестко связано с оборотами коленчатого вала. И вместо использования сего факта, лепить оптопары или феррит к коленчатому валу просто глупо...

Любой, заслуживающий внимания, опыт приобретается себе в убыток...

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

Ну тогда да, если коннектится к прерывателю-распределителю.

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

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

на худой конец даже ременной передачей - если космическая точность не нужна, мне

кажется в некоторых случаях это будет даже удобней... чем палить постоянно формирователь

импульсов, подлюченный к довольно нехилой индуктивности (в случае с классической батарейной

системой зажигания), 20 кВольтов все таки

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

...чем палить постоянно формирователь

импульсов, подлюченный к довольно нехилой индуктивности (в случае с классической батарейной

системой зажигания), 20 кВольтов все таки

Почему палить? Сейчас почти везде (за исключением только самых древних систем зажигания) стоит электронный ключ (дребезжит меньше механического, но с ним даже немного сложнее - с механикой тоже проблем нет особых), замыкающий катушку на массу. Если подключится к отрицательной клемме катушки (конец первичной обмотки, замыкающийся на массу через ключ), то простой делитель 33к/1.2к + стабилитрон отлично решает все проблемы. По такой схеме подключаю прямо на лапу МК, даже без полноценного формирователя - не то что не горит, даже не глючит... Так что не надо искать проблемы там где их нет...

Любой, заслуживающий внимания, опыт приобретается себе в убыток...

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

Ну если пробовал, тогда убедил ;) Вопросов по данной части больше не имею.

To Zenner:

А чего собсно такой вариант входной части частотомера, как у нее с чувством и входным сопротивлением?

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

А х его з. Что в голову пришло то и нарисовал. 0,5В чует точно. Входное сопротивление не менее 10кОм.

Кстати, С3 нужно увеличить до каких 100нф, чтоб 50гц и ниже пропускал.

И да, вся эта байда нужна чтоб сигнал произвольной формы привести в "нормальный" вид для МК. В данный момент уже приделал формирователь на логике.

И на днях скорее всего будет Update до 100мгц без потери точности.(всё теже +-1гц, по крайней мере постараюсь :) )

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

В "Радио" видел нормальную входную часть, там чувак на пике частотомер сделал.

Только что специально распечатку нашел №7 2004г с.64 - чувство 75-150мВ, вход на полевике, что тоже есть гут.

Буду его делать.

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

Самый надежный вариант, тактирование 2-хбайтного таймера от внешнего источника - настрой регистр TCCR1B, вот кусок даташита

CS12 CS11 CS10 Description

1 1 0 External clock source on T1 pin. Clock on falling edge.

1 1 1 External clock source on T1 pin. Clock on rising edge.

т.е. по срезу и фронту импульса. Забиваешь 6(0b110) или 7(0b111) в TCCR1B таймер запустится, ждешь фиксированное время

скажем 1сек - pause_ms(1000) - это в кодевижн, остановил таймер, вывел результат и по новой. Не нравится с паузами, запустил

второй таймер...

это такой=же алгоритм, как и в программе от Zenner.

разбираюсь потихоньку.

спасибо.

Если интересно, мой исходник тахометра .

Точность можете оценить :) Модель там приложена.

спасибо и Вам за участие!

Парни, учтите, что при одном импульсе на цилиндр, за 1 оборот коленвала с датчика поступают два импульса, т.к. срабатывают два цилиндра за 1 оборот. Не забудьте.

учту! т.к. частоту буду брать с контакта катушки.

не всё золото, что на контактах...

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

to Zenner : что-то я совсем запутался.

вот код:

/*****************************************************                        
Chip type           : ATmega16
Clock frequency     : 8,000000 MHz
Memory model        : Small
External SRAM size  : 0
Data Stack size     : 256
*****************************************************/

#include <mega16.h>

// Alphanumeric LCD Module functions
#asm
  .equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>
#include <delay.h>
#include <stdio.h>

unsigned char buffer_dec [33];
volatile unsigned char c;        	//количество прерываний таймера2
volatile unsigned long int counter;    	//здесь хранятся пойманые импульсы


// Timer 1 overflow interrupt service routine   
interrupt [TIM1_OVF] void timer1_comp_isr(void) //прерывание по совпадению таймера1
{ 
counter++;        
}

interrupt [TIM2_COMP] void timer2_comp_isr(void)  //прерывание по совпадению таймера2
{
if(c<125){c++;}
else
{	
   TCCR1B = 0; TCNT1 = 0;  //останавливаем таймер1
   sprintf(buffer_dec,"F = %u.%u kHz",counter/10,counter%10);lcd_gotoxy(0,0);lcd_puts(buffer_dec);//выводим
   counter = 0;//очищаем переменную для счёта импульсов
   c=0;//очищаем количество прерываний таймера2
   TCCR1B=0x0F; //0b00001111 запускаем таймер1
   TCNT2 = 0;//обнуляем таймер2
}
}

void timerinit()            	//инициализируем таймеры
{
// Timer/Counter 2 initialization
ASSR=0x00;
TCCR2=0x0F;  //0b00001111 таймер2, тактируем от Fosc/1024, режим СТС
TCNT2=0x00;
OCR2=0x7C; //124

// Timer/Counter 1 initialization
TCCR1A=0x00;
TCCR1B=0x0F; //0b00001111  таймер1, режим СТС, внешнее тактирование по нарастающему фронту 
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;

OCR1AH=0x00; //OCR1A = 99
OCR1AL=0x63;

OCR1BH=0x00;
OCR1BL=0x00; 

TIMSK =0x90;//установить биты 7 и 4 OCIE2 и OCIE1A по даташиту меги16;
}
void main(void)
{
// Input/Output Ports initialization
PORTA=0x00;
DDRA=0x00;

PORTB=0x00;
DDRB=0x00;

PORTC=0x00;
DDRC=0x00;

PORTD=0x00;
DDRD=0x00;


// LCD module initialization
lcd_init(16); 
#asm("sei")

timerinit(); 

while (1)
     { 
     };
}
';

в итоге: на жк дисплей ничего не выводится. эмулирую в протеусе.

если тупо вставить sprintf(buffer_dec,"F = %u.%u kHz",counter/10,counter%10);lcd_gotoxy(0,0);lcd_puts(buffer_dec); в цикл while (1) , то показывает F = 0.0 kHz

в чем засада?

тут проект протеусаtaho.rar

Изменено пользователем Юрец

не всё золото, что на контактах...

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

А порт ещё жив? Ато он у вас DDRx = FF. Импульсы куда подавать то будем, если у нас всё выходы?

да... косячек. исправил. результат такой-же. (сгореть-не сгорит. пока проверяю в протеусе).

в программе не происходит прерывание таймера1. импульсы на ногу Т1 поступают.

не всё золото, что на контактах...

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

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

Любой, заслуживающий внимания, опыт приобретается себе в убыток...

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

2 Юрец

Ну раз >>>в итоге: на жк дисплей ничего не выводится.<<<, то прерывание таймера2 тоже не работает.

Ошибка: не TIM1_OVF, а TIM1_COMPA - у нас ведь режим совпадения.

***добавлено***

хз. скомпилировал твой код в CVAVR - прерывания не происходят

скомпилировал в AVR-GCC - всё работает, пруфскрин прикрепляю к посту.

Так что с причудами CVAVR-а пускай его знатоки разбираются.

post-23328-1250239530_thumb.jpg

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

Ошибка: не TIM1_OVF, а TIM1_COMPA - у нас ведь режим совпадения.

точно! исправил. не работает.

пошел по старому пути. только таймер использовал 16-ти битный. х.з. в чем дело, но заработало:

post-14455-1250314934_thumb.jpg

всем СПАСИБО!

Изменено пользователем Юрец

не всё золото, что на контактах...

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

И всё же мне было интересно где собака зарылась...Переписал во всевозможных вариантах - не работает и всё тут.

Поменял камень - работает, обратно мег16 - нет!

Вобщем, в CVAVR кривой хидер mega16.h, чтоб исправить - копируем в него дефайны из mega32.h и радуемся.

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

Вобщем, в CVAVR кривой хидер mega16.h, чтоб исправить - копируем в него дефайны из mega32.h и радуемся.

спасибо за помощь! попробую обязательно!

хочу перейти с cvcar на avr studio. скачал winawr, avr studio 4.16. многое непонятно (начиная с того, как на пруфскрине увидел работу avr studio с proteus). пытаюсь вникнуть. (большая разница в синтаксисе, в регистрах...).

что можете порекомендовать для лучшего понимания работы в этой связке?

Изменено пользователем Юрец

не всё золото, что на контактах...

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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

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

  • Сообщения

    • Есть и такой макетный вариант (чисто аудиофильской сборки)- 
    • Идеально! Просто, идеально! На W10 64 находятся 2 физических ком порта(1 и 2) и один виртуальный (перенастроенный 10-й) при запуске программы определяются все три порта, по порядку: ком 1, ком 10, ком 2. Если же запущена программа (у меня программатор в выбором ком порта), и она занимает какой либо ком порт, при запуске BootLoader12 определяются только свободные ком порты. Опробовано со всеми доступными портами, прекрасно все определяется. Ну и конечно-же проверены самые главные функции: бутлодер определяется с первого раза (в первой версии определялся со второго раза,.... не существенно), еепром записывается, флеш тоже записывается! (у меня битый чип, и флеш не записыватся,.... не существенно). Огромнейшее СПАСИБО ВЕЛИЧАЙШЕМУ МАСТЕРУ! (... это тяжелый труд, знаю по себе ...)
    • Дожили, "ардуино" на капельку .моющего надо..  Удалил, мне не надо. Факт. Надеюсь - "тупизм" не победит интеллект. 
    • Фото нет. И это не печать, просто кусочек текстолита. Поставил точки, засверлил, поставил детали, распаял выводами. Да там работы - на 15 мин. Убрать С1, С2, землю из розетки. (3-й провод,который по схеме припаян к земле)
    • AlexeyStudent.  Даже не смотрел. Тема на диплом радиоинженера. Можете поверить. Через 16 лет.. Входное сопротивление - это ток через входное сопротивление при определённом напряжении на входе. И началось..
    • Всё просто - не бегает. Только один раз делал. Опыта мало.
    • А он при минимуме телодвижений дает качество очень приличное. Соотношение хорошее, короче  И по циферкам - не рекордсмен, но вполне.    
×
×
  • Создать...