#1 Re: Програмування Arduino » Помогите разобраться с кодом по прерыванию » 2016-04-14 11:29:01

NoName пише:

что то похожее есть, посмотрите на этот код
http://www.avdweb.nl/arduino/libraries/ … unter.html

вот вариант для варианта пошустрее )
https://www.pjrc.com/teensy/td_libs_FreqCount.html



Спасибо большое, очень помогла инфа! Всех благ Вам и успехов! smile

#2 Re: Програмування Arduino » Помогите разобраться с кодом по прерыванию » 2016-04-12 16:22:35

NoName пише:

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

Экрана нету, пока необходимо выводить только в COM порт

#4 Re: Програмування Arduino » Помогите разобраться с кодом по прерыванию » 2016-04-12 09:43:32

NoName пише:

этот  пример некорректный
в основном цикле  отключение  прерываний,
посмотрите на
https://arduino-info.wikispaces.com/Timers-Arduino

наиболее простой вариант
2 прерывания на ваши датчики

таймер настроен на счет UP
при поступлении interrupts от датчика сохраняете текущее значения счетчика таймера
при переполнении таймера  в значение времени добавляете разницу от размерности счетчика и записанного значения счетчика при прерывании
при поступлении следующего прерывания к времени с учетом  переполнения если было )  добавляете время текущего значения счетчика
ну и признак какой то поставьте что пришел сигнал
надеюсь не запутал )
думаю что то подобное должно быть реализовано  примерах для IR пульта, попробуйте там поискать
и никаких отключений  прерываний  в рабочем цикле!
поищите что то должно быть
ключевые слова
Arduino Timer Interrupts
timer overflow interrupt
быстрый просмотр сети не дал готового решения, но уверен что что то похожее должно быть )


немного тяжело все сразу понять, буду пытаться найты, спасибо!

#5 Re: Програмування Arduino » Помогите разобраться с кодом по прерыванию » 2016-04-12 09:40:26

vvr пише:

при таких оборотах вам и одного датчика за глаза хватит)))

Необходимо измерять частоту вращения на двух валах одновременно

#6 Програмування Arduino » Помогите разобраться с кодом по прерыванию » 2016-04-11 15:56:02

plaztik
відповідей: 13

Здравствуйте, помогите пожалуйста с кодом для обработки датчика Холла(измеряю частоту вращения вала, в диапазоне 5-40 тыс.об./мин.). Есть Ардуино Уно, необходимо преобразовать сигнал с двух датчиков Холла, и есть вот такой пример кода:

#include <MsTimer2.h>  //библиотека таймера
unsigned int state=0;
unsigned int rmp=0;
unsigned int time=0;
unsigned long timpause=1000; // 1c

void flash() //обработка прерывания таймера 
{
detachInterrupt(0); //остановить прерывания 2
Serial.print("rmp:");
Serial.println(rmp*60);
rmp=0;
attachInterrupt(0, blink, RISING ); //вкл 2 прерывания
}

void setup() {
Serial.begin(9600);
attachInterrupt(0, blink, RISING ); //прерывания на 2м порту - с датчика холла
MsTimer2::set(1000, flash); // 1 c
MsTimer2::start(); //включаем прерывания по таймеру
}
void loop() { }
void blink()  //прерывания с датчика холла
{
++rmp;  //увеличиваем счетчик на 1
}

Необходимо подогнать его под 2 датчика Холла, по всякому уже пробовал менять код, но ничего не получилось, прошу помощи, очень нужно.
Еще есть пример, который работал на DUE, но на 16 мГц платах этот скетч измеряет частоту вращения только до частоты 545 Гц (32640 тыс.об/мин), потом выдает минусовые значения.

volatile int rpmcount = 0;
int rpm = 0;
unsigned long lastmillis = 0;
float rpm2 = 0;
int rrr = 1;
void setup(){
Serial.begin(9600);
attachInterrupt(0, rpm_fan, FALLING);//interrupt cero (0) is on pin two(2).
}
void loop(){
if (millis() - lastmillis == 1000){ /*Uptade every one second, this will be equal to reading frecuency (Hz).*/
detachInterrupt(0); //Disable interrupt when calculating
rpm = rpmcount * 60;
rpm2 = rpm *(rrr);/* Convert frecuency to RPM, note: this works for one interruption per full rotation. For two interrups per full rotation use rpmcount * 30.*/
Serial.print("RPM =\t"); //print the word "RPM" and tab.
Serial.print(rpm); // print the rpm value.
Serial.print("\t Hz=\t"); //print the word "Hz".
Serial.println(rpmcount); /*print revolutions per second or Hz. And print new line or enter.*/
rpmcount = 0; // Restart the RPM counter
lastmillis = millis(); // Uptade lasmillis
attachInterrupt(0, rpm_fan, FALLING); //enable interrupt
}
}
void rpm_fan(){ /* this code will be executed every time the interrupt 0 (pin2) gets low.*/
rpmcount++;
}

Помогите пожалуйста, буду очень благодарен smile

#7 Re: Програмування Arduino » ЦАП arduino due » 2015-09-22 14:30:59

Частота вращения 7-45 тыс.об/мин, спасибо буду искать варианты решения.

#8 Re: Програмування Arduino » ЦАП arduino due » 2015-09-21 09:01:20

Спасибо за ответ, проблема в том что я не могу правильно считать импульсы с  датчиков Холла (4 шт) через LabView, конторы подключенны на цифровых входах, Labview просто не успевает их считать.Думал может возможно преобразовать этот сигнал в аналог? Извините если задаю глупые вопросы, первый раз с этим работаю smile

#9 Програмування Arduino » ЦАП arduino due » 2015-09-18 10:41:50

plaztik
відповідей: 5

Добрый день
Подскажите пожалуйста как преобразовать сигнал с цифрового входа на аналоговых выход? Спасибо!

Підвал форуму