Thông báo

Collapse
No announcement yet.

Chống nhiễu bằng phần mềm!

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

  • Chống nhiễu bằng phần mềm!

    Xin chào tất cả mọi người!
    Em đang làm đồ án tốt nghiệp về đề tài đo tần số dùng vi điều khiển 8051 và sẽ bảo vệ trong tuần tới.
    Nhưng hiện tai chương trình đo tần số cao của em bị sai số rất lớn.Mong ai đó hãy chỉ giúp em cách để giảm sai số bằng phần mềm với.Phần cứng của em đã chống nhiễu rồi.
    Còn chương trình đo tần số thấp của em dùng ngắt ngoài để xử lí.Nhưng chỉ đo được 1 chu kì là dừng và cung ko chính xác.
    Em đã upload file code cho 2 chương trình đo.Tất cả mọi người hãy giúp em với nhé!
    Cảm ơn mọi người rất nhiều!
    Attached Files

  • #2
    cái này mình cũng từng làm rồi, hồi đó chỉ cắm trực tiếp máy phát sóng vào 89s52 rồi đo chứ ko qua gì nữa, ko biết do trình đố thấp hay sao ấy mà mình chỉ đo được trong khoảng 10KHz->50KHz nó chạy tốt trong khoảng đó thôi hà.hồi đó dùng led7 đoạn nên chỉ tới đó thôi (đồ án 1 mà có biết j đâu )

    Comment


    • #3
      Nguyên văn bởi phuongx Xem bài viết
      Xin chào tất cả mọi người!
      Em đang làm đồ án tốt nghiệp về đề tài đo tần số dùng vi điều khiển 8051 và sẽ bảo vệ trong tuần tới.
      Nhưng hiện tai chương trình đo tần số cao của em bị sai số rất lớn.Mong ai đó hãy chỉ giúp em cách để giảm sai số bằng phần mềm với.Phần cứng của em đã chống nhiễu rồi.
      Còn chương trình đo tần số thấp của em dùng ngắt ngoài để xử lí.Nhưng chỉ đo được 1 chu kì là dừng và cung ko chính xác.
      Em đã upload file code cho 2 chương trình đo.Tất cả mọi người hãy giúp em với nhé!
      Cảm ơn mọi người rất nhiều!
      Nếu muốn đếm tần số tương đối chính xác (sai số do bộ dao động thạch anh) trong giới hạn của 8051, thì cả 2 bộ timer 0 và 1 bắt buộc phải dùng mode 8 bit autoreload, không thể dùng 16 bit cho đếm và định thời. Lý do sai số nằm ở ngắt, khi có 1 ngắt xảy ra thì cấn có thời gian hoàn tất tác vụ trước đó mới đến phục vụ yêu cầu ngắt.

      Comment


      • #4
        Nguyên văn bởi haidien Xem bài viết
        Nếu muốn đếm tần số tương đối chính xác (sai số do bộ dao động thạch anh) trong giới hạn của 8051, thì cả 2 bộ timer 0 và 1 bắt buộc phải dùng mode 8 bit autoreload, không thể dùng 16 bit cho đếm và định thời. Lý do sai số nằm ở ngắt, khi có 1 ngắt xảy ra thì cấn có thời gian hoàn tất tác vụ trước đó mới đến phục vụ yêu cầu ngắt.
        Sao lại không thể dùng timer ở chế độ 16 bit được chứ, có thể bù mềm bằng cách trừ đi số chu kỳ máy sai lệch cơ mà, ngay cả chế độ 8 bit auto-reload cũng phải mất ít nhất là 4 chu kỳ máy để vào ngắt và thoát ngắt đấy thôi. Ví dụ muốn ngắt tràn ở 50ms tức phải nạp cho THX và TLX là -50000, để bù ta chỉ nạp vào 49996 để bù lại mấy chu kỳ máy bị mất thôi. Thêm nữa số lần vào ngắt càng nhiều (do sử dụng chế độ 8 bit - sau tối đa 256 chu kỳ máy sẽ gây tràn) thì sai lệch cộng thêm cành nhiều. Tóm lại là có thể và nên dùng timer ở chế độ 1 + bù bằng phần mềm, sẽ chính xác!

        Comment


        • #5
          Nguyên văn bởi natra2k2 Xem bài viết
          Sao lại không thể dùng timer ở chế độ 16 bit được chứ, có thể bù mềm bằng cách trừ đi số chu kỳ máy sai lệch cơ mà, ngay cả chế độ 8 bit auto-reload cũng phải mất ít nhất là 4 chu kỳ máy để vào ngắt và thoát ngắt đấy thôi. Ví dụ muốn ngắt tràn ở 50ms tức phải nạp cho THX và TLX là -50000, để bù ta chỉ nạp vào 49996 để bù lại mấy chu kỳ máy bị mất thôi. Thêm nữa số lần vào ngắt càng nhiều (do sử dụng chế độ 8 bit - sau tối đa 256 chu kỳ máy sẽ gây tràn) thì sai lệch cộng thêm cành nhiều. Tóm lại là có thể và nên dùng timer ở chế độ 1 + bù bằng phần mềm, sẽ chính xác!
          Trường hợp trên chỉ áp dụng đúng khi lệnh trước đó là NOP hoặc Jump tại chỗ mà thôi. Trong một chương trình có nhiều tác vụ, thí dụ như chuyển đổi số nhị phân sang thập phân, chuyển thập phân ra 7 đoạn, quét LED, kiểm tra bàn phím, điều rộng khổ xung v.v... làm cách nào ta biết được chương trình đang thực thi lệnh gì, lệnh có độ dài bao nhiêu chu kỳ máy để bù?
          Nếu ta sử dụng timer/counter ở mode 8 bit autoreload thì sẽ giải quyết "gần trọn vẹn" vấn đề. Thí dụ ta dùng timer0 để làm cổng mở cho timer1 đếm, cứ 100µS có 1 ngắt. Trong thời gian có yêu cầu ngắt thì timer0 sau khi tràn, reload trở lại nó vẫn hoạt bình thường. Cách giải quyết phần còn lại tùy theo mỗi người.

          Comment


          • #6
            Bạn phuongx có thể post mạch lên cho mọi người tham khảo không , vì mình cũng đang làm 1 đề tài mà vấn đề lớn nhất với đề tài đó là nhiễu

            Comment

            Về tác giả

            Collapse

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

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

            Collapse

            Đang tải...
            X