|
Цифровой интегратор. Реализация на микроконтроллере., Как сделать интегратор в цифре и избежать насыщения ? |
|
|
|
Jun 19 2014, 13:09
|
Знающий
   
Группа: Свой
Сообщений: 869
Регистрация: 30-01-08
Из: СПб
Пользователь №: 34 595

|
Цитата(Petrovich @ Jun 19 2014, 14:13)  Уберите аналоговый интегратор, оцифруйте сигнал виброускорения. ... Строго говоря, это не совсем корректный совет. Как минимум, по входным и выходным динамическим диапазонам аналоговые и цифровые интеграторы могут отличаться достаточно сильно. Кроме того, временные и частотные характеристики могут отличаться тоже вполне ощутимо. Особливо, если выяснится, что сигма-дельта не подходит. В общем случае, надо делать оценочный баланс по шуму, временным и частотным характеристикам, а потом принимать решение. Но что верно, то верно. Если в системе есть ресурсы, и задача позволяет, то лучше всё переводить в цифру. Уровень гибкости и возможности цифровых и аналоговых решений просто несопоставимы.
|
|
|
|
|
Jun 24 2014, 12:55
|
Профессионал
    
Группа: Свой
Сообщений: 1 143
Регистрация: 22-04-08
Из: г. Екатеринбург
Пользователь №: 36 992

|
периодически, если это допустимо и возможно ставьте ваш объект в "0" координату- контролируйте конечным выключателем и т.п. и сбрасывайте оба интегратора в 0. иначе, как вам уже советовали, делайте не интегратор, а псевдоинтегратор - постепенно "разряжайте" его, если скорость накопления ошибки ниже скорости разряда и при этом скорость разряда много меньше скорости накопления минимального сигнала, то псевдоинтегратор будет давать неплохой результат. если измерять двойным интегрированием перемещение, (которое может быть в общем случае бесконечно), то надо однозначно определиться с диапазоном интегрирования-(перемещения) а в цифре или аналоге зависит от точности и грамотности построения того или другого. есть возможность - сделайте в аналоге 2 интегратора со сбросом и/или "разрядом"- не понравится - отключите второй (пустите сигнал в обход) и интегрируйте в цифре. Цитата(MSP430F @ Jun 17 2014, 19:59)  Диапазон частот устройства 0,5-320 Гц. Частоту дискретизации сделаем 820 Гц. еще подумайте насколько круто ограничен диапазон за 320 Гц и корректно ли будет работать ваш сигма дельта при таких соотношениях частот дискретизации и сигнала.
|
|
|
|
|
Jun 24 2014, 19:24
|

Участник

Группа: Участник
Сообщений: 44
Регистрация: 6-07-13
Из: Минск
Пользователь №: 77 417

|
Вставлю и я пять копеек. Закидывать значения АЦП в кольцевой буфер такого размера, чтобы получилось правильное время интеграции. Затем все складывать и делить на размер буфера. Если правильно выбрать тип данных, то насыщаться не будет. Т.к. точки, которые были раньше чем длина буфера больше не входят в сумму.
Это будет прямоугольное окно.
Если перед усреднением умножать на маску размера буфера, скажем гауссову, то будет гауссово окно.
--------------------
Мысли и действия должны чередоваться как вдох и выдох.
|
|
|
|
|
Jun 25 2014, 17:24
|
Частый гость
 
Группа: Участник
Сообщений: 85
Регистрация: 20-05-13
Пользователь №: 76 911

|
Цитата(Scientificer @ Jun 24 2014, 23:24)  Вставлю и я пять копеек. Закидывать значения АЦП в кольцевой буфер такого размера, чтобы получилось правильное время интеграции. Затем все складывать и делить на размер буфера. Если правильно выбрать тип данных, то насыщаться не будет. Т.к. точки, которые были раньше чем длина буфера больше не входят в сумму.
Это будет прямоугольное окно.
Если перед усреднением умножать на маску размера буфера, скажем гауссову, то будет гауссово окно. Спасибо, очень оригинально! Если все считать в целых числах, то вместо сложения всех элементов буфера можно выполнять только две операции - сложение нового элемента и вычитание самого старого. Этим можно очень сэкономить на вычислениях.
Сообщение отредактировал MSP430F - Jun 25 2014, 17:24
|
|
|
|
|
Jun 25 2014, 18:19
|
Участник

Группа: Участник
Сообщений: 67
Регистрация: 3-02-14
Из: Интернет
Пользователь №: 80 322

|
Цитата(MSP430F @ Jun 19 2014, 14:04)  Вот такой еще вопрос. Пишут, что одним из оптимальных методом интегрирования является метод трапеций: Yn+1 = Yn + 1/2(Xn+1 + Xn). Но в чем тут смысл ? В следующей итерации оставшаяся половина от Xn+1 также будет просуммирована. Тогда в чем разница от метода прямоугольников, чтобы не написать просто Yn+1 = Yn + Xn+1 ?
Или все дело в частотах и метод трапеций начинает работать при частотах входного сигнала, сопоставимых с частотой Найквиста ? Методы имеют одинаковый порядок ошибки: ДоказательствоНо 1/2 как правило выполняется с округлением или отбрасыванием последнего бита. Поэтому в методе трапеций ещё присутствует неявный нч фильтр. Цитата(MSP430F @ Jun 17 2014, 17:59)  Всем доброго времени суток!
С ходу задача кажется не сложной - надо просто оцифрованные значения на каждом шаге умножать на некий коэффициент и прибавлять к переменной - аккумулятору, а с него уже подавать на ЦАП. Но как избежать возможного насыщения цифрового интегратора ? Надо ли обязательно использовать float для вычислений или достаточно будет int (32 бит) ?
Буду признателен за любые подсказки. Float тоже имеет насыщение. Причем сопоставимое с тем же int32. Если числа типа float при сложении имеют разный порядок, то они будут складываться с ошибками или во все не складываться.
|
|
|
|
|
Jun 25 2014, 21:03
|

Участник

Группа: Участник
Сообщений: 44
Регистрация: 6-07-13
Из: Минск
Пользователь №: 77 417

|
Цитата(MSP430F @ Jun 25 2014, 20:24)  Если все считать в целых числах, то вместо сложения всех элементов буфера можно выполнять только две операции - сложение нового элемента и вычитание самого старого. Этим можно очень сэкономить на вычислениях. Как же я сам не додумался! Я в своей задаче каждый раз заново считаю.
Сообщение отредактировал Scientificer - Jun 25 2014, 21:05
--------------------
Мысли и действия должны чередоваться как вдох и выдох.
|
|
|
|
|
Jun 26 2014, 10:25
|
Частый гость
 
Группа: Участник
Сообщений: 85
Регистрация: 20-05-13
Пользователь №: 76 911

|
Цитата(shf_05 @ Jun 26 2014, 09:17)  аа понял, дак это не интегратор получается, а что-то вроде CIC фильтра или скользящего среднего. Ну мне именно скользящее среднее и предложили использовать в качестве интегратора... Я просто предложил экономичный алгоритм его расчета для целых чисел. Вы считаете, что скользящее среднее и интегратор сильно разные вещи ?
Сообщение отредактировал MSP430F - Jun 26 2014, 10:29
|
|
|
|
|
Jun 26 2014, 10:40
|
ʕʘ̅͜ʘ̅ʔ
    
Группа: Свой
Сообщений: 1 008
Регистрация: 3-05-05
Пользователь №: 4 691

|
Сначала решите простую задачу: Вы сели в автомобиль и поехали. Из приборов у вас только спидометр и секундомер. Как определить пройденный путь по истечении времени  ? В соответствии с курсом средней школы: =\int_{0}^{T}{v(t)dt}<br />) Это если вы едете в чистом поле. Понятно, что чем дольше вы так едете, тем большая абсолютная ошибка накопится из-за неидеальности ваших средств измерения. Если же на вашем маршруте встречаются точки, расстояние до которых вам точно известно, то вы, проезжая их, обнуляете ваш интегратор, начинаете интегрировать уже от этой базовой точки, а при дальнейших расчетах учитываете известное расстояние до базовой точки. Именно эту идею вам предложил shf_05 - калиброваться (сбрасывать интегратор или интеграторы) в опорных точках, в которых стоят концевые выключатели. К скользящему среднему это не имеет отношения. У вас примерно та же ситуация, только в случае с акселерометром вместо спидометра будет 2 последоваетльных интегратора. Цитата(MSP430F @ Jun 26 2014, 11:25)  Ну мне именно скользящее среднее и предложили использовать в качестве интегратора... Я просто предложил экономичный алгоритм его расчета для целых чисел. Вы считаете, что скользящее среднее и интегратор сильно разные вещи ?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|