اطلاعیه

Collapse
No announcement yet.

کمک در مورد راه اندازی موتورهای DC با AVR

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

    کمک در مورد راه اندازی موتورهای DC با AVR

    از دوستان کسی می تونه در مورد برنامه این پروژه توضیح بده و همچنین طرز کار این L298
    البته برنامش می خوام هر بخشش توضیح داده بشه که مربوط به چه قسمتی هستش



    #include <mega16.h>

    #asm
    .equ __lcd_port=0x1B ;PORTA
    #endasm
    #include <lcd.h>
    #include<delay.h>
    void display_no(int no);
    void direction(char dir);

    void main(void)
    {

    PORTA=0x00;
    DDRA=0x00;
    PORTB=0x00;
    DDRB=0x08;

    PORTC=0x00;
    DDRC=0x00;

    PORTD=0x00;
    DDRD=0xFF;

    TCCR0=0x6A;
    TCNT0=0x00;
    OCR0=0x00;

    TCCR1A=0x00;
    TCCR1B=0x00;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;


    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;


    MCUCR=0x00;
    MCUCSR=0x00;

    TIMSK=0x00;

    ACSR=0x80;
    SFIOR=0x00;


    lcd_init(16);
    PORTC=255;
    direction(3);
    while (1)
    {

    if (PINC.2==0 || PINC.3==0 || PINC.4==0 )
    {
    delay_ms(10);
    if (PINC.2==0)
    direction(1);
    if (PINC.3==0)
    direction(2);
    if (PINC.4==0)
    direction(3);

    }

    lcd_gotoxy(0,1);
    lcd_putsf(" "
    lcd_gotoxy(0,1);
    lcd_putsf("OCR0: "
    display_no(OCR0);

    if (PINC.0==0 || PINC.1==0 )
    {
    delay_ms(10);

    if (PINC.0==0)
    {

    if (OCR0> 250)
    OCR0=255;
    else
    OCR0=OCR0+5;
    }
    else if (PINC.1==0)
    {

    if(OCR0<5)
    OCR0=0;
    else
    OCR0=OCR0-5;
    }
    }
    else
    {


    }

    }
    }

    /////////////////////////
    void direction(char dir)
    {
    switch(dir)
    {
    case 1:
    PORTD.0=0;
    PORTD.1=1;
    lcd_clear();
    lcd_putsf("Direction: Left "
    break;

    case 2:
    PORTD.0=1;
    PORTD.1=0;
    lcd_clear();
    lcd_putsf("Direction: Right "
    break;

    case 3:
    PORTD.0=0;
    PORTD.1=0;
    lcd_clear();
    lcd_putsf("Direction: Brake "
    break;
    }
    }
    /////////////////////////
    void display_no(int no)
    {
    int array[5];
    int i=0,j;
    /*if( no < 0)
    {
    lcd_putchar('-'
    no=-1*no;
    }
    else
    lcd_putchar('+'*/
    while(no > 9)
    {
    array[i++]=no % 10;
    no/=10;
    }
    array[i]=no;
    for(j=i;j >=0 ;j--)
    {
    lcd_putchar(48+array[j]);
    delay_us(100);
    }

    }

    /////////////////////////
    /////////////////////////

    اینم لینک فایل proteus

    دانلود پروژه

    حجمش 22kb

    #2
    پاسخ : کمک در مورد راه اندازی موتورهای DC با AVR

    ایول عجب سایتی :applause: :applause: :applause: :applause: :applause: :applause:
    یعنی کسی تو این سایت پیدا نمیشه به ما کمک کنه

    دیدگاه


      #3
      پاسخ : کمک در مورد راه اندازی موتورهای DC با AVR

      شما کدوم قسمت رو مشکل داری
      اگه هیچ قسمتی رو متوجه نمیشی پس توضیحات بقیه چه فایده داره زمانی که شما از برنامه هیچی سر در نمیاری



      اگه مردم می دونستن زمان چقدر با ارزشه دیگه هیچ وقت کفش بند دار نمی خریدن البرت انیشتن

      دیدگاه


        #4
        پاسخ : کمک در مورد راه اندازی موتورهای DC با AVR

        while (1)
        {

        if (PINC.2==0 || PINC.3==0 || PINC.4==0 )
        {
        delay_ms(10);
        if (PINC.2==0)
        direction(1);
        if (PINC.3==0)
        direction(2);
        if (PINC.4==0)
        direction(3);

        }

        اینقدر ها هم بیسواد نیستیم یکم c بلدیم من فقط می خوام بدونم که هر قسمت کارش چیه و مرتبط با کجای کار موتور هست مثلا کدهای بالا برای مربوط به لرزش گیر یا همون دیبانس هستش حالا شما لطف کنید و توضیح بیشتری بدین ممنون میشم یا مثلا همینجوری کدهای هر قسمت مثلا جایی که تعداد دور رو مشخص می کنه و... بزارید و توضیح بدین البته بازم ممنون که شما لااقل بعد از چندروز یه جواب دادین

        دیدگاه


          #5
          پاسخ : کمک در مورد راه اندازی موتورهای DC با AVR

          سلام دوست عزیز

          البته به نظر من چیزی که گفتی اشتباه این کد در واقع بخشی از کد یه روبات تعقیب خطه که اون قسمت کد که گفتید دیبانس در واقع داره سنسوره های متصل شده به پورت c رو می خونه حالا داره چک میکنه که کدوم سنسور فعال شده و بعد با جهت موتور رو با توجه به سنسور مربوطه تغییر می ده.

          تابع direction جهت موتورها رو تغییر میده البته قسمت 3 این تابع دستور توقف رو میده ( brake نه باید بنویسی break )

          تابع display_no عدد رو روی lcd نمایش می ده ( الیته اگه من بودم از تابع sprintf استفاده می کردم)

          قسمت ابتدایی مربوط به هدر فایل و پایه lcd و پیش تعریف توابع است.

          قسمت بعد از main پیکربندب پورت ها و تایمر صفر که مهمترینش اینه که تایمر صفربه عنوان PWM استفاده شده پورت C به عنوان وردی و بضی از پین های پورت b به عنوان خروجی پیکربندی شده

          قبل از ()while تابع gcd مقداردهی اولیه شده بعد مقاومت pullup داخلی پورت c فعال شده( چون سنسور ها active low هستند) بعد تابع direction برای دستور توقف استفاده شده

          در داخل ()while هم مرتبا سنسور ها چک شده وتابع direction صدا زده میشه و عدد رجیستر OCR0 روی lcd نمایش داده میشه ومقدار اون تغییر داده میشه

          اگه جایی دیگشو نفهمیدی بگو تا بهت بگم

          دیدگاه


            #6
            پاسخ : کمک در مورد راه اندازی موتورهای DC با AVR

            بابت توضیحات ممنونم
            درمورد دیبانس که حرفم درسته چون در موردش قبلا خوندم و تو مدارم من به خاطر وجود کلید ازش استفاده شده فایلهای مدار رو هم تو پست اول گذاشتم حجمی هم نداره اگه دانلود کنید شاید بهتر بتونید کمک کنید اخه مشکل من اینه که استادم خیلی خیلی آدم گیریه و زیاد گیر می ده .برای همین جزئیات رو می خوام تو برنامه نویسی AVR هم چیز زیادی نمی دونم حالا شما که زحمت کشیدین یه کم وارد جزئیات میشدین و بیشتر توضیح می دادین مخصوصاإ¾ً این قسمت تعیین دور .
            بازم ممنون

            دیدگاه


              #7
              پاسخ : کمک در مورد راه اندازی موتورهای DC با AVR

              سلام دوست عزیز

              البته من با تصور اینکه سنسور به میکرو وصل شده گفتم که دیبانس نیست آخه سنسور بانسی نداره که بخوایم دیبانس براش در نظر بگیریم ولی اگه سنسور نباشه و کلید باشه اون موقع حق با شماست :applause: آخه من هنوز شماتیک روندیدم . :sad:

              قول نمیدم ولی اگه وقت داشتم سعی می کنم امشب یه خورده بیشتر توضیح بدم الیته بازم میگم قول نمی دم اگه وقت شد

              ولی تا اون موقع هم خودت میتونی مطالب زیادی رو دو مورد PWM و L298 پیدا کنی فقط کافی توی گوگل سرچ کنی فکر میکنم خیلی بهتر باشه .

              موفق باشی :bye

              دیدگاه


                #8
                پاسخ : کمک در مورد راه اندازی موتورهای DC با AVR

                راستی اینم آدرس مقاله که توسط آقای بادامی نجات تهیه شده من نگاه کردم تقریبا کامله و میتوه راحت جوابگوی کارت باشه .

                اینم لینک مقاله http://dlc.eca.ir/index.php?act=view&id=108

                دیدگاه


                  #9
                  پاسخ : کمک در مورد راه اندازی موتورهای DC با AVR

                  نوشته اصلی توسط پیمان ذوالنوری
                  راستی اینم آدرس مقاله که توسط آقای بادامی نجات تهیه شده من نگاه کردم تقریبا کامله و میتوه راحت جوابگوی کارت باشه .

                  اینم لینک مقاله http://dlc.eca.ir/index.php?act=view&id=108

                  l298 که خیلی در موردش خوندم در مورد pwm قبلا خوندم تو هیمن سایت هم چندتا مطلب بود ولی خوب هنوز کامل برام جا نیفتاده بازم از راهنمایی هات ممنون واقعاً درای لطف بزرگی بهم می کنی
                  در مورد مقاله هم ممنون خیلی خوب بود
                  منتظر راهنمایی های بیشترتون هستم
                  :applause: :applause: :applause: :applause: :applause: :applause: :applause: :applause: :applause:

                  دیدگاه


                    #10
                    پاسخ : کمک در مورد راه اندازی موتورهای DC با AVR

                    از دوستان دیگه کسی نیست اطلاعات کاملتری بده نیاز فوری بهش دارم 4 شنبه باید تحویلش بدم دوستان اگه می تونن دریغ نکنن :applause: :applause:

                    دیدگاه


                      #11
                      پاسخ : کمک در مورد راه اندازی موتورهای DC با AVR

                      سلام دوست من،واسه کنترل موتور DC از کتاب AVR الوندی/ناشر:نص استفاده کن!با L298 , L293

                      دیدگاه


                        #12
                        پاسخ : کمک در مورد راه اندازی موتورهای DC با AVR

                        یه سوال دیگه هم دارم اینکه با زدن هربار کلید دور موتور چندتا تغییر می کنه

                        کتاب هم اینقدر خوندم که هیچی متوجه نمیشم . مشکل اصلی من توضیح در مورد برنامشه

                        دیدگاه


                          #13
                          پاسخ : کمک در مورد راه اندازی موتورهای DC با AVR

                          یکی پا بزاره تو معرفت و یه کمک اساسی به ما بکنه 3 روز دیگه باید تحویلش بدم

                          دیدگاه


                            #14
                            پاسخ : کمک در مورد راه اندازی موتورهای DC با AVR

                            :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry:

                            دیدگاه


                              #15
                              پاسخ : کمک در مورد راه اندازی موتورهای DC با AVR

                              #include <mega16.h>
                              اضافه کردن هدر فایل مربوط به میکرو مورد استفاده این خط باید در اینتدای برنامه بیاید

                              #asm
                              .equ __lcd_port=0x1B ;PORTA
                              #endasm

                              مشخص میکند که lcd به پورت A متصل شده است این دستور همیشه به صورت اسمبلی نوشته می شود.

                              #include <lcd.h>
                              #include<delay.h>

                              دو هدر فایل مربوط به lcd و توابع تاخیری به برنامه اضافه شده است .

                              void display_no(int no);
                              void direction(char dir);

                              پیش تعریف تابع های مذکور نوشته شده در زبان C اگر بخواهیم اصل توابع را بعد از تابع main بنویسیم باید پیش تعریف اونها رو قبل از main قرار بدیم فرق پیش تعریف یه تابع با تعریغ اصلی تابع اینه که در انتهای پیش تعریف سیمی کالن قرار میگیره ولی در تعریف یه تابع سیمی کالن قرار نمیگیره و بدنه اطلی تابع بعداز تعریف اصلی میاد نه بعد از پیش تعریف .

                              void main(void)
                              {

                              تابع اصلی برنامه، هر برنامه C طبیعتا دارای این تابع است

                              PORTA=0x00;
                              DDRA=0x00;

                              پورت A به عنوان ووردی و با مقدار اولیه صفر پیکربندی شده



                              PORTB=0x00;
                              DDRB=0x08;

                              پایه PORTB.3 به عنوان خروجی(چون خروجی PWM تایمر صفر است) و بقیه پایه های پورت B به عنوان ورودی تعریف شده مقدار اولیه پورت برابر صفر است.



                              PORTC=0x00;
                              DDRC=0x00;

                              پورت C به عنوان ووردی و با مقدار اولیه صفر پیکربندی شده


                              PORTD=0x00;
                              DDRD=0xFF;

                              پورت D به صورت خروجی با مقدار اولیه صفر پیکربندی شده


                              TCCR0=0x6A;
                              TCNT0=0x00;
                              OCR0=0x00;

                              تایمر صفر در حالت FAST PWM و در مودNON INVERTING با فرکانس یک هشتم فرکانس کریستا ل پیکربندی شده



                              TCCR1A=0x00;
                              TCCR1B=0x00;
                              TCNT1H=0x00;
                              TCNT1L=0x00;
                              ICR1H=0x00;
                              ICR1L=0x00;
                              OCR1AH=0x00;
                              OCR1AL=0x00;
                              OCR1BH=0x00;
                              OCR1BL=0x00;


                              ASSR=0x00;
                              TCCR2=0x00;
                              TCNT2=0x00;
                              OCR2=0x00;

                              برای پکربندی تایمر یک و تایمر دو استفاده شده چون با این پیکربندی هر دو تایمر خاموش هستند نوشتن این کد هم لازم نیست در واقع برنامه بدون این کد ها هم کار میکنه !


                              بقیه برنامه هم اگه مشکل داشتی بگو خدایی اگه با مفاهیم آشنا باشی برنامه نسبتا ساده است و راحت میتونی درکش کنی

                              اگه سوالی داشتی بپرس

                              فعلا :bye



                              دیدگاه

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