اطلاعیه

Collapse
No announcement yet.

کوادروتور

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

    #46
    پاسخ : کوادروتور

    الان شما این دو تا را با هم مقایسه کنید.
    http://roboeq.ir/products/detail/%D9%85%D9%88%D8%AA%D9%88%D8%B1%20%D8%A8%D8%B1%D8%A 7%D8%B4%D9%84%D8%B3%20EMAX%20MT2213/

    http://roboeq.ir/products/detail/0113026/
    آیا جهالت نیست که آدمی ساعات شیرین امروز را فدای روزهای آینده کند؟

    دیدگاه


      #47
      پاسخ : کوادروتور

      نوشته اصلی توسط pooyan-shafiei
      الان شما این دو تا را با هم مقایسه کنید.
      http://roboeq.ir/products/detail/%D9%85%D9%88%D8%AA%D9%88%D8%B1%20%D8%A8%D8%B1%D8%A 7%D8%B4%D9%84%D8%B3%20EMAX%20MT2213/

      http://roboeq.ir/products/detail/0113026/
      لینک ها کار نمیکنن.
      اما اگر ۴۲ باشه و مشخصاتش مخصوصا تراست و جریان کشیش مثل اون باشه خوبه

      دیدگاه


        #48
        پاسخ : کوادروتور

        http://roboeq.ir/compare/

        دیدگاه


          #49
          پاسخ : کوادروتور

          میشه کل برنامه نویسی این رو توضیح بدین من سطح خیلی پاینه . :sad:
          من بالا تر از موتور های پله ای و معمولی راه اندازی نکردم.
          و امکان داره سخت افزار رو هم توضیح بدین مثلا مقاومت FB و...

          دیدگاه


            #50
            پاسخ : کوادروتور

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

            دیدگاه


              #51
              پاسخ : کوادروتور

              سلام دوستان کجا رفتید دشارژ شدید««
              خواهش میکنم شروع کنید
              [img width=176 height=100]http://s6.picofile.com/file/8219555100/y1n8mde2ggfr.gif[/img]

              http://s6.picofile.com/file/8249184400/yas_and_aligator.mp3.html
              -----------------------------------------------------------------------

              دیدگاه


                #52
                پاسخ : کوادروتور

                من پی سی بیش را زدم.لحیم هم کردم.ولی فعلا راه نیوفتاده.
                کد هم یه تغییراتی دادم بهتر شد ولی هنوز مونده تا کامل راه بیوفته.
                فعلا ورژن جدیدترش را داشته باشید.
                کد:
                /*****************************************************
                This program was produced by the
                CodeWizardAVR V2.05.3 Standard
                Automatic Program Generator
                © Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
                http://www.hpinfotech.com
                
                Project : BLDC MOTOR CONTROLLER
                Version : 1
                Date  : 24/06/2015
                Author :
                
                Chip type        : ATmega48PA
                AVR Core Clock frequency: 12.000000 MHz
                Memory model      : Small
                External RAM size    : 0
                Data Stack size     : 128
                *****************************************************/
                
                #include <mega48pa.h>
                #include <delay.h>
                //ACTIVE LOW OR HIGH ???????????????????????
                #define ACTIVE_LOW_LSIDES		  	1	// 1: Active-LOW, 0: Active-HIGH ( for low side MOSFETs )
                //PWM init value
                #define START_PWM  					30
                #define TOP_PWM							255
                ////////////////////////////////////////////////////
                
                //Pin configuration
                  //PHASE1 (U)
                  #define UH_DDR         DDRB.3
                  #define UH_PRT         PORTB.3
                
                  #define  UH_PWM_CTRL     TCCR2A
                  #define  UH_PWM_MOD      COM2A1
                  #define  UH_PWM_SET      OCR2A
                
                  //PHASE1 (U)
                  #define UL_DDR         DDRB.1
                  #define UL_PRT					PORTB.1
                
                	//PHASE2 (V)
                	#define VH_DDR					DDRD.5
                	#define VH_PRT					PORTD.5
                
                	#define	VH_PWM_CTRL				TCCR0A
                	#define	VH_PWM_MOD				COM0B1
                	#define	VH_PWM_SET				OCR0B
                
                	//PHASE2 (V)
                	#define VL_DDR					DDRB.2
                	#define VL_PRT					PORTB.2
                
                	//PHASE3 (W)
                	#define WH_DDR					DDRD.3
                	#define WH_PRT					PORTD.3
                
                	#define	WH_PWM_CTRL				TCCR2A
                	#define	WH_PWM_MOD				COM2B1
                	#define	WH_PWM_SET				OCR2B
                
                	//PHASE3 (W)
                	#define WL_DDR					DDRC.3
                	#define WL_PRT					PORTC.3
                
                /////////////////////////////////////////////////////////
                
                	//SENSE ADC chanels
                	#define SENSE_U					ADMUX = 0;
                	#define SENSE_V					ADMUX = 1;
                	#define SENSE_W					ADMUX = 2;
                
                /////////////////////////////////////////////////////////
                
                  #define OUT           1
                  #define IN           0
                
                /////////////////////////////////////////////////////////
                
                	#define UH_ON()					UH_PWM_CTRL |= (1 << UH_PWM_MOD);
                	#define UH_OFF()				UH_PWM_CTRL &= ~(1 << UH_PWM_MOD);
                
                	#define VH_ON()					VH_PWM_CTRL |= (1 << VH_PWM_MOD);
                	#define VH_OFF()				VH_PWM_CTRL &= ~(1 << VH_PWM_MOD);
                
                	#define WH_ON()					WH_PWM_CTRL |= (1 << WH_PWM_MOD);
                	#define WH_OFF()				WH_PWM_CTRL &= ~(1 << WH_PWM_MOD);;
                
                //////////////////////////////////////////////////////////
                
                	#if ACTIVE_LOW_LSIDES					// Active-LOW
                		#define UL_ON()						UL_PRT = 0;
                		#define UL_OFF()					UL_PRT = 1;
                
                		#define VL_ON()						VL_PRT = 0;
                		#define VL_OFF()					VL_PRT = 1;
                
                		#define WL_ON()						WL_PRT = 0;
                		#define WL_OFF()					WL_PRT = 1;
                	#else								// Active-HIGH
                		#define UL_ON()						UL_PRT = 1;
                		#define UL_OFF()					UL_PRT = 0;
                
                		#define VL_ON()						VL_PRT = 1;
                		#define VL_OFF()					VL_PRT = 0;
                
                		#define WL_ON()						WL_PRT = 1;
                		#define WL_OFF()					WL_PRT = 0;
                	#endif
                
                ////////////////////////////////////////////////////////////
                
                	#define PHASE_ALL_OFF()				{UH_OFF(); UL_OFF(); VH_OFF(); VL_OFF(); WH_OFF(); WL_OFF();}
                
                	#define UH_SET(x)							UH_PWM_SET = x;
                	#define VH_SET(x)							VH_PWM_SET = x;
                	#define WH_SET(x)							WH_PWM_SET = x;
                
                /////////////////////////////////////////////////////////////
                #define TIMER1_reset()				TCNT1H = TCNT1L = 0;					//set TIMER1 value (system tick)
                #define COMP_enable()				ACSR |= (1 << ACIE);
                #define TIMER1_enable()			TIMSK1 |= (1 << TOIE1);
                #define COMP_disable()				ACSR &= ~(1 << ACIE);
                #define TIMER1_disable()			TIMSK1 &= ~(1 << TOIE1);
                /////////////////////////////////////////////////////////////
                //functions prototype
                void next_commutate_state(unsigned char startup);
                ////////////////////////////////////////////////////////////
                unsigned char 					rotor_state = 0;
                unsigned char 					rotor_run = 0;
                bit               SENSE_H=1;
                unsigned char          current_pwm = START_PWM;
                /////////////////////////////////////////////////////////////
                interrupt [TIM1_OVF] void timer1_ovf_isr(void)
                {
                	next_commutate_state(1);
                	rotor_run = 0;
                
                	UH_SET(START_PWM);
                	VH_SET(START_PWM);
                	WH_SET(START_PWM);
                }
                /////////////////////////////////////////////////////////////
                interrupt [ANA_COMP] void ana_comp_isr(void)
                {
                  SENSE_H = (ACSR & (1<<ACO)) ;
                	if(rotor_run == 200)
                    next_commutate_state(0);
                
                	rotor_run++;
                
                	if(rotor_run > 200)
                  	rotor_run = 200;
                }
                /////////////////////////////////////////////////////////////
                void bldc_pin_DDR()//set pins connected to motor as output
                {
                  UH_DDR = OUT;
                  UL_DDR = OUT;
                  VH_DDR = OUT;
                  VL_DDR = OUT;
                  WH_DDR = OUT;
                  WL_DDR = OUT;
                }
                //////////////////////////////////////////////////////////////
                void pwm_init()    //PWM for UH, VH and WH (>32KHz)
                {
                  TCCR0A |= (1 << COM0B1);
                  TCCR0A |= (1 << WGM01);
                  TCCR0A |= (1 << WGM00);
                  TCCR0B |= (1 << CS00);//prescale 1
                
                  TCCR2A |= (1 << COM2A1);
                  TCCR2A |= (1 << COM2B1);
                  TCCR2A |= (1 << WGM21);
                  TCCR2A |= (1 << WGM20);
                  TCCR2B |= (1 << CS20) ; //prescale 1
                }
                //////////////////////////////////////////////////////////////
                void timer1_init()
                {
                  TCCR1B |= (1 << CS11); //prescaler = CLK/8
                  TIMSK1 |= (1 << TOIE1);
                }
                ///////////////////////////////////////////////////////////////
                void comp_init()
                {
                  ADCSRB |= (1 << ACME); //use ADC multiplexer for AIN1
                  DIDR1 |= (1 << AIN0D) | (1 << AIN1D); ////digital input disable
                  ACSR |= (1 << ACIE);
                }
                void bldc_init()
                {
                  bldc_pin_DDR(); //set pins connected to motor as output
                  pwm_init();   //PWM for UH, VH and WH (>32KHz)
                  timer1_init(); //for stat when there is no back emf.commutate in open loop
                  PHASE_ALL_OFF();
                  comp_init();  //Comperator init for back EMF
                }
                /////////////////////////////////////////////////////////////////
                void next_commutate_state(unsigned char startup)
                {
                	switch (rotor_state)
                	{
                		case (0):
                			if(!SENSE_H || startup)
                			{
                				WH_OFF();
                				UH_ON();
                
                				SENSE_W;
                				rotor_state = 1;
                				TIMER1_reset();
                			}
                			break;
                
                		case (1):
                			if(SENSE_H || startup)
                			{
                				VL_OFF();
                				WL_ON();
                
                				SENSE_V;
                				rotor_state = 2;
                				TIMER1_reset();
                			}
                			break;
                
                		case (2):
                			if(!SENSE_H || startup)
                			{
                				UH_OFF();
                				VH_ON();
                
                				SENSE_U;
                				rotor_state = 3;
                				TIMER1_reset();
                			}
                			break;
                
                		case (3):
                			if(SENSE_H || startup)
                			{
                				WL_OFF();
                				UL_ON();
                
                				SENSE_W;
                				rotor_state = 4;
                				TIMER1_reset();
                			}
                			break;
                
                		case (4):
                			if(!SENSE_H || startup)
                			{
                				VH_OFF();
                				WH_ON();
                
                				SENSE_V;
                				rotor_state = 5;
                				TIMER1_reset();
                			}
                			break;
                
                		case (5):
                			if(SENSE_H || startup)
                			{
                				UL_OFF();
                				VL_ON();
                
                				SENSE_U;
                				rotor_state = 0;
                				TIMER1_reset();
                			}
                			break;
                	}
                }
                /////////////////////////////////////////////////////
                // Declare your global variables here
                
                void main(void)
                {
                // Declare your local variables here
                
                // Crystal Oscillator division factor: 1
                #pragma optsize-
                CLKPR=0x80;
                CLKPR=0x00;
                #ifdef _OPTIMIZE_SIZE_
                #pragma optsize+
                #endif
                
                // TWI initialization
                // TWI disabled
                TWCR=0x00;
                bldc_init();
                #asm ("sei")
                while (1)
                   {
                		if(current_pwm >= START_PWM)
                		{
                			COMP_enable();
                			TIMER1_enable();
                
                			if(rotor_run == 200)
                			{
                				UH_SET(current_pwm);
                				VH_SET(current_pwm);
                				WH_SET(current_pwm);
                			}
                		}
                		else
                		{
                			PHASE_ALL_OFF();
                			COMP_disable();
                			TIMER1_disable();
                		}
                   }
                }
                اگه کسی از دوستان winavr داره لطفا کد آقای نوربخش را برای atmega48pa تغییر بده و برای من بفرسته تا تست کنم.فعلا که با کدی که برای atmega88 نوشته بودند راه نیوفتاده.
                البته ممکنه از منبع تغذیه هم باشه چون فک نکنم بیشتر 2 آمپر بده.
                آیا جهالت نیست که آدمی ساعات شیرین امروز را فدای روزهای آینده کند؟

                دیدگاه


                  #53
                  پاسخ : کوادروتور

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

                  دیدگاه


                    #54
                    پاسخ : کوادروتور

                    بالاخره موتور راه افتاد.فقط یه کم تو راه افتادن مشکل داره.باید با دست کمکش کرد.ولی بعدش خیلی عالی کارمیکنه.سرعت های مختلف هم تست شد.
                    البته همون طور که گفتم مشکل اصلی لحیم کردن قطعاتشه.

                    http://s3.picofile.com/file/8199008900/codecision_code.zip.html
                    کد ویرایش شد.الان تقریبا بدون مشکل راه میوفته.
                    آیا جهالت نیست که آدمی ساعات شیرین امروز را فدای روزهای آینده کند؟

                    دیدگاه


                      #55
                      پاسخ : کوادروتور

                      نوشته اصلی توسط pooyan-shafiei
                      بالاخره موتور راه افتاد.فقط یه کم تو راه افتادن مشکل داره.باید با دست کمکش کرد.ولی بعدش خیلی عالی کارمیکنه.سرعت های مختلف هم تست شد.
                      البته همون طور که گفتم مشکل اصلی لحیم کردن قطعاتشه.

                      http://s3.picofile.com/file/8199008900/codecision_code.zip.html
                      کد ویرایش شد.الان تقریبا بدون مشکل راه میوفته.
                      دوست عزیز خسته نباشی ...میشه کمی در مورد مقایسه کننده توضیح بدید در فیدبک که چه زمانی و با چه ترفندی فهمید که روتور در موقعیت زمانی درست برای تحرک قرار داره اگه میشه در مورد فیدبک قدم به قدم توضیح بدید
                      موتور براشلس رو با 6 مرحله راه انداختم ولی گشتور خیلی ضعیفی داره

                      دیدگاه


                        #56
                        پاسخ : کوادروتور

                        نوشته اصلی توسط pouria23
                        دوست عزیز خسته نباشی ...میشه کمی در مورد مقایسه کننده توضیح بدید در فیدبک که چه زمانی و با چه ترفندی فهمید که روتور در موقعیت زمانی درست برای تحرک قرار داره اگه میشه در مورد فیدبک قدم به قدم توضیح بدید
                        موتور براشلس رو با 6 مرحله راه انداختم ولی گشتور خیلی ضعیفی داره
                        منم دقیقا توی همین قسمت هاش ابهام دارم.
                        من فقط کد را از یه کامپایلر منتقل کردم به یه کامپایلر دیگه.
                        چند بار هم سعی کردم شکل موج ها را با اسکوپ چک کنم ولی متوجه اصل متلب نشدم
                        آیا جهالت نیست که آدمی ساعات شیرین امروز را فدای روزهای آینده کند؟

                        دیدگاه


                          #57
                          پاسخ : کوادروتور

                          نوشته اصلی توسط pooyan-shafiei
                          اتفاقا من هم میخوام تو تابستون روی همین کار کنم.
                          اولین قدم هم میخوام به جای اینکه اسپید کنترلر بخرم.خودم بسازم.اینجا بچه ها ساختند و به نتیجه عالی هم رسیدند.
                          صفحه 25 این تاپیک برنامه و شماتیک و پی سی بیش هست.
                          http://www.eca.ir/forum2/index.php?topic=52169.0
                          قدم بعدیش هم روی ماژول شتاب سنج و جایرو و حفظ تعادل.
                          قدم بعدیش هم روی ارتباط بی سیم.
                          قدم بعدیش هم نصب دوربین
                          که البته خودم میدونم ممکنه اصلا وقت نکنم روی تمام این مسائل کار کنم.
                          حالا نظر شما چیه؟
                          از کجا میخواین شروع کنین.کدوم قسمت ها را میخواید آماده بخرید؟
                          تایپیک 16 صفحه بیشتر نیست ک :surprised:
                          http://s6.uplod.ir/i/00674/9cm41hm4inx0.jpg

                          دیدگاه


                            #58
                            پاسخ : کوادروتور

                            برای ساخت کواد کوپتر بدنه اصلا مهم نیست مهم موتور هاش هستند :surprised:
                            که قیمتشون کم کم 100 تومن میشه :cry:
                            بهشون هم میگن براشلس و با ولتاژ کم خیلی تند میچرخند چون توشون اگه اشتباه نکنم از زغال هست :nice:
                            خودم چند وقت پیش که یه مقدار علمم کم بود(از دنیا بی خبر بودم) و توکار آنالوگ بودم یه دونه گرفتم واسه
                            مینی دریل (سوراخ کاری برد) تقریبا شد 35 تومن که توی کواد به 3 الی 4 تا نیاز داریم :agree:
                            dont lose hope

                            دیدگاه


                              #59
                              پاسخ : کوادروتور

                              نوشته اصلی توسط MAHDI ZAMANI
                              تایپیک 16 صفحه بیشتر نیست ک :surprised:
                              اشتباه میکنید
                              تاپیک 52 صفحست :biggrin:
                              آیا جهالت نیست که آدمی ساعات شیرین امروز را فدای روزهای آینده کند؟

                              دیدگاه


                                #60
                                پاسخ : کوادروتور

                                نوشته اصلی توسط mahdiPOU
                                برای ساخت کواد کوپتر بدنه اصلا مهم نیست مهم موتور هاش هستند :surprised:
                                که قیمتشون کم کم 100 تومن میشه :cry:
                                بهشون هم میگن براشلس و با ولتاژ کم خیلی تند میچرخند چون توشون اگه اشتباه نکنم از زغال هست :nice:
                                خودم چند وقت پیش که یه مقدار علمم کم بود(از دنیا بی خبر بودم) و توکار آنالوگ بودم یه دونه گرفتم واسه
                                مینی دریل (سوراخ کاری برد) تقریبا شد 35 تومن که توی کواد به 3 الی 4 تا نیاز داریم :agree:
                                براش لس یا Brushless
                                موتور های معمولی مثل انواع موتور های AC یا DC که نمونش موتور جانسونه که خیلیا از جمله خودم برا دریل کاری استفاده می کنیم، برای انتقال جریان به آرمیچر که روی قسمت دوار موتور هست دارای دو قطعه گرافیت یا همون ذغال هست که با نیروی فنر روی کلکتور استاتور قرار میگیرن
                                اصطلاح ذغال یا جاروبک برابر کلمه Brush هست
                                پس Brushless یعنی بدون ذغال
                                در حالت کلاسیک ولتاژ به آرمیچر و روتور داده میشه و بدنه یا همون استاتور دارای آهنربا با قطب های ثابت هست اما در موتور های براشلس برعکسه یعنی آهنربا با قطب های ثابت روی آرمیچر هستند و سیم پیچ ها و آهنربا های قطب متغیر در استاتور
                                در نتیجه نیروی اصطکاک بین جاروبک و کلکتور در موتور های کلاسیک، در موتور های جدید براشلس از بین رفته
                                اگر دوستان مطلع اشتباهی در توضیحم دیدن اصلاح بفرماین

                                دیدگاه

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