ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.





کاربران برچسب زده شده

صفحه 1 از 3 123 آخرین
نمایش نتایج: از 1 به 10 از 25
  1. #1
    2017/11/05
    Amol
    446
    158

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

    سلام!
    دوستان تو این تاپیک به کمک شما میخوایم یک درایور موتور براشلس که هم قابلیت کنترل با 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
    }
    ویرایش توسط azjaguar : 2019/02/19 در ساعت 21:59
  2. #2
    2017/11/05
    Amol
    446
    158

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

    خب در ادامه میپردازیم به بقش(بخش) قدرت!
    من چند عدد ESC که توسط ATmega8 ساخته و تولید شده رو میذارم و کمی بررسی میکنیم که چجوری ماسفت هارو درایو کردن و بخش قدرت شامل چی میشه
    رنگ ها به این صورته که
    سبز=مقاومت های تقسیم ولتاژ برای مناسب سازی ولتاژ BEMF برای پردازش
    سفید=درایور ماسفت های ساید
    قرمز=MCU
    زرد=تقسیم مقاومتی
    آبی=رگولاتور 5 ولت

    استفاده از دیود فست+خازن+BJT برای درایور های ساید(تکنیک بوت استرپ)

    همان تکنیک

    همان تکنیک

    استفاده از ترانزیستور های متمم(ماسفت پی و ماسفت ان) برای ساده سازی درایو

    با اینکه این درایور 30 آمپر هست باز نیز از ماسفت p و n استفاده شده. در توان های بالاتر ماسفت های p به علت بالاتر بودن مقاومت درین سورس شروع به داغ شدن میکنند



    در این سه نیز بجای استفاده از BJT برای بوت استرپ از آیسی های درایور دوبل استفاده شده(آیسی های نامبرده مانند ir2101-ir2102-ir2103-ir2113-ir2110 و درایور های دیگر(من فقط واس شرکت ior رو میدونستم
    مزیت این روش این است که در روش استفاده از bjt ها برای بوت استرپ ، مقاومت گیت و زمین در لحظه ی خاموشی(فالینگ) پایین و مقاومت گیت و پالس مثبت در لحظه روشن شدن(رایزینگ)زیاد است. یعنی ماسفت
    دیر روشن میشه و زود خاموش میشه و این دیر روشن شدن ماسفت اگه چه به این معنی نیست که خیلی طول میکشه تا روشن شه! ولی حتی در حد چند میکرو ثانیه دیر تر رایز شدن پالس میتونه باعث ایجاد تلفات بشه
    برای همین در توان های بالا میان از آیسی درایور استفاده میکنن یا کلا میان ایزوله میکنن گراند هارو یا از ترانس پالس استفاده میشه و کلی روش های دیگه
    اینجا اومدن از آیسی درایور استفاده کردن با مراجعه به دیتاشیت آیسی متوجه میشین که

    از دو فت متمم استفاده شده پس بوم! سریع گیت رو میکشه بالا و سریع گیت رو میکشه پایین!
    در قسمت بعد در مورد مقاومت های تقسیم کننده برای مناسب سازی ولتاژ جهت تشخیص BEMF صحبت میکنیم
    ویرایش توسط azjaguar : 2019/02/23 در ساعت 04:29






    امیرحسین ضیا
  3. #3
    2017/11/05
    Amol
    446
    158

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

    پالس های گیت ماسفت لو ساید با یه اسیلوسکوپ قدیمی فلورسنت در دو حالت فول تراتل(دیوتی سایکل 100 ) و حالت هف تراتل(دیوتی سایکل 50 موج pwm) رو با هم مشاهده میکنیم.
    (ESC SimonK)
    همچنین پالس های هر فاز نیز در دیوتی سایکل صد در صد بصورت مربعی نبود بلکه ذوزنقه ای بود و متاسفانه نشد فیلم بگیرم ولی اینجوریه _\---/___\---/__( برای بیماران او سی دی مثل خودم عرض شه
    واقعا شرمندم که گراند وسط اسکوپ نیس )

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت


    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    ویرایش توسط azjaguar : 2019/04/11 در ساعت 15:56






    امیرحسین ضیا
  4. #4
    2018/01/21
    175
    14

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

    نقل قول نوشته اصلی توسط azjaguar

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    سلام!
    دوستان تو این تاپیک به کمک شما میخوایم یک درایور موتور براشلس که هم قابلیت کنترل با 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
    }
    سلام دوست عزیز.
    ارمیچرهای که در پرینترهستن چهارسیمه هستن بااین مدار راه میافته؟
    ویرایش توسط pika3 : 2019/04/11 در ساعت 17:28 دلیل: غلط املائی
    همیشه در قلبم زنده ی استاد تحیری
  5. #5
    2017/11/05
    Amol
    446
    158

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

    نقل قول نوشته اصلی توسط pika3

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    سلام دوست عزیز.
    ارمیچرهای که در پرینترهستن چهارسیمه هستن بااین مدار راه میافته؟
    سلام خیر اونا استپ موتور هستن و معمولا دو فاز هستن






    امیرحسین ضیا
  6. #6
    2017/11/05
    Amol
    446
    158

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

    دوستان سلام. من میخواستم یک موتور آسنکرون القایی قفس سنجابی رو تبدیل کنم به موتور سنکرون آهنربا داعم. برای اینکار قصد دارم قفس سنجاب رو ببرم تراشکاری و حدود 3 الی 4 میل از محیط دایره رو تراش بدم( در واقع قطر قفس سنجاب رو کم کنم تا آهنربا هارو بتونم بچسبونم به روتور) و بعد آهنربا های نعودیمیوم رو توسط چسب اپوکسی و نخ کولار بچسبونم به روتور و استاتور رو مثل موتور BLDC سیم پیچ کنم.
    آیا به نظرتون با رعایت فاصله هوایی خیلی کم بین روتور و استاتور بازده موتور پایین خواهد بود به دلیل اینکه دست ساخت هست؟ آیا لینکی برای خرید موتور های BLDC سنسور دار(سنسور هال) با توانی مثل 3-4 کیلو وات دارین؟ بهتره موتور رو خریداری کنم یا خودم با تغییر یک موتور دیگه که هستش رو دارم بسازم؟(خرید آهنربا و چسباندن به روتور و تراشکاری فکر میکنم ارزون تر از خرید یک موتور BLDC با توان 3-4 کیلووات در بیاد)






    امیرحسین ضیا
  7. #7
    2007/10/30
    9
    1

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

    سلام دوست عزیز لطفا در رابطه با قسمت BEMF بیشتر توضیح بدید.
    من یک برنامه از نت پیدا کردم ولی مثل اینکه درست کار نمیکنه میشه کمک کنید این برنامه و مدار و بهینه کنیم و راه اندازیش بکنیم.به زبان بسکام هست
    $regfile = "m8def.dat"
    $crystal = 8000000
    '-------------------------------------------------------------------------------
    Dim Wysw As Word
    Dim Bat As Word
    Dim Impuls As Integer
    Dim K As Byte
    Dim F As Byte
    '-----------------Pomiar BMF----------------------------------------------------
    Sig1 Alias Pinc.2 'pin pomiarowy 1
    Sig2 Alias Pinc.3 'pin pomiarowy 2
    Sig3 Alias Pinc.4 'pin pomiarowy 3


    Sig0 Alias Pind.6 'impulsy
    '-----------------Klucze_Mosfet-------------------------------------------------
    'G1na Alias Pinb.4 'Klucz L1 - N
    'G2pa Alias Pinb.1 'Klucz L1 - P
    'G1nb Alias Pinb.5 'Klucz L2 - N
    'G2pb Alias Pinb.2 'Klucz L2 - P
    'G1nc Alias Pinb.7 'Klucz L3 - N
    'G2pc Alias Pinb.6 'Klucz L3 - P
    Ster Alias Pind.2 'sterowanie


    '-----------------Konfiguracja_Pull_UP--------------------------------------------------------------
    Config Portd = &B10111011 'PD2 i PD6 jako wejœcia
    Config Portc = &B11100001 'x-x-x-sig3-sig2-sig1-x-x
    Config Portb = &B11111111
    Config Int0 = Low Level
    Config Timer0 = Timer , Prescale = 8 : Stop Timer0


    Portd = &B00000100
    Portc = &B00011110
    Portb = &B00000000
    Enable Interrupts
    Enable Int0
    Declare Sub Obroty


    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    Start Adc : Bat = Getadc(1)




    Input Ster
    F = 65000 - Ster




    Do
    K = Tcnt0 + F
    Call Obroty




    Loop


    Sub Obroty


    Portb = Lookup(0 , Kroki) 'krok zerowy
    Start Timer0
    While Sig1 = 0
    Stop Timer0
    Waitus K
    Tcnt0 = 0
    Wend


    Portb = Lookup(1 , Kroki) 'krok pierwszy
    Start Timer0
    While Sig2 = 0
    Stop Timer0
    Waitus K
    Tcnt0 = 0
    Wend


    Portb = Lookup(2 , Kroki) 'krok drugi
    Start Timer0
    While Sig3 = 0
    Stop Timer0
    Waitus K
    Tcnt0 = 0
    Wend


    Portb = Lookup(3 , Kroki) 'krok trzeci
    Start Timer0
    While Sig1 = 0
    Stop Timer0
    Waitus K
    Wend


    Portb = Lookup(4 , Kroki) 'krok czwarty
    Start Timer0
    While Sig2 = 0
    Stop Timer0
    Waitus K
    Wend


    Portb = Lookup(5 , Kroki) 'krok piaty - ostatni
    Start Timer0
    While Sig3 = 0
    Stop Timer0
    Waitus K
    Wend
    End Sub






    '-----------------------Kroki---------------------------------------
    Kroki:
    Data &B00111000 'x011100x ZLH ADC2
    Data &B00011010 'x001101x HLZ ADC4
    Data &B00001110 'x000111x HZL ADC3
    Data &B00100110 'x010011x ZHL ADC2
    Data &B01100010 'x110001x LHZ ADC4
    Data &B01101000 'x110100x LZH ADC3

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

    شماتیک مدارو نتونستم اضافه کنم
  8. #8
    2012/05/13
    Planet Earth
    857
    357

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

    با تشکر از زحماتتون. اگر امکان داره در مورد شکل موج های اعمالی به موتور و نحوه ی کنترل بیشتر توضیح بفرمایید
    گویند سنگ لعل شود در مقام صبر اری شود ولی به خون جگر شود
    همیشه آخر همه چیز خوبه، اگر هم هنوز خوب نشده پس هنوز آخرش نشده(چارلی چاپلین)
  9. #9
    2017/11/05
    Amol
    446
    158

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

    نقل قول نوشته اصلی توسط alireza61sh2000

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    سلام دوست عزیز لطفا در رابطه با قسمت BEMF بیشتر توضیح بدید.
    من یک برنامه از نت پیدا کردم ولی مثل اینکه درست کار نمیکنه میشه کمک کنید این برنامه و مدار و بهینه کنیم و راه اندازیش بکنیم.به زبان بسکام هست
    $regfile = "m8def.dat"
    $crystal = 8000000
    '-------------------------------------------------------------------------------
    Dim Wysw As Word
    Dim Bat As Word
    Dim Impuls As Integer
    Dim K As Byte
    Dim F As Byte
    '-----------------Pomiar BMF----------------------------------------------------
    Sig1 Alias Pinc.2 'pin pomiarowy 1
    Sig2 Alias Pinc.3 'pin pomiarowy 2
    Sig3 Alias Pinc.4 'pin pomiarowy 3


    Sig0 Alias Pind.6 'impulsy
    '-----------------Klucze_Mosfet-------------------------------------------------
    'G1na Alias Pinb.4 'Klucz L1 - N
    'G2pa Alias Pinb.1 'Klucz L1 - P
    'G1nb Alias Pinb.5 'Klucz L2 - N
    'G2pb Alias Pinb.2 'Klucz L2 - P
    'G1nc Alias Pinb.7 'Klucz L3 - N
    'G2pc Alias Pinb.6 'Klucz L3 - P
    Ster Alias Pind.2 'sterowanie


    '-----------------Konfiguracja_Pull_UP--------------------------------------------------------------
    Config Portd = &B10111011 'PD2 i PD6 jako wejœcia
    Config Portc = &B11100001 'x-x-x-sig3-sig2-sig1-x-x
    Config Portb = &B11111111
    Config Int0 = Low Level
    Config Timer0 = Timer , Prescale = 8 : Stop Timer0


    Portd = &B00000100
    Portc = &B00011110
    Portb = &B00000000
    Enable Interrupts
    Enable Int0
    Declare Sub Obroty


    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    Start Adc : Bat = Getadc(1)




    Input Ster
    F = 65000 - Ster




    Do
    K = Tcnt0 + F
    Call Obroty




    Loop


    Sub Obroty


    Portb = Lookup(0 , Kroki) 'krok zerowy
    Start Timer0
    While Sig1 = 0
    Stop Timer0
    Waitus K
    Tcnt0 = 0
    Wend


    Portb = Lookup(1 , Kroki) 'krok pierwszy
    Start Timer0
    While Sig2 = 0
    Stop Timer0
    Waitus K
    Tcnt0 = 0
    Wend


    Portb = Lookup(2 , Kroki) 'krok drugi
    Start Timer0
    While Sig3 = 0
    Stop Timer0
    Waitus K
    Tcnt0 = 0
    Wend


    Portb = Lookup(3 , Kroki) 'krok trzeci
    Start Timer0
    While Sig1 = 0
    Stop Timer0
    Waitus K
    Wend


    Portb = Lookup(4 , Kroki) 'krok czwarty
    Start Timer0
    While Sig2 = 0
    Stop Timer0
    Waitus K
    Wend


    Portb = Lookup(5 , Kroki) 'krok piaty - ostatni
    Start Timer0
    While Sig3 = 0
    Stop Timer0
    Waitus K
    Wend
    End Sub






    '-----------------------Kroki---------------------------------------
    Kroki:
    Data &B00111000 'x011100x ZLH ADC2
    Data &B00011010 'x001101x HLZ ADC4
    Data &B00001110 'x000111x HZL ADC3
    Data &B00100110 'x010011x ZHL ADC2
    Data &B01100010 'x110001x LHZ ADC4
    Data &B01101000 'x110100x LZH ADC3

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

    شماتیک مدارو نتونستم اضافه کنم
    سلام خوبین خوشین؟
    من بسکام رو میتونم دست و پا شکسته ترجمه کنم و تسلط ندارم رو بسکام/ همچنین چون قراره کلید این پروژه بعد کنکورم بچرخه حتما این کد رو بررسی خواهم کرد و ممنون میشم شماتیک رو قرار بدین تا بررسی کنیم با هم

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

    نقل قول نوشته اصلی توسط amin20107

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    با تشکر از زحماتتون. اگر امکان داره در مورد شکل موج های اعمالی به موتور و نحوه ی کنترل بیشتر توضیح بفرمایید
    سلام امیدوارم حالتون خوب باشه/موتور های براشلسی که امروزه داریم زیاد میشنویم در واقع یک نوع موتور سنکرون آهنربا داعم هستن(به اختصار بهشون میگن PMSM )
    و خب دو نوع اینرانر و اوت رانر دارن / پالس اعمالی در این دو میتونه فرق کنه و واس همین برخی تفاوت BLDC و PMSM رو در پالس اعمالی میدونن! همچنین در برخی موتور های PMSM یک قفس سنجابی هم در کنار این آهنربا های داعم وجود داره تا در مرحله ی شروع به کار مانند موتور القایی آسنکرون عمل کنه و لغزش (و بوجود آمدن فرکانس روتور) باعث چرخش اولیه در آنها بشه و سینک بشه با چرخش میدان مغناطیسی
    تفاوت در پالس اعمالی هم این هست که برخی میگن PMSM اگه با AC راه اندازی بشه اسمش PMSM هست و اگه با مربعی راه اندازی بشه اسمش میشه PMBLDC یا همون BLDC البته که ما میتونیم جفت این موتور هارو هم با AC همون سینوسی به عبارتی و هم با DC (مربعی) ران کنیم و تفاوت در این خواهد بود که اگه با سه فاز سینوسی ران کنیم چرخش نرم تر خواهد بود (در سروو ها و جیمبال ها)در سرعت های پایین و هارمونیک بهتری در هسته خواهیم داشت و تلفات کمتر خواهد بود(در تعوری) / برای کنترل بهتر در زمان استارت موتور (همانند موتور های dc که در زمان استارت BEMF پایین هست و جریان زیادی کشیده میشه) ما میایم پالس های مربعی رو بصورت pwm به هسته اعمال میکنیم(سه فاز بصورت PWM ) که جریان بالایی در زمان استارت نداشته باشیم و بالا رفتن RPM ناگهانی به بالبیرینگ ها و کلا بار صدمه نرسونه/ همچنین در موتور های سنکرون برای کنترل بهتر و تولید گشتاور بهتر حتما باید زاویه ی روتور نسبت به استاتور رو داشت تا بشه پالس بعدی رو اعمال کرد
    ویرایش توسط azjaguar : 2019/04/19 در ساعت 12:21






    امیرحسین ضیا
  10. #10
    2007/10/30
    9
    1

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

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت


    شماتیک برنامه بالا
    بیشتر مشکل من تو قسمت BEMF هست .اگه ممکنه بیشتر توضیح بدید.
    این BEMF رو تو LTSPICE شبیه سازی کردم الان این درسته؟

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    ویرایش توسط alireza61sh2000 : 2019/04/19 در ساعت 13:58
صفحه 1 از 3 123 آخرین
نمایش نتایج: از 1 به 10 از 25

موضوعات مشابه

  1. ساخت موتور براشلس
    توسط hesam_malekfarnoud در انجمن مدارهای آنالوگ و مدارهای مجتمع
    پاسخ: 10
    آخرين نوشته: 2019/04/06, 14:57
  2. استانداردهای طراحی درایور موتور براشلس
    توسط William.Barati در انجمن مباحث دیگر علم الکترونیک
    پاسخ: 3
    آخرين نوشته: 2016/11/02, 22:44
  3. کمک برای ساخت موتور براشلس
    توسط arashnpe در انجمن ترانسفورماتورها و ماشين هاي الکتريکي
    پاسخ: 2
    آخرين نوشته: 2015/08/01, 23:25
  4. راه اندازی موتور براشلس با درایور آماده
    توسط hamidjahangiri در انجمن ربات های پروازی
    پاسخ: 11
    آخرين نوشته: 2013/12/08, 22:32
  5. راهنمایی برای کار با درایور براشلس موتور
    توسط sarajavanmard در انجمن میکروکنترلرهای AVR
    پاسخ: 3
    آخرين نوشته: 2013/06/05, 10:49

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •