Easyelectronics.ru

Электроника для всех
Текущее время: 24 сен 2018, 05:13

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



    • JLCPCB - Прототипы 10 PCBs всего за 2$ (100*100mm, 2-layer)
    • Как мы делаем платы, смотрите на YouTube
    • Крупнейшая китайская фабрика прототипов. 300000+ заказчиков и 10000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин комплектующих.

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

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

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

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

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

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


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

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 4821
Где-то определить:
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
Сообщения: 2507
Откуда: Санкт-Петербург
Обновлять значение только после того, как оно изменится достаточно сильно.
Ну и чтобы точное на экране было - 2-5 раз в секунду изменять, независимо от того, насколько изменилось.


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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: 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
Сообщения: 2706
Откуда: КЧР, поселок Нижний Архыз
"Уроки по программированию STM32F4" на калокубе. Жесть!


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

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


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

Сейчас этот форум просматривают: Google [Bot]


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

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

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