اطلاعیه

Collapse
No announcement yet.

عرض پالس رو چطوری اندازه بگیرم؟؟

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

    عرض پالس رو چطوری اندازه بگیرم؟؟

    سلام دوستان
    عرض پالس رو چطور میتونم با بالاترین دقت اندازه بگیرم؟ لطفا راهنمایی کنید

    راهکار های پیشنهادی یکی اینه ک سیگنالو بدیم به اینتراپت و با ورود یک پالس وارد وقفه مورد نظر بشیم و تایمرو فعال کنیم ولی مساله اینجاست ک این روش تاخیر داره و فکر نمیکنم دقیق باشه


    دوستان پروژه رو تکمیل کردم کد رو تو پست شماره 6 اضافه کردم هرکی مشکل داشت استفاده کنه
    جدیدترین ویرایش توسط armin_gera; ۰۰:۰۸ ۱۳۹۶/۰۵/۱۵.
    عزیزان دقت کنید پسورد تمامی فایلها و پروژه های من، در تاپیکشون موجوده(صفحات آخر) لطفا برای رمز فایلا پیام ندید!! چون خیلی دیر ب دیر میام انجمن و پیام چک نمیکنم
    مخترع برتر شمال غرب سال 96
    مدیر سابق منابع تغذیه انجمن ECA


    #2
    پاسخ : عرض پالس رو چطوری اندازه بگیرم؟؟

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

    دیدگاه


      #3
      پاسخ : عرض پالس رو چطوری اندازه بگیرم؟؟

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

      پس تایمرو فعال کنم سیگنال ک میاد کپچر فعال میشه بعد چی؟
      عزیزان دقت کنید پسورد تمامی فایلها و پروژه های من، در تاپیکشون موجوده(صفحات آخر) لطفا برای رمز فایلا پیام ندید!! چون خیلی دیر ب دیر میام انجمن و پیام چک نمیکنم
      مخترع برتر شمال غرب سال 96
      مدیر سابق منابع تغذیه انجمن ECA

      دیدگاه


        #4
        پاسخ : عرض پالس رو چطوری اندازه بگیرم؟؟

        ممنونم داداش
        ااا کی تماس گرفتی اخه؟

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

        دیدگاه


          #5
          پاسخ : عرض پالس رو چطوری اندازه بگیرم؟؟

          دوستان کد من درست جواب نمیده ب نظرتون مشکل از کجاست
          روال کار: اول حساسیت کپچر ب لبه ی بالا رنده هست وقتی لبه ی بالا رونده وارد میشه مقدار تایمر و مقدار t1 ک تعداد سر ریز های تایمر رو میشمره رو برابر صفر کردم
          بعد حساسیت کپچر رو برای لبه ی پایین رونده تنظیم کردم و وقتی پالس تموم میشه مقدار t1 و مقدار TCNT رو میخونم و با هم جمع میکنم ک بشه عرض پالسم
          ولی اصلا درست جواب نمیده عددی ک نشون میده هر لحظه در حال تغییره اصلا عدد درستی نشون نمیده

          تو if(i==3) هم فاصله ی دو لبه ی بالارونده اندازه گیری میشه ک توسطش فرکانسو ب دست بیارم ک حالا بمونه برا بعد اول این عرض پالس حل شه

          از تایمر 1 مگا32 استفاده شده و فرکانس کلاک میکرو 8 مگ و فرکانس تایمر هم 1 مگ ست شده

          کد:
          /*******************************************************
          This program was created by the
          CodeWizardAVR V3.12 Advanced
          Automatic Program Generator
          © Copyright 1998-2014 Pavel Haiduc, HP InfoTech s.r.l.
          http://www.hpinfotech.com
          
          Project : arz pulse
          Version : 1
          Date    : 2017-08-01
          Author  : armin
          Company : armin
          Comments: 
          hi hi
          
          
          Chip type               : ATmega32
          Program type            : Application
          AVR Core Clock frequency: 8.000000 MHz
          Memory model            : Small
          External RAM size       : 0
          Data Stack size         : 512
          *******************************************************/
          
          #include <mega32.h>
          #include <stdio.h>
          
          // Alphanumeric LCD functions
          #include <alcd.h>
          
          // Declare your global variables here
          
          unsigned    int  t1=0;
          unsigned int i=1;
          
          unsigned  int  arz=0;
          unsigned  int  T=0;
          unsigned  int  f=0;
           float  arz1=0;
           float  T2=0;
          
          char str1[10];
          char str2[10];
          
          
          // Timer1 overflow interrupt service routine
          interrupt [TIM1_OVF] void timer1_ovf_isr(void)
          {
          // Place your code here
           t1++;
           
          }
           
          // Timer1 input capture interrupt service routine
          interrupt [TIM1_CAPT] void timer1_capt_isr(void)
          {
          // Place your code here
          
          if(i==1)
          {
              #asm("cli");
              TCNT1L=0x00;
              TCNT1H=0x00; 
              t1=0;
              #asm("sei");
              TCCR1B&=~(1<<ICES1); //تنظیم حساسیت کپچر ب لبه ی پایین رونده
              i++;
           }      
           
          if(i==2)
          {
              #asm("cli");
              arz=ICR1L;
              arz|=(ICR1H<<8);
            //  arz=arz/1000;
              arz1=(t1*65536)+arz; 
              #asm("sei");
                 
              TCCR1B|=(1<<ICES1);  //تنظیم حساسیت کپچر ب لبه ی بالا رونده
              i++;
          }
          
          if(i>=3)
          {
              #asm("cli");
              T=ICR1L;
              T|=(ICR1H<<8); 
             // T=T/1000;
              T2=(t1*65536)+T;
              #asm("sei");
              i=1;
          
          }
          
          }
          
          
          
          void main(void)
          {
          // Declare your local variables here
          
          // Input/Output Ports initialization
          // Port A initialization
          // Function: Bit7=Out Bit6=Out Bit5=Out Bit4=Out Bit3=Out Bit2=Out Bit1=Out Bit0=Out 
          DDRA=(1<<DDA7) | (1<<DDA6) | (1<<DDA5) | (1<<DDA4) | (1<<DDA3) | (1<<DDA2) | (1<<DDA1) | (1<<DDA0);
          // State: Bit7=0 Bit6=0 Bit5=0 Bit4=0 Bit3=0 Bit2=0 Bit1=0 Bit0=0 
          PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);
          
          // Port B initialization
          // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
          DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
          // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
          PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
          
          // Port C initialization
          // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
          DDRC=(0<<DDC7) | (0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
          // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
          PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);
          
          // Port D initialization
          // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
          DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
          // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
          PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);
          
          // Timer/Counter 1 initialization
          // Clock source: System Clock
          // Clock value: 1000.000 kHz
          // Mode: Normal top=0xFFFF
          // OC1A output: Disconnected
          // OC1B output: Disconnected
          // Noise Canceler: Off
          // Input Capture on Rising Edge
          // Timer Period: 65.536 ms
          // Timer1 Overflow Interrupt: On
          // Input Capture Interrupt: On
          // Compare A Match Interrupt: Off
          // Compare B Match Interrupt: Off
          TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
          TCCR1B=(0<<ICNC1) | (1<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (1<<CS11) | (0<<CS10);
          TCNT1H=0x00;
          TCNT1L=0x00;
          ICR1H=0x00;
          ICR1L=0x00;
          OCR1AH=0x00;
          OCR1AL=0x00;
          OCR1BH=0x00;
          OCR1BL=0x00;
          TIFR|=(1<<ICF1);
          
          // Timer(s)/Counter(s) Interrupt(s) initialization
          TIMSK=(0<<OCIE2) | (0<<TOIE2) | (1<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (1<<TOIE1) | (0<<OCIE0) | (0<<TOIE0);
          
          // Alphanumeric LCD initialization
          // Connections are specified in the
          // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
          // RS - PORTA Bit 0
          // RD - PORTA Bit 1
          // EN - PORTA Bit 2
          // D4 - PORTA Bit 4
          // D5 - PORTA Bit 5
          // D6 - PORTA Bit 6
          // D7 - PORTA Bit 7
          // Characters/line: 16
          lcd_init(16);
          
          // Global enable interrupts
          #asm("sei")
          
          while (1)
                {
                // Place your code here
                //  f=1000/T2;
                  sprintf(str1,"%d",T2); 
                  sprintf(str2, "%d",arz1);
                  lcd_gotoxy(0,0);
                  lcd_puts(str1);
                  lcd_gotoxy(0,1);
                  lcd_puts(str2);
                }
          }
          جدیدترین ویرایش توسط armin_gera; ۰۳:۲۸ ۱۳۹۶/۰۵/۱۰.
          عزیزان دقت کنید پسورد تمامی فایلها و پروژه های من، در تاپیکشون موجوده(صفحات آخر) لطفا برای رمز فایلا پیام ندید!! چون خیلی دیر ب دیر میام انجمن و پیام چک نمیکنم
          مخترع برتر شمال غرب سال 96
          مدیر سابق منابع تغذیه انجمن ECA

          دیدگاه


            #6
            پاسخ : عرض پالس رو چطوری اندازه بگیرم؟؟

            پروژه رو تکمیل کردم و کداشو میزارم اینجا هرکی مشکل داشت استفاده کنه

            روال کار: اول حساسیت کپچر ب لبه ی بالا رنده هست وقتی لبه ی بالا رونده وارد میشه مقدار تایمر و مقدار t1 ک تعداد سر ریز های تایمر رو میشمره رو برابر صفر کردم
            بعد حساسیت کپچر رو برای لبه ی پایین رونده تنظیم کردم و وقتی پالس تموم میشه مقدار t1 و مقدار TCNT رو میخونم و با هم جمع میکنم ک بشه عرض پالسم


            تو if(i==3) هم فاصله ی دو لبه ی بالارونده اندازه گیری میشه ک توسطش فرکانسو ب دست بیارم

            کد:
            /*******************************************************
            This program was created by the
            CodeWizardAVR V3.12 Advanced
            Automatic Program Generator
            © Copyright 1998-2014 Pavel Haiduc, HP InfoTech s.r.l.
            http://www.hpinfotech.com
            
            Project : mesuring pulse width and frequency
            Version : 1
            Date    : 2017-08-01
            Author  : armin_inv
            Company : armin_inv
            Comments: 
            
            
            
            Chip type               : ATmega32
            Program type            : Application
            AVR Core Clock frequency: 8.000000 MHz
            Memory model            : Small
            External RAM size       : 0
            Data Stack size         : 512
            *******************************************************/
            
            #include <mega32.h>
            #include <stdio.h>
            #include <delay.h>
            // Alphanumeric LCD functions
            #include <alcd.h>
            
            // Declare your global variables here
            
            unsigned  long  int  t1=0;
            unsigned  int i=1;
            unsigned  int j=1;
            
            unsigned  int  arz=0;
            unsigned  int  T=0;
            unsigned  int  f[4];
            unsigned  int  arz2[4];
            
            long int arz1;
            long int T2;
            
            char str1[16];
            char str2[16];
            
            // Timer1 overflow interrupt service routine
            interrupt [TIM1_OVF] void timer1_ovf_isr(void)
            {
            // Place your code here
             t1++;
             
            }
             
            // Timer1 input capture interrupt service routine
            interrupt [TIM1_CAPT] void timer1_capt_isr(void)
            {
            // Place your code here
            
            if(i==1)
            {  
                TCNT1=0;
                t1=0;
               
                TCCR1B&=~(1<<ICES1); ////set capture sencitivity to falling edge
                i++;
             }      
              
            else if(i==2)
            {  
                arz=ICR1L;
                arz|=(ICR1H<<8);
                arz1=(65536*t1)+arz; 
                     
                TCCR1B|=(1<<ICES1);  //set capture sencitivity to rising edge
                 i++;
            }
            else if(i>2)
            {   
                T=ICR1L;
                T|=(ICR1H<<8);
                T2=(65536*t1)+T; 
                 
                i=1;
                j++;  
            }
            }
            
            
            void main(void)
            {
            // Declare your local variables here
            
            // Input/Output Ports initialization
            // Port A initialization
            // Function: Bit7=Out Bit6=Out Bit5=Out Bit4=Out Bit3=Out Bit2=Out Bit1=Out Bit0=Out 
            DDRA=(1<<DDA7) | (1<<DDA6) | (1<<DDA5) | (1<<DDA4) | (1<<DDA3) | (1<<DDA2) | (1<<DDA1) | (1<<DDA0);
            // State: Bit7=0 Bit6=0 Bit5=0 Bit4=0 Bit3=0 Bit2=0 Bit1=0 Bit0=0 
            PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);
            
            // Port B initialization
            // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
            DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
            // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
            PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
            
            // Port C initialization
            // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
            DDRC=(0<<DDC7) | (0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
            // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
            PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);
            
            // Port D initialization
            // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
            DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
            // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
            PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);
            
            // Timer/Counter 1 initialization
            // Clock source: System Clock
            // Clock value: 1000.000 kHz
            // Mode: Normal top=0xFFFF
            // OC1A output: Disconnected
            // OC1B output: Disconnected
            // Noise Canceler: Off
            // Input Capture on Rising Edge
            // Timer Period: 65.536 ms
            // Timer1 Overflow Interrupt: On
            // Input Capture Interrupt: On
            // Compare A Match Interrupt: Off
            // Compare B Match Interrupt: Off
            TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
            TCCR1B=(0<<ICNC1) | (1<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (1<<CS11) | (0<<CS10);
            TCNT1H=0x00;
            TCNT1L=0x00;
            ICR1H=0x00;
            ICR1L=0x00;
            OCR1AH=0x00;
            OCR1AL=0x00;
            OCR1BH=0x00;
            OCR1BL=0x00;
            //TIFR|=(1<<ICF1);
            
            // Timer(s)/Counter(s) Interrupt(s) initialization
            TIMSK=(0<<OCIE2) | (0<<TOIE2) | (1<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (1<<TOIE1) | (0<<OCIE0) | (0<<TOIE0);
            
            // Alphanumeric LCD initialization
            // Connections are specified in the
            // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
            // RS - PORTA Bit 0
            // RD - PORTA Bit 1
            // EN - PORTA Bit 2
            // D4 - PORTA Bit 4
            // D5 - PORTA Bit 5
            // D6 - PORTA Bit 6
            // D7 - PORTA Bit 7
            // Characters/line: 16
            lcd_init(16);
            
            // Global enable interrupts
            #asm("sei")
            
            while (1)
                  {
                  // Place your code here    
                  
                  
                  if(j==1)
                  {
                    
                    f[j]=1000000/T2;
                    arz2[j]=arz1/1000;
                    
                  
                  
                    sprintf(str1,"Frq = %04lu Hz   ",f); 
                    sprintf(str2,"Dty = %04lu mS",arz2);
                    
                    lcd_gotoxy(0,0);
                    lcd_puts(str1);
                    lcd_gotoxy(0,1);
                    lcd_puts(str2);   
                    
                  }
            }
            جدیدترین ویرایش توسط armin_gera; ۰۹:۱۸ ۱۳۹۶/۰۵/۱۶.
            عزیزان دقت کنید پسورد تمامی فایلها و پروژه های من، در تاپیکشون موجوده(صفحات آخر) لطفا برای رمز فایلا پیام ندید!! چون خیلی دیر ب دیر میام انجمن و پیام چک نمیکنم
            مخترع برتر شمال غرب سال 96
            مدیر سابق منابع تغذیه انجمن ECA

            دیدگاه


              #7
              پاسخ : عرض پالس رو چطوری اندازه بگیرم؟؟

              میشه این کارم کردکه یه وقفه فعال کنی پالست رومیدی به پایه وقفه...وقفه روروی مدchange میزاری یعنی هرتغییراتی روبگیره وبپره به زیربرنامش یه تایمرکانفیگ میکنی توی زیربرنامه وقفه توی اولین تغییرتایمرروstart میکنی وتوی تغییربعدی stopیااینکه بازوقفه تعریف میکنی ولی اول تومدبالارونده بعداینکه تشخیص دادتوی زیربرنامه وقفه تایمرروی استارت وهمون وقفه روتوی زیربرنامه خودش توی پائین رونده کانفیگ میکنی توی تشخیص بعدی تایمرروstop میکنی مقدارخونده شده تایمرعرض پالسته...
              اگه مقدارم دائم درحال تغییره یعنی اینکه خب پالسهادوره تناوبشون متغییره ...اگه مولدپالست یه موج بایه دوره تناوب دقیق بده شمافقط لازمه یه باراسکن کنی اونموقع تغییراتم نداری
              جدیدترین ویرایش توسط saeed garoosi; ۰۰:۴۸ ۱۳۹۶/۰۵/۱۵.
              درعجبم ازمردمی که به دنیایی مشتاقندکه ازآن دورمیشوندوگریزان ازآخرتیکه که روزبه روزبه آن نزدیک میشوند.

              دیدگاه


                #8
                پاسخ : عرض پالس رو چطوری اندازه بگیرم؟؟

                برای محاسبه خیلی دقیق عرض پالس باید پالسهایی که خود میکرو برای انجام دستورات مثل پرش به وقفه و استارت و استپ تایمر و .... رو از جمع نهایی تایمر کم کنید
                هر پالس ساعت میکرو در فرکانس کاری 8 مگا هرتز 125 نانو ثانیه میباشدو برای کوچیکترین دستور که صفر یا یک کردن یه پایه هست 250 نانو ثانیه زمان میبره و دستورات مقایسه ای و جمع و .. بیشتر از این زمان نیاز دارن
                برای محاسبه مقدار زمان انجام یک دستور میتونید از روش زیر استفاده کنید
                1-استارت تایمر
                2-دستور یا دستورات مورد نظر
                3-استپ تایمر
                4-نمایش مقدار تایمر
                در نمایش تایمر مقداری از اون عدد مربوط به استپ تایمر مورد نظر میباشد که با حذف خط دو میتونید اون مقدار رو بدست آورده و در زمان نمایش از مقدار تایمر کسر کنید

                دیدگاه


                  #9
                  پاسخ : عرض پالس رو چطوری اندازه بگیرم؟؟

                  نوشته اصلی توسط armin_gera نمایش پست ها
                  روال کار: اول حساسیت کپچر ب لبه ی بالا رنده هست وقتی لبه ی بالا رونده وارد میشه مقدار تایمر و مقدار t1 ک تعداد سر ریز های تایمر رو میشمره
                  از کجا معلوم که موقع فعال کردن کپچر شاید در وسط سیکل بالا هستی (و یا 10 درصد آخر) مقدار دیوتی حاصل همیشه نوسان خواهد داشت بیشتر شانسی است
                  شما باید اول پایه را چک بکنید تا حتما صفر باشد سپس مراتب بالا را اجرا نمایید
                  جدیدترین ویرایش توسط shapour; ۲۰:۲۹ ۱۳۹۶/۰۵/۱۵.

                  دیدگاه


                    #10
                    پاسخ : عرض پالس رو چطوری اندازه بگیرم؟؟

                    نوشته اصلی توسط saeed garoosi نمایش پست ها
                    میشه این کارم کردکه یه وقفه فعال کنی پالست رومیدی به پایه وقفه...وقفه روروی مدchange میزاری یعنی هرتغییراتی روبگیره وبپره به زیربرنامش یه تایمرکانفیگ میکنی توی زیربرنامه وقفه توی اولین تغییرتایمرروstart میکنی وتوی تغییربعدی stopیااینکه بازوقفه تعریف میکنی ولی اول تومدبالارونده بعداینکه تشخیص دادتوی زیربرنامه وقفه تایمرروی استارت وهمون وقفه روتوی زیربرنامه خودش توی پائین رونده کانفیگ میکنی توی تشخیص بعدی تایمرروstop میکنی مقدارخونده شده تایمرعرض پالسته...
                    اگه مقدارم دائم درحال تغییره یعنی اینکه خب پالسهادوره تناوبشون متغییره ...اگه مولدپالست یه موج بایه دوره تناوب دقیق بده شمافقط لازمه یه باراسکن کنی اونموقع تغییراتم نداری
                    تو اندازه گیری عرض پالس استفاده از کپچر ب خاطر حساسیتش بیشتر پیشنهاد میشه. استفاده از وقفه زیاد مناسب نیست چون خود اینترت و ... زمان بر هستن

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

                    نوشته اصلی توسط mehdi29665 نمایش پست ها
                    برای محاسبه خیلی دقیق عرض پالس باید پالسهایی که خود میکرو برای انجام دستورات مثل پرش به وقفه و استارت و استپ تایمر و .... رو از جمع نهایی تایمر کم کنید
                    هر پالس ساعت میکرو در فرکانس کاری 8 مگا هرتز 125 نانو ثانیه میباشدو برای کوچیکترین دستور که صفر یا یک کردن یه پایه هست 250 نانو ثانیه زمان میبره و دستورات مقایسه ای و جمع و .. بیشتر از این زمان نیاز دارن
                    برای محاسبه مقدار زمان انجام یک دستور میتونید از روش زیر استفاده کنید
                    1-استارت تایمر
                    2-دستور یا دستورات مورد نظر
                    3-استپ تایمر
                    4-نمایش مقدار تایمر
                    در نمایش تایمر مقداری از اون عدد مربوط به استپ تایمر مورد نظر میباشد که با حذف خط دو میتونید اون مقدار رو بدست آورده و در زمان نمایش از مقدار تایمر کسر کنید
                    اونقدرام نمیخوام دقیق باشه با تلرانس 1 میلی ثانیه مشکلی نداره

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

                    نوشته اصلی توسط shapour نمایش پست ها
                    از کجا معلوم که موقع فعال کردن کپچر شاید در وسط سیکل بالا هستی (و یا 10 درصد آخر) مقدار دیوتی حاصل همیشه نوسان خواهد داشت بیشتر شانسی است
                    شما باید اول پایه را چک بکنید تا حتما صفر باشد سپس مراتب بالا را اجرا نمایید
                    اینم پیشنهاد خیلی خوبیه حتما در نظرش میگیرم ممنون
                    البته الان بدون مشکل فرکانس و عرض پالسو درست نشون میده
                    جدیدترین ویرایش توسط armin_gera; ۰۹:۱۹ ۱۳۹۶/۰۵/۱۶.
                    عزیزان دقت کنید پسورد تمامی فایلها و پروژه های من، در تاپیکشون موجوده(صفحات آخر) لطفا برای رمز فایلا پیام ندید!! چون خیلی دیر ب دیر میام انجمن و پیام چک نمیکنم
                    مخترع برتر شمال غرب سال 96
                    مدیر سابق منابع تغذیه انجمن ECA

                    دیدگاه


                      #11
                      پاسخ : عرض پالس رو چطوری اندازه بگیرم؟؟

                      سلام
                      توضیحات کامل در پست بعدی دادم
                      متاسفانه نتونستم این پست را حذف کنم
                      جدیدترین ویرایش توسط shapour; ۱۱:۲۰ ۱۳۹۶/۰۵/۱۶.

                      دیدگاه


                        #12
                        پاسخ : عرض پالس رو چطوری اندازه بگیرم؟؟

                        نوشته اصلی توسط shapour نمایش پست ها
                        از کجا معلوم که موقع فعال کردن کپچر شاید در وسط سیکل بالا هستی (و یا 10 درصد آخر) مقدار دیوتی حاصل همیشه نوسان خواهد داشت بیشتر شانسی است
                        شما باید اول پایه را چک بکنید تا حتما صفر باشد سپس مراتب بالا را اجرا نمایید
                        با سلام
                        من قبلا تقریبا همچنین پروژه ای را برای نمایشگر کنترل دور موتور DC درست کرده بودم که علاوه بر نمایش فرکانس درصد دیوتی سایکل را هم نشان میداد ( فرکانس متغیربود تا حداکثر 2 کیلو هرتز ) اگر خواستی بفرمایید پیدا کنم و اینجا اپلودبکنم
                        تا جایی که یادم است من در این پروژه از اینتراپت خارجی استفاده کردم که به لبه بالا رونده پالس حساس بود (1) من در زمانی که پین صفر بود (2) اینتراپت را فعال میکردم و موقع سنس لبه بالا رونده (3) تایمری را که در هر 1 میلی ثانیه اینتراپت میده فعال میکرد و در هندل اینتراپت تایمر(4) پایه را سنس میکرد اگر یک بود به یک متغیر و اگر صفر بود به متغیر دیگری اضافه میکرد و این عملیات تا دریافت لبه بالا رونده بعدی ادامه داشت (5) با دریافت لبه بالا رونده هم اینتراپت خارجی و هم تایمر یک میلی ثانیه غیر فعال میشد (6) سپس چون فرکانس متغیر بود در نتیجه تعداد نمونه ها هم متغیر میشد لذا من مقدار متغیر یک بودن و صفر بودن را با هم جمع میکردم ( میشد صد درصد یک پالس) سپس تعداد متغیر یک بودن را ضرب در صد کرده وبر کل تغداد تقسیم میکردم و درصد یک بودن بدست می آمد (مثل زمانی که میگوییم 100 عدد در صد در صد 20 تا چند درصد میشه)

                        دیدگاه


                          #13
                          پاسخ : عرض پالس رو چطوری اندازه بگیرم؟؟

                          خب مسلمامدکپچرتایمربهتره بنده گفتم اینم میشه...روشهایی که باوقفه گفتم درجاهایی که دوره تناوب خیلی کم نباشه قابل استفاده است خودم برای پالس بادوره تناوب 2میلی ثانیه انجام دادم وبخوبی جواب دادولی برای میکروثانیه کپچربهتره ودقیق تر...تازه خوده وقفه اونجوری زمانی هم نمیبره چون اینهاتایمشون ازخودروتین برنامه جداست
                          روشهایی که گفتم برای تشخیص سیگنال جفت ومعکوسم کاربردداره مثلادرشناساییی ودیکودیه شبکه RS485 استفاده کردم که دوتاسیگنال ودقیقاعکس هم توی شبکه بود
                          جدیدترین ویرایش توسط saeed garoosi; ۱۲:۳۱ ۱۳۹۶/۰۵/۱۶.
                          درعجبم ازمردمی که به دنیایی مشتاقندکه ازآن دورمیشوندوگریزان ازآخرتیکه که روزبه روزبه آن نزدیک میشوند.

                          دیدگاه


                            #14
                            پاسخ : عرض پالس رو چطوری اندازه بگیرم؟؟

                            والا الان این کدای من ک با کپچر کار کردم خوب جواب داده ایرادی نداده حالا عملیشو ببندم ببینم تو واقعیت چجوری جواب میده
                            عزیزان دقت کنید پسورد تمامی فایلها و پروژه های من، در تاپیکشون موجوده(صفحات آخر) لطفا برای رمز فایلا پیام ندید!! چون خیلی دیر ب دیر میام انجمن و پیام چک نمیکنم
                            مخترع برتر شمال غرب سال 96
                            مدیر سابق منابع تغذیه انجمن ECA

                            دیدگاه

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