اطلاعیه

Collapse
No announcement yet.

ایجاد موج 50هرتز PWM برای راه اندازی موتور براشلس :(

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

    ایجاد موج 50هرتز PWM برای راه اندازی موتور براشلس :(

    سلام خسته نباشید ...
    بعد از تحقیقات فراوان که فهمیدم باید 1 موج PWM 50HZ بدم به Speed control تا از 1 میلی ثانیه به بالا تغییر کنه و موتور لعنتی روشن بشه به کد زیر رسیدم که 2 روزه دارم باش ور میرم ولی جواب نمیده ! از دوستان خواهشمندم کد منو اصلاح کنن یا کمکم کنن ! من میخوام با 1 شدن PA0 دیوتی زیاد و با 1 شدن PA1 دیوتی کم بشه :(
    با تشکر.
    کد:
    
    #include <mega32a.h>
    
    unsigned int x=180;
    interrupt [TIM0_OVF] void timer0_ovf_isr(void) {
      TCCR0=0;
      TCNT0=100;
      OCR0=x;
      TCCR0=0X7D;
    }
    void main(void)
    {
     PORTA.0=1;
     PORTA.1=1;
     DDRA=0x00;
     DDRB=0x08;
     TCNT0=100;
     OCR0=110;
     TIMSK=0x01;
     TCCR0=0x7D;
     #asm("sei")
     while(1)      {
     if (PINA.0 == 1 && x<=255){
     x++;  
      while( PINA.0 == 1);
     }
     if (PINA.1 == 1 && x>=110) {
     x-=1; 
     while( PINA.1 == 1);
     } 
     }
    }

    #2
    پاسخ : ایجاد موج 50هرتز PWM برای راه اندازی موتور براشلس :(

    با سلام،

    کد رو به شکل زیر اصلاح کنید :

    کد:
    #include <mega32a.h>
    #include <delay.h>
    
    unsigned int x=180;
    
    interrupt [TIM0_OVF] void timer0_ovf_isr(void)
    {
      TCCR0=0;
      TCNT0=100;
      OCR0=x;
      TCCR0=0X7D;
    }
    
    void main(void)
    {
     PORTA.0=1;
     PORTA.1=1;
     DDRA=0x00;
     DDRB=0x08;
     
     TCNT0=100;
     OCR0=102;
     TIMSK=0x01;
     TCCR0=0x7D;
     #asm("sei")
     
     while(1)
     {
      if(!PINA.0 && x<=250)   x++;
      if(!PINA.1 && x>=102)   x--;
      delay_ms(50);
     }
    }
    ( اسیلاتور میکرو هم باید روی 8 مگاهرتز [داخلی] باشه )
    مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

    Sh_Nourbakhsh@Yahoo.com

    http://s2.picofile.com/file/7170362468/_Wall_e_.jp

    دیدگاه


      #3
      پاسخ : ایجاد موج 50هرتز PWM برای راه اندازی موتور براشلس :(

      سلام ممون از پاسختون !
      متاسفانه 1 مشکل دارم وقتی شرط صفر بودن پرته میدونم که با وصل کردن به GND برقرار میشه ولی وقتی شرط 1 شدن پرته ورودیه نمیدونم باید پیکار کنم :( به VCC هم وصل میکنم ولی جواب نمیده واسه برقراریه شرط 1 بودن مگه نباید ولتاژی مخالف صفر اعمال بشه ؟ خوب VCC من5 برابر با 1 منطقیه :(
      نکته بعدم اینکه نمیخوام از DELAY استفاده کنم توی کدم فقط تایمر کانتر
      کد زیر رو با شرط همون صفر شدن اصلاح کردم !
      کار میکنه ولی رنج یکم زیاد تغییر میکنه با تغییر رنج بالا رفتن X هم تاثیر نداره :sad:
      فرکانس رو 50 هرتز گرفتم که ازونجا طول دوره میشه 20 میلی ثانیه یا 20000 میکرو ثانیه ! دیوتی سایکل رو از 5% که معادل 1 میلی ثانیه تا 99% تقریبا کم و زیاد میکنم اما موتور روشن نمیشه که نمیشه :( !
      ببخشید 1 سوال دیگه جریان بی باری و ولتاژ برای موتور من 0.4 آمپر 10 ولته ... منبع من حدودا 8 ولت با جریان 1 که .. ممکنه روشن نشدن موتور از اینم باشه ؟؟؟ یعنی حتما باید جریان موثر 8 آمپرش رو تامین کنم ؟؟؟
      کد:
      #include <mega32a.h>
      
      unsigned int x=248;
      interrupt [TIM0_OVF] void timer0_ovf_isr(void) {
        TCCR0=0;
        TCNT0=100;
        OCR0=x;
        TCCR0=0X7D;
      }
      void main(void)
      {
       PORTA.0=1;
       PORTA.1=1;
       DDRA=0x00;
       DDRB=0x08;
       TCNT0=100;
       OCR0=240;
       TIMSK=0x01;
       TCCR0=0x7D;
       #asm("sei")
       while(1){
       if (PINA.0 == 0){
       if (x>=110) {
       x-=1;  
       }
        while( PINA.0 == 0);
       }
       if (PINA.1 == 0) {
       if (x!=255){
       x+=1;    
       }
       while( PINA.1 == 0);
       } 
       }
      }

      دیدگاه


        #4
        پاسخ : ایجاد موج 50هرتز PWM برای راه اندازی موتور براشلس :(

        تروخدا یکی کمک کنه :((

        دیدگاه


          #5
          پاسخ : ایجاد موج 50هرتز PWM برای راه اندازی موتور براشلس :(

          خوب ظاهرا هیچکس نمیخواد به ما کمک کنه !!!! :cry:

          اینم کد نهایی :
          کد:
          #include <mega32a.h>
          float x=249;
          interrupt [TIM0_OVF] void timer0_ovf_isr(void) {
            TCCR0=0;
            TCNT0=100;
            OCR0=x;
            TCCR0=0X7D;
          }
          void main(void)
          {
           PORTA.0=1;
           PORTA.1=1;
           DDRA=0x00;
           DDRB=0x08;
           TCNT0=100;
           OCR0=249;
           TIMSK=0x01;
           TCCR0=0x7D;
           #asm("sei")
           while(1){
           if (PINA.0 == 0){
           if (x!=105) {
           x-=0.1;  
           }
            while( PINA.0 == 0);
           }
           if (PINA.1 == 0) {
           if (x<=255){
           x+=0.1;    
           }
           while( PINA.1 == 0);
           } 
           }
          }
          تقریبا (کاملا) درست کار میکنه ! با led که توی oc0 گذاشتم duty cycle از 0% تا 100% تقریبا تغییر میکنه ! موتور به اسپید کنترل وصله و بوق دیتکت میزنه و بوق زدن متناوبش شروع میشه ... ! که هیچجوره pwm اعمال نمیشه بش! اسپید به منبع 9 ولتی 10 آمپری وصله و میکرو از خود اسپید تغذیه میشه ! این صدای موتور که مثه صدای دستگاه icu میمونه داره روانیم میکنه دیگه :(((( تروخدا یکی کمک کنه بگه چیکار کنم ... آخه روشن کردن 1 براشلس انقد باید دردسر داشته باشه؟؟؟؟

          دیدگاه


            #6
            پاسخ : ایجاد موج 50هرتز PWM برای راه اندازی موتور براشلس :(

            با سلام
            من دقیقا مشکلتونا نفهممیدم. لطفا دقیقا بگید مشکل چی هست.
            (آیا pwm به موتور اعمال نمیشه و.......)
            مدارتون را هم بگزارید تا یه دید بزنم.
            یاعلی
            محمد.م

            دیدگاه

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