اطلاعیه

Collapse
No announcement yet.

ساخت ربات شست و شو

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

    #16
    پاسخ : ساخت ربات شست و شو

    جدای ازین الگوریتمی که توضیح دادین بنده یه مشکل دیگه هم دارم اونهم اینه که همین الگوریتم با خطایی که رو ربات پیاده کردم و شما هم در موردش توضیح دادید جواب نمیده

    یعنی اینکه مثلا بهش گفتم اگر به مقدار 45 پالس رسیدی 90 درجه بچرخ رو هم انجام نمیده

    کدش رو هم ضمیمه کردم اگه امکان داره بررسی بفرمایید

    پیشاپیش ازین که سطح برنامه نوشته شده پایین هست بنده رو ببخشید

    کد:
    https://www.dropbox.com/s/ar47zfhbkveouyq/robot.bas?dl=0

    دیدگاه


      #17
      پاسخ : ساخت ربات شست و شو

      دوستان به علت اینکه این پروژه برای دوره کاردانی بنده هست و دیگه فرصتی ندارم از هوشمند به کنترلی تغییرش دادم اما یه مشکلی که دارم اینه که نمی تونم

      سرعت موتورا رو کنترل کنم یعنی کار با pwm روی پایه دلخواه رو بلد نیستم لطفا راهنماییم کنید

      دیدگاه


        #18
        پاسخ : ساخت ربات شست و شو

        سلام
        کجاشو بلد نیستی؟
        یه pwm میسازی و میدیش به پایه EN درایور موتور.
        بعد با کم و زیاد کردن عرض قسمت high موج pwm تووی نرم افزار، میتونی دور موتور رو کم و زیاد کنی.
        تووی میکرو می تونی از پایه هایی که خود میکرو برای خروجی موج pwm در نظر گرفته استفاده کنی که در این صورت وقت cpu به صورت بهینه استفاده می شه. اما میتونی خودت یه موج از طریق حلقه تووی برنامه و روی پایه دلخواهت درست کنی که در این صورت باید حداقل یه بخشی از وقت cpu رو به این کار اختصاص بدی که این روش زیاد مناسب نیست. (البته اگه کدهای کنترلی دیگه تووی برنامت کمه می تونی از این روش هم استفاده کنی)

        دیدگاه


          #19
          پاسخ : ساخت ربات شست و شو

          ممنون که جواب دادین

          ولی بنده کار با تایمرها رو بلد نیستم و دو تا موتور رو میخوام کنترل سرعت کنم

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

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

          کد:
          #include <mega8.h>
          #include <delay.h>
          #define xtal 4000000
          
          
          
          void main(void)
          {
          
           
          PORTB=0x00;
          DDRB=0x00;
          
          // Port C initialization
          // Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
          // State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
          PORTC=0x00;
          DDRC=0x7F;
          
          // Port D initialization
          // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
          // State7=P State6=P State5=P State4=P State3=P State2=P State1=P State0=P 
          PORTD=0xFF;
          DDRD=0x00;
          
          // Timer/Counter 0 initialization
          // Clock source: System Clock
          // Clock value: Timer 0 Stopped
          TCCR0=0x00;
          TCNT0=0x00;
          
          // Timer/Counter 1 initialization
          // Clock source: System Clock
          // Clock value: Timer1 Stopped
          // Mode: Normal top=0xFFFF
          // OC1A output: Discon.
          // OC1B output: Discon.
          // Noise Canceler: Off
          // Input Capture on Falling Edge
          // Timer1 Overflow Interrupt: Off
          // Input Capture Interrupt: Off
          // Compare A Match Interrupt: Off
          // Compare B Match Interrupt: Off
          TCCR1A=0x00;
          TCCR1B=0x00;
          TCNT1H=0x00;
          TCNT1L=0x00;
          ICR1H=0x00;
          ICR1L=0x00;
          OCR1AH=0x00;
          OCR1AL=0x00;
          OCR1BH=0x00;
          OCR1BL=0x00;
          
          // Timer/Counter 2 initialization
          // Clock source: System Clock
          // Clock value: Timer2 Stopped
          // Mode: Normal top=0xFF
          // OC2 output: Disconnected
          ASSR=0x00;
          TCCR2=0x00;
          TCNT2=0x00;
          OCR2=0x00;
          
          // External Interrupt(s) initialization
          // INT0: Off
          // INT1: Off
          MCUCR=0x00;
          
          // Timer(s)/Counter(s) Interrupt(s) initialization
          TIMSK=0x00;
          
          // USART initialization
          // USART disabled
          UCSRB=0x00;
          
          // Analog Comparator initialization
          // Analog Comparator: Off
          // Analog Comparator Input Capture by Timer/Counter 1: Off
          ACSR=0x80;
          SFIOR=0x00;
          
          // ADC initialization
          // ADC disabled
          ADCSRA=0x00;
          
          // SPI initialization
          // SPI disabled
          SPCR=0x00;
          
          // TWI initialization
          // TWI disabled
          TWCR=0x00;
          
          while (1)
             { 
             
             
             
           if (PIND.0 & PIND.2 ==1){
              delay_ms (250); 
            PORTC.5=1;  
            }
            
           if (PIND.0==1 & PIND.0==1)
           {    
             delay_ms (250);
            PORTC.5=0; 
            }
           if (PIND.3==1 & PIND.2==1){ 
           
              delay_ms (250);
             PORTC.3=0;
             PORTC.2=0;
             PORTC.1=0;
             PORTC.0=0; 
             }
            if (PIND.1==1) {
                delay_ms (250);
              PORTC.3=1;
              PORTC.2=0;
              PORTC.1=1;
              PORTC.0=0;  
              } 
            if (PIND.3==1) {
                delay_ms (250);
             PORTC.3=0;
             PORTC.2=1;
             PORTC.1=0;
             PORTC.0=1; 
             }
                    
            if (PIND.0==1) { 
                delay_ms (250);
             PORTC.3=1;
             PORTC.2=0;
             PORTC.1=0;
             PORTC.0=0; 
             }   
            if (PIND.2==1) {
                delay_ms (250);
             PORTC.3=0;
             PORTC.2=0;
             PORTC.1=1;
             PORTC.0=0; 
             }  
               
             
           }  
          }

          دیدگاه


            #20
            پاسخ : ساخت ربات شست و شو

            نوشته اصلی توسط va8m
            فیلتر کالمن یه الگوریتمه (چنتا فورمول).فیلتر کالمن میاد داده 2 تا سنسور که هر دو دارای خطا هستند رو تلفیق میکنه و داده تصحیح شده(که بهتر از اون دوتاست) رو میده. فیلتر کالمن علاوه بر داده 2 سنسور به واریانس اون هم نیاز داره.مثلا سنسور شتابسنج داده دقیقی میده ولی نویزیه و برای بدست آوردن واریانس اون باید شتابسنجو ساکن بذارید(طوری که بدونید سنسور باید چه عددی بهتون بده) و مثلا 50 تا دیتا از اون بگیرید و بعد واریناس خطا های اونا رو حساب کنید.
            این کلیتش بود.
            دوست جان اینجوری بهش نگو "چندتا فورموله"(!)
            باور کن من له شدم زیر این چند تا فرمول و آخرش هم هیچی نفهمیدم!!
            البته ریاضیم خیلی خوب نیست ولی بازم اگه شما میتونی این فیلتر رو واقعا با چندتا فرمول به ما بفهمونی واقعا به هممون لطف کردی!
            آخه منم تو یه پروژه به این موضوع برخوردم و حسابی گیر کردم!

            دیدگاه


              #21
              پاسخ : ساخت ربات شست و شو

              الان یه کنترل 4 کاناله روش سوار کردم

              موتور ها با درایور ba6219 راه اندازی می شن و ورودی کنترلشون هم به پورت سی میکرو وصله یعنی c0,c1,c2,c3 ورودی کنترل 4 کاناله رو هم دادم به پورت دی دوستان مدار بسته شده ، الان مشکل سرعت بالای ربات رو دارم میخوام بتونم سرعت موتور ها رو کم و زیاد کنم

              دیدگاه


                #22
                پاسخ : ساخت ربات شست و شو

                این عکس مربوط به تنظیمات لازم برای ساخت PWM روی خروجی های از پیش تعیین شده میکرو:



                شکل 1 مربوط به انتخاب میکرو و تعیین فرکانس کاریش.
                شکل 2 مربوط میشه به تنظیمات تایمر 1 که ما میخوایم باهاش موج PWM بسازیم. میبینید که تووی این قسمت تایمر 1 انتخاب شده و منبع کلاک، کلاک سیستم با تقسیم به 1 (همون 4MHz)، مد کاری Fast PWM با مقدار TOP ای که میبینید تعیین شده. خروجی ها هم از حالت Disconnect خارج شدن و به صورت معکوس نشده استفاده می شن.
                توو شکل 3 میتونید ببینید که پایه های 15 و 16 مربوط به خروجی موج PWM ساخته شده هستش (که در واقع به ورودی EN درایورتون متصل میشن.)

                وقتی این تنظیمات رو انجام دادین، تووی برنامه میتونید مقدار ذخیره شده تووی رجیستر های OCR1A و OCR1B رو تغییر بدین.
                OCR1A=255; یعنی حداکثر دور موتور.
                OCR1A=0; یعنی موتور خاموش.
                بنابراین هر وقت خواستین دور موتور رو تغییر بدین، یکبار مقدار داخل این رجیستر رو عوض می کنید.

                دیدگاه


                  #23
                  پاسخ : ساخت ربات شست و شو

                  ممنون که راهنمایی کردید

                  تا چند روزه آینده برنامه و چندتا تصویر از پروژه ساخته شده رو میزارم شاید به درد کسی خورد

                  دیدگاه

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