اطلاعیه

Collapse
No announcement yet.

ساخت درایور موتور براشلس

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

    #76
    پاسخ : ساخت درایور موتور براشلس

    سلام میشه یک آی سی ir2110برای تمام ماسفت ها گذاشت

    دیدگاه


      #77
      پاسخ : ساخت درایور موتور براشلس

      با سلام
      برای ساختن درایور BLDC اول باید درایو کردن ماسفت یا IGBT بصورت صحیح باشه در مرحله بعد مدار فیدبک موتور BEMF بصورت صحیح باشه که بتونه موقعیت موتور تشخیص بدی و در نهایت بدون فرکانس با 01 کردن درایور راحت میتونی موتور راه بندازی . ولی برای تنظیم دور و قدرت موتور باید از PID استفاده کنی به بتونی تمام توان موتور ازش بگیری .
      در گام اول اصلا به پروژه و مدارات که بصورت اوپن سورس توی اینترنت هست اعتماد نکنید (دقیقا مثل همون علامت سرد و گرم شیر آب) .
      برای مثال پروژه اسپید کنترل توی سایت http://electronoobs.com/ نه عملی هست مه منطقی.
      چند مدل درایور درست کرده که سخت افزار با نرم افزار هیچگونه همخوانی نداره (تست عملی).

      دیدگاه


        #78
        پاسخ : ساخت درایور موتور براشلس

        با سلام و درود خدمت شما بنده قصد دارم موتور براشلس رو با استفاده از اسپیدکنترلری که خودم ساختم راهندازی کنم و PWM را با کمک اردینو به گیت درایو ها وسپس ماسفت ها اعمال کنم ...ایا با این کد ها قادر خواهم بود این پروژه را انجام بدهم با تشکر مشکل اصلی من در نفهمیدن این کد ها است که شما در اون از تایمرها وکانتر ها استفاده کرده اید ایا کتابخونه ای برای برای راحت کد نویسی وجود دارد

        دیدگاه


          #79
          پاسخ : ساخت درایور موتور براشلس

          نوشته اصلی توسط Amir Zia نمایش پست ها
          سلام!
          دوستان تو این تاپیک به کمک شما میخوایم یک درایور موتور براشلس که هم قابلیت کنترل با pwm و هم قابلیت کنترل با پتانسیومتر داره رو قرار بدیم و بطور عملی تست و راه اندازی کنیم!موتور براشلس نوعی موتور سنکرون سه فازبا آهنربای ثابت هست! ازونجایی که موتور های سنکرون برای تغییر سرعت به تغییر فرکانس و تغییر ولتاژ نیاز دارن در مرحله اول باید توسط تایمر
          پی دبلیو ام خاصی طراحی کنیم که با داشتن اینداکتنس بین هر دو فاز(یا هر کویل) و مقاومت کویل و فرکانس ؛ ولتاژ رو تایین کنه و بده به موتور(در واقع میشه گفت جریان رو کنترل کنه چون جریانه که میدان مغناطیسی رو ایجا میکنه) پس از یک مقاومت شنت هم استفاده میکنیم تا جریان رو در هر لحظه بدونیم و بدیم به MCU! در مرحله ی دوم باید سه فاز با اختلاف۱۲۰ درجه تولید کنیم البته این فاز ها متناوب هستند ولی سینوسی نیستد و به اصطلاح بهشون میگن دایرکت کارنت(ولی در واقع جهت جریان عوض میشه! و قسمت اصلی بر میگرده به اینکه روتور توسط میدان مغناطیسی چرخنده قفل و سینک باشه! معمولا از دو روش استفاده میکنن یک روش استفاده از سه عدد سنسور اثر هال هست که میاد با توجه به اینکه کدوم سنسور در چه وضعیتی هست وضعیت روتور رو میده به ام سی یو روش دیگه که مرسوم تر هست استفاده از بک ای ام اف هست BEMF( قانون فاراده/لنز) که میاد هنگامی که فقط یک کویل فعال هست ولتاژ دو کویل دیگه رو بررسی میکنه این ولتاژ توسط عبور اهنربا از کویل تولید میشه! چون موتور داره میچرخه . و لحظه ای که این ولتاژ به صفر میرسه و میخواد منفی بشه رو ثبت میکنه و میفهمه که چه زمانی باید پالس بعدی رو بده.

          میرسیم به سخت افزار:
          اول از همه یک ام سی یو نیازه تا پردازش و تولید پالس رو بر عهده بگیره. در ثانی ما یک درایور نیاز داریم تا پالس هارو امپلیفای کنه و به پالس هایی قابل فهم و مناسب برای بخش قدرت در بیاره(درایور) و بخش سوم بخش قدرت هست (شامل سه عدد هف بریج) و بخش چهارم قسمت فید بک هست
          خب! من خیلی مبسوط تا اینجا توضیح دادم حالا از کاربرد هاش بگم/ موتور های bldc خیلی جاها کاربرد دارن و به روش های گوناگون میتونن درایو بشن و امروزه با گسترش این موتور ها و پایین اومدن قیمتشون و پیشرفت علم الکترونیک و آسان شدن درایو کردنشون دارن جای موتور های دیگرو میگیرن همچنین بازده بالای این موتور ها باعث شده تو ماشین های الکتریک
          درون ها و توربین ها و خیلی چیزای دیگه استفاده بشن
          ///////////////////////////////////////
          من یک درایور ساده رو مورد بررسی قرار دادم و دوستان مهندسی معکوس اگه زحمت بکشن شماتیک رو اینجا بفرستن من با قدرت بیشتری ادامه میدم و تمامی فیلم ها و تلاش هامو میذارم
          حتی قصد دارم یک موتور اینداکشن رو به موتور BLDC تبدیل کنم همچنین یک پروژه ی اوپن سورس عظیم به نام VESC هم وجود داره. اما چرا ما ایرانیا نه؟ من مطمعنم این پروژه
          در سال های آتی به ثمر خواهد رسید و ما هم درایور اوپن سورس خودمون رو خواهیم داشت چون حداقلش من دست از تلاش نمیکشم
          :دی
          عکس هارو از درایور میذارم و باقی درایور ها مخصوصا vesc رو هم بررسی میکنیم.

          این قسمت قدرت که کاملا مشخصه چی به چیه! دو عدد رگولاتور 5 ولت که برای تغذیه ی میکرو و خروجی BEC استفاده شده و 6 عدد ماسفت خفن قدرت(که تو ایران پیدا نکردم نمیدونم
          چرا هر چی ماسفت تکنولوژی جدیده وازد نمیشه)

          اینم قسمت درایور و میکرو کنترلر / البته این اسپید کنترلر خاص اومده از C8051F330 استفاده کرده!
          و vescهم اومده از stm32F4 استفاده کرده/
          سمت راست تصویر سه تا قسمت مشابه میبینیم که هر قسمت از یک درایور شش پایه ، یک دیود ، یک خازن ، مقاومت و یک ترانزیستور تشکیل شده! پر واضحه که بخش درایور قضیه هست! احتمال میدم این سه تا فقط بخش های ساید رو درایو کنن و داره از تکنیک بوت استرپ برای روشن کردن ماسفت های ساید استفاده میکنه(متاسفانه پراب اسیلوسکوپ ندارم که با اسیلوسکوپ تستش کنم ببینم با چه ولتاژ و پالسی داره ماسفت هارو روشن میکنه احتمال میدم پنج ولت باشه بزودی پراب میخرم و تست میکنم درگیر کنکورم)
          وسط تصویر هم میکروی نام برده مشاهده میشه و یسری قطعه دور و برش! حالا میریم سراغ حدسیات! حدس میزنم سه عدد آیسی که در بالا وجود داره آپ امپ باشه برای تقویت BEMF
          مقاومت های سمت چپ تصویر هم تقسیم کننده های ولتاژ هستن! که در واقع از هر فاز یک فید بک گرفته شده و ولتاژش کاهش داده شده و رفته تو اپ امپ! و احتمالا از اپ امپ استفاده شده تا مثلا اشمیت تریگر کرده باشه قضیه رو(چون ولتاژ بک emf تقریبا سینوسیه و این احتمالا اومده مربعی کرده دوستان اگه فهمیدن توضیح بدن) و اگر نه قسمت لو ساید رو درایو میکنه
          شماتیک VESC رو هم قرار میدم و یسری شماتیک دیگه مربوط به درایور st
          خب این مهندسای عزیز هم برای بخش درایور ماسفت ها اومدن از L6398 که یک درایور دوبل برای لو ساید و های ساید هست استفاده کردن
          که میشه از خیلی آیسی های دیگه مثل ir2110 ir2113 ir2112 و حتی ir2102 که هشت پایه هست استفاده کرد! برای بخش کنترلی اومدن سه تا آپ امپ گذاشتن که BEMF رو تقویت کنه و حتی در سرعت های پایین که مقدارBEMF پایین هست و یکی از مشکلات درایو موتور سنسورلس در سرعت پایین هست حل بشه.
          خب این هم پروژه ی تسلا طور! VESC
          https://github.com/vedderb/bldc-hardware

          یه برنامه ی خیلی ساده هم میذارم که برای آردویینو نوشته شده
          با مراجعه به دیتاشیت atmega328 و مطالعه ی رجیستر ها و مشاهده ی دستورات اختصاصی کامپایلر-بوت لودر آردویینو IDE میبینین که چقدر واضح هست
          کد:
          // Sensorless brushless DC (BLDC) motor control with Arduino UNO and IR2101 (Arduino DIY ESC).// This is a free software without any warranty.
           
           
          #define SPEED_UP          A0          // BLDC motor speed-up button
          #define SPEED_DOWN        A1          // BLDC motor speed-down button
          #define PWM_MAX_DUTY      255
          #define PWM_MIN_DUTY      50
          #define PWM_START_DUTY    100
           
          byte bldc_step = 0, motor_speed;
          unsigned int i;
          void setup() {
            DDRD  |= 0x38;           // Configure pins 3, 4 and 5 as outputs
            PORTD  = 0x00;
            DDRB  |= 0x0E;           // Configure pins 9, 10 and 11 as outputs
            PORTB  = 0x31;
            // Timer1 module setting: set clock source to clkI/O / 1 (no prescaling)
            TCCR1A = 0;
            TCCR1B = 0x01;
            // Timer2 module setting: set clock source to clkI/O / 1 (no prescaling)
            TCCR2A = 0;
            TCCR2B = 0x01;
            // Analog comparator setting
            ACSR   = 0x10;           // Disable and clear (flag bit) analog comparator interrupt
            pinMode(SPEED_UP,   INPUT_PULLUP);
            pinMode(SPEED_DOWN, INPUT_PULLUP);
          }
          // Analog comparator ISR
          ISR (ANALOG_COMP_vect) {
            // BEMF debounce
            for(i = 0; i < 10; i++) {
              if(bldc_step & 1){
                if(!(ACSR & 0x20)) i -= 1;
              }
              else {
                if((ACSR & 0x20))  i -= 1;
              }
            }
            bldc_move();
            bldc_step++;
            bldc_step %= 6;
          }
          void bldc_move(){        // BLDC motor commutation function
            switch(bldc_step){
              case 0:
                AH_BL();
                BEMF_C_RISING();
                break;
              case 1:
                AH_CL();
                BEMF_B_FALLING();
                break;
              case 2:
                BH_CL();
                BEMF_A_RISING();
                break;
              case 3:
                BH_AL();
                BEMF_C_FALLING();
                break;
              case 4:
                CH_AL();
                BEMF_B_RISING();
                break;
              case 5:
                CH_BL();
                BEMF_A_FALLING();
                break;
            }
          }
           
          void loop() {
            SET_PWM_DUTY(PWM_START_DUTY);    // Setup starting PWM with duty cycle = PWM_START_DUTY
            i = 5000;
            // Motor start
            while(i > 100) {
              delayMicroseconds(i);
              bldc_move();
              bldc_step++;
              bldc_step %= 6;
              i = i - 20;
            }
            motor_speed = PWM_START_DUTY;
            ACSR |= 0x08;                    // Enable analog comparator interrupt
            while(1) {
              while(!(digitalRead(SPEED_UP)) && motor_speed < PWM_MAX_DUTY){
                motor_speed++;
                SET_PWM_DUTY(motor_speed);
                delay(100);
              }
              while(!(digitalRead(SPEED_DOWN)) && motor_speed > PWM_MIN_DUTY){
                motor_speed--;
                SET_PWM_DUTY(motor_speed);
                delay(100);
              }
            }
          }
           
          void BEMF_A_RISING(){
            ADCSRB = (0 << ACME);    // Select AIN1 as comparator negative input
            ACSR |= 0x03;            // Set interrupt on rising edge
          }
          void BEMF_A_FALLING(){
            ADCSRB = (0 << ACME);    // Select AIN1 as comparator negative input
            ACSR &= ~0x01;           // Set interrupt on falling edge
          }
          void BEMF_B_RISING(){
            ADCSRA = (0 << ADEN);   // Disable the ADC module
            ADCSRB = (1 << ACME);
            ADMUX = 2;              // Select analog channel 2 as comparator negative input
            ACSR |= 0x03;
          }
          void BEMF_B_FALLING(){
            ADCSRA = (0 << ADEN);   // Disable the ADC module
            ADCSRB = (1 << ACME);
            ADMUX = 2;              // Select analog channel 2 as comparator negative input
            ACSR &= ~0x01;
          }
          void BEMF_C_RISING(){
            ADCSRA = (0 << ADEN);   // Disable the ADC module
            ADCSRB = (1 << ACME);
            ADMUX = 3;              // Select analog channel 3 as comparator negative input
            ACSR |= 0x03;
          }
          void BEMF_C_FALLING(){
            ADCSRA = (0 << ADEN);   // Disable the ADC module
            ADCSRB = (1 << ACME);
            ADMUX = 3;              // Select analog channel 3 as comparator negative input
            ACSR &= ~0x01;
          }
           
          void AH_BL(){
            PORTD &= ~0x28;
            PORTD |=  0x10;
            TCCR1A =  0;            // Turn pin 11 (OC2A) PWM ON (pin 9 & pin 10 OFF)
            TCCR2A =  0x81;         //
          }
          void AH_CL(){
            PORTD &= ~0x30;
            PORTD |=  0x08;
            TCCR1A =  0;            // Turn pin 11 (OC2A) PWM ON (pin 9 & pin 10 OFF)
            TCCR2A =  0x81;         //
          }
          void BH_CL(){
            PORTD &= ~0x30;
            PORTD |=  0x08;
            TCCR2A =  0;            // Turn pin 10 (OC1B) PWM ON (pin 9 & pin 11 OFF)
            TCCR1A =  0x21;         //
          }
          void BH_AL(){
            PORTD &= ~0x18;
            PORTD |=  0x20;
            TCCR2A =  0;            // Turn pin 10 (OC1B) PWM ON (pin 9 & pin 11 OFF)
            TCCR1A =  0x21;         //
          }
          void CH_AL(){
            PORTD &= ~0x18;
            PORTD |=  0x20;
            TCCR2A =  0;            // Turn pin 9 (OC1A) PWM ON (pin 10 & pin 11 OFF)
            TCCR1A =  0x81;         //
          }
          void CH_BL(){
            PORTD &= ~0x28;
            PORTD |=  0x10;
            TCCR2A =  0;            // Turn pin 9 (OC1A) PWM ON (pin 10 & pin 11 OFF)
            TCCR1A =  0x81;         //
          }
           
          void SET_PWM_DUTY(byte duty){
            if(duty < PWM_MIN_DUTY)
              duty  = PWM_MIN_DUTY;
            if(duty > PWM_MAX_DUTY)
              duty  = PWM_MAX_DUTY;
            OCR1A  = duty;                   // Set pin 9  PWM duty cycle
            OCR1B  = duty;                   // Set pin 10 PWM duty cycle
            OCR2A  = duty;                   // Set pin 11 PWM duty cycle
          }
          نوشته اصلی توسط Amir Zia نمایش پست ها
          دوستان سلام. من میخواستم یک موتور آسنکرون القایی قفس سنجابی رو تبدیل کنم به موتور سنکرون آهنربا داعم. برای اینکار قصد دارم قفس سنجاب رو ببرم تراشکاری و حدود 3 الی 4 میل از محیط دایره رو تراش بدم( در واقع قطر قفس سنجاب رو کم کنم تا آهنربا هارو بتونم بچسبونم به روتور) و بعد آهنربا های نعودیمیوم رو توسط چسب اپوکسی و نخ کولار بچسبونم به روتور و استاتور رو مثل موتور BLDC سیم پیچ کنم.
          آیا به نظرتون با رعایت فاصله هوایی خیلی کم بین روتور و استاتور بازده موتور پایین خواهد بود به دلیل اینکه دست ساخت هست؟ آیا لینکی برای خرید موتور های BLDC سنسور دار(سنسور هال) با توانی مثل 3-4 کیلو وات دارین؟ بهتره موتور رو خریداری کنم یا خودم با تغییر یک موتور دیگه که هستش رو دارم بسازم؟(خرید آهنربا و چسباندن به روتور و تراشکاری فکر میکنم ارزون تر از خرید یک موتور BLDC با توان 3-4 کیلووات در بیاد)

          درود. لطفا یک دیمر برای روشن کردن و کنترل این موتور معرفی کنید.
          Atlas archilik Assembly : Arcelic BLW090P8L32Y-01 500/13000RPM




          جدیدترین ویرایش توسط Mahdtik; ۰۱:۰۹ ۱۴۰۱/۰۲/۳۱.

          دیدگاه


            #80
            پاسخ : ساخت درایور موتور براشلس

            استاد میشه راهنمایی کنین برای حذف سنسور اثرحال کجای کد نویسی میکرو رو باید حذف کنیم؟ دوستان اگه کسی هم میتونه کمک کنه ممنون میشم

            دیدگاه


              #81
              پاسخ : ساخت درایور موتور براشلس

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

              فرستاده شده از Redmi Note 8 Proِ من با Tapatalk

              دیدگاه


                #82
                پاسخ : ساخت درایور موتور براشلس

                ،،،،،،،،،،

                دلیل: ادغام دو پست برای جلوگیری از اسپم

                یه عکس از موتور بگذارید.
                مگه هارد کامپیوتر شما درایور موتور داره؟
                معمولا بر روی برد هارد یک قطعاتی هست که قابل تشخیص و تفکیک نیست. شما میتونید درایور رو خودتون با توجه به نیازتون بسازید
                The Brushless DC motor revolutionized the electric propulsion industry. They have become the go-to solution for their impressive toughness, efficiency, and sleek design. This article is your friendly guide into the world of these cool motors, breaking down their details, different types, diverse uses, and delving into the reasons why they’ve become essential in an […]
                جدیدترین ویرایش توسط P.maddah39; ۱۵:۲۴ ۱۴۰۱/۱۱/۲۱.
                دوستان عزیز همه ما بدون هیچ توقعی توی این انجمن دانسته هامون رو با هم به اشتراک میگذاریم. کمترین توقع یک لایک می باشد.

                دیدگاه

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