как убрать скачки замеров времени между импульсами
- Войдите на сайт для отправки комментариев
Чт, 14/02/2019 - 00:59

Нужно снимать данные с расходометра води, расходомер генерирует прямоугольные импульсы.
делаю замеры времени между импульсами, чтобы считать сколько выливает води в реальном времени.
Но замеры почему-то очень скачут. И это очень влияет на конечный результат. (Он очень скачет)
Не знаю, как решить данную проблему.
Может как-то усреднять, или есть более точны способ измерения.
Прошу помочь, может кто-то делал подобное
А где рукописи?
И наверное чтобы не пропускать импольсы их можно на прерывания завести!?
#define FLOWSENSORPIN 27 volatile uint8_t lastflowpinstate; volatile uint32_t pulses_meter = 0; float us_puls_flow_new = 0; volatile uint32_t lastflowratetimer = 0; SIGNAL(TIMER0_COMPA_vect) { uint8_t x = digitalRead(FLOWSENSORPIN); if (x == HIGH && x != lastflowpinstate) { pulses_meter++; us_puls_flow_new = micros() - lastflowratetimer; lastflowratetimer = micros(); } lastflowpinstate = x; if (micros() - lastflowratetimer >= 3500000) { us_puls_flow_new = 0; } } void useInterrupt(boolean v) { if (v) { // Timer0 is already used for millis() - we'll just interrupt somewhere // in the middle and call the "Compare A" function above OCR0A = 0xAF; TIMSK0 |= _BV(OCIE0A); } else { // do not call the interrupt function COMPA anymore TIMSK0 &= ~_BV(OCIE0A); } } void setup() { Serial.begin(9600); pinMode(FLOWSENSORPIN, INPUT); digitalWrite(FLOWSENSORPIN, HIGH); lastflowpinstate = digitalRead(FLOWSENSORPIN); useInterrupt(true); } void loop() { Serial.println(us_puls_flow_new); }Насколько я п\онимаю, для измерения расхода надо считать не длительность между импульсами, а количество импульсов в минуту (или другой интервал)
Расход, очевидно пропорционален интегралу этой кривой. Так проинтегрровать её и читать через АЦП. Нет?
Нужно снимать данные с расходометра води, расходомер генерирует прямоугольные импульсы. делаю замеры времени между импульсами, чтобы считать сколько выливает води в реальном времени. Но замеры почему-то очень скачут. И это очень влияет на конечный результат. (Он очень скачет) Не знаю, как решить данную проблему. Может как-то усреднять, или есть более точны способ измерения. Прошу помочь, может кто-то делал подобное
Уважаемый, почитайте документацию на расходомер. Обычно с этого начинают конструирование. И, скорее всего, как отметили в #3, вода считается по количеству импульсов (что конструктивно логично т.к. счетчики обычно механические), а не таймингом.
Почему
floatus_puls_flow_new?Скорость сериала сделайте 115200 и посмотрите что получится.