Thông báo

Collapse
No announcement yet.

Hỏi về IC chuyển tần số ra điện áp

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

  • #16
    Mình đã làm được trên Proteus , mình đọc ICR1L trước , rồi đọc ICR1H sau :
    dem=ICR1L+ICR1H*256

    TCNT1H=0
    TCNT1L=0
    end.

    Chạy trên proteus rất tốt , tuy nhiên thuực tế chạy trên board thực nó lại thực hiện
    dem=TCNT1L . Có ai bị như vậy chưa ? ( mình đã test thử thì đúng là nó đọc TCNT1L thay vì đọc ICR1L ) .Hu ..hu .... kỳ quá .

    Comment


    • #17
      Nguyên văn bởi hoacucvang Xem bài viết
      Mình đã làm được trên Proteus , mình đọc ICR1L trước , rồi đọc ICR1H sau :
      dem=ICR1L+ICR1H*256

      TCNT1H=0
      TCNT1L=0
      end.

      Chạy trên proteus rất tốt , tuy nhiên thuực tế chạy trên board thực nó lại thực hiện
      dem=TCNT1L . Có ai bị như vậy chưa ? ( mình đã test thử thì đúng là nó đọc TCNT1L thay vì đọc ICR1L ) .Hu ..hu .... kỳ quá .
      À..cái dzụ này...Nguyên tắc của bộ input capture là khi có xung vào chân ICP thì nó sẽ thực hiện copy giá trị TCNTH:TCNTL vào ICRH:ICRL.

      Do vậy nếu đo thời gian giữa 2 xung liên tiếp thì trong trình ngắt của Input capture bạn phải reset lại TCNTH:TCNTL về 0, còn giá trị để tính toán ta sẽ lấy từ cặp thanh ghi ICRH:ICRL.

      Khi đọc thì phải đọc byte thấp trước cao sau, ghi thì ghi byte cao trước,thấp sau
      Mấy ai định nghĩa được tình yêu.
      Có gì đâu một buổi chiều.
      Kề dao lên cổ yêu hay chết .
      Gật đầu cái rụp thế là yêu.

      --------
      Apple

      Comment


      • #18
        Vấn đề ở đây là trên proteus thì đọc ok ,thực tế thì nó lại sai , đọc TCNT1L thay vì ICR1L ( câu lệnh mình chỉ cho đọc ICR1L+ICR1H*256)

        Comment


        • #19
          Bạn nên đọc kỹ lại bài của tôi, khi ngắt xảy ra nếu ta đọc ICR thì cũng như ta đọc TCNT mà thôi.

          chú ý dung lương biến dem của bạn (2byte mới đủ). Bộ input capture hoạt động rất tốt, ko có chuyện proteus hoạt động đúng mà thực tế lại sai được (ngoại trừ xung thực tế bị nhiễu cao)...

          Bạn nên chú ý đến nguồn dao động cho Timer và giới hạn bắt xung ứng với tần số dao động đó, cái này rất quan trọng khi dùng input capture
          bạn xem lại code xem có lộn chỗ nào ko...Chúc bạn thành công
          Mấy ai định nghĩa được tình yêu.
          Có gì đâu một buổi chiều.
          Kề dao lên cổ yêu hay chết .
          Gật đầu cái rụp thế là yêu.

          --------
          Apple

          Comment


          • #20
            Vấn đề ở đây là động cơ tăng giảm rất nhanh và không ổn định , mình muốn hiển
            thị giá trị ngay lập tức .
            Chứ nếu chỉ đơn giản đếm 1 giây để tính ra RPM thì chậm mất rồi , vì trong 1s đó có lúc nó tăng nhanh rồi có lúc giảm đột ngột , không chính xác bạn ạ .
            Bạn nào có thể giúp mình tìm thuật toán ko ?
            Mình dùng thuật toán là mỗi khi có ngắt ngoài thì sẽ tính bao nhiêu thời gian ( tính tốc độ giữa 2 xung liên tiếp) . Ví dụ mỗi ngắt là 0.00001 giây chẳng hạn thì lập tức sẽ đổi ra tần số và xuất ra LCD . Tuy nhiên AVR lại bị treo vì không xử lý nổi .
            Mình cần tìm 1 thuật toán xử lý tức thời .
            Mỗi ngắt là 0.00001 giây, sao lưu dữ liệu thì còn được, chứ hiển thị LCD liên tiếp trong khoảng thời gian này thì LCD có đủ nhanh để đáp ứng với yêu cầu của VDK không? Thuật toán xử lý tức thời thì bạn có rồi đấy, dùng 1 encoder có độ chia cao và dùng inputcapture của vi điều khiển để đo, nhưng để hiển thị tức thời thì........

            Comment


            • #21
              Nguyên văn bởi apple Xem bài viết
              Bạn nên đọc kỹ lại bài của tôi, khi ngắt xảy ra nếu ta đọc ICR thì cũng như ta đọc TCNT mà thôi.

              chú ý dung lương biến dem của bạn (2byte mới đủ). Bộ input capture hoạt động rất tốt, ko có chuyện proteus hoạt động đúng mà thực tế lại sai được (ngoại trừ xung thực tế bị nhiễu cao)...

              Bạn nên chú ý đến nguồn dao động cho Timer và giới hạn bắt xung ứng với tần số dao động đó, cái này rất quan trọng khi dùng input capture
              bạn xem lại code xem có lộn chỗ nào ko...Chúc bạn thành công
              Cái chuyện tính toán thì mình biết . Vấn đề là Proteus in ra đúng , thực tế mạch ngoài nó lại sai . Vấn đề ở đây là hàm read ICR1 lại bị hiểu là read TCNT1
              Khi xảy ra ngắt bạn thử in ra giá trị ICR1 và TCNT1 thử xem, 2 giá trị nó khác nhau . ICR1 chỉ là biến tạm của TCNT1.

              Comment


              • #22
                Nguyên văn bởi hoacucvang Xem bài viết
                Cái chuyện tính toán thì mình biết . Vấn đề là Proteus in ra đúng , thực tế mạch ngoài nó lại sai . Vấn đề ở đây là hàm read ICR1 lại bị hiểu là read TCNT1
                Khi xảy ra ngắt bạn thử in ra giá trị ICR1 và TCNT1 thử xem, 2 giá trị nó khác nhau . ICR1 chỉ là biến tạm của TCNT1.
                Tất nhiên là ICR và TCNT ko thể bằng nhau ngay chóc được , TCNT phải > ICR (nếu timer ko bị tràn) nếu đọc ngay sẽ thấy chúng ko cách nhau là bao nhiêu, còn trong trình ngắt mà bạn đọc ngay 2 cái này vẫn thấy chúng khác nhau quá lớn, mình bảo đảm code có vấn đề.

                Ngộ nhỉ, mình thấy pan này của bạn hơi lạ. Code đúng mà thực tế lại đọc sai, ko bít con AVR của bạn có tèo ko nhỉ ... Mình cũng từng dùng input capture để đo cảm biến điện từ trên oto (loại 24 răng từ) nó chỉ bị sai số hơi lớn chút xíu ở tốc độ thấp (do kết cấu cơ khí tự chế gây ra thôi) còn lên tốc độ cao thì đo khá tốt ... mình potay.com pan của bạn rùi đó ... có lẽ code sai hoặc avr tèo roài ...
                Last edited by apple; 06-11-2008, 14:43.
                Mấy ai định nghĩa được tình yêu.
                Có gì đâu một buổi chiều.
                Kề dao lên cổ yêu hay chết .
                Gật đầu cái rụp thế là yêu.

                --------
                Apple

                Comment


                • #23
                  Tức vậy nè , mình đo tần số điện lưới 50 HZ ở nhà thử . Mình in ra 2 giá trị là ICR1L và TCNT1L.
                  Trong Proteus : ICR1=9 ( rất đúng)
                  TCNT1=200

                  Trong thựa tế khi in ra LCD :
                  ICR1=200 ( sai)
                  TCNT1=200

                  Không hiểu tại sao luôn ? Em thử cả 2 con ATMEGA 32 , cả 2 đều sai giống nhau.
                  Last edited by hoacucvang; 06-11-2008, 15:17.

                  Comment


                  • #24
                    mấy anh ơi,em không phải là dân điện tử nhưng rất thích làm đồ điện tử,em muốn làm mach tachometer (đèn led sáng theo ga xe máy) ,em nghe nói chức năng 331 giống 2907/2917 nhưng em k biết nếu thay thế thì nối chân như thế nào..nhờ anh vẽ ra thì tốt quápdfFactory Pro.pdf

                    Comment

                    Về tác giả

                    Collapse

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

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

                    Collapse

                    Đang tải...
                    X