Тахометр и МК

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
zhavnerko
Встал на лапы
Сообщения: 112
Зарегистрирован: Вс фев 24, 2013 19:02:22

Тахометр и МК

Сообщение zhavnerko »

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

Что есть:
1) МК Atmega8
2) Микросхема, питается от +5В, на одну из ножек которой выводится количество оборотов (я так понимаю, каждый оборот микросхема выдает туда +5В, правильно?)

МК(1) будет считать кол-во импульсов с ножки микросхемы(2). Я так понимаю, в МК на одну ножку PD2(INT0) поставить прерывание. Подключить туда ножку микросхемы(2). И считать, сколько она импульсов выдаст за секунду и умножить на 60?

Я правильно излагаю? Если нет, то поправьте меня пожалуйста, спасибо за конструктивный ответ)

Пытаюсь закодировать в CVAVR.
Реклама
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Тахометр и МК

Сообщение Аlex »

Правильно излагаете.
Только Вы, наверное, понимаете, что умножив подсчитанное значение на 60, будете получать данные, кратные 60-ти ?
Реклама
Аватара пользователя
zhavnerko
Встал на лапы
Сообщения: 112
Зарегистрирован: Вс фев 24, 2013 19:02:22

Re: Тахометр и МК

Сообщение zhavnerko »

Аlex писал(а):Будете получать данные, кратные 60-ти
Верно. Но я хочу получать обороты в минуту, или я неправильно вас понял и что-то не учел? И не могли бы вы подсказать, как в CodeVision AVR поставить прерывание по высокому логическому уровню и как это дело оформить? и как подсчитать это количество прерываний за единицу времени? К сожалению, я никогда не сталкивался с такой темой(
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Тахометр и МК

Сообщение Аlex »

В CodeVision AVR есть генератор кода, там можно сгенерировать обработчик прерываний и инициализацию.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
zhavnerko
Встал на лапы
Сообщения: 112
Зарегистрирован: Вс фев 24, 2013 19:02:22

Re: Тахометр и МК

Сообщение zhavnerko »

Аlex писал(а):можно сгенерировать обработчик прерываний и инициализацию.
Так, по сути можно сделать программное прерывание каждую секунду, в котором будет выводится количество посчитанных прерываний с ножки микросхемы? Правильный ход мыслей?
Реклама
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Тахометр и МК

Сообщение Аlex »

Ну, типа того...
Вы бы не мыслили, а пробовали - быстрее получится :)
Реклама
Аватара пользователя
zhavnerko
Встал на лапы
Сообщения: 112
Зарегистрирован: Вс фев 24, 2013 19:02:22

Re: Тахометр и МК

Сообщение zhavnerko »

Аlex писал(а):Вы бы не мыслили, а пробовали
Последовал вашему совету и практически сделал, но появились 2 проблемы:

1) Как обнулять счетчик импульсов каждую секунду? (А то будет правильно лишь одну секунду) :(
2) Как сделать прерывание по высокому логическому уровню? В начальном генераторе кода поставил External IRQ->INT0 enabled->mode:Any change (работает только по низкому, когда кнопка идет на землю).

Помогите, пожалуйста. Схема в протеусе и файлы CodeVision AVR прикрепил.
Вложения
Taxo.zip
(25.29 КБ) 218 скачиваний
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Тахометр и МК

Сообщение Аlex »

1) Может быть z=0; ? :)
2) Зачем ? Разве есть разница какие фронты считать ?
Аватара пользователя
zhavnerko
Встал на лапы
Сообщения: 112
Зарегистрирован: Вс фев 24, 2013 19:02:22

Re: Тахометр и МК

Сообщение zhavnerko »

interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
// Place your code here
s=z*60;
z=0;
}

:kill: :kill: :kill:

Вроде так) Огромное спасибо за помощь и моральную поддержку!)
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Тахометр и МК

Сообщение Аlex »

Это у вас секундное прерывание ?
Аватара пользователя
zhavnerko
Встал на лапы
Сообщения: 112
Зарегистрирован: Вс фев 24, 2013 19:02:22

Re: Тахометр и МК

Сообщение zhavnerko »

Да, 8 000 000 / 1024 = 7813. Предделитель выбрал 1024.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Тахометр и МК

Сообщение Аlex »

Ясненько...
dm211
Прорезались зубы
Сообщения: 208
Зарегистрирован: Вс дек 10, 2006 19:26:13

Re: Тахометр и МК

Сообщение dm211 »

Я считал не количество импульсов за секунду, а время между импульсами.
Аватара пользователя
zhavnerko
Встал на лапы
Сообщения: 112
Зарегистрирован: Вс фев 24, 2013 19:02:22

Re: Тахометр и МК

Сообщение zhavnerko »

dm211 писал(а):время между импульсами.
Тоже решение) А узнав время между 2-мя импульсами, как узнать, сколько их было в минуту? T=1/F ?
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: Тахометр и МК

Сообщение urry »

dm211
Прорезались зубы
Сообщения: 208
Зарегистрирован: Вс дек 10, 2006 19:26:13

Re: Тахометр и МК

Сообщение dm211 »

zhavnerko писал(а): Тоже решение) А узнав время между 2-мя импульсами, как узнать, сколько их было в минуту? T=1/F ?
Вопрос-а как узнать время между импульсами? У меня вот так-

Код: Выделить всё

// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)
{
 a=1;  // при поступлении импульса 
}

// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
 tik++; if(a){chast=tik; tik=0; a=0;} //измеряем время между импульсами 
 }
Потом вот так (не помню почему так, в старом проекте посмотрел)-

Код: Выделить всё

Ftek=(70/(chast/12))*60;  //переводим в об/мин
Это если быстрая реакция нужна, а можно считать за 0,1 сек импульсы со входа внешнего прерывания INT
Последний раз редактировалось dm211 Пн апр 01, 2013 08:41:02, всего редактировалось 1 раз.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Тахометр и МК

Сообщение Аlex »

zhavnerko писал(а):T=1/F ?
Да. Только Вам нужно узнать частоту, имея период. Соответственно, формула будет F=1/T, а об/мин = (1*60)/T.
Аватара пользователя
zhavnerko
Встал на лапы
Сообщения: 112
Зарегистрирован: Вс фев 24, 2013 19:02:22

Re: Тахометр и МК

Сообщение zhavnerko »

dm211 писал(а):

Код: Выделить всё

// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)
{
 a=1;  // при поступлении импульса 
}

// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
 tik++; if(a){chast=tik; tik=0; a=0;} //измеряем время между импульсами 
 }
А как таймер настроен, подскажите пожалуйста!
Аватара пользователя
zhavnerko
Встал на лапы
Сообщения: 112
Зарегистрирован: Вс фев 24, 2013 19:02:22

Re: Тахометр и МК

Сообщение zhavnerko »

Аlex писал(а):Только Вам нужно узнать частоту, имея период.
Я вот все не могу понять, как нам замерить период? Надо таймер установить на самое маленькое значение, которое возможно?
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: Тахометр и МК

Сообщение urry »

Ответить

Вернуться в «Разные вопросы по МК»