660 likes | 1.13k Views
به نام روشنی بخش اندیشه ها. تایمر / کانتر. www.sajjadsoltanian.blogfa.com. مطالب این جلسه:. بررسی قابلیت های تایمر های AVR زمان سنجی شمارنده (کانتر) تایمر صفر و دو در حالت پیشرفته تایمر یک در حالت پیشرفته کاربرد سیگنال های pwm تایمر watchdog. چرا از تایمرها استفاده می کنیم؟.
E N D
به نام روشنی بخش اندیشه ها تایمر / کانتر www.sajjadsoltanian.blogfa.com
مطالب این جلسه: • بررسی قابلیت های تایمر های AVR • زمان سنجی • شمارنده (کانتر) • تایمر صفر و دو در حالت پیشرفته • تایمر یک در حالت پیشرفته کاربرد سیگنال های pwm • تایمر watchdog
چرا از تایمرها استفاده می کنیم؟ • تایمر کانتر یکی از بخش های مهم میکروکنترلرها می باشد. در بیشتر مواقع لازم است که تعدادی وقایع خارجی (با سرعت بالا) شمارش شود و یا گاهی لازم است که در یک زمان خاص و دقیق، کاری صورت گیرد. تنها توسط تایمر کانتر ها می توان این کارهای دقیق و با سرعت بالا را انجاد داد. بطور مثال اگر بخواهیممیکروکنترلر: 1. هر چند وقت یک بار، به وسیله ADC ولتاژ سنسور دما را بخواند 2. هر ثانیه یک واحد به ثانیه شمار یک ساعت دیجیتال اضافه کند 3. به وسیله یک کلید، بین نمایش ساعت و دما تغییر کند 4. همواره نور صفحه را به وسیله ولتاژ خروجی یک مقاومت نوری، تنظیم کند انجام این چهار عمل به وسیله کدهای ساده و بدون استفاده از تایمرها غیر ممکن یا بسیار نامفهوم و دشوار خواهد بود!
ساختار تایمرها: همانطور که در شکل می بینید، تایمرها مجموعه ای از حافظه هایی (معروف به Flip-Flop) هستند که پشت سرهم قرار گرفته اند و نماینده یک عدد دودویی اند. در این نمونه یک تایمر 3 بیتی را می بینیند که به ازای هر کلاک، یک واحد دودویی به مقدار این 3 بیت اضافه می شود و زمانی که به حداکثر مقدار خود می رسد، دوباره صفر می شود!
تعاریف موجود در واحد تایمر/کانتر • در حالت کلی میتوان عملکرد تایمر ها را در 4 مد تقسیم بندی کرد. • از آنجایی که هر 4 مد در تمامی تایمر ها مشترک است ابتدا مد های تایمر ها رابررسی کرده و سپس رجیستر های مربوط به هر تایمر را شرح میدهیم. • اما برای شروع کار نیاز به تعریف 3 اصلاح زیر داریم این اصطلاح را در مد نرمال به کار نمیگیریم زیراtop برابر max است و در مد های دیگر کاربرد دارد موقعی که مقدار رجیستر تایمر به بزرگترین مرحله شمارش میرسد top اتفاق افتاده است. مقدار TOP در مد fast pwm و phase correct pwm برای تایمر های 8 بیتی مقدار ثابت 0xff و در تایمر 16 بیتی میتواند اعداد ثایت 0x00ff,0x01ff و 00x03ff را داشته باشد یا اینکه متغیر باشد رسیدن مقدار رجیستر تایم به 0xff(8بیتی) یا 0xffff(16بیتی)را مقدار حداکثر تایمر یا مقدار ماکزیمم تایمر (max)می نامیم رسیدن مقدار رجیستر تایمر به حداقل مقدار تعریف شده( در حالت پیش فرض0x00 یا 0x0000) را گویند.توجه کنید که مقدرا bottom لزوما صفر نیست و میتواند تعیین شود.
ساختار واحد تایمر و کانتر: میکروکنترلر AVRاغلب دارای سه تایمر (Timer0 , Timer1, Timer2) می باشد • تایمر 0 و 2 8 بیتی • تایمر 1 16 بیتی به ازای هر یک سه ثبات اساسی زیر وجود دارد: 1. TCNTn: مقدار کنونی تایمر شماره n در هر لحظه درون این ثبات می باشد! 2. OCRn: مقدار این ثبات در هر لحظه با ثبات TCNTn مقایسه می شود و در صورت برابر بودن، مطابقِ مُد تایمر، کاربردهای مختلفی را برای ما دارند! 3. TCCRn: این رجیستر بر خلاف دو رجیستر قبلی یک رجیستر کنترلی است که خصوصیات تایمر مورد استفاده توسط ان تعیین می شود. تایمرهای میکرو بوسیله یک منبع کلاکِ قابل انتخاب تغذیه می شود. که این منبع می تواند خارجی یا بوسیله کلاک اصلی سیستم باشد!
Timer Registers : TCNTn (Timer Counter Register) OCRn (Output Compare Register) TCCRn (Timer Counter control register) TIMSK (TIMSK(timer/counter interrupt mask register) TIFR(timer/counter interrupt flag register) نکته:n شماره تایمر مورد نظر است که به ازای هر تایمر، رجیستر مورد نظر وجود خواهد داشت
نحوه عملکرد رجیستر TCNT:TCNTn (Timer Counter Register) به ازای هر کلاک یک واحد به ثبات TCNTn اضافه می شود تا اینکه به مقدار حداکثر خود برسد و پس از آن دوباره صفر شود! TCNTn = 253 TCNTn = 254 TCNTn = 255 TCNTn = 0 تنظیمات CodeVision: 1. انتخاب تایمر 2. انتخاب منبع کلاک برای تایمر مورد نظر 3. تعیین مُد تایمر
نحوه عملکرد رجیستر OCRn:OCRn (Output Compare Register) • از این رجیستر بیشتر در ایجاد سیگنال های PWM و مد مقایسه استفاده شده و در حالت مد نرمال که تایمر برای زمان سنجی استفاده میشود کاربرد خاصی ندارد و همانطور که قبلا اشاره شد زمانی که متحوای آن با رجیستر TCNT برابر شود (در اثر شمارش TCNT)رجیستر TCNT سریز میکند که میتوان از این خاصیت استفاده های گوناگونی را کرد که در ادامه با آنها آشنا می شویم نکته: محتوای این رجیستر مقدار TOP را در مد CTC و مبنای مقایسه را در مد های PWM تعیین می کند.
نحوه عملکرد رجیستر TCCRn:TCCRn (Timer Counter control register) در این رجیستر تمامی بیت ها نقش تعیین خصوصیات تایمر را دارند . از این بیت تنها زمانی میتوان استفاده نمود که تایمر در مد PWM نباشد.با یک کردن این بیت یک مقایسه اجباری ایجاد کرده و با توجه به تنظیم بیت های CM010:0 پایه خروجی OCO تغییر حالت میدهد.از این بیت در کاربرد های خاص استفاده میشود و در حالت عادی آن را صفر میکنیم توسط این بیت ها مد عملکرد تایمر ا تعیین میکنیم وظیفه این بیت ها تعیین تقسیم فرکانسی کلاک تایم صفر می باشد. در صورتی که از مد های NORMAL یا CTC استفاده نماییم . تنظیم و عملکرد این دو بیت مطابق جدول می باشد.
تایمر صفر تایمر صفر و تایمر دو در خانواده AVR تا 90 درصد شبیه به هم بوده لذا در اینجا تمامی خصوصیات برای تایمر صفر بیان می شود در هنگام برخورد با مسائل تایمر ها باید مراحل زیر را بدانیم: 1-تعیین مد کاری تایمر (مد های 4 گانه) 2-تعیین فرکانس کاری تایمر (تنظیم بیت های pre scale) 3-تنطیم خصوصیات شکل موج خرجی تایمر (در صورت نیاز) 4-در صورت نیاز به وقفه فعال کردن بیت فعال کنده آن در رجیستر TIMSK نکته:سه مورد اول بر روی رجیستر TCCR اثر گذاری میکنند لذا اولین قدم در برنامه نویسی تایمر ها تنظیم این رجیستر است.
Timer Modes : 1- Normal Mode 2- CTC (Clear Timer On Compre Match) 3- Fast PWM :(Fast Pulse Width Modulation) 4- Phase Correct PWM نکته:این مد ها برای هر تایمر به صورت جداگانه توسط 2 بیت WGM در رجیستر TCCR تنظیم میگردد
مُدهای مختلف تایمرها: 1. مُد نرمال در این مُدِ ساده و ابتدایی، ثبات TCNTnهمواره بصورت افزایشی کار می کند و زمانی که به حداکثر مقدار خود (0xFFبرای Timer0، Timer2 و 0xFFFF برای Timer1) برسد مقدار TCNTn صفر می شود و پرچم سرریز TOVn را یک می کند و درصورت فعال بودن وقفه سرریز تایمر، مسیر برنامه را برای اجرای روتین وقفه تغییر می دهد! استفاده از ثبات OCRn برای مقایسه با ثبات TCNTn نیز در این مُد فعال می باشد و می تواند در ازای برابری این دو ثبات، یک وقفه را ایجاد کند! اما این کار در مُد نرمال توصیه نمی شود چرا که از لحاظ سخت افزاری CPU را بسیار مشغول می کند! سوال این بیت در کدام رجیستر قرار دارد؟
مُدهای مختلف تایمرها: 2. مُد CTC (Clear Timer on Compare match): در این مُد، مشابه مُد نرمال زمانی که مقدار ثبات TCNTn با ثبات OCRn یکسان گردد، مانند مُد نرمال پرچم OCRn را یک می کند و مسیر برنامه را برای اجرای وقفه تغییر می دهد. اما برخلاف مُد نرمال که تایمر به شمارش ادامه می داد، در این مُد پس از یکسان شدن این دو ثبات، مقدار ثبات TCNTn صفر می شود!
Example-15 یک قطار پالس مربعی 5 کلو هرتز بر روی پایه OC0 ایجاد کنید برای نوشتن این برنامه از تایمر صفر در مد CTC استفاده می کنیم
مُدهای مختلف تایمرها: 3. مُد Fast PWM (Fast Pulse Width Modulation): در این مُد نیز مقدار ثبات TCNTn بصورت پلکانی افزایش پیدا می کند و مقدار این ثبات همواره با ثبات OCRn در حال مقایسه می باشد. زمانی که محتوای این دو ثبات با هم برابر گردد، (در حالتِ Non-Inverted) سطح ولتاژِ پایه OCn، صفر (Low) می شود و زمانی که مقدار TCNTn به حداکثر مقدار خود برسد سطح ولتاژِ پایه OCn، یک (High) می شود. بدین وسیله می توانیم یک موج PWM در پایه OCn تولید کنیم. دقت شود که برای این کار بایستی پایه OCn بصورت خروجی تعریف شده باشد. فرکانس بالای این موج کاربردهای زیادی را برای ما دارد: 1. موتورها DC: برای کنترل سرعت 2. چراغ ها: برای تنظیم روشنایی 3. منابع تغذیه سویئچینگ: برای بدست آوردن ولتاژ خروجی 4. آمپلیفایرهای صوتی
مُد Fast PWM: TOP Value 0 1 Non Inverted 0 1 Inverted 0
نحوه تعیین حالت خروجی موج PWM در مد Fast PWM
مثال-16 یک موج PWM با فرکانس 40 کیلو هرتز و زمان وظیفه 40% ایجاد کنید
H-Bridge • برای کنترل موتورهای DC در دو جهت مختلف از این تکنیک استفاده می کنیم:
مُدهای مختلف تایمرها: 4. مُد Phase Correct PWM: در این مُد، تایمر بصورت افزایشی تا حداکثر مقدار خود افزایش پیدا می کند ولی پس از رسیدن به مقدار ماکسیمم دیگر صفر نمی شود، بلکه بصورت کاهشی تا اینکه به صفر برسد کاهش پیدا می کند! در این مُد نیز همواره ثبات TCNTn با ثبات OCRn مقایسه می شود و در ازای مُدی که در آن قرار دارد (Non-Inverted یا Inverted) می تواند یک موج PWM برای ما تولید کند. دقت شود که حداکثر فرکانس موج PWM تولید شده در این مُد به دلیل دو شیبه بودن این تایمر(یک شیب از صفر تا رسیدن به ماکسیمم و یک شیب از مقدار ماکسیمم تا صفر) نصف مُد Fast PWM می باشد.
نحوه تعیین حلت خروجی موج PWM در مد Phase Correct PWM
تولید موج سینوسی به وسیله تایمرها: ولتاژ خروجی میکروکنترلر نمی تواند منفی شود، اما برای تولید ولتاژ سینوسی به مقادیر منفی نیاز داریم، لذا منابع سه فاز را مطرح می کنیم: اختلاف فاز موج سینوسی میان هر سه سیم، 120 درجه است و با این ایده میان هر دو سیمی که انتخاب کنیم موج کامل سینوسی را مشاهده می کنیم.
تولید موج سینوسی به وسیله تایمرها: • از یک تایمر برای تولید کمان و زاویه سینوسی مورد نظرمان استفاده می کنیم و از یک تایمر دیگر به عنوان تولید کننده موج PWM برای تولید ولتاژهای مختلف بر حسب زاویه سینوس استفاده می کنیم. • به یکی از خروجی ها موج سینوسی با اختلاف فاز 0 می دهیم و به دیگری موج سینوسی با اختلاف فاز 120 درجه می دهیم. • اما . . . خروجی این دو پایه را می بایست فیلتر کنیم!!
انتخاب منبع کلاک تایمرها: هر سه تایمر Timer0,Timer1,Timer2 این قابلیت را دارند که کلاک خود را از کلاک سیستم و یا تقسیمی از آن دریافت کنند. در این حالت به آن تایمر گفته می شود! هر دو Timer0 و Timer1این قابلیت را نیز دارند که بوسیله پین های T0 (برای Timer0) و T1 (برای Timer1) بصورت خارجی و به ازای لبه بالا/پایین رونده سیگنال تأمین شوند. در این حالت به آن کانتر(شمارنده) گفته می شود! همچنین Timer2 این قابلیت را دارد که کلاک خود را به وسیله یک اسیلاتور خارجی و یا تقسیمی از آن تأمین کند. به این صورت که یک کریستال با فرکانس معینی بین دو پایه TOSC0 و TOSC1 متصل باشد! Timer2 برای کریستال ساعتی (32.768 kHz) بهینه شده است و نسبت تقسیم های 8/32/64/128/256/1024 را برای آن فراهم آورده است! این کریستال در هر ثانیه 32768 بار یعنی 2^15 بار پالس تولید می کند و از آن بعنوان یک ثانیه شمار بسیار دقیق استفاده می کنند! پایه های OC0 و OC1A و OC1B و OC2 نیز پایه های خروجی متناظر با هر تایمر هستند. که در ادامه با این ها بیشتر اشنا می شویم!
نحوه انتخاب CLOCK بر اساس بیت های کنترلی رجیستر TCCR: 7 6 5 4 3 2 1 0 Bit -- -- -- -- -- CS02 CS01 CS00 Read/Write R RRRR/W R/W R/W R/W Initial value 0 0 0 0 0 0 0 0
نحوه انتخاب مد عملکرد تایمر/ کانترصفرتوسط رجیسترTCCR :
وقفه ها در تایمر ها • برای اینکه بتوان از وقفه ها در واحد تایمر میکرو کنترلر AVR استفاده کرد باید سه مرحله زیر را انجام دهیم: • 1-ست کردن بیت هفتم رجیستر وضعیت با دستور asm(“sei”) • 2-تنظیم رجیستر فعال کننده وقفه تایمر ها به نام TIMSK(timer/counter interrupt mask register) 3-تست پرچم های وقوع وقفه در رجیستر ی با نام TIFR(timer/counter interrupt flag register)
TIMSK(timer/counter interrupt mask register) • برای اینکه بتوانیم از سر ریز شدن تایمر برای ایجاد وقفه استفاده کنیم، باید از این رجیستر استفاده شود اگر این بیت را یک کنیم و وقفه کلی فعال باشد,در صورت تحریک شدن واحد capture توسط خروجی مقایسه کننده آنالوگ داخلی یا سیگنال اعمال شده به پایه ICP,وقفه مربوط به واحد تسخیر کننده فعال میگردد و میتوان محتوای رجیستر1 ICR را بررسی کرد اگر این بیت را یک کنیم و وقفه کلی فعال باشد با تطبیق مقایسه واحد Aیعنی برابری رجیستر TCNT1با رجیستر OCR1Aپرچم تطبیق واحد A تایمر یا کانتر یک , موجب ایجاد شدن وقفه تطبیق مقایسه میگردد اگر این بیت را یک کنیم وقفه سر ریز تایمر صفر یا یک یا دو فعال میگردد و در صورتی که وقفه همگانی فعال باشد و محتوای تایمرمورد نظر(رجیستر tcnt) از حداکثر خود سریز کند وقفه سریز تایمر صفر یا یک یا دو اجرا می شود اگر این بیت را یک کنیم و وقفه کلی فعال باشد با تطبیق مقایسه واحد B یعنی برابری رجیستر TCNT1با رجیستر OCR1Bپرچم تطبیق واحد B تایمر یا کانتر یک , موجب ایجاد شدن وقفه تطبیق مقایسه میگردد اگر در این بیت یک نوشته شود و وقفه همگانی فعال شده باشد و تطبیق مقایسه ای تایمر یا کانتر صفر یا دو انجام گیرد وقفه مربوط به مقایسه اجرا می شود.
TIFR (Timer/Counter Interrupt Flag Register) تنظیم این بیت ها بستگی به تنظیمات مد ها در رجیستر TCCR هر تایمر دارد . در مد NORMALو مد CTC زمانی که سریز رخ دهد پرچم متناظر با تایمر مورد نظر فعال می شود.زمانی که بردار وقفه اجرا می شود در برگشت از وقفه به طور اتوماتیک توسط سخت افزار این پرچم پاک میگردد . همچنین به روش POLLINGکاربر میتواند با نوشتن یک در این پرچم آن را صفر کند. این پرچم ها زمانی فعال میگردند که مقدار رجیستر TCNT تایمر مربوطه با مقدار OCRدر آن تایمر برابر شود . این پرچم ها می توانند موجب وقفه تطبیق تایمر 0 با 1 یا 2 گردند . همچنین به روش POLLING کاربر میتواند با نوشتن یک در این پرچم ان صفر کند. زمانی که واحد CAPTURE تحریک گردد این پرچم فعال می شود و موجب ایجاد وقفه تسخیر کننده میگردد و در برگشت از وقفه توسط سخت افزار پاک میگردد البته در زمانی که تایمر در مد PWM باشد این پرچم برای دستیاغبی به مقدار TOP در رجیستر ICR1فعال میگردد
مثال-17 تولید موج مربعی با T=512us بر روی پورت A #include<mega16.h> #define xtal 8000000 void delay() { //TCNT0=0x00; TCCR0=0B00000010; // Timer Clock = CLK/8 while(!TIFR.0); // Wait Until Overflow TIFR.0=0; // Clear TOV0 TCCR0=0x00; // Stop Timer0 } void main() { DDRA=0xFF; PORTA=0x00; TCCR0=0x00; TCNT0=0x00; while(1){ PORTA.0=1; delay(); PORTA.0=0; delay(); } }
#include<mega16.h> #define xtal 8000000 Interrupt [TIM0_OVF] void puls1(void) { PORTA.0=~(PORTA.0); TCNT0=0X00; } void main() { DDRA=0xFF; PORTA=0x00; TCCR0=0x02; TIMSK=0x01; #asm (“sei”) TCNT0=0X00; while(1); } مثال: حل مسئله قبل با استفاده از وقفه:
تایمر 1 • این تایمر از نظر عملکرد تمامی خصوصیات تایمر صفر را دارد با این تفاوت که 16 بیتی است و مقدار TOP آن در مد های PWM قابل تنظیم است .این تایمر دارای ویژگی مهم capture است • واحد capture چیست؟ این واحد دارای رجیستر های 8 بیتی ICR1L,ICR1H است که با هم یک محتوای 16 بیتی را تشکیل میدهند .اگر بیت فعال کننده این واحد را در رجیستر TCCR فعال کرده باشیم در هنگام روشن کردن تایمر ،تایمر با توجه به سرعت کلاک خود شروع به شمارش میکند. حال اگر یک سیگنال خارجی در لحظه t به پایه icp اعمال گردد محتوای رجیستر تایمر یک یعنی TCNT1 در همان لحظه t درون رجیستر ICR1 کپی می شود. نکته:این واحد را نیز میتوان به صورت داخلی و توسط واحد مقایسه کننده آنالوگ نیز تحریک کرد. نکته:این واحد با لبه تحریک شده و توسط یک فیلتر دیجتال در 4 سیکل ماشین عملیات نمونه برداری صورت میگیرد (البته بهتر است از واحد حذف کننده نویز نیز استفاده شود)
کاربرد های واحد capture • میتوان به مواردی مانند: • اندازه گیری duty cycle(سنسور smt160) • اندازه گیری زمان برگشت پالس متر دیجیتال(متر دیجیتال) و ... اشاره کرد
تنظیمات کلاک برای تایمر 1 در رجیستر TCCR1
نحوه تنظیم بیت های تطابق مقایسه در رجیستر TCCR1
تنظیمات کلاک برای تایمر 2 در رجیستر TCCR2
RTC تایمر شماره 2 دارای یک قابلیت ویژه است که توسط یک رجیستر کنترلی یه نام ASSRکنترل می شود این تایمر دارای یک مد عملکرد آسنکرون است. این آسنکرون بودن موجب میشود که این تایمر بتواند در این مد کلاک کاری خود را جدا از سیستم توسط دو پین TOSC1 و TOSC2 با اتصال به یک کریستال ساعت 32.768K تامین کند. لذا میتواند به صورت بسیار دقیق زمان واقعی را اندازه گیری کند.
ASSR(Asynchronous status register) • پیکره بندی RTC با این رجیستر انجام می شود
کانتر ها: • کانتر چیست؟ • در میکرو کنترلر های AVR دو پایه به نام t0, t1 داریم که به ازای اعمال یک لبه بالا رونده یا پایین رونده یک واحد به محتوای رجیستر تایمر یعنی tcntاضافه میکند. با خواندن این رجیستر در برنامه و ذخیره آن می توان پی به تعداد پالس مورد نظر مثلا از یک سنسور برد • چند مورد استفاده عملی از کانتر ها: 1-اندازه گیری فرکانس 2-اندازه گیری تعداد دور ماشین های الکتریکی 3-بدست آوردن اختلاف فاز دو سیگنال الکتریکی نسبن به یکدیگر 4-اندازه گیری مقدار سلف و خازن و... 5-بدست اوردن پارمتر های حیاتی مانند ضربان قلب یک بیمار 6-خواندن هرنوع سنسوری که بر حسب تغییرات فرکانسی عمل میکند
چگونگی استفاده از تایمر ها در مد کانتر: • برای استفاده از تایمر های میکرو کنترلر avrدر مد کانتر باید توسط رجیستر TCCR و بیت های پری اسکالر (cs00,cs01,cs02) این کار صورت پذیرد 0 1 1 پایه t0 کانتر با لبه پایین رونده 1 1 1 پایه t0 کانتر با لبه بالا رونده 0 1 1 پایه t1 کانتر با لبه پایین رونده 1 1 1 پایه t1 کانتر با لبه بالا رونده