Страница 4 из 6 ПерваяПервая 123456 ПоследняяПоследняя
Показано с 31 по 40 из 58
  1. #31
    Продвинутый
    Регистрация
    03.06.2008
    Возраст
    49
    Сообщений
    320
    Вес репутации
    333

    По умолчанию Re: Тахометр на БСЗ

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

  2. #32
    Продвинутый
    Регистрация
    03.06.2008
    Возраст
    49
    Сообщений
    320
    Вес репутации
    333

    По умолчанию Re: Тахометр на БСЗ

    ну напишите ктонить, как считать импульсы прерываниями??????7

  3. #33
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,382
    Вес репутации
    10

    По умолчанию Re: Тахометр на БСЗ

    Импульсы от датчика холла штатного тахометра нужно подать на вход D2, желательно через оптрон или через диод (анодом к D2)
    Для теста скетча предусмотрел имитацию датчика холла, на выходе D5 постоянно выходят импульсы с частотой 61Гц, для проверки этот вывод нужно соединить с выводом D2

    PHP код:
    //http://www.compcar.ru/forum/showpost.php?p=86448&postcount=33

    //LOW — вызов прерывания по низкому уровню напряжения;
    //CHANGE – прерывание вызывается при любом изменении значения на входе;
    //RISING – вызов прерывания при изменении уровня напряжения с низкого (LOW) на высокий(HIGH)
    //FALLING – вызов прерывания при изменении уровня напряжения с высокого (HIGH) на низкий (LOW)

    #include <MsTimer2.h>
    #define PinA  2 
    static boolean output HIGH
    word count 0// счетчик импульсов

    void setup()  
    {   
      
    Serial.begin (115200); 
      
    pinMode(5OUTPUT); //выход ШИМ
      
    TCCR0B TCCR0B 0b11111000 |5//настроить ШИМ на частоту 61Гц
      
    pinMode(PinAINPUT);  
      
    digitalWrite(PinAHIGH);     // подключить подтягивающий резистор 
      
    attachInterrupt(0int_onRISING);  // настроить прерывание interrupt 0 на pin 2 
      
    MsTimer2::set(500flash); // таймер будет срабатывать через каждые 500ms 
      
    MsTimer2::start();//запустить таймер
    }  

    void loop() 

    //......здесь будет код Вашей программы
     
    analogWrite(5,10); //имитация датчика холла на пине D5 


    // обработка внешнего прерывания 
    void  int_on() 

    count++; //увеличить счетчик 


    void flash() //обработка прерывания таймера
    {
     
    Serial.println(count*120); //посмотреть результат
    count=0;//обнулить счетчик

    Последний раз редактировалось Chip; 27.09.2011 в 08:26.

  4. #34
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,382
    Вес репутации
    10

    По умолчанию Re: Тахометр на БСЗ

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

  5. #35
    Продвинутый
    Регистрация
    03.06.2008
    Возраст
    49
    Сообщений
    320
    Вес репутации
    333

    По умолчанию Re: Тахометр на БСЗ

    Спасибо! мне кажется, что поргрешность будет из-за большой дискретности!!!!!! (count*120)!!!!
    А вот если считать время между импульсами, то получается что , значение будет уменьшаться и совершенно не линейно!!!!! Как с этим быть?

  6. #36
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,382
    Вес репутации
    10

    По умолчанию Re: Тахометр на БСЗ

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

  7. #37
    Продвинутый
    Регистрация
    03.06.2008
    Возраст
    49
    Сообщений
    320
    Вес репутации
    333

    По умолчанию Re: Тахометр на БСЗ

    слушай эдуард, я вот еще хотел спросить, а mills() и miсros(), это один и тот же счетчик? тоесть его нельзя использовать в разных функциях, в разное время?
    и сколько таких счетчиков?
    Я беру данные с проводочка на тахометр!
    ЗАранние спасибо!

  8. #38
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,382
    Вес репутации
    10

    По умолчанию Re: Тахометр на БСЗ

    Функции mills() и miсros() используют Timer0 контроллера
    А зачем использовать обе функции вместе? достаточно использовать только miсros() 1000=miсros() это то же самое что 1=mills()
    Таймеров в Atmega328 всего 3шт. Timer0, Timer1, Timer2

  9. #39
    Продвинутый
    Регистрация
    03.06.2008
    Возраст
    49
    Сообщений
    320
    Вес репутации
    333

    По умолчанию Re: Тахометр на БСЗ

    Спасибо! -я думал их можно в разное время исползовать!
    Тоесть милс и микрос это одно и тоже, только разной длинны, и оно одно в Atmega328?
    А в МЕГА ардуине сколько ?

  10. #40
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,382
    Вес репутации
    10

    По умолчанию Re: Тахометр на БСЗ

    В меге 6 таймеров

Страница 4 из 6 ПерваяПервая 123456 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 2 (пользователей: 0 , гостей: 2)

Ваши права

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