اطلاعیه

Collapse
No announcement yet.

کاربا pwm با دامنه ولتاژ 12 ولت و جریان بالاتر از 500 میلی

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

    کاربا pwm با دامنه ولتاژ 12 ولت و جریان بالاتر از 500 میلی

    سلام دوستان
    چطور میشه یه pwm ایجاد کرد با ولتاژ12 ولت و جریان بیشتر از 500 میلی آمپر ؟ باید از چه قطعه ای استفاده کنم ؟
    با تشکر

    #2
    پاسخ : کاربا pwm با دامنه ولتاژ 12 ولت و جریان بالاتر از 500 میلی

    سلام دوست عزیز
    اگه حوصله لحیم کاری نداری ، یه L293D بخر که میتونه ولتاژ 4.5 تا 36 ولت با جریان 600 میلی آمپر و پیک جریان 1.2 آمپر تحویل میده ، حجمش کمه و خیلی راه دسته
    اگه حوصله داری یه پل H لحیم کن ، میتونی تا سه آمپر هم ازش بگیری ، البته efficiency آی سی L293D خیلی بیشتره

    Good Luck

    دیدگاه


      #3
      پاسخ : کاربا pwm با دامنه ولتاژ 12 ولت و جریان بالاتر از 500 میلی

      دوست من scienceaddict ممنون از راهنماییت
      میشه بیشتر توضیح بدی یا بگی باید چطور دریوش کنم ؟ آخه من فقط درایو موتورهارو دیدم با l293 ... قطعه ای نیس مث uln کار باهاش راحتتر باشه ؟خروجیشم زیاد باشه؟
      جریان مد نظرم آمپر 1 به بالاست....
      ---------------
      یه سوال دیگه هم داشتم.چطور میتونم pwm رو طوری ایجاد کنم که با یه ولوم بتونم کنترلش کنم؟مثلا بدم به adc و ...

      دیدگاه


        #4
        پاسخ : کاربا pwm با دامنه ولتاژ 12 ولت و جریان بالاتر از 500 میلی

        سلام دوست عزیز
        من فکر کردم میخوای با PWM موتور رو کنترل کنی ، اگر فقط بخوای پالس بدی باز هم میتونی از L293 استفاده کنی اما دیگه جریان زیادی میخوای ، کار با درایور های ال اصلا سخت نیست ، مطمئن نیستم اما فکر میکنم بتونی پالست رو به یه ترانزیستور قدرت یا ماسفت بدی که بارت رو درایو کنن، هرچی دیوتی سایکل بیشتر باشه زمان بیشتری ماسفت یا ترانزیستور روشنه ، حالا بازم تست کن
        شما برای PWM با موتور میتونی از یه دونه 555 هم استفاده کنی اما برای کار با میکرو ، کافیه از ADC در مد 8 بیتی استفاده کنید ، هشت بیتی که میخونید کاملا متناسب با ولتاژ روی ولوم هست ، این هشت بیت رو تو رجیستر های OCRnX بریزید تا دیوتی سایکل PWM تغییر کنه متناسب با ولوم

        Good Luck

        دیدگاه


          #5
          پاسخ : کاربا pwm با دامنه ولتاژ 12 ولت و جریان بالاتر از 500 میلی

          من میخوام pwm رو خودم به صورت نرم افزاری درست کنم ... میشه راهنماییم کنی؟مثلا میخوام شدت نور یک لامپ رو کنترل کنم ولی نتونسم شدت نورو خوب کنترل کنم .مثلا میخوام شب و روزو شبیه سازی کنم... led یواش یواش نورش زیاد بشه بعد ثابت بمونه و بعد کمک کم خواموش بشه ... خیلی یکدست ... ولی نتونسم درست اینکارو انجام بدم فک کنم delay هام درست نبوده ... میشه یه ماسفت مثال بزنی جریان 4 تا 5 آمپرو ساپورت کنه؟و قسمت نرم افزاریشو کمکم کنی؟ممنون

          دیدگاه


            #6
            پاسخ : کاربا pwm با دامنه ولتاژ 12 ولت و جریان بالاتر از 500 میلی

            سلام دوست عزیز
            شما تو پست ول گفتی بیش از 500 میلی آمپر ، پست دوم 1 آمپر به بالا ، پست سوم 4-5 آمپر ، همینجوری پیش بریم پست بعدی بیش از 10 آمپرو ...
            شما تو سایت roboeq برو ماسفت هاشو ببین مثلا IRF640 ، شما فرمودید میخواهید "مثلا" شدت نور لامپ رو کنترل کنید ، لامپ 220 ولتیه؟ یا مثلا 12 ولتی DC هست؟ ، خیلی فرق داره
            شما کافیه یکی از تایمر هاتو بذاری روی مد fast pwm بعد با دوتا حلقه ، مقدار رجیستر OCRnX رو زیاد کنی و کم کنی مثلا از 0F افزایش بدی تا F0 و بعد کم کنی تا 0F ، تو نرم افزارش هم اگه بیسیک نباشه میتونم کمکت کنم

            Good Luck

            دیدگاه


              #7
              پاسخ : کاربا pwm با دامنه ولتاژ 12 ولت و جریان بالاتر از 500 میلی

              سلام :دی

              خوب همون 4-5 آمپر چون یک ریسه ی ال ای دی با ولتاژ 12 ولت هی کلا به 4 برسه...
              من میخوام از هر پایه ای که خودم بخوام موج pwm رو بگیرم اگه از تایمر استفاده کنم و رو حالت pwm بزارمش باید از اون پایه های مشخص شده خود میکروم حتما استفاده کنم درسته ؟
              من خودم یه همچین چیزی واسه امتحان نوشتم :
              کد:
              for(k=0;k<1500;k+=5)
                  { 
                    for(j=0;j<100;j++){
                      PORTC.5 = 1;
                      delay_us(100);
                      PORTC.5 = 0;
                      for(i=k;i>0;i--)
                        delay_us(1);
                    }  
                  }
              روشنایی رو از پر نور به کم نور تبدیل میکنه ولی جالب نیس یعنی شدت نور اونقد کم نمیشه....
              میشه بگین باید واسه کنترل بهتر ال ای دی باید چقدر تاخیر بدم واسه تولید موج ؟ من زمان سطح یک رو 100میکروثانیه ثابت فرض کرم و با دیلی تایم تاخییر رو به وجود آوردم...
              حالا این برنامه با دیلی بود بعدا با تایمر های معمولی انجام میدم ولی میخوام pwm رو رو هر پایه ای که خودم میخوام بدون محدودیت تولید کنم...

              مرسی

              دیدگاه


                #8
                پاسخ : کاربا pwm با دامنه ولتاژ 12 ولت و جریان بالاتر از 500 میلی

                سلام دوست عزیز
                بله شما میتونید PWM تولید کنید روی هر پایه
                اما تو برنامه ای که دارید شما موج PWM تولید نمیکنید ، یعنی اصل تابع شما اشتباه است
                من همینجوری با اسمبلی یه PWM نوشتم ، لینکش و لینک برنامه خودتونو پایین میذارم ، شما شکل موج ها رو تو اسیلوسکوپ پروتیوس ببینید ، و سعی کنید برنامه ای شبیه اون بنویسید ، اگر نتونستید در آینده دوستان هم کمک کنند تا یه تابع تر و تمیز تو C براش بنویسیم
                http://s2.picofile.com/file/7715364836/PWM.zip.html

                Good Luck

                دیدگاه


                  #9
                  پاسخ : کاربا pwm با دامنه ولتاژ 12 ولت و جریان بالاتر از 500 میلی

                  سلام دوست من. برنامتو دانلود کردم حتما نگه میکنم و برناممو اصلاح میکنم .
                  فقط در حد یک تست کوچیک گرفتم یه کنترل نور درس کردم ، به گفته شما موج pwm ام حتما اشتباهه ، فقط خواستم یک جوابی گرفته باشم از کارم...
                  راستش من این کنترلر رو برای آکواریومم میخوام میخوام شب و روزو واسه ماهیام شبیه سازی کنم و لامپش روسن نباشه همیشه شبا هم یه نور خیلی کمی داشته باشن خلاصه...
                  الان این برنامه ای که نوشتم با پتانسیومتر نور ال ای دی رو کم و زیاد میکنه :
                  کد:
                  #include <mega8.h>  
                  #include <delay.h> 
                  #asm
                    .equ __lcd_port = 0x18; PORTB  0x12 D
                  #endasm
                  #include <lcd.h> 
                  #include <stdlib.h> 
                  #include <string.h>  
                  unsigned int adc_data;
                  #define ADC_VREF_TYPE 0x40
                  interrupt [ADC_INT] void adc_isr(void)
                  {
                    adc_data=ADCW;
                  }
                  unsigned int read_adc(unsigned char adc_input)
                  {
                  ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
                  #asm
                    in  r30,mcucr
                    cbr r30,__sm_mask
                    sbr r30,__se_bit | __sm_adc_noise_red
                    out mcucr,r30
                    sleep
                    cbr r30,__se_bit
                    out mcucr,r30
                  #endasm
                  return adc_data;
                  } 
                  int a = 1023;
                  char s1[8];     
                  void main()
                  { 
                  int i=0;
                  int j=0;
                  int k=0;
                  DDRD=0xff;
                  PORTD=0x00;
                    ADMUX=ADC_VREF_TYPE;
                    ADCSRA=0x8F;
                    SFIOR&=0xEF;
                      #asm("sei") 
                  lcd_init(16);
                    lcd_putsf("start");
                    delay_ms(100);
                    while(1)
                    {  
                    
                      a=read_adc(0);  
                      //delay_ms(100);
                      itoa(a,s1); 
                      lcd_gotoxy(0,1); 
                      lcd_putsf("   ");
                      lcd_gotoxy(0,1); 
                      lcd_puts(s1); 
                      k=a;
                      
                          PORTD.0 = 1;
                          if(k>=200)
                            delay_us(1);
                          else
                          { 
                            for(i=k-200;i>0;i--)
                            delay_us(1);
                          }
                          PORTD.0 = 0;
                          for(i=k;i>0;i--)
                            delay_us(1);
                    }   
                    
                  }
                  فردا حتما برنامه شمارو تست میکنم و تابعم رو اصلاح میکنم ، اگه میشه شما هم راهنماییم کنین کجاشو دست بزنم بهتره

                  مرسی

                  دیدگاه


                    #10
                    پاسخ : کاربا pwm با دامنه ولتاژ 12 ولت و جریان بالاتر از 500 میلی

                    سلام سلام
                    من اینو نوشتم :
                    کد:
                    for(k=200;k>0;k-=5)
                        { 
                          for(j=0;j<300;j++)
                          {
                            PORTD.0 = 1;
                            for(i=200-k;i>0;i--)
                              delay_us(1);
                            PORTD.0 = 0;
                            for(i=k;i>0;i--)
                              delay_us(1);
                          }  
                        } 
                      
                        for(k=0;k<200;k+=5)
                        { 
                          for(j=0;j<300;j++){
                            PORTD.0 = 1;
                            
                            for(i=200-k;i>0;i--)
                              delay_us(1);
                            PORTD.0 = 0;
                            for(i=k;i>0;i--)
                              delay_us(1);
                          }  
                        }
                    نور ال ای دی رو از کم نور یواش یواش پر نور میکنه و دوباره به صورت معکوس کم میکنه.... موجش هم مثل همون pwm ای که شما نوشتین شده . درسته دگ ؟ نه ؟

                    دیدگاه


                      #11
                      پاسخ : کاربا pwm با دامنه ولتاژ 12 ولت و جریان بالاتر از 500 میلی

                      اینم برنامه کاملش :
                      مقدار دیلی off رو هم روی ال سیدی مینویسه برحسب میکرو ثانیه.
                      کد:
                      #include <mega8.h>  
                      #include <delay.h> 
                      #asm
                        .equ __lcd_port = 0x18; PORTB  0x12 D
                      #endasm
                      #include <lcd.h> 
                      #include <stdlib.h> 
                      #include <string.h>  
                      unsigned int adc_data;
                      #define ADC_VREF_TYPE 0x40
                      interrupt [ADC_INT] void adc_isr(void)
                      {
                        adc_data=ADCW;
                      }
                      unsigned int read_adc(unsigned char adc_input)
                      {
                      ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
                      #asm
                        in  r30,mcucr
                        cbr r30,__sm_mask
                        sbr r30,__se_bit | __sm_adc_noise_red
                        out mcucr,r30
                        sleep
                        cbr r30,__se_bit
                        out mcucr,r30
                      #endasm
                      return adc_data;
                      } 
                      int a = 1023;
                      char s1[8];     
                      void main()
                      { 
                      int i=0;
                      int j=0;
                      int k=0;
                      DDRD=0xFF;
                      PORTD=0x00;
                        ADMUX=ADC_VREF_TYPE;
                        ADCSRA=0x8F;
                        SFIOR&=0xEF;
                          #asm("sei") 
                      lcd_init(16);
                        lcd_putsf("start");
                        delay_ms(100);
                        while(1)
                        { 
                          a=read_adc(0);  
                          //delay_ms(100);
                          itoa(a,s1); 
                          lcd_gotoxy(0,1); 
                          lcd_putsf("   ");
                          lcd_gotoxy(0,1); 
                          lcd_puts(s1); 
                          k=a;
                          
                              PORTD.0 = 1;
                              PORTD.0 = 1;
                              for(i=1023-k;i>0;i--)
                                delay_us(1);
                              PORTD.0 = 0;
                              for(i=k;i>0;i--)
                                delay_us(1);  
                          /*
                          for(k=200;k>0;k-=5)
                          { 
                            for(j=0;j<300;j++)
                            {
                              PORTD.0 = 1;
                              for(i=200-k;i>0;i--)
                                delay_us(1);
                              PORTD.0 = 0;
                              for(i=k;i>0;i--)
                                delay_us(1);
                            }  
                          } 
                        
                          for(k=0;k<200;k+=5)
                          { 
                            for(j=0;j<300;j++){
                              PORTD.0 = 1;
                              
                              for(i=200-k;i>0;i--)
                                delay_us(1);
                              PORTD.0 = 0;
                              for(i=k;i>0;i--)
                                delay_us(1);
                            }  
                          } 
                          */ 
                        }   
                        
                      }

                      دیدگاه


                        #12
                        پاسخ : کاربا pwm با دامنه ولتاژ 12 ولت و جریان بالاتر از 500 میلی

                        سلام دوست عزیز
                        بسیار عالی نوشتید ، دقیقا همون چیزیه که باید باشه ،
                        من اول فکر کردم شما تابلو LED ثابت دارید و میخواهید نور هر کانالتونو کنترل کنید ، اگه چراغ آکواریومه که فکر نمیکنم تعداد چراغ ها زیاد باشه یا سخت باشه که یک پایه رو عوض کنید و میتونید از تایمر ها استفاده کنید و انقدر عرصه رو به خودتون تنگ نکنید ،

                        Good Luck

                        دیدگاه


                          #13
                          پاسخ : کاربا pwm با دامنه ولتاژ 12 ولت و جریان بالاتر از 500 میلی

                          سلام خوب من میخوام از سه رنگ ابی سفید و قرمز استفاده کنم و بشه به صورت دلخواه شدت نورشونو تنظیم کرد و حالا نمیدونم از ال ای دی پاور استفاده کنم یا معمولی واسه همین جریانش از 500 بیشتر بودو انقد تلرانس داشت
                          ===
                          یک سوال خارج از این بحث... چطور گام تغییرات adc رو تغییر بدم ؟حساسیتشو منظورم هس ، مثلا هر 0.3 میلی ولت توی ورودیش روی مقدار adc تغییر ایجاد کنه.

                          دیدگاه


                            #14
                            پاسخ : کاربا pwm با دامنه ولتاژ 12 ولت و جریان بالاتر از 500 میلی

                            سلام دوست عزیز
                            تا حالا بهش فکر نکردم ولی چیزی که واضحه اینه که هرچی رزولوشن ADC بیشتر باشه مقدار کمتری رو میتونه بخونه و اینکه هرچی سرعت نمونه برداری مبدل بیشتر باشه هکذا
                            چیز دیگه ای نمیدونم امیدوارم دوستان بیشتر راهنماییت کنن

                            Good Luck

                            دیدگاه

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