امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
راهنمایی برای کار با تایمر 1
نویسنده پیام
hamze_b آفلاین
كاربر تک ستاره
*

ارسال‌ها: 31
موضوع‌ها: 7
تاریخ عضویت: اردیبهشت ۱۳۹۴

تشکرها : 26
( 1 تشکر در 1 ارسال )
ارسال: #1
راهنمایی برای کار با تایمر 1

سلام، ببخشید من میخوام با تایمر 1، یه قطار موج مربعی با فرکانس 50Hz و دیوتی سایکل %10 بسازم. کد زیر رو نوشتم. اگه بهم کمک کنید که اشتباهم رو پیدا کنم، ازتون ممنون میشم.
اینم کد:
کد:
#include <mega32.h>
interrupt [TIM1_OVF] void timer1_ovf_isr(void) // فعال کردن اينتراپت براي دادن مقدار مشخص شده به رجيستر TCNT1A در هر بار
{
TCNT1=63035;
}
void main()
{
DDRD=0x30; // تعریف OCA1 به عنوان خروجی
PORTD=0x00;
TCCR1A=0x42; // انتخاب مد fast PWM و انتخاب OC1A به عنوان خروجي
TCCR1B=0x1a; // قرار دادن مقدار ICR1 در TOP وانتخاب تقسيم فرکانسي 64
ICR1L=0xff; // انتخاب 65535 براي رجيستر ICR1
ICR1H=0xff;
TCNT1=63035; // مقدار لازم براي توليد موج با فرکانس 50HZ
OCR1A=63285; // مقدار لازم براي توليد موج با ديوتي سايکل 10%
TIMSK=0x04;  // فعال کردن وقفه سرريز تايمر 1
#asm("sei")  // صدور مجوز وقفه
while(1);
}

اینم روابطی که ازشون استفاده کردم.

[تصویر:  rw0z_20150602_224851.jpg]

و اینم تصویر خروجی پروتئوسش

[تصویر:  rwz_untitled.png]

همونطور که میبینید، شکل موج خروجی با فرکانس 200Hz و دیوتی سایکل %50 تولید شده!
لطفا تو پیدا کرد مشکلش کمکم کنید. ممنون
۱۲-خرداد-۱۳۹۴, ۲۳:۱۲:۴۰
ارسال‌ها
پاسخ
sharin آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 2,053
موضوع‌ها: 28
تاریخ عضویت: مرداد ۱۳۸۹

تشکرها : 3714
( 8171 تشکر در 2772 ارسال )
ارسال: #2
RE: راهنمایی برای کار با تایمر 1
سلام.

تایمر 1 یه تایمر 16 بیتی هست، اما وقتی قصد تولید موج PWM رو دارید، دقت بین 8 تا 10 بیت رو می تونید برای این منظور تنظیم کنید. در حالت fast PWM با دقت 10 بیت مقدار TOP برابر 0x03FF هست و نه 0xFFFF
از ICR هم نیاز نیست استفاده کنید.

موفق باشید.

۱۳-خرداد-۱۳۹۴, ۱۹:۵۶:۴۶
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : hamze_b, omid_phoenix, vigraz
hamze_b آفلاین
كاربر تک ستاره
*

ارسال‌ها: 31
موضوع‌ها: 7
تاریخ عضویت: اردیبهشت ۱۳۹۴

تشکرها : 26
( 1 تشکر در 1 ارسال )
ارسال: #3
RE: راهنمایی برای کار با تایمر 1

ممنون از شما آقای sharin که همیشه تو حل سوالایی که داشتم کمکم کردین. خیلی ممنون
راجع به نکته ای که گفتین، یه سوال برام پیش اومد. اونم اینه که دو سطر آخر جدول زیر چه حالت هایی از مد fast PWM رو نشون میدن؟؟

[تصویر:  3tzq_20150603_205605_1.jpg]

چون مقدار TOP رو یه بار برابر رجیستر ICR1 و یه بار برابر رجیستر OCR1A قرار داده. پس این حالتا دقیقا چیکار میکنن؟؟؟
۱۳-خرداد-۱۳۹۴, ۲۱:۱۳:۳۰
ارسال‌ها
پاسخ
sharin آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 2,053
موضوع‌ها: 28
تاریخ عضویت: مرداد ۱۳۸۹

تشکرها : 3714
( 8171 تشکر در 2772 ارسال )
ارسال: #4
RE: راهنمایی برای کار با تایمر 1
خواهش می شه ...
شخصا روشم اینه که ابزار کارم رو همیشه ساده انتخاب می کنم، اگر جوابگوی نیازم نبود، کنار می ذارمش و بعدی رو بر می دارم ...

از این 2 مد آخری استفاده نکردم، البته می شه کد زد و نتیجه اش رو چک کرد.
چیزی که برای Mode شماره 14 از جدول به نظرم می رسه، اینه که مقدار ICR1 همون top در نظر گرفته می شه ( فرضا بجای مقدار 0x03FF در مود 10 بیت، مقدار 0x0311 رو برابر Top می تونید انتخاب کنید. )
با این روش احتمالا دیگه نیاز نیست در زمان رفتن به وقفه TCCR رو مجدد مقدار دهی اولیه کرد و در این صورت همیشه از 0 شروع می کنیم به شمارش و لزوما نیازی به وقفه هم نیست.( با تعیین سقف برای Top به فرکانس مد نظر خواهیم رسید. )
البته برداشت من این بودهه و باید تست زد و در عمل دید که همین کار رو می کنه یا نه ...

موفق باشید.

۱۳-خرداد-۱۳۹۴, ۲۱:۴۸:۴۲
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : hamze_b, omid_phoenix
hamze_b آفلاین
كاربر تک ستاره
*

ارسال‌ها: 31
موضوع‌ها: 7
تاریخ عضویت: اردیبهشت ۱۳۹۴

تشکرها : 26
( 1 تشکر در 1 ارسال )
ارسال: #5
RE: راهنمایی برای کار با تایمر 1
متشکر
ببینید من میخوام یه قطار پالس با دیوتی سایکل و فرکانس متغیر و حداقل دقت 0.01Hz بسازم. میکرویی هم که ازش استفاده میکنم ATmega32 با فرکانس کاری 8MHz که به خاطر بقیه قسمتای برنامه م قابل تغییر نیست. به خاطر همین رفتم سراغ تایمر 1 که 16 بیتی و دقتش نسبت به تایمر 0 خیلی بیشتره، اما با حرفای شما متوجه شدم که اونم کارم رو راه نمیندازه، چون مقدارش از 65535 که فکر میکردم رسید به 1024. به نظر شما من برای ساخت این قطار پالس چیکار کنم؟؟؟؟؟ اگه میشه لطف کنید و راهنماییم کنید. ممنون
۱۳-خرداد-۱۳۹۴, ۲۲:۰۴:۰۳
ارسال‌ها
پاسخ
sharin آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 2,053
موضوع‌ها: 28
تاریخ عضویت: مرداد ۱۳۸۹

تشکرها : 3714
( 8171 تشکر در 2772 ارسال )
ارسال: #6
RE: راهنمایی برای کار با تایمر 1
نمی دونم واقعا چه کاربردی هست که نیاز به این دقت بالا داره!
شاید اون قسمت مدار رو بتونید طوری طراحی کنید که دقت کمتری نیاز داشته باشه ...
در هر صورت بین فرکانس و دیوتی سایکل همیشه یک trade-off وجود دارهه و این دقت رو بعید می دونم از یه فرکانسی بالاتر بشه ثابت نگه داشت!
با این اوصاف اگر می بینید AVR جوابگوی شما نیست، انتخاب بعدی ARM هست.
میکروی lpc1768 که الان واحد PWM اش رو یه مرور سریع کردم ، رجیسترهای شمارنده اش 32 بیتی هستن. می تونید جزئیات رو برای این واحدش بررسی کنید ببینید جوابگوی نیاز شما هست یا خیر ... .

موفق باشید.

۱۳-خرداد-۱۳۹۴, ۲۳:۱۰:۲۰
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : omid_phoenix, hamze_b, student-p
hamze_b آفلاین
كاربر تک ستاره
*

ارسال‌ها: 31
موضوع‌ها: 7
تاریخ عضویت: اردیبهشت ۱۳۹۴

تشکرها : 26
( 1 تشکر در 1 ارسال )
ارسال: #7
RE: راهنمایی برای کار با تایمر 1
ممنون
مداری که دارم طراحی میکنم، مدار تحریک تریستوره. دقت بالایی که میخوام هم برای اینه که تو دراز مدت نباید زاویه آتش تریستور که با همین قطار پالس تعیین میشه، تغییر کنه.
بازم ممنونم از شما دوست عزیز
۱۴-خرداد-۱۳۹۴, ۰۶:۲۰:۵۶
ارسال‌ها
پاسخ
student-p آفلاین
كاربر دو ستاره
**

ارسال‌ها: 168
موضوع‌ها: 24
تاریخ عضویت: مهر ۱۳۸۸

تشکرها : 18
( 125 تشکر در 76 ارسال )
ارسال: #8
RE: راهنمایی برای کار با تایمر 1
سلام خدمت دوستان بزرگوار

دوست عزيز فكر نكنم براي اين منظور ،به اون دقتي كه عنوان كردين نياز باشه،ضمن اينكه اگر براي مداري نظير كنترل توان بخواين استفاده كنين نهايت فركانس شما همون 50 هرتز هست....
و با خيال راحت ميتونيد از همين تايمر نهايت استفاده رو ببريد

موفقيت توانايي رفتن از شكستي به شكست ديگر بدون از دست دادن شور و حرارت است. (وينستون چرچيل)

بهترین لینک دنیا اینجا رو کلیک کن(هر چی بخوای هست)

۱۶-خرداد-۱۳۹۴, ۱۲:۰۲:۲۴
وب سایت ارسال‌ها
پاسخ
hamze_b آفلاین
كاربر تک ستاره
*

ارسال‌ها: 31
موضوع‌ها: 7
تاریخ عضویت: اردیبهشت ۱۳۹۴

تشکرها : 26
( 1 تشکر در 1 ارسال )
ارسال: #9
RE: راهنمایی برای کار با تایمر 1
ممنون،
ولی حرف شما وقتی درسته که فرکانس برق شهری دقیقا 50Hz باشه، ولی متاسفانه اینجور نیست. به همین علته که میخوام دقتش بالا باشه، چون اگه به فرض مثال فرکانس برق شهر 50.01Hz باشه و میکرو موج رو با فرکانس 50Hz بسازه، خطای زیر به وجود میاد:
فرکانس میکرو: 50Hz در نتیجه زمانی که طول میکشه تو یک دقیقه 3000=60*50 پالس فرستاده میشه. حالا برای فرکانس برق شهر، یعنی 50.01Hz ، همین 3000 پالس، 59.988 ثانیه طول میکشه، یعنی 0.0119976 خطا که میشه 59.988 درصد یک سیکل!!
این مقدار خطا برای یک دقیقه واقعا وحشتناکه. یعنی اگه به تریستور تو 30 درجه فرمان آتش بدی، بعد یک دقیقه زاویه آتش میشه 245.9568 درجه.
حالا فهمیدین که این همه دقت برا چیه؟؟؟؟
۲۳-خرداد-۱۳۹۴, ۱۰:۰۱:۳۹
ارسال‌ها
پاسخ
sharin آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 2,053
موضوع‌ها: 28
تاریخ عضویت: مرداد ۱۳۸۹

تشکرها : 3714
( 8171 تشکر در 2772 ارسال )
ارسال: #10
RE: راهنمایی برای کار با تایمر 1
مهندس پس کار مدار تشخیص گذر از صفر چیه اونوقت ؟! :d

۲۳-خرداد-۱۳۹۴, ۱۱:۴۲:۴۱
وب سایت ارسال‌ها
پاسخ
student-p آفلاین
كاربر دو ستاره
**

ارسال‌ها: 168
موضوع‌ها: 24
تاریخ عضویت: مهر ۱۳۸۸

تشکرها : 18
( 125 تشکر در 76 ارسال )
ارسال: #11
RE: راهنمایی برای کار با تایمر 1
(۲۳-خرداد-۱۳۹۴, ۱۰:۰۱:۳۹)hamze_b نوشته است: ممنون،
ولی حرف شما وقتی درسته که فرکانس برق شهری دقیقا 50Hz باشه، ولی متاسفانه اینجور نیست. به همین علته که میخوام دقتش بالا باشه، چون اگه به فرض مثال فرکانس برق شهر 50.01Hz باشه و میکرو موج رو با فرکانس 50Hz بسازه، خطای زیر به وجود میاد:
فرکانس میکرو: 50Hz در نتیجه زمانی که طول میکشه تو یک دقیقه 3000=60*50 پالس فرستاده میشه. حالا برای فرکانس برق شهر، یعنی 50.01Hz ، همین 3000 پالس، 59.988 ثانیه طول میکشه، یعنی 0.0119976 خطا که میشه 59.988 درصد یک سیکل!!
این مقدار خطا برای یک دقیقه واقعا وحشتناکه. یعنی اگه به تریستور تو 30 درجه فرمان آتش بدی، بعد یک دقیقه زاویه آتش میشه 245.9568 درجه.
حالا فهمیدین که این همه دقت برا چیه؟؟؟؟

دوست عزيز اين روش ك اصلا قابل قبول نييييييست،
روش صحيح كار اينه ك شما گذر از صفر رو تشخيص بدين و در ادامه به مقدار مورد نظرتون سيگنال تحريك رو ب گيت اعمال كنيد،اينطوري نياز به اون دقت زياد نياز نيست،

بطور مثال براي 50 درصد توان فقط نيازه براي 5 ميلي ثانيه گيت رو تو هر نيم سيكل تحريك كني ؛ك فكر كنم ايجاد چنين تاخيري كار سختي نباشه.


موفق باشيد

موفقيت توانايي رفتن از شكستي به شكست ديگر بدون از دست دادن شور و حرارت است. (وينستون چرچيل)

بهترین لینک دنیا اینجا رو کلیک کن(هر چی بخوای هست)

۲۳-خرداد-۱۳۹۴, ۱۳:۳۲:۳۵
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : hamze_b


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  درخواست راهنمایی برای یک دوست GOLDOST 1 0 ۱۵-بهمن-۱۴۰۲, ۰۰:۴۶:۵۱
آخرین ارسال: GOLDOST
  مشکل برنامه تایمر با بیسکام soy1345 7 2,026 ۲۲-فروردین-۱۳۹۸, ۲۰:۴۸:۰۶
آخرین ارسال: 1نفر
  راهنمایی در مورد کنترل دور موتور کولر sinastar 12 23,448 ۱۰-آبان-۱۳۹۷, ۱۰:۱۸:۵۹
آخرین ارسال: alimogmov
  درخواست راهنمایی منو سازی برای Atmega32 به زبان بیسیک برویglcd armin111 9 6,171 ۱۶-شهریور-۱۳۹۶, ۱۱:۳۹:۲۵
آخرین ارسال: sky_man847
  راهنمایی برای انتخاب پروگرامر Ambassador 5 8,523 ۰۴-مرداد-۱۳۹۶, ۱۶:۰۳:۵۹
آخرین ارسال: CONTOROLER
  درخواست راهنمایی ولوم دیجیتالی sobhan6831 0 2,210 ۰۶-اردیبهشت-۱۳۹۶, ۲۱:۱۷:۳۵
آخرین ارسال: sobhan6831
  مشکل در کار با تایمر 1 در بسکام klick 3 4,535 ۳۰-بهمن-۱۳۹۵, ۰۴:۰۴:۴۲
آخرین ارسال: omid_phoenix
  راهنمایی برای حل مشکل برنامه در بسکام fedagh 2 3,420 ۱۲-دى-۱۳۹۵, ۱۸:۳۰:۵۹
آخرین ارسال: fedagh
  درخواست راهنمایی درباره دماسنج و رطوبت سنج fedagh 2 3,195 ۰۳-دى-۱۳۹۵, ۰۱:۲۵:۰۷
آخرین ارسال: omid_phoenix
  درخواست راهنمایی از دوستان p.n 5 3,540 ۰۶-آذر-۱۳۹۵, ۲۳:۲۹:۱۹
آخرین ارسال: Ambassador

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 4 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS