اطلاعیه

Collapse
No announcement yet.

سوال در مورد کلاک خارجی برای atmega32

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    سوال در مورد کلاک خارجی برای atmega32

    سلام دوستان

    من یه برنامه برای کنترل جهت چرخش یه موتور DC با استفاده از L298 نوشتم. یه hall effect sensor هست با پالس هایی که به عنوان کانتر به پایه T1 وارد میشه به صورت فیدبک جهت چرخش رو کنترل میکنه.

    حالا مشکلی که دارم اینه که نمیدونم کانتر رو باید روی چه مدی بذارم، روی هر مدی که میذارم جواب نمیده! قاعدتا باید روی مد normal باشه. شایدم تنظیمات دیگه ای داره.

    کسی میتونه کمک کنه؟ :question:

    #2
    پاسخ : سوال در مورد کلاک خارجی برای atmega32

    سلام

    منظور از نرمال چیه؟

    تایمر1 یا 0 یا 2 یا ... رو توی مد کانتر تنظیم میکنی ... اگه کدویزن که توی ویزارد باید کلاک سورس رو بذاری روی Tx rising یا falling edge

    اگه با بیسکام برنامه مینویسی که میشه یه چیز توی این مایه ها

    Config Timer1 = Counter , Edge = Falling , Prescale = 1

    اگه سرعت پالسهات بیشتر از 7مگاهرتزه باید از یه مقسم فرکانس بذاری که من 74hc4020 رو برای رنج وسیعی از تقسیمها پیشنهاد میکنم

    چون تایمر AVR نمیتونه در مد کانتر بیشتر از 7mhz کلاک بگیره

    راستی سیگنال رو هم باید بدی به پایه Tx که x همون شماره تایمره و روی دیتاشیت میکرو مشخصه کدوم پایست
    به وبلاگم سر بزنید

    دیدگاه


      #3
      پاسخ : سوال در مورد کلاک خارجی برای atmega32


      برنامه رو توی کدویژن نوشتم:

      نوشته اصلی توسط alitaroosheh
      سلام

      منظور از نرمال چیه؟

      تایمر1 یا 0 یا 2 یا ... رو توی مد کانتر تنظیم میکنی ... اگه کدویزن که توی ویزارد باید کلاک سورس رو بذاری روی Tx rising یا falling edge

      اگه با بیسکام برنامه مینویسی که میشه یه چیز توی این مایه ها

      Config Timer1 = Counter , Edge = Falling , Prescale = 1

      اگه سرعت پالسهات بیشتر از 7مگاهرتزه باید از یه مقسم فرکانس بذاری که من 74hc4020 رو برای رنج وسیعی از تقسیمها پیشنهاد میکنم

      چون تایمر AVR نمیتونه در مد کانتر بیشتر از 7mhz کلاک بگیره

      راستی سیگنال رو هم باید بدی به پایه Tx که x همون شماره تایمره و روی دیتاشیت میکرو مشخصه کدوم پایست
      برای تایمرها (کانترها) توی کدویژن 4 تا مد تعریف شده، مد نرمال برای شمارش رو به بالاست که با توجه به کاری من میخوام همین به درد میخوره.
      سرعت پالسهای کانتر (سنسور اثر هال) خیلی زیاد نیست، در حدود 53 هرتزه برنابراین مشکل از فرکانس بالا نیست.
      من تایمر 1 رو در حالت rising قرار دادم، و پالس ورودی را به پایه T1 (همه اینارو چک کردم)


      سلام دوست من .
      آقا شما از سنسور اثر حال استفاده کردی ولی پیشنهاد من اپتوکوپلر U شکل هست که اصطلاح بازاریش هست اپتو کانتر .چون این المان خروجیش 3.5 ولت تولید می کنه که عالیه ! چون همون یک منطقیه . قیمتش هم 600 تومانه !

      دوما شما چرا داری برای شمارش از تایمر استفاده می کنی ؟
      در صورتی که تایمرتو در مد کانتر قرار بدی باید پورتتو خروجی تعریف کنی تا مقدار درون TCNT خراب نشه .این باعث میشه که مقدار قرار گرفته شده روی تایمر (کانتر) دقیق قرائت نشه .
      پیشنهاد من اینه که از وقفه های خارجی استفاده کنی . INT0 برای این منظور عالیه .به صورت Rising یا Falling هر چی دوست داری تعریف کن و تو زیر مجموعه ی وقفت یک متغیر رو کم و زیاد کن .

      و در ضمن مطمئن شو که سطح ولتاژ خروجی از سنسورت میتونه برای میکرو قابل فهم باشه یا نه ؟ اگه نه که تقویت کننده بذار سر راهش . OP Amp بذار .
      اگه OPAmp لازم شد پیشنهاد می کنم که LM358P بگیری که ولتاژ منفی نمیخاد .برای این که مطمئن شی خروجی سنسورت یک منطقی هست یا نه کاری رو که پایین گفتمو بکن .
      برای این کار یک پروژه ی ساده بنویس که وقتی سنسورتو تحریک کردی LED که رو یکی از پورتهاست روشن بشه و وقتی سنسور از حالت تحریک در اومد LED خاموش بشه .

      راستی از چه برنامه ای استفاده می کنی ؟ CodeVision ? Bascom ? یا چی ؟

      اگه با وقفه های خارجی هم مشکل داشتی بهم بگو تا راهنماییت کنم .
      1- این برنامه که من دارم تو کدویژن مینویسم قبلاً با بسکام نوشته شده و با همون سخت افزارها جواب داده، بنابراین اشکال از سخت افزار نیست!!
      2- اون چیزی که من باید کنترلش کنم یه پایه مکانیکیه که به یه موتور وصله و سنسور اثر هال داره، بنابراین مجبورم از این سنسور استفاده کنم.

      3- وقتی در حالت کانتر هستیم، مگه پالس به میکرو وارد نمیشه؟ تو wizard دو تا پایه هست که میتونی بهش کلاک خارجی بدی: PORTB.0 و PORTB.1 که همون T1 و T0 هست. اگه مثلاً روی T1 تنظیم کنی باید این پایه رو ورودی تعریف کنی تا پالس بتونه وارد میکرو بشه و با یه برنامه به میکرو فرمان بده، اگر خروجی تعریف بشه که اصلاً پالسی وارد میکرو نمیشه؟!!

      4- من یه برنامه ساده مثل این رو نوشتم و موتور کاملاً بهش جواب داده:


      PORTC.0=1;
      PORC.1=0;
      delay_ms(500);

      (تا اینجا موتور به اندازه 500 میلی ثانیه در یک جهت خاص میچرخه)
      PORTC.0=0;
      PORC.1=1;
      delay_ms(500);

      توی این قسمت هم به اندازه 500 میلی ثانیه در جهت مخالف میچرخه

      از اونجا که این برنامه جواب داده، مطمئن شدم که ایراد از تنظیمات کانتر هست.

      5- اما در مورد وقفه ها، من خیلی باهاش کار نکردم اگه یه توضیحی بدید ممنون میشم!
      البته من کتاب امیر ره افروز رو دارم، اونجا وقفه ها رو خوب گفته؟؟ اگه خوب گفته که برم از رو کتاب بخونم

      با تشکر





      دیدگاه


        #4
        پاسخ : سوال در مورد کلاک خارجی برای atmega32

        کسی نظری راجع این مشکل نداره؟!! :sad:

        دیدگاه


          #5
          پاسخ : سوال در مورد کلاک خارجی برای atmega32

          دوباره سلام، مشکل حل شد

          کافی بود تایمر روی مد نرمال باشه و مقدار TCNT رو توی برنامه هر جا که لازم بود صفر قرار بدی تا از اول بشماره!

          یه سوال دیگه:

          این برنامه هم با بسکام نوشته شده و هم با کدویژن، ولی یه فرقی دارن که هرچی فکر کردم به نتیجه نرسیدم، وقتی برنامه بسکام رو روی میکرو پروگرام میکنم ولتاژ پایه T1 که کلاک خارجی رو میگیره در حدود 2.1 ولته، ولی با کدویژن حدود 4.85 ولت!!! توی هر دو تا برنامه هم تایمرها به صورت معمولی استفاده شدن، یعنی هیچ برنامه خاصی روشون اعمال نشده! کسی میدونه ولتاژ پایه ای که از سنسور هال پالس میگیره در چه حالتی تغییر میکنه؟ تنظیمات تایمر توی کدویژن و بسکام چه فرقی داره که باعث میشه ولتاژ پایه تغییر کنه؟

          منتظر نظراتتون هستم، ممنون

          دیدگاه


            #6
            پاسخ : سوال در مورد کلاک خارجی برای atmega32

            دوباره سلام

            ادامه سوالی که تو پست قبلم کرده بودم :
            علاوه بر اختلاف ولتاژی که ایجاد میشه یه چیز دیگه هم هست: همونطور که گفتم این پروژه یک فیدبک از سنسور اثر هال میگیره، یعنی این سنسور همزمان با چرخش موتور یه سری پالس به میکرو میده که معلوم میکنه که چه مقدار از حرکت در جهت مورد نظر انجام شده.

            حالا مشکلی که هست:
            برنامه ای که با بسکام نوشته شده نشون داده که به ازای هر پالسی که از سنسور هال میاد، جک مکانیکی که به موتور وصله 0.057 میلیمتر حرکت میکنه
            ولی وقتی این برنامه رو من با کدویژن نوشتم این عدد به 0.296 میلیمتر رسیده!! اختلاف خیلی زیاده!! اول فکر کردم که اشکال از پروگرمره ولی از استادمون پرسیدم، گفت احتمالش هست که کامپایلرهای کدویژن و بسکام این اختلاف رو ایجاد کرده باشه و ایراد از پروگرمر نیست! کسی تا حالا به این مشکل برخورد نکرده که یه برنامه توی کدویژن و بسکام نتیجه های متفاوت بدن؟؟ :sad:

            البته یه نکته هم هست: سرعت موتور هیچ تغییری نکرده!!

            دیدگاه

            لطفا صبر کنید...
            X