تو این پست میخوام در خصوص فیلتر دیجیتال در Input Capture میکروکنترلرهای STM32 صحبت کنم. یک بخش کوچک اما مهم. اگر با این پریفرال آشنا باشید میدونید که خود این واحد زیرمجموعهای از پریفرال تایمر به حساب میاد و برای دیدن رجیسترهاش در رفرنس منوال باید سراغ بخش تایمرها برویم.
اگر از طریق CubeMX قصد راه اندازی Capture رو داشته باشید، احتمالاً تصویر زیر براتون آشناست:

پارامترهای CKD یاInternal Clock Division و Input Filter دو قسمتی هستند که برای تنظیم فیلتر دیجیتال Capture نیازشون داریم. همونطور که انتظار هم میره، مشابه با همین نامها رو در دیتاشیت هم داریم. مثلاً به این قسمت نگاه کنید:

اینجا بیتهای تنظیم فیلتر برای کانال 1 یک تایمر را مشاهده میکنید.
پریفرال Capture برای اینکه بفهمه روی ورودیاش چه وضعیت دیجیتالی قرار گرفته نیاز به این داره که دائم از پین ورودی نمونه برداری کنه. اینکه با چه نرخی این نمونه برداری صورت بگیره در اینجا قابل تنظیم است. اگر مقدار این 4 بیت را 1، 2 و یا 3 قرار دهیم نمونه برداری با نرخ fCK_INT انجام میشه. fCK_INT همان کلاک داخلی است که تایمر برای کار کردن خودش از APB1 یا APB2 -اینکه از کدومش استفاده میکنه از دیتاشیت مشخص میشه- به همراه ضریبی تامین میکنه.
اگر به این 4 بیت مقادیر ممکن دیگر را اختصاص دهیم، مضربی از fDTS میشود کلاک نمونه برداری. اما اینجا ممکن است این سوال پیش بیاید که fDTS چیست؟

مقدار کلاک DTS که مخفف Dead-Time and Sampling هست با توجه به CKD به دست میاد. از این کلاک میشه برای نمونه برداری ورودی تایمرها و یا در تایمرهای پیشرفته برای تولید قسمت Dead-Time سیگنال استفاده کرد.
با این 4 بیت تنظیم فیلتر ورودی، علاوه بر تعیین مقدار کلاک نمونه برداری پارامتر دیگری -N- هم تعیین میشود. N در واقع تعیین میکند که تغییر وضعیت روی پایه ورودی باید حداقل چه مدت یا به طور دقیقتر به اندازه چند پالس نمونه برداری -fSAMPLING- ثابت بماند تا به عنوان یک تغییر وضعیت در نظر گرفته شود. متوجه نشدید؟ اشکال ندارد، با هم یک مثال را مرور میکنیم تا موضوع برایمان شفافتر شود.
فرض کنید که کلاک داخلی تایمر از APB1 تامین میشه و مقدارش هم بر روی 72 مگاهرتز تنظیم شده. از طرفی CKD را 0b01 و IC1F را هم 0b0100 قرار دادهایم. در این صورت کلاک نمونه برداری میشود fDTS / 2 و چون مقدار fDTS با توجه به CKD میشود fCK_INT / 2 پس نهایتا کلاک نمونه برداری ما مقدار 4 / 72 = 18 مگاهرتز خواهد بود. N ما هم 6 است پس با این حساب اگر مثلاً پایه ورودی Capture یک شود باید حداقل به اندازه (18 / 1) * 6 میکروثانیه یک بماند تا Capture پایه ورودی را یک شده در نظر بگیرد. در غیر این صورت این یک شدن به حساب نمیآید و به عبارتی فیلتر میشود.
دیجیلاگیست محلی برای کسانی که به دنیای دیجیتال و آنالوگ علاقه دارند