Доброго времени суток уважаемые Коты!
В программировании не силен так что прошу сильно не пинать)
У меня есть следующая задача- нужно мерять среднее значение переменного напряжения.теоретически я понимаю как это должно быть:
1. Получить через равные промежутки N отсчетов АЦП в течение одного периода измеряемого напряжения.
2. Возвести результаты в квадрат и просуммировать.
3. Извлечь квадратный корень из полученной суммы.
4. Умножить полученный результат на масштабирующий коэффициент и вывести результат на индикатор.
А практически долбусь уже второй день ниче не получается.Прошу Вашей помощи
Как померять переменное напряжение
Как померять переменное напряжение
- Вложения
-
- релле напряжения.c
- исходник
- (4.1 КБ) 369 скачиваний
- Реклама
- wws63
- Сверлит текстолит когтями
- Сообщения: 1231
- Зарегистрирован: Вс май 21, 2006 16:07:59
- Откуда: Алтай
Re: Как померять переменное напряжение
А вы не пробывали использовать схему прецизионного выпрямителя на ОУ, с последующей подачей сигнала на АЦП МК.
ИтМХО только так, а всё программные уловки - пустая трата времени
ИтМХО только так, а всё программные уловки - пустая трата времени
-
borys
- Держит паяльник хвостом
- Сообщения: 927
- Зарегистрирован: Вт сен 07, 2010 19:27:48
- Откуда: Ташкент
Re: Как померять переменное напряжение
Обычно именно так и делается в промышленных приборах.
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: Как померять переменное напряжение
1 int i; должна быть статик или volatile, кстати, где обнуление суммы результата измерения long int r, когда i=0 ?
2. Зачем там массив, так и не понял.
3. все долгоиграющие процессы выполнять в основном цикле, в прерывании ставится флаг готовности, который в этом же цикле и анализируется. У Вас же в основном цикле идет вывод непонятно чего. Вывод должен идти после того, как все посчитано.
4. Выражение long int r; с точки зрения си правильное, но зачем там знак, у Вас же только положительные числа.
Просто пишите unsigned long r , кстати, оно тоже volatile
http://www.pic24.ru/doku.php/osa/articl ... r_chainiks
5. Приведение типов - "m+=ADCW*ADCW;//возводим в квадрат и записуем в массив"
Посмотрите отладчиком, что будет, если 1000 умножить на 1000 - удивитесь наверняка. Может, и нет - я плохо знаю кодевижин.
Пробуйте приводить числа к разрядности результата -(unsigned long)ADCW*(unsigned long)ADCW
6. Где извлечение квадратного корня, деление на количество градаций и умножение на младший разряд, тоже не увидел.
7. Данный вариант подходит для измерения выпрямленного переменного напряжения, для не выпрямленного чуть по-другому.
8.Слово реле пишется с одним л , простите за занудство.
Это что в глаза бросилось, детально не анализировал.
--------------------------------------------------------------------------------------------
С праздником 23 февраля, мужики !!!!
--------------------------------------------------------------------------------------------
2. Зачем там массив, так и не понял.
3. все долгоиграющие процессы выполнять в основном цикле, в прерывании ставится флаг готовности, который в этом же цикле и анализируется. У Вас же в основном цикле идет вывод непонятно чего. Вывод должен идти после того, как все посчитано.
4. Выражение long int r; с точки зрения си правильное, но зачем там знак, у Вас же только положительные числа.
Просто пишите unsigned long r , кстати, оно тоже volatile
http://www.pic24.ru/doku.php/osa/articl ... r_chainiks
5. Приведение типов - "m+=ADCW*ADCW;//возводим в квадрат и записуем в массив"
Посмотрите отладчиком, что будет, если 1000 умножить на 1000 - удивитесь наверняка. Может, и нет - я плохо знаю кодевижин.
6. Где извлечение квадратного корня, деление на количество градаций и умножение на младший разряд, тоже не увидел.
7. Данный вариант подходит для измерения выпрямленного переменного напряжения, для не выпрямленного чуть по-другому.
8.Слово реле пишется с одним л , простите за занудство.
Это что в глаза бросилось, детально не анализировал.
--------------------------------------------------------------------------------------------
С праздником 23 февраля, мужики !!!!
--------------------------------------------------------------------------------------------
Re: Как померять переменное напряжение
А именно : вычисляется среднее арифметическое N отсчетов, и в квадрат возводится разность Ui - Uср. Тут уж массив как бы и нужен. Или разве что использовать среднее от предыдущих N отсчетов.urry писал(а): 7. Данный вариант подходит для измерения выпрямленного переменного напряжения, для не выпрямленного чуть по-другому.
- Реклама
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Как померять переменное напряжение
И еще важно взять целое число периодов, иначе результат будет значительно "прыгать" либо выборку придется выполнять на огромных интервалах.
И кстати, это не СРЕДНЕЕ значение, а СРЕДНЕКВАДРАТИЧНОЕ. Все же, понятия сильно отличаются.
Среднее значение синусоидального переменного напряжения равно нулю, среднеквадратичное - корень из двух помноженный на амплитуду.
Кстати, если сигнал строгой синусоидальной формы, достаточно измерять амплитуду(ищем максимальное значение среди выборок на интервале равном 2-м периодам исследуемого сигнала) и умножить на корень из двух...
И кстати, это не СРЕДНЕЕ значение, а СРЕДНЕКВАДРАТИЧНОЕ. Все же, понятия сильно отличаются.
Среднее значение синусоидального переменного напряжения равно нулю, среднеквадратичное - корень из двух помноженный на амплитуду.
Кстати, если сигнал строгой синусоидальной формы, достаточно измерять амплитуду(ищем максимальное значение среди выборок на интервале равном 2-м периодам исследуемого сигнала) и умножить на корень из двух...
Re: Как померять переменное напряжение
Поделить..Alexeyslav писал(а):достаточно измерять амплитуду.... и умножить на корень из двух..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: Как померять переменное напряжение
в эпоху импульсных БП о красивой синусоиде можно забыть.
Ну имхо, конечно.
2 ТС
чуток поправил Ваш код...
Оппозиция должна быть конструктивной
Ну имхо, конечно.
2 ТС
чуток поправил Ваш код...
Оппозиция должна быть конструктивной
- Вложения
-
- rele.zip
- (177.19 КБ) 159 скачиваний
Re: Как померять переменное напряжение
Огромное спасибо всем - за помощь, узнал много интересного.Отдельная благодарность urry
за подправленный код
,сейчас буду разбираться.
за подправленный код


