Як почистити шумний сигнал?


19

Я управляю 4-контактним вентилятором PWM ПК від PIC16F684 зі швидкістю обертання вентилятора, керованою від зчитування АЦП датчика близькості. Це все працює добре.

Спочатку я не планував використовувати висновок тахометра від вентилятора, але, як це є в наявності, я відстежував його з моїм "простором", щоб побачити, що працює моє відображення між близькістю і швидкістю вентилятора.

Тепер, що я помітив, це те, що коли ШІМ працює на 100% вентилятора, таховий сигнал (який є відкритим стоком, витягнутим через резистор 10K) є приємним і чистим:

tachclean

Однак, коли я бігаю менше ніж на 100%, це шумно:

тачдірти

Збільшення масштабу цього шуму:

tachdirtyzoom

Я здогадуюсь, що на нього впливає сигнал ШІМ, але я хотів би зрозуміти, чому і як, щоб я міг прибирати його в разі потреби в майбутньому. Дійсно, мене цікавить, що вам слід робити, коли ви бачите подібний шум, як ви знаходите причину і як ви її «усуваєте». Область вдається запустити ок, тому мені цікаво, чи я просто подаю її на зовнішній штифт переривання на ПОС (RA2), який є входом Шмітта тригера з рівнями CMOS, то я не буду "бачити" шум, і я може, наприклад, відлучити чистий сигнал з іншого штифта, щоб згасати світлодіод або щось подібне.

Тож чи може хтось загалом пояснити, як рухатися до розпізнавання та виправлення шумних сигналів? Або якщо це занадто широко, можливо, саме ця проблема? Крім того, якщо в моїй схемі щось не так, було б непогано знати. На схемі нижче сигнал, який я відображаю, - це вхід TACH зліва від схеми:

схематичний

ОНОВЛЕННЯ
Після корисних пропозицій як від @MichaelKaras, так і від @techydude, я виключив Q2 як джерело будь-якої проблеми, видаливши його з ланцюга повністю і заземлив вентилятор безпосередньо. Немає істотного впливу на шум.

Тоді я зашифрував зовнішнє переривання на RA2, щоб повторити "очищений" сигнал із запасного штифта (в цьому випадку RA1), який дуже допоміг, але все ще мерехтів через помилкові переривання. (Тож я встановив би переривання на лову зростаючої кромки, а потім перейшов на спадний край при спрацьовуванні і навпаки, встановивши / скинувши RA1 відповідно).

Але, додавши також конденсатор 100nF через R3 (як частина пропозиції @ techydude), я отримую набагато стабільніший вихід. На скріншоті нижче - сигнал TACH після очищення через вхід і повторний вихід на RA1 на Schmitt RA2:

tachclean


1
Чому у вас є потреба в IRF510 FET для перемикання живлення на вентилятор? Приведення ШІМ до 0% робочого циклу повинно вимкнути вентилятор або до його мінімальної робочої швидкості.
Майкл Карась

1
@MichaelKaras Так, вентилятор має мінімальну швидкість, тому він не зупиняється, якщо ви не відключите живлення. За конструкцією він ігнорує будь-яку ШІМ менше ~ 10% і працює при 400RPM. Тому я використовую цей БНТ, щоб повністю його вбити, коли це необхідно.
Роджер Роуленд

2
Я бачу. Але це означає, що коли ви маєте намір перезапустити вентилятор зі стану вимкнення + 12 В, можливо, вам доведеться запустити його з більш високим, ніж мінімальний робочий цикл ШІМ. Я випробував це з кількома типами вентиляторів, тому що їм потрібно швидко почати, щоб вони надійно запускалися при включенні живлення. Алгоритми управління вентиляторами на багатьох комп’ютерах типу сервера будуть працювати при 100% робочому циклі протягом перших 10 - 20 секунд при запуску, щоб гарантувати, що вентилятори запускаються належним чином.
Майкл Карась

2
Практично у всіх вентиляторних підсистемах, над якими я працював, у мене був сигнал TACH, прив'язаний до мережі резисторів, який зміщує сигнал від рейки + 12 В, а потім додатково має пару резисторів-розділювачів, які приводять сигнал TACH до + 5 або + 3,3 В рівнів, необхідних для системи моніторингу. Невеликий ковпачок попереду нижнього резистора дільника може допомогти відфільтрувати будь-які сплески шуму на сигналі TACH.
Майкл Карась

1
Основне використання використання рейкової стрілки + 12 В для зміщення сигналу TACH полягає в тому, що вона забезпечує ізоляцію між + 12 В та сигналами цифрового напруги низького рівня системи управління. Три міркування: 1) Провід вентилятора може зачепитися між деталями шасі, а можливі шорти між чотирма проводами. 2) Вентилятори в запиленому середовищі можуть призвести до накопичення статичного заряду, а резистори можуть допомогти утримати будь-який розряд ESD від входу детектора TACH. 3) Постійна часу RC дільника з розбіжною ємністю або з доданим ковпачком виступає як фільтр для сигналу TACH.
Майкл Карась

Відповіді:


9

Про вашу схематичність:

Все здається прекрасним, ви можете збільшити R2 до 10k або навіть 100k, ємність MOST настільки мала, Вентилятор матиме набагато більше інерції обертання, ніж затримка вимкнення MOST, ймовірно, навіть з 1М. Таким чином, розташування ваших 100R не має значення, і при цьому ви не витрачаєте жодних маків. Якщо ви ніколи не затримуєте de uC в режимі скидання, це технічно навіть не потрібно взагалі, оскільки ваш UC буде активно підтягувати його високо або низько.

Що стосується ШІМ-сигналу, ви можете побачити, чи дозволяє таблиця даних із зовнішнім підключенням до 12 В, хоча я сумніваюся, що це призведе до великої різниці в будь-якому випадку.

Про шум:

EDIT: Я неправильно прочитав ваш сюжет за кГц, що нерозумно, якщо ви думаєте про це, де це Гц. Частина моєї історії трохи зміниться (наприклад, про необхідність використання МГц для цифрової роботи), але загальна ідея залишається.

Я залишу всю посаду такою, якою є, але для сигналу 100 Гц із шумом 30 кГц, замість 100 кГц із шумом> 5 МГц (теж не дуже має сенсу, чи не так?), Ви можете збільшити резистори, які взаємодіють з конденсаторами на коефіцієнт 10, а також збільшити конденсатори на коефіцієнт від 50 до 100. Це дозволить отримати фактор 1000 нижчої частоти фільтрації у всіх прикладах. Але також добре просто збільшити конденсатори в 10–20 разів для більш чітких країв або швидшої реакції на ваш цікавий сигнал, оскільки 30 кГц дуже далеко від 100 ГГц.

Тому вважайте цю публікацію написаною для високих частот і зменшуйте свої ідеї, що робить їх набагато легшими для реалізації! (Особливо цифрове відхилення в 3.)

Кінець редагування

Оскільки ви робите такий приємний випадок для роботи за допомогою методів зниження шуму, я спробую зробити такий, який стосується вашої ситуації.

Будь-хто, хто читає, пам’ятайте:

Мова йде лише про шум цифрового сигналу

У цифровому сигналі ви можете припустити, що є лише дві напруги, які вас цікавлять "увімкнено" і "вимкнено". Все, що знаходиться між ними, є безглуздим і належить до шуму чи неправильності. В аналоговому сигналі вам потрібно знати про кожен рівень напруги, і вам потрібно зробити деяку фактичну фільтрацію з навантаженнями C, L та ін.

Проблема у вашому сигналі полягає в тому, що негативний шум на високому рівні, а позитивний - на низькому рівні дуже близькі один до одного, тому простий стандартний тригер, навіть з регульованим рівнем, не може абсолютно гарантувати вам, що ви ніколи не отримаєте розгублений.


Ваші варіанти:

  1. Змініть ухил
  2. Зміна рівнів напруги
  3. Додайте «повільний» гістерезис
  4. Відфільтруйте шум

1. Змініть зміщення:

У позитиву дуже низькі негативні сплески, це тому, що ваша підтяжка не може виграти від шуму. Найпростіше, що ви можете спробувати, це зменшити опір. Існує ризик, що це просто збільшить сплески сигналу вимкнення, так що це може не завжди працювати. Але цілком можливо, що це дасть вам передпокій між шипами, щоб встановити простий гістерезис.

2. Зміна рівнів напруги

Ви можете легко, якщо вентилятор дозволяє, змінити Tacho на більш високий рівень напруги і додати проміжний стан:

схематичний

імітувати цю схему - Схематично створено за допомогою CircuitLab

Тепер може бути просто достатньо місця між високим і низьким шипами, щоб переконатися, що MOST завжди увімкнено, навіть коли є негативні спайки і завжди вимикається, навіть якщо є позитивні шипи. У новій ситуації може знадобитися деяким діодам, зенерам або резисторам, але якщо спайки негативного сигналу залишаються такими, якими вони є, вони не повинні спрацьовувати на MOSFET, доки ви не зробите замініть його на той, який має поріг затвора нижче 2В.

3. Додайте «повільний» гістерезис:

Це хитрість, яка зазвичай застосовується, коли ви знаєте, що гострий шумний сигнал має принаймні на порядок більше, ніж сигнал, який вас цікавить. Це трохи затримає сигнал, тому його не можна використовувати в ситуаціях, коли точний момент зміни вмикання / вимкнення важливі.

Але для сигналу, де ви хочете знати лише форму чи частоту його, це дуже надійний метод. В основному він починає спрацьовувати, коли напруга переходить поріг, але завершує цю дію лише тоді, коли вона залишається там. Існує багато способів його побудови.

Ви можете це зробити в контролері (що найпростіше в кількості компонентів): Ви можете запустити на фланг, а потім відібрати ще кілька значень з достатньою швидкістю, щоб побачити високу між шипами шуму, але не плутати пропущення цілого періоду низьких. Тоді ви робите заздалегідь визначене судження на основі знання вашого сигналу та шуму. Наприклад, якщо ви могли взяти вибірку на частоті 10 МГц, ви можете захопити 50 зразків і бути впевненим, що найвища частота 100 кГц не буде ігнорована, якщо ви перейдете з правилом більшості. Тобто: принаймні 25 потрібно мати низький рівень, щоб він був фактично низьким. Ваші шипи лише дуже тонкі, і це час, коли це оригінальний сигнал, і це може спрацювати, але кількість більшості можна регулювати. Це також буде працювати з 1 МГц і 6 або 7 зразками, але це буде менше фактичної більшості, тому там знову можуть виникнути певні ризики.

Ви можете це зробити і зовні: Але це вже набагато складніше, ніж додати простий фільтр, особливо коли ви дивитесь на результат із UC з певним гістерезисом у його вході. Але приємно думати, тому давайте:

схематичний

моделювати цю схему

U1 - будь-який відповідний Op-Amp або Comperator. Конкуренти є кращими комутаторами, часто з кращими розгортаннями, але для суб-МГц OpAmp з гідною гойдалкою залізниця / рейка легко обійдеться.

Хоча цей тип гістерезису може бути побудований щонайменше на один резистор менше, цей простіший для пояснення і як такий простіший для модифікації.

Спочатку уявіть це без конденсатора:

По-перше, подивіться, що на дільник резистора впливає вихід U1, він потягне його трохи нижче від вищого через видимий опір 20 кОм. Скажімо, на позитивному вході U1 напруга 1,1 В округлюється вниз, коли його вихід 0, і 3,9 В - округлюється, коли його вихід 5В.

Якщо стаціонарний вхід Tacho Input високий, вихід U1 буде низьким, через інвертуючий характер вводу в Tacho. Таким чином, негативний вхід буде, знову ж таки, завдяки додатковому підтягувальному резистору, приблизно 2,3 В. Оскільки позитивний вхід становить лише 1,1 В, то вхід повинен опуститися до рівня нижче 2,2 В, щоб негативний вхід бачив напругу нижче і змушував перевернути вихід.

Коли вихід перевернеться, негативний вхід побачить 3,6 В (тому що в цей момент вхідний сигнал становить 2,2 В, вихід U1 - 5 В, тому їх середина, зроблена резисторами 10 к, становить приблизно 3,6 В), але позитивна вхід перевернеться з 1,1 В до 3,9 В, тому негатив все ще нижче позитивного входу, а вихід залишиться на 5 В.

Якщо сигнал зараз швидко "скасовується" і повертається назад, вихід U1 швидко знову повернеться назад, але тоді шип вже повинен був опуститися нижче 2.2В, тож це краще, ніж нічого.

Якщо сигнал знизиться до 0, стабільна ситуація лише посилиться, негативний вхід знизиться до 2,5 В (оскільки ми вважаємо, що тахо FAN буде достатньо сильним, що випадає), і позитивний буде відпочивати приблизно на 3,9 V.

Тепер сигнал потрібно підняти вище 2,7 В, щоб вихід перевернув іншим способом. Ймовірно, 95% ваших шипів вже будуть проігноровані.

Додавання конденсатора:

За допомогою конденсатора вхідний сигнал повинен подавати достатньо енергії протягом достатнього часу для зарядки або розряду конденсатора. По суті це вже RC-фільтр. Будь-який шип, який швидко зануриться, а потім відновиться, не зможе розрядити конденсатор.

Значення C звичайно залежить від вихідного сигналу та шумового сигналу. У мене паркована кулька 510pF для вихідного сигналу 100 кГц проти максимальної тривалості ширини 1us, але я не дуже займався математикою, це просто кишка, заснована на RC-часі, що це може бути близьким до того, що буде працювати.

4. Відфільтруйте шум

Це дещо як фільтрація аналогового сигналу. Ви можете використовувати просту мережу RC, як описано в попередньому розділі:

схематичний

моделювати цю схему

Оскільки шипи шуму становлять або менше 1ус, вони не можуть змінити напругу на конденсаторі, оскільки його RC-час становить 5ус. Це означає, що енергія в шипах вирівнюється до середнього. Оскільки ви бачите високі вершини та низькі занурення на шипах, цілком можливо, що середні показники будуть дуже близькими до 0В та 5В, але це можна сказати лише з кращими зображеннями, або просто експериментом. Оскільки ви подаєте його на штир UC, часу RC буде, ймовірно, достатньо, щоб побачити його як високий або низький. Це призведе до невеликих спотворень через повільнішу зарядку, ніж розрядку, викликану підтягуючим резистором. Деякі налаштування значень можуть дати результат, в якому це мізерно.

Якщо цього недостатньо, ви можете додати ще кілька компонентів, але ви дуже швидко перестараєтесь, коли ваш домінуючий шум принаймні в 10 разів "швидший", ніж ваш сигнал.

Ви можете додати індуктор 4,7uH послідовно з резистором, щоб згладити ще кілька високочастотних флангів, можливо, навіть 10uH.

Але якщо чесно сказати, у випадку "подачі його до UC" єдиною причиною експериментувати з L в сигналі вашого типу є пошук балансу, в якому R великий, C малий і L просто допомагає згладжувати деякі боки, так що R2 / R1 буде досить малим, щоб ігнорувати різницю в часі підйому та падіння. такі як R1 33k, C 150pF і L послідовно з R1 56uH. А може, феритова бусинка замість індуктора трохи залежить від різкості ваших шипів.

Але я б уже переосмислив це.


1
Я втратив дар мови! Яка фантастична, добре пояснена, вичерпна і корисна відповідь. Я не можу вам подякувати достатньо, саме така відповідь я сподівався. Стільки навчитися тут і дуже вдячний. Мені потрібно прочитати це кілька разів, але з першого погляду я вже зараз чіткіше бачу варіанти, і ти справді відкрив мені очі. Відмінно, просто чудово.
Роджер Роуленд

2
@RogerRowland Це головна точка такого веб-сайту. Раді допомогти. Будь-які подальші ускладнення / математика можуть бути в чаті. Я регулярно буваю там. Потрібно лише додати зауваження, що я неправильно читав ваш сюжет як кГц, а не Гц
Асмільдоф

6

Шум подібного від вентилятора тахо є поширеним, тому що схема (яка зазвичай включає датчик ефекту Холла) у вентиляторі, що генерує вихід тахо, сама рубиться на або відключається на вашій ШІМ-частоті (коли ваш вихід ШІМ є будь-яким іншим ніж на 100% -на), а не тільки на подачу самого двигуна. Впевнені, що у них буде ємність для згладжування живлення до цієї схеми, але, враховуючи, скажімо, джерело живлення 12В вентиляторів, доки є достатня ємність для підтримки декількох вольт між мінімальними відключеннями ШІМ, цього достатньо для того, щоб привести в рух зал. Датчик ефектів та підтягування тахо-виходу (якщо вентилятор включає власний підтягувач на тахо-виході), щоб забезпечити відтворюваний вихідний сигнал. Так, уболівальники безладно, коли ви ШІМ постачаєте їх. Деякі вентилятори пропонують вхід ШІМ швидкості, який є окремим для їх живлення + 12В.

Здається, ваша ШІМ становить близько 27 кГц. Тож добре в цій конкретній ситуації те, що ваш тахо-вихід @ 100% виводиться приблизно на 800 ГГц, що становить <1/30 частоти вашої ШІМ, тому фільтруючи цей тахо-вихід, щоб позбутися більшості шумів ШІМ, це легко і варто робити. Тут уже пізно, тому я CBF би працював через кальци, але тому, що це відкрите злив, і це ваша напруга підключення живлення (у вентиляторі), яке піддається ШІМ, ковпачком між тахо & + 12В рейкою (не ШІМ Вихід з вашого приводу вентилятора), ймовірно, буде кращим варіантом, ніж кришка на тахо на землю. Спробуйте і те, і див. Почніть з керамічної кришки 100 н відповідної напруги і подивіться, як це виглядає.

З входом Schmigger на PIC, ви навіть зможете піти, не роблячи фільтрації цього тахо-виходу, перш ніж вводити його у свій PIC, але у вас є такий частотний диференціал, який легко дозволить вам пройти довгий шлях до його очищення. вгору

Одна з можливих проблем з вашим поводженням з сигналом тахо від вентилятора: якщо вентилятор піднімає його до +12 за допомогою 10 кб внутрішньо (деякі роблять, інші ні), ви також підтягуєте сигнал тахо до свого + 5V рейка, то ви насправді тягнете її вниз! Існують різні конфігурації схем для вирішення цього питання, залежно від напруги живлення вентилятора, наскільки сильна підтяжка і т. Д. Спробуйте виміряти це за допомогою мультиметра та повідомте нам про це.


"Деякі вентилятори пропонують вхід ШІМ-швидкості, який є окремим для їх живлення + 12В" - Так, ось що у мене є :-) Цей 4-контактний вентилятор має керування ШІМ, яке є окремим від 12В / GND, тож це лінія I я за кермом. Інший FET (Q2) є лише там, щоб я міг повністю вимкнути вентилятор, оскільки він має мінімальну швидкість. Тому я не PWM'ing Q2, а лише Q1.
Роджер Роуленд

Як правило, для 4-провідного вентилятора, якщо на нього подається постійне напруга 12 В, а вхідний провід ШІМ використовується для управління швидкістю, ви не побачите частоту перемикання ШІМ на виході TACH. Лише у випадку спроби застосувати ШІМ до джерел живлення вентилятора.
Майкл Карась

"якщо вентилятор підтягує його до +12 з 10 К внутрішньо" - Хммм, він не підтягується до +12, але якщо я вийму підтягувач, він, здається, підтягнувся вентилятором приблизно до 2В. Мені це здається дивним, але, можливо, пояснює, чому мій шумний сигнал становить близько 6 В, а не 5 В. Не впевнений, що зараз робити!
Роджер Роуленд

D'oh! Так вибачте, що я навіть не помітив на вашому схи, що це 4-провідний вентилятор. А зараз я пам’ятаю ваші інші запитання :). Гаразд, переглянувши таблицю даних IRF510, я думаю, що @Michael Karas швидше за все має рацію, що Q2 може не бути повністю включеним (і не допомогли R1 & R2 бути роздільником 1:10, тож ви отримаєте не більше ніж Vgs = 4,5 В, тож ваш +12 для вентилятора може провисати (занадто важко, щоб бути впевненим у ваших знімках, слід побачити протягом періоду ШІМ). Змініть R2 на 100 к (більше ніж достатньо, щоб не вимикати, коли в три- стан) і подивіться, чи це допомагає. Якщо так, виберіть нижній Vgs-поріг MOSFET.
Techydude

1
@Techydude lol, неважливо, це все ж головоломка. Як я вже говорив Майклу, я зараз зняв Q2 і заземлив вентилятор безпосередньо, і я все ще бачу той же шум. Я також спробував повторити TACH на інший контакт через INT, але Шмітт не очищає його досить самостійно, і відлуння виходу все ще нерівне. Можливо, це тому, що це все ще на дошці? Насправді 100nF між TACH і Vcc допомогло.
Роджер Роуленд

3

Можливе джерело шуму на сигналі TACH може бути спричинене тим, що IRF150 FET не є достатньо низьким опором ON. Це може бути пов'язано з тим, що FET RdsON є досить високим або FET не працює повністю при заданій напрузі приводу воріт.

Коли струм вентилятора вмикається та вимикається разом із сигналом ШІМ, відбудеться падіння через опір FET, це спричиняє, що посилання "GND" вентилятора піднімається вгору та вниз та переходить на шум, що бачиться на сигналі TACH.

Ви можете перевірити це, щоб побачити, чи є ефект, який я описую, встановивши провід GND на слив FET і перегляньте сигнал TACH. Сигнал виглядав би набагато чистіше.

Рішенням було б вибрати FET зі значно нижчим RdsON, коли він постачається із приводом затвора, який надає ваша система.

Інша можлива ідея - використовувати P-FET для перемикання вентилятора + 12 В на відвід замість GND.

Зауважте, що розташування резисторів затвора, яке ви використовуєте, призводить до втрати частини потенційного приводу. Перемістіть резистор 1К на іншу сторону 100ом.


Спасибі Майкл, я дуже ціную вашу пораду. Зараз я повністю відкрутив Q2 і заземлив вентилятор безпосередньо, але я все ще бачу той самий TACH шум у всіх нижче 100% ШІМ. Хороший момент щодо розміщення резистора 1К!
Roger Rowland

3

Це звучить як робота для фільтра низьких частот. Потрібно зберегти корисний сигнал з f 1 навколо 1 кГц і вийняти сигнал, що порушує сигнал, з f 2 поблизу 25 кГц. Частоту відсічення можна вибрати як середнє геометричне значення f 1 і f 2 (неоптимальне, але просте):

f c = sqrt (1 * 25) = 5 кГц.

Якщо припустити, що простий RC-фільтр буде достатнім, і ви вже маєте опір у ланцюзі TACH (R 3 = 10 кОм), відповідне значення конденсатора повинно бути розраховано так, щоб воно відповідало часовому костанту 5 кГц :

введіть тут опис зображення

C = 1 / (2 * pi * fc * R) = 1 / (6,28 * 5000 * 10000) = 3,2 * 10 -9 F.

Тому все, що вам потрібно зробити, - це спаяти конденсатор 3nF між лінією TACH і землею. Це зменшить високочастотний шум у 20 чи більше разів, що повинно бути достатньо для вашої програми.


Дякую, це схоже на те, що запропонував @techydude (хоча ваш розрахунок, очевидно, кращий, ніж здогадка), але чи знаєте ви, чому я вважаю, що краще шумоподавлення з обмеженням між TACH і 5V, а не TACH і GND? Чи впливає цей вибір на місцях, де шум подавлений (тобто на високій частині імпульсу чи низькій частині) чи він повинен однаково придушувати його?
Roger Rowland

Те, що ковпачок між TACH та 5V працює краще, ніж ковпачок між TACH та GND мене дивує. Зазвичай ви повинні підключити фільтр до рівня напруги, який використовується як орієнтир у вашій системі, і в 99% випадків це GND. Крім того, VCC і GND підключені через джерело напруги з близьким до нуля внутрішнім опором (порівняно з 10k резистором), так що це не має значення.
Дмитро Григор’єв

Після більш детального ознайомлення з схемою, я думаю, що це пов’язано з тим, що ваш вхід є зливним каналом, який видає шум з асиметричними краями (швидко падає і згладжується підйом). Якщо ви використовуєте схему з відповіді @Asmildof , шумний сигнал подаватиметься на вхід RC-фільтра, а не в середині, і він повинен працювати так, як очікувалося для будь-якого шуму.
Дмитро Григор’єв

Спасибі @Dmitry, асиметричний шум, який ти описуєш, здається, відповідає моєму масштабуваному сліду, так що для мене є сенс. Я буду ще трохи працювати над схемою на основі всіх хороших порад, які я отримав тут. Ваш внесок цінується.
Роджер Роуленд
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.