Как померять переменное напряжение

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
elf
Открыл глаза
Сообщения: 60
Зарегистрирован: Чт окт 29, 2009 23:22:03

Как померять переменное напряжение

Сообщение elf »

Доброго времени суток уважаемые Коты!
В программировании не силен так что прошу сильно не пинать)
У меня есть следующая задача- нужно мерять среднее значение переменного напряжения.теоретически я понимаю как это должно быть:
1. Получить через равные промежутки N отсчетов АЦП в течение одного периода измеряемого напряжения.
2. Возвести результаты в квадрат и просуммировать.
3. Извлечь квадратный корень из полученной суммы.
4. Умножить полученный результат на масштабирующий коэффициент и вывести результат на индикатор.

А практически долбусь уже второй день ниче не получается.Прошу Вашей помощи
Вложения
релле напряжения.c
исходник
(4.1 КБ) 369 скачиваний
Реклама
Аватара пользователя
wws63
Сверлит текстолит когтями
Сообщения: 1231
Зарегистрирован: Вс май 21, 2006 16:07:59
Откуда: Алтай

Re: Как померять переменное напряжение

Сообщение wws63 »

А вы не пробывали использовать схему прецизионного выпрямителя на ОУ, с последующей подачей сигнала на АЦП МК.
ИтМХО только так, а всё программные уловки - пустая трата времени :))
Реклама
borys
Держит паяльник хвостом
Сообщения: 927
Зарегистрирован: Вт сен 07, 2010 19:27:48
Откуда: Ташкент

Re: Как померять переменное напряжение

Сообщение borys »

Обычно именно так и делается в промышленных приборах.
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: Как померять переменное напряжение

Сообщение urry »

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 февраля, мужики !!!!

--------------------------------------------------------------------------------------------
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6312
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Как померять переменное напряжение

Сообщение Jack_A »

urry писал(а): 7. Данный вариант подходит для измерения выпрямленного переменного напряжения, для не выпрямленного чуть по-другому.
А именно : вычисляется среднее арифметическое N отсчетов, и в квадрат возводится разность Ui - Uср. Тут уж массив как бы и нужен. Или разве что использовать среднее от предыдущих N отсчетов.
Реклама
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Как померять переменное напряжение

Сообщение Alexeyslav »

И еще важно взять целое число периодов, иначе результат будет значительно "прыгать" либо выборку придется выполнять на огромных интервалах.

И кстати, это не СРЕДНЕЕ значение, а СРЕДНЕКВАДРАТИЧНОЕ. Все же, понятия сильно отличаются.
Среднее значение синусоидального переменного напряжения равно нулю, среднеквадратичное - корень из двух помноженный на амплитуду.

Кстати, если сигнал строгой синусоидальной формы, достаточно измерять амплитуду(ищем максимальное значение среди выборок на интервале равном 2-м периодам исследуемого сигнала) и умножить на корень из двух...
Реклама
Аватара пользователя
МитяРа
Модератор
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Re: Как померять переменное напряжение

Сообщение МитяРа »

Alexeyslav писал(а):достаточно измерять амплитуду.... и умножить на корень из двух..
Поделить.. :tea:
[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: Как померять переменное напряжение

Сообщение urry »

в эпоху импульсных БП о красивой синусоиде можно забыть.
Ну имхо, конечно.
2 ТС
чуток поправил Ваш код...
Оппозиция должна быть конструктивной :)
Вложения
rele.zip
(177.19 КБ) 159 скачиваний
elf
Открыл глаза
Сообщения: 60
Зарегистрирован: Чт окт 29, 2009 23:22:03

Re: Как померять переменное напряжение

Сообщение elf »

Огромное спасибо всем - за помощь, узнал много интересного.Отдельная благодарность urry
за подправленный код :)) ,сейчас буду разбираться.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»