Easyelectronics.ru

Электроника для всех
Текущее время: 19 июн 2018, 23:18

Часовой пояс: UTC + 5 часов



    • JLCPCB - Платы прототипов всего за 2$ c бесплатной доставкой (при первом заказе)
    • 10 PCBs за $2 для 2 слоев, $15 для 4 слойной, $74 для 6 слойной платы.
    • Крупнейший китайский производитель прототипных плат. 290000+ клиентов & 8000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин радиодеталей.

Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Стабилизация измеренного значения с АЦП
СообщениеДобавлено: 15 янв 2018, 16:19 
Только пришел

Зарегистрирован: 30 окт 2017, 18:12
Сообщения: 18
Добрый день, дорогие друзья!

Столкнулся с тривиальной, на первый взгляд, задачей. Есть обычный трехвыводной потенциометр. Две крайние точки подсоединены к питанию и земле, средняя на вход АЦП (через RC цепь).

Контроллер через каждый определенный интервал времени (порядка 1мс) запускает измерение АЦП, по окончанию входит в обработчик прерывания АЦП и делает арифметические преобразования с измеренной величиной и выводит ее на экран 1602. Проблема в следующем. Так как наш мир не идеален, АЦП каждый раз измеряет разные значения, короче говоря болтанка в младших разрядах: сейчас пришел код 524, в следующем 525, потом обратно 524 и т.д. Следовательно в младшем разряде на экране происходит каша.

Что я пытался применить.
1. После измерения сразу наложить маску, которая отсечет младшие разряды:
adc_data & 0b1111111100 - вообще не помогло
2. Применил интегрирование - создал кольцевой буфер, в который помещал друг за другом измеренные величины и брал
из буфера среднюю величину - помогло, но болтанка на некоторых положениях ползунка все равно проявляется.

Какие могут быть программные решения стабилизации измеренного значения?
Спасибо!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Стабилизация измеренного значение с АЦП
СообщениеДобавлено: 15 янв 2018, 16:31 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 4475
Где-то определить:
uint32_t a;

Цикл ввода данных:
if (a == 0) {a=ADC->DR <<8;}
else {a = a - (a>>8) + ADC->DR;}

Использование результатов:
plot(a>>8);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Стабилизация измеренного значение с АЦП
СообщениеДобавлено: 15 янв 2018, 16:37 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2439
Откуда: Санкт-Петербург
Обновлять значение только после того, как оно изменится достаточно сильно.
Ну и чтобы точное на экране было - 2-5 раз в секунду изменять, независимо от того, насколько изменилось.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Стабилизация измеренного значение с АЦП
СообщениеДобавлено: 15 янв 2018, 18:27 
Старожил

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 2438
Откуда: КЧР, поселок Нижний Архыз
Простейшая медианная фильтрация поможет значительно лучше избавиться от шума!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Стабилизация измеренного значение с АЦП
СообщениеДобавлено: 26 янв 2018, 13:50 
Только пришел

Зарегистрирован: 18 ноя 2015, 11:20
Сообщения: 5
Если еще актуально, могу посоветовать алгоритм "скользящего среднего"

Здесь все очень подробно описано:
https://druid.su/rubrik-stm32_program-39.html

Здесь можно взять пример с готовым модулем:
https://yadi.sk/d/gJn6jiDAoCyZ4

P.S. Это реально работает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Стабилизация измеренного значение с АЦП
СообщениеДобавлено: 26 янв 2018, 13:52 
Старожил

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 2438
Откуда: КЧР, поселок Нижний Архыз
"Уроки по программированию STM32F4" на калокубе. Жесть!


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB