Обикновен цифров филтър на микроконтролер
Много цифрови устройства използват ADC за преобразуване на аналогови сигнали. Аналоговите сигнали често съдържат нежелан високочестотен шум.
За „почистване“ на сигнала от този шум се използват аналогови RC нискочестотни филтри, които се инсталират след източника на сигнала. Този подход не винаги е идеален и практичен. Например, големите константи на времето изискват големи R и C стойности.
Като алтернатива можете да "почистите" шумния сигнал с цифровия еквивалент на аналогов RC нискочестотен филтър.
Всъщност програмата за този цифров филтър се състои само от два реда в C:
Dacc = Dacc + Din - DoutDout = Dacc/K
където Dout е изходната стойност на филтъра, Din е входната стойност на филтъра, K е постоянен коефициент, който се изчислява по формулата:
K = T x SPS
където T е времевата константа на филтъра, SPS е честотата на вземане на проби ADC.
Dacc и Dout трябва да запазят своите стойности след изпълнението на алгоритъма. Ако алгоритъмът е реализиран като функция, тогава тези променливи могат просто да бъдат направени статични.
За 8-битови входове алгоритъмът за цифров филтър в C код може да изглежда така:
За по-голяма яснота разгледайте реален пример за използване на този алгоритъм в микроконтролера AVR atmega16. Да кажем, че искаме да симулираме RC филтър с времева константа 0,001 s. Диаграмата е показана на фигурата по-долу.
R1 = 10 kΩ
C1 = 0,1 μF
Trc = R1 * C1 = 10000 Ohm * (0.1/1000000) Ф = 0.001 s
F = 1/(2 * Pi * R1 * C1) = 1/(6,28 * Trc) =
Тактовата честота на модула ADC в микроконтролерите AVR зависи от неговата тактова честота и вътрешния предскалер. Да приемем, че нашият микроконтролер е тактиран от вътрешен генератор с честота 8 MHz, а предусилвателят в модула ADC е зададен на 64. Тогава тактовата честота на модула ADC ще бъде: