Thông báo

Collapse
No announcement yet.

PIC đo tần số: Lý do sai số 2.4%.

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • #16
    Nguyên văn bởi youaremylife Xem bài viết
    Đâu có ai nói là do PIC nó gây sai số đâu, trước mình làm mạch đếm tần dùng PIC8f4550 clock 48Mhz sử dụng timer để tạo hẵn 1s chế độ 16 bit, và dùng 1 bộ counter 16 bit viết trên c18 tính toán từng dòng lệnh có bù trừ mấy lệnh nhảy, điều kiện ví dụ như đk đúng mất 3 chu kì sai mất 2 chu kì thì bù thêm 1 chu kì vào bên cái sai sao cho số chu kì lệnh khi thực hiện các đk đó là như nhau,... thực tế thì nó cũng có sai số thôi. Còn với tần số rất cao thì do giới hạn phần cứng nên cũng bị hạn chế có thể dùng các bộ chia tần xuống rồi đo, nhưng như thế nó sẽ sai số tùy theo tỉ lệ của bộ chia
    Chuẩn ! nếu bạn sai 1 chu kỳ máy ... khi dùng bộ chia 128 ... nó sẽ sai thành 128 chu kỳ !
    Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

    Comment


    • #17
      Nguyên văn bởi queduong Xem bài viết
      nếu pic mà chịu được 200mhz thì đã giàu to rồi ! ( còn theo thuyết mà đếm direct counter ... thì lên đến cả nghìn MHZ )
      nếu pic mà đếm direct được 200mhz thì :
      - NEC chết vì không tiêu thụ được prescaler
      - philips chết vì không bán được PLL
      - Analog device móm vì không bán được DDS nữa
      mình có đọc đâu đó giới hạn độ chính xác tầm <60Mhz ... PIC AXE lên đến 70MHz đã là khủng khiếp lắm rồi.
      Đó cũng là theo datasheet hoặc tài liệu nào đó thôi. 200MHz cũng có thể do con PIC đó bị "khìn" nhưng đó là kết quả thực nghiệm ( chưa test với con khác) được xác định là đúng vì so sánh với kết quả của máy đo tần cho nên không tin cũng không được

      Comment


      • #18
        Thằng act bịa đặt . Mày mang đo thử tao 1hz coi sao mày?


        Add: 97 Quán Nam - Lê Chân - Hải Phòng.
        Tel: 031 518648 Phone: 0904 283 505

        Comment


        • #19
          Hình như có con bìm bịp vừa bay qua đây

          Comment


          • #20
            Nguyên văn bởi duong_act Xem bài viết
            Cũng chưa chắc đâu bác. Em đo nó hiển thị 220MHz trên LCD. Cứ nghĩ là số ảo nhưng vác máy đo tần ra đo thì nó cũng hiện 215MHz.
            tất cả mọi người đang nói là đo trực tiếp ( tức là chỉ dùng PIC thôi - không thêm linh kiện nữa) thì giới hạn là 50 mhz - bạn nói là đo được 200 mhz thì bạn thuộc loại THÁNH rồi -> bạn bị ném gạch

            nếu bạn vẫn khẵng định thì cứ biểu diễn thử coi - đừng nói là cái máy hiện sóng 215 MHz cũng của bạn làm luôn thì sai + sai = đúng đó
            Đang thất nghiệp 0988-010-486

            Comment


            • #21
              Tớ nghe đồn là PIC sẽ ứng xử như nhau trong những tình huống như nhau.
              Ví dụ:

              Code:
              //Định nghĩa biến toàn cục dùng cho việc đếm tần
              int16 Count0;
              int16 Time;
              #define ccp_int_cycle    50000    //50ms
              //Hàm xử lý ngắt CCP1, chu kỳ ngắt cố định và được cài đặt trước qua ccp_int_cycle
              #int_CCP1
              void isrCCP1()
              {
                  int16    Count;
                  Count=read_counter();
                  Time++;
                  if(Time>=1000000/ccp1_int_cycle)  //ccp1_int_cycle là chu kỳ ngắt CCP1, 1000000 là clock vào Timer
                      {
                      Freq=Count-Count0;  //kết xuất tần số
                      Count0=Count;  //reset bộ đếm xung vào
                      Time=0;  //reset bộ đếm thời gian
                      }
              }
              Phải thực hiện các lệnh sau và cài đặt cho phép ngắt CCP1 trước khi có thể sử dụng hàm ngắt
              Code:
              setup_timer_1(T1_internal|T1_div_by_8);    //to set 1MHz clock-in
              setup_ccp1(CCP_Compare_reset_timer);    //CCP mode and reset Timer on match
              CCPR1=ccp_int_cycle;    //defined above
              Time=-1; //lần ngắt CCP1 đầu tiên sẽ coi như đếm xong, xuất kết quả sai và reset biến cho lần đếm tiếp

              Sự trễ của quá trình vào ra ngắt tự bù nhau nên coi như không ảnh hưởng.
              Ngắt CCP1 (đếm thời gian) nên là ngắt duy nhất được cho phép hoặc là ngắt ưu tiên cao.

              Comment


              • #22
                Nguyên văn bởi duong_act Xem bài viết
                Đó cũng là theo datasheet hoặc tài liệu nào đó thôi. 200MHz cũng có thể do con PIC đó bị "khìn" nhưng đó là kết quả thực nghiệm ( chưa test với con khác) được xác định là đúng vì so sánh với kết quả của máy đo tần cho nên không tin cũng không được
                bạn cho biết đó là dòng pic nào không ? mình mua về thay thế làm luôn mạch cao tần đỡ phải mua mấy con PLL ... mình chỉ làm được đến hơn 50mhz tí tẹo là đã vớ vỉn rồi ! chắc trình viết code kém quá hay do pic dỏm mà không thể lên được nữa
                Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

                Comment


                • #23
                  Nguyên văn bởi vietthanh123 Xem bài viết
                  uhm. Nhưng mình dùng thạch anh 16Mhz nên thời gian thực hiện các lệnh là rất nhanh(so với tần số mình cần đo là 1Khz). Việc bố trí dòng lệnh thì mình cũng đã cố gắng sao cho hợp lý nhất rồi (theo mình). MÌnh cũng dùng C nhưng nếu viết trên KeilC cho 8051 thì sai số chỉ nhỏ hơn 1% mà thôi.MOng bạn và mọi người cho thêm ý kiến.
                  bác nghĩ 16mhz thì 1 cycle lệnh mất 0,25us trong khi tần số cần đo là 1khz = 1000us
                  như vậy 0,25 << 1000 vì vậy cách viết của bác như thế đã ổn rồi hả. Bác phải biết rằng tuy 0,25us là nhỏ nhưng thời gian của cái sai nhỏ đó là bao lâu.
                  cái tạo trễ 1s của bác như thế chỉ đúng khi timer0 nó chạy liên tục tức là không mất 1 cycle nào khác để đặt lại cho nó. Còn thực tế ở đây bác tính cho timer lý tưởng nhưng thực tế lại không phải như thế.
                  Khi timer0 tràn thì sẽ xảy ra ngắt lúc này bác thực hiện các hàm xử lý rồi đặt lại giá trị cho timer0, vậy bác có tính đến cái thời gian trế này không.
                  em ví dụ một cái đơn giản thế này
                  void interrupt_timer0() // Da du 500us
                  {
                  // 1 cycle vào ngắt
                  // lưu cách thanh ghi SFR
                  count=count+1; // mất 2 cycle
                  set_timer0(6); // mất 1 cycle
                  }
                  // tổng cộng mất đi 4 cycles lệnh 4x0,25 = 1us chả có vấn đề gì
                  nhưng thực tế là có đến 2000 lần sai như thế
                  kết quả là 1x2000 = 2000us
                  thời gian đếm xung thực tế là 1002ms.
                  chính xác là nó còn lớn hơn nữa nhé bác cái đó là em ví dụ thôi.

                  Comment


                  • #24
                    Nguyên văn bởi queduong Xem bài viết
                    bạn cho biết đó là dòng pic nào không ? mình mua về thay thế làm luôn mạch cao tần đỡ phải mua mấy con PLL ... mình chỉ làm được đến hơn 50mhz tí tẹo là đã vớ vỉn rồi ! chắc trình viết code kém quá hay do pic dỏm mà không thể lên được nữa
                    PIC18F4431 (PDIP 40) đó bác. Lấy trong đống mạch Robot cũ ra. Thạch anh dùng 20MHz, đếm bằng timer 1.

                    Comment


                    • #25
                      Nguyên văn bởi duong_act Xem bài viết
                      PIC18F4431 (PDIP 40) đó bác. Lấy trong đống mạch Robot cũ ra. Thạch anh dùng 20MHz, đếm bằng timer 1.
                      TABLE 28-13:TIMER0 AND TIMER1 EXTERNAL CLOCK REQUIREMENTS
                      47 Tt1P T13CKI Input Period
                      Synchronous : Greater of: 20ns or (T + 40)/N N = prescale value (1, 2, 4, 8)
                      Asynchronous: Min 60ns
                      tính ra thì đầu vào tối đa cũng chỉ 64Mhz thôi, bác đo đếm 200Mhz hệ số an toàn của nó = 3 lần
                      Chắc tần số làm việc của chip có thể hơn 40mhz đó mấy bác thử giúp em cái.

                      Comment


                      • #26
                        Nguyên văn bởi youaremylife Xem bài viết
                        bác nghĩ 16mhz thì 1 cycle lệnh mất 0,25us trong khi tần số cần đo là 1khz = 1000us
                        như vậy 0,25 << 1000 vì vậy cách viết của bác như thế đã ổn rồi hả. Bác phải biết rằng tuy 0,25us là nhỏ nhưng thời gian của cái sai nhỏ đó là bao lâu.
                        cái tạo trễ 1s của bác như thế chỉ đúng khi timer0 nó chạy liên tục tức là không mất 1 cycle nào khác để đặt lại cho nó. Còn thực tế ở đây bác tính cho timer lý tưởng nhưng thực tế lại không phải như thế.
                        Khi timer0 tràn thì sẽ xảy ra ngắt lúc này bác thực hiện các hàm xử lý rồi đặt lại giá trị cho timer0, vậy bác có tính đến cái thời gian trế này không.
                        em ví dụ một cái đơn giản thế này
                        void interrupt_timer0() // Da du 500us
                        {
                        // 1 cycle vào ngắt
                        // lưu cách thanh ghi SFR
                        count=count+1; // mất 2 cycle
                        set_timer0(6); // mất 1 cycle
                        }
                        // tổng cộng mất đi 4 cycles lệnh 4x0,25 = 1us chả có vấn đề gì
                        nhưng thực tế là có đến 2000 lần sai như thế
                        kết quả là 1x2000 = 2000us
                        thời gian đếm xung thực tế là 1002ms.
                        chính xác là nó còn lớn hơn nữa nhé bác cái đó là em ví dụ thôi.
                        Tiếp đi bác, đó là nguyên nhân, vậy còn cách khắc phục (hạn chế tối đa sai số )?. Nghe bác nói em vỡ ra khá nhiều điều, mọi khi cứ sồn sồn làm đúng theo nguyên lý thôi, chưa quan tâm nhiều tới mấy cái này. Sai số ầm ầm là phải. hi.
                        Mua bán thiết bị điện công nghiệp tại Hà Nội, toàn quốc.
                        http://diencongnghiep360.com/
                        http://tudienhathe.vn/

                        Comment


                        • #27
                          Nguyên văn bởi duong_act Xem bài viết
                          PIC18F4431 (PDIP 40) đó bác. Lấy trong đống mạch Robot cũ ra. Thạch anh dùng 20MHz, đếm bằng timer 1.
                          chắc lại đếm kiểu 16 bit counter 1 như cái project gì đó trên mạng .. thì vứt *** nó đi . ... không muốn nói thêm nữa !

                          nhưng mà 200Mhz thì đúng là mình cũng chịu thật ... mình làm mãi chỉ dưới 60Mhz là ngon thôi !

                          mấy con của analog device cũng chỉ 100mhz ... dùng chia 10 để làm những máy đo 1GHz , .... những con của Maxim làm máy đo tần số cũng phổ biến cũng ở 250Mhz

                          ( biết con máy đo 250Mhz nó mấy tiền hem ??? )
                          Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

                          Comment


                          • #28
                            Nguyên văn bởi queduong Xem bài viết
                            chắc lại đếm kiểu 16 bit counter 1 như cái project gì đó trên mạng .. thì vứt *** nó đi . ... không muốn nói thêm nữa !

                            nhưng mà 200Mhz thì đúng là mình cũng chịu thật ... mình làm mãi chỉ dưới 60Mhz là ngon thôi !

                            mấy con của analog device cũng chỉ 100mhz ... dùng chia 10 để làm những máy đo 1GHz , .... những con của Maxim làm máy đo tần số cũng phổ biến cũng ở 250Mhz

                            ( biết con máy đo 250Mhz nó mấy tiền hem ??? )
                            32 bít bác ạ . Dĩ nhiên dùng timer 16 bit nhưng có sử dụng ngắt timer để tính thêm lần tràn và giá trị lưu lại là 32 bit.
                            Còn sao nó đếm dc 200MHz thì mềnh chịu ko giải thích. Nó hiện vậy thì báo cáo với các bác vậy thôi

                            Comment


                            • #29
                              Nguyên văn bởi duong_act Xem bài viết
                              Cũng chưa chắc đâu bác. Em đo nó hiển thị 220MHz trên LCD. Cứ nghĩ là số ảo nhưng vác máy đo tần ra đo thì nó cũng hiện 215MHz. Còn sai số là đương nhiên vì dùng thêm cả ngắt timer.
                              Ối dời ôi bác này lập trình PIC gì mà đo được 200Mhz...amator quá. nếu vậy thì cái máy đo siêu cao tần chỉ có 100$ thôi nhỉ, rẻ thế thì mất uy tín quá...
                              ĐT : 01676455880

                              Comment


                              • #30
                                Nguyên văn bởi quanghuy_125 Xem bài viết
                                Ối dời ôi bác này lập trình PIC gì mà đo được 200Mhz...amator quá. nếu vậy thì cái máy đo siêu cao tần chỉ có 100$ thôi nhỉ, rẻ thế thì mất uy tín quá...
                                Tôi đâu có lập trình để đo 200 MHz ?

                                Comment

                                Về tác giả

                                Collapse

                                vietthanh123 Tìm hiểu thêm về vietthanh123

                                Bài viết mới nhất

                                Collapse

                                Đang tải...
                                X