1

Тема: 5.2 nano как вычислить среднее значение с канала АЦП?

Добрый день! Задача такая:

5.2 nano, 16 канал сконфигурирован как АЦП. Идет считывание данных в диапазоне 0 - 4095 их обработка и трансляция на экран в виде числа "1,23". С этим сложностей нет, читаю, перевожу в вольты, потом текст, на экран и т.д. Но 16 канал считывается с высокой частотой (1 раз каждые 10мс?) и при выводе на экран с такой же частотой, после запятой по сути получаются трудно различимые, быстро-меняющиеся цифры. Если снижать частоту вывода, то после запятой цифры получаются достаточно хаотичны. Хочется сделать что-то типа сглаживания, либо среднее...

Можно ли получить среднее за определенный период или количество считываний? Т.е. к примеру в течении 250 мс значения канала считываются, вычисляется среднее и уже оно передается на экран. Или суммируется 25 измерений, вычисляется среднее и вывод... Набросал схему, но что-то не так... Сложновато и работает криво... Может я не верно работаю с циклами программы/временем...

2

Re: 5.2 nano как вычислить среднее значение с канала АЦП?

Требуется именно среднее значение за какой-то период (например 250мс)? Может подойдет вариант запоминать в D-триггер занчение АЦП с определенной периодичностью (например раз в 250мс) и его выводить на экран?

3

Re: 5.2 nano как вычислить среднее значение с канала АЦП?

Да, лучше среднее. Хочется сделать аналог сглаживания.

Допустим имеем 10 (20, 100, не важно) измерений за период: 150-155-153-158-170-163-152-154-151-156, среднее 156,2

а в случае с D триггером за период мы получим одно значение, оно может быть и 170 и 150... Так?

4

Re: 5.2 nano как вычислить среднее значение с канала АЦП?

EVK пишет:

...оно может быть и 170 и 150... Так?

В этом случае да, как-то так.
Какие значения (max/min) усредняются? Сколько измерений (количество) предполагается усреднять?
Какой алгоритм был применен (фрагмент диаграммы)? Что именно не получилось?

5

Re: 5.2 nano как вычислить среднее значение с канала АЦП?

Денис, CANNY пишет:
EVK пишет:

...оно может быть и 170 и 150... Так?

В этом случае да, как-то так.
Какие значения (max/min) усредняются? Сколько измерений (количество) предполагается усреднять?
Какой алгоритм был применен (фрагмент диаграммы)? Что именно не получилось?

К АЦП подключен датчик, у него диапазон 0 - 4,80 вольта. Я хотел сначала сделать нахождение среднего из 20 поступивших значений. Но это, как мне показалось слишком сложно реализуемо при пиковых значениях датчика (4095*20 > 65535). Поэтому ограничился нахождением среднего из 15 значений. В принципе схема работает, но я вижу некоторое занижение измеряемых значений, процентов на 10... И мне показалось сложно как-то нарисовал)

Идея схемы: Находим среднее и далее передаем на блок "отображение MAP", где идет перевод значений в вольты

Вложений в сообщении

Иконка вложения среднее.cfd 2.59 кб, скачивался 10 раз, последний раз 2019-05-15 

6

Re: 5.2 nano как вычислить среднее значение с канала АЦП?

Мне кажется, что лучше сразу конвертировать в вольты и потом усреднять их.

Вложений в сообщении

Иконка вложения среднее1.cfd 5.22 кб, скачивался 16 раз, последний раз 2019-05-15 

7 (15-05-2019 12:30:29 отредактировано EVK)

Re: 5.2 nano как вычислить среднее значение с канала АЦП?

Денис, CANNY пишет:

Мне кажется, что лучше сразу конвертировать в вольты и потом усреднять их.

Спасибо, Денис! Ваш вариант интереснее, а я видимо не совсем верно понимаю циклы работы отладчика. Цикл выполнения диаграммы разве фиксирован, он же вроде бы зависит от сложности диаграммы, загрузки вводов/выводов? 20 циклов это сколько по времени?

8

Re: 5.2 nano как вычислить среднее значение с канала АЦП?

Циклы в отладчике не симулируют реальные циклы выполнения диаграммы, их длительность равна установленному в поле, рядом с кнопкой запуска симуляции, значению.
Да, цикл выполнения диаграммы в контроллере зависит от размера диаграммы и может быть от 1 до 10-40 миллисекунд.
Представленный мной пример можно модифицировать для суммирования значений АЦП с каким-то периодом, отличным от длительности цикла выполнения диаграммы, например с генератором ШИМ, с периодом 10мс, тогда осреднение 20 циклов будет выполняться в течении 200мс.
Можно попробовать применить скользящее среднее, т.е. фиксировать, например, 10 последних значений и при получении следующего, вдвигать его в эту десятку, выбрасывая самое ранее значение и производить усреднение новых 10 значений, но это решение может получиться довольно громоздким. Однако это позволит обновлять значение напряжения при получении каждого нового значения (например раз в 10мс), а не раз в 20 циклов (т.е. например раз в 200мс).

9

Re: 5.2 nano как вычислить среднее значение с канала АЦП?

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