اطلاعیه

Collapse
No announcement yet.

پیدا کردن تغییرات فرکانسی

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

    پیدا کردن تغییرات فرکانسی

    سلام
    من میخاهم شوک ناشی از تغییر فرکانس در یک دستگاه رو بدست بیاورم
    یعنی ببینم در شوک فرکانس چه مقدار میشود
    برنامم با تایمر یک و xatmega 32 و کریستال 16 مگاهرتز میباشد
    مدارم فرکانس رو خیلی دقیق بدست میاره ولی زمانی که فرکانس به صورت ناگهانی یهو زیاد میشه رو نمیتونه فرکانسش رو حساب کنه
    فرکانس در شوک تقریبا دوبرابر میشه فکر کنم(با توجه به موج رو اسیلوسکوپ میگم)فرکانس کاری من 100 هرتز میباشد
    کسی میتونه کمکم کنه
    لطفااااااااااا :cry2:

    #2
    پاسخ : پیدا کردن تغییرات فرکانسی

    نوشته اصلی توسط ali127
    سلام
    من میخاهم شوک ناشی از تغییر فرکانس در یک دستگاه رو بدست بیاورم
    یعنی ببینم در شوک فرکانس چه مقدار میشود
    برنامم با تایمر یک و xatmega 32 و کریستال 16 مگاهرتز میباشد
    مدارم فرکانس رو خیلی دقیق بدست میاره ولی زمانی که فرکانس به صورت ناگهانی یهو زیاد میشه رو نمیتونه فرکانسش رو حساب کنه
    فرکانس در شوک تقریبا دوبرابر میشه فکر کنم(با توجه به موج رو اسیلوسکوپ میگم)فرکانس کاری من 100 هرتز میباشد
    کسی میتونه کمکم کنه
    سلام
    مدت زمان این شوک چقدره؟
    منظور شما از شوک اینه که: یعنی به صورت لحظه ای فرکانس تغییر میکنه
    دوباره برمیگرده به جای اولش؟
    ... :read:
    شاید هم یک مقدار برنامه نویسی رو باید تغییر بدی
    1: اللهم صل علي محمد و آل محمد و عجل فرجهم و ...
    2: دانش بهتره يا ثروت؟ بدون شعور هيچکدوم!
    3: دلا معاش چنان کن که گر بلغزد پاي *** فرشته‌ات به دو دست دعا نگه دارد (حافظ)

    دیدگاه


      #3
      پاسخ : پیدا کردن تغییرات فرکانسی

      بله به صورت لحظه ای فرکانس افزایش میابد و بعد به حالت اول برمیگردد
      موج من یه موج FM هستش که فرکانسش از 100 هرتز طی 2 ثانیه به 70 هرتز میرسد و بعد طی 2 ثانیه به حالت اول بر میگردد
      زمان شوک نمیدونم چقدر هستش چون اصلا نمیتونم اندازه بگیرمش فقط یه لحظه اتفاق میافتد و بعد فرکانس به حالت نرمال برمیگردد

      دیدگاه


        #4
        پاسخ : پیدا کردن تغییرات فرکانسی

        نوشته اصلی توسط ali127
        بله به صورت لحظه ای فرکانس افزایش میابد و بعد به حالت اول برمیگردد
        موج من یه موج FM هستش که فرکانسش از 100 هرتز طی 2 ثانیه به 70 هرتز میرسد و بعد طی 2 ثانیه به حالت اول بر میگردد
        زمان شوک نمیدونم چقدر هستش چون اصلا نمیتونم اندازه بگیرمش فقط یه لحظه اتفاق میافتد و بعد فرکانس به حالت نرمال برمیگردد
        1: یعنی موج شما فقط دو مقدار 100 و 70 داره؟
        یا اینکه بین 70 تا 100 در حال تغییره؟

        2: میخوای روی ال سی دی نشون بدی؟
        یا ذخیره کنی؟

        3: از چه مکانیزمی برای شمارش فرکانس استفاده میکنی؟
        ...
        :read:
        1: اللهم صل علي محمد و آل محمد و عجل فرجهم و ...
        2: دانش بهتره يا ثروت؟ بدون شعور هيچکدوم!
        3: دلا معاش چنان کن که گر بلغزد پاي *** فرشته‌ات به دو دست دعا نگه دارد (حافظ)

        دیدگاه


          #5
          پاسخ : پیدا کردن تغییرات فرکانسی

          بله بین 70 تا 100 داره تغییر میکنه دو مقدار ثابت 70 و 100 نیست بینش تغییر میکنه
          فرکانس رو اینجوری بدست میارم که به کمک اینتراپت خارجی 1 که حساس به لبه بالا رونده هست زمان بین دو لبه را محاسبه کرده و از اون طریق فرکانس رو محاسبه میکنم
          بله میخاهم هر بار که شوک اتفاق افتاد رو ال سی دی نمایش بدم فرکانس شوک را

          دیدگاه


            #6
            پاسخ : پیدا کردن تغییرات فرکانسی

            نوشته اصلی توسط ali127
            بله بین 70 تا 100 داره تغییر میکنه دو مقدار ثابت 70 و 100 نیست بینش تغییر میکنه
            فرکانس رو اینجوری بدست میارم که به کمک اینتراپت خارجی 1 که حساس به لبه بالا رونده هست زمان بین دو لبه را محاسبه کرده و از اون طریق فرکانس رو محاسبه میکنم
            بله میخاهم هر بار که شوک اتفاق افتاد رو ال سی دی نمایش بدم فرکانس شوک را
            - بعد از اینکه فرکانس رو محاسبه کردی درجا نمایشش میدی؟
            - هنوز منظورتون از شوک رو نفهمیدم.
            - آیا باید داده هاتون رو ذخیره کنید؟
            - از چه مکانیزمی برای تشخیص شوک استفاده میکنید؟
            :read:
            1: اللهم صل علي محمد و آل محمد و عجل فرجهم و ...
            2: دانش بهتره يا ثروت؟ بدون شعور هيچکدوم!
            3: دلا معاش چنان کن که گر بلغزد پاي *** فرشته‌ات به دو دست دعا نگه دارد (حافظ)

            دیدگاه


              #7
              پاسخ : پیدا کردن تغییرات فرکانسی

              منظور از شوک تغییر ناگهانی فرکانسه مثلا وقتی فرکانس داره از 100 به سمت 70 میره یه جا یهو افزایش پیدا میکنه و سریع دوباره به حالت نرمال میره
              بعله دستور نمایش داخل (1)while قرار داره تا دایم تغییرات رو نمایش بده
              من دایما دو فرکانس متوالی را ذخیره میکنم اگه اختلاف این دو از حدی مثلا 10 هرتز بیشتر بود یعنی شوک اتفاق افتاده

              دیدگاه


                #8
                پاسخ : پیدا کردن تغییرات فرکانسی

                نوشته اصلی توسط ali127
                منظور از شوک تغییر ناگهانی فرکانسه مثلا وقتی فرکانس داره از 100 به سمت 70 میره یه جا یهو افزایش پیدا میکنه و سریع دوباره به حالت نرمال میره
                بعله دستور نمایش داخل (1)while قرار داره تا دایم تغییرات رو نمایش بده
                من دایما دو فرکانس متوالی را ذخیره میکنم اگه اختلاف این دو از حدی مثلا 10 هرتز بیشتر بود یعنی شوک اتفاق افتاده
                آقا اگه میشه یه نمونه برنامه بذار اینجا ببینیم چه کردی؟
                1: اللهم صل علي محمد و آل محمد و عجل فرجهم و ...
                2: دانش بهتره يا ثروت؟ بدون شعور هيچکدوم!
                3: دلا معاش چنان کن که گر بلغزد پاي *** فرشته‌ات به دو دست دعا نگه دارد (حافظ)

                دیدگاه


                  #9
                  پاسخ : پیدا کردن تغییرات فرکانسی

                  من تخصصی تو الکترونیک ندارم اما مشکلت رو فکر میکنم میدونم چیه

                  شما اگه خط اول شدت شوک رو میریزید تو یه variable تا دباره رسیدن tracer به خط اول هر تغییری در شوک انجام بشه ثبت نمیشه
                  برای این کار باید از یک damper استفاده کنید یا یک value lerp که به صورت آنالوگ باشه

                  دیدگاه


                    #10
                    پاسخ : پیدا کردن تغییرات فرکانسی

                    [code=c]/************************************************** ***
                    This program was produced by the
                    CodeWizardAVR V1.25.5 Standard
                    Automatic Program Generator
                    © Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.
                    http://www.hpinfotech.com

                    Project :
                    Version :
                    Date : 10/25/2014
                    Author : F4CG
                    Company : F4CG
                    Comments:


                    Chip type : ATmega16
                    Program type : Application
                    Clock frequency : 16.000000 MHz
                    Memory model : Small
                    External SRAM size : 0
                    Data Stack size : 256
                    ************************************************** ***/

                    #include <mega32.h>
                    #include <stdio.h>
                    #include <math.h>
                    // Alphanumeric LCD Module functions
                    #asm
                    .equ __lcd_port=0x15 ;PORTC
                    #endasm
                    #include <lcd.h>
                    unsigned long int freq,freqm,m,i,q,e1,j=0,alarm1,a,h;
                    char buffer[32],fr[200];
                    // External Interrupt 1 service routine
                    interrupt [EXT_INT1] void ext_int1_isr(void)
                    { if(m==0){
                    i++;
                    if(i==20){
                    q=i;
                    m=1;
                    }

                    }
                    freq=65535/((TCNT1)*4.19424);
                    if(q==20){
                    fr=freq;
                    j=j+1;}
                    // fr[0]=1;
                    //fr[1]=0;
                    // j=2;
                    if(j==15){
                    for(a=0;a<14;a++){
                    if(fr[0]>fr[a+1]){
                    alarm1=(fr[0]-fr[a+1]);}
                    if(fr[0]<fr[a+1]){
                    alarm1=fr[a+1]-fr[0];}



                    if(alarm1>e1 && q==20){
                    e1=alarm1;
                    }
                    if (alarm1>10){
                    h++;
                    }
                    }



                    j=0;
                    }
                    TCNT1=0x0000;
                    if(freq>freqm && freq<6000 && q==20){
                    freqm=freq;
                    }

                    }

                    // Declare your global variables here

                    void main(void)
                    {
                    // Declare your local variables here

                    // Input/Output Ports initialization
                    // Port A initialization
                    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
                    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
                    PORTA=0x00;
                    DDRA=0x00;

                    // Port B initialization
                    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
                    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
                    PORTB=0x00;
                    DDRB=0x00;

                    // Port C initialization
                    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
                    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
                    PORTC=0x00;
                    DDRC=0x00;

                    // Port D initialization
                    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
                    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
                    PORTD=0x00;
                    DDRD=0x00;

                    // Timer/Counter 0 initialization
                    // Clock source: System Clock
                    // Clock value: Timer 0 Stopped
                    // Mode: Normal top=FFh
                    // OC0 output: Disconnected
                    TCCR0=0x00;
                    TCNT0=0x00;
                    OCR0=0x00;

                    // Timer/Counter 1 initialization
                    // Clock source: System Clock
                    // Clock value: 15.625 kHz
                    // Mode: Normal top=FFFFh
                    // OC1A output: Discon.
                    // OC1B output: Discon.
                    // Noise Canceler: Off
                    // Input Capture on Falling Edge
                    // Timer 1 Overflow Interrupt: Off
                    // Input Capture Interrupt: Off
                    // Compare A Match Interrupt: Off
                    // Compare B Match Interrupt: Off
                    TCCR1A=0x00;
                    TCCR1B=0x05;
                    TCNT1H=0x00;
                    TCNT1L=0x00;
                    ICR1H=0x00;
                    ICR1L=0x00;
                    OCR1AH=0x00;
                    OCR1AL=0x00;
                    OCR1BH=0x00;
                    OCR1BL=0x00;

                    // Timer/Counter 2 initialization
                    // Clock source: System Clock
                    // Clock value: Timer 2 Stopped
                    // Mode: Normal top=FFh
                    // OC2 output: Disconnected
                    ASSR=0x00;
                    TCCR2=0x00;
                    TCNT2=0x00;
                    OCR2=0x00;

                    // External Interrupt(s) initialization
                    // INT0: Off
                    // INT1: On
                    // INT1 Mode: Rising Edge
                    // INT2: Off
                    GICR|=0x80;
                    MCUCR=0x0C;
                    MCUCSR=0x00;
                    GIFR=0x80;

                    // Timer(s)/Counter(s) Interrupt(s) initialization
                    TIMSK=0x00;

                    // Analog Comparator initialization
                    // Analog Comparator: Off
                    // Analog Comparator Input Capture by Timer/Counter 1: Off
                    ACSR=0x80;
                    SFIOR=0x00;

                    // LCD module initialization
                    lcd_init(16);

                    // Global enable interrupts
                    #asm("sei&quot

                    while (1)
                    {
                    lcd_clear();
                    sprintf(buffer,"freq:%d:%d\ne:%d:%d:%d", freq,freqm,e1,alarm1,h);
                    lcd_puts(buffer);

                    }
                    }
                    [/code]

                    اضافه شده در تاریخ :
                    نوشته اصلی توسط ehsan_wwe
                    من تخصصی تو الکترونیک ندارم اما مشکلت رو فکر میکنم میدونم چیه

                    شما اگه خط اول شدت شوک رو میریزید تو یه variable تا دباره رسیدن tracer به خط اول هر تغییری در شوک انجام بشه ثبت نمیشه
                    برای این کار باید از یک damper استفاده کنید یا یک value lerp که به صورت آنالوگ باشه

                    میشه بیشتر توضیح بدید؟ :nerd:

                    دیدگاه


                      #11
                      پاسخ : پیدا کردن تغییرات فرکانسی

                      سلام
                      برنامه شما رو نخوندم و مسقیم رفتم while(1) رو چک کردم
                      مشکل شما در وهله اول اینه که مدام ال سی دی clear میشه
                      و روش اطلاعات جدید نوشته میشه!
                      بنابراین خیلی طبیعیه که شما نتونی اطلاعات درست ببینی!
                      برای اینکه این مشکل حل بشه
                      توابعی که در while(1) نوشتی رو ببر به جایی که شوک رو تشخیص میدی
                      یعنی هر موقع شوک رو تشخیص داد اطلاعات رو بر روی ال سی دی بنویسه
                      اگه مدت زمان شوک های پشت سرهم کوتاهه
                      از یک تابع وقفه استقاده کن
                      یا یه سری همچین کارهایی انجام بده
                      که اطلاعات پشت سرهم و با سرعت زیاد
                      بر روی ال سی دی نوشته نشه
                      :read:
                      1: اللهم صل علي محمد و آل محمد و عجل فرجهم و ...
                      2: دانش بهتره يا ثروت؟ بدون شعور هيچکدوم!
                      3: دلا معاش چنان کن که گر بلغزد پاي *** فرشته‌ات به دو دست دعا نگه دارد (حافظ)

                      دیدگاه


                        #12
                        پاسخ : پیدا کردن تغییرات فرکانسی

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

                        دیدگاه


                          #13
                          پاسخ : پیدا کردن تغییرات فرکانسی

                          چرا اینهمه کد برای یه چیز به این سادگی ؟
                          (اگه فقط همینیو که گفتی می خوای
                          کافیه از دستور ABS که همون قدر مطلقه و یک variable که آخرین تغییرات رو توش میریزه استفاده کنی
                          برای مثال
                          کد:
                          void start()
                          {
                          int oldfreq = freq;
                          }
                          void loop()
                          {
                          if ( abs(freq-oldfreq) >20)
                          {
                          
                          in yek shoke harkari mikhay inja bokon 
                          
                          }
                          
                          
                          old freq = freq
                          }
                          1-باید بری سرچ کنی ببینی روش استفاده از ABS تو C چطوریه
                          2-بجای عدد 22 میتونی هر عددی که بهش شوک میگیو بزاری

                          منظور من از دمپر دمپره دیگه
                          میتونه یه المنت باشه که گرماش یه جایی ذخیره میشه وقتی شوک بهش میخوره تغریبا 2 صدم ثانیه طولانی تر این شوک رو حفظ میکنه

                          من با مدارات آنالوگ اشنایی ندارم اما ما تو برنامه نویسی بهش میگیم دمپر
                          میاد با یک سری کد های مثلثات عدد رو نرم میکنه ( برای شوک ها لحظه ای بهترین چیزه )
                          شوک رو تو خودش نگه میداره

                          دیدگاه


                            #14
                            پاسخ : پیدا کردن تغییرات فرکانسی

                            نوشته اصلی توسط ehsan_wwe
                            چرا اینهمه کد برای یه چیز به این سادگی ؟
                            (اگه فقط همینیو که گفتی می خوای
                            کافیه از دستور ABS که همون قدر مطلقه و یک variable که آخرین تغییرات رو توش میریزه استفاده کنی
                            برای مثال
                            کد:
                            void start()
                            {
                            int oldfreq = freq;
                            }
                            void loop()
                            {
                            if ( abs(freq-oldfreq) >20)
                            {
                            
                            in yek shoke harkari mikhay inja bokon 
                            
                            }
                            
                            
                            old freq = freq
                            }
                            حق با توه ممنون :applause:

                            اضافه شده در تاریخ :
                            اقا هنوز مشکل هستشا کسی راه حلی به نظرش نمیرسه؟؟ :cry2:
                            ای سی چیزی نیست واسه این کار؟ :sad:

                            دیدگاه


                              #15
                              پاسخ : پیدا کردن تغییرات فرکانسی

                              نوشته اصلی توسط ali127
                              اقا هنوز مشکل هستشا کسی راه حلی به نظرش نمیرسه؟؟ :cry2:
                              ای سی چیزی نیست واسه این کار؟ :sad:
                              موج شما مربعیه یا سیونوسی یا ... ؟
                              اگه هرچیزی غیر از مربعیه
                              به کمک یک آی سی اشمیت تریگر موج رو اول باید مربعی کنی!
                              1: اللهم صل علي محمد و آل محمد و عجل فرجهم و ...
                              2: دانش بهتره يا ثروت؟ بدون شعور هيچکدوم!
                              3: دلا معاش چنان کن که گر بلغزد پاي *** فرشته‌ات به دو دست دعا نگه دارد (حافظ)

                              دیدگاه

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