Thông báo

Collapse
No announcement yet.

Đo tốc độ động cơ dùng Atmega16 và hiện thị lên LCD16x2

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

  • Đo tốc độ động cơ dùng Atmega16 và hiện thị lên LCD16x2

    Chào mọi người. Mình đang làm làm mạch: Dùng Atmega16 đo tốc độ động cơ và hiện thị lên LCD.
    Mình đang làm như sau:
    - Tín hiệu xung từ encoder cho vào chân ngắt ngoài INT0 và dùng Timer0 để đếm số xung đó.
    - Timer 1 đặt 1 khoảng thời gian là 1 giây. Khi hết 1s thì trong hàm ngắt tràn T1 sẽ đếm xem có bao nhiêu xung từ encoder phát ra;

    Tuy nhiên mình đang gặp vấn đề sau:
    + Trong hàm ngắt T1(khi đủ 1s) mình ko biết lệnh gán giá trị từ thanh ghi TCNT0 vào biến k (biến k: số xung phát ra từ encoder)
    Mình mới tự học về Atmega và thực sự cần mọi người giúp đỡ từ mọi người trên diễn đàn.
    Cảm ơn mọi người rất nhiều.!

    // Mình viết bằng ngôn ngữ C, viết bằng Codevision
    Last edited by vietthanh123; 21-11-2011, 15:47.
    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/


  • #2
    Theo yêu cầu của bạn, mạn phép mình có chút gợi ý như sau

    Code:
    // Ngat ngoai INTO
    interrupt [EXT_INT0] void ext_int0_isr(void)
    {
              k++; // k là biến chứa giá  trị xung đếm đc
    
    }
    Code:
    // Ngat tran timer 0, ở đây mình dùng timer 0 để tạo thời gian 1s lấy mẫu xung đo đc từ encoder
    interrupt [TIM0_OVF] void timer0_ovf_isr(void)
    {
         TCNT0=xx; // gán lại giá trị cho thanh ghi TNCT0
         Thoi_gian++; // biến chứa gia trị thời gian 
         if(Thoi_gian== 1s) ////nêu thời gian đã đủ 1 thì tiến hành tính tốc độ
        {
             Thoi_gian=0;
             Toc_Do=k; /// Tốc độ tính đc =k xung/giây--> từ số xung bạn có thể suy ra số vòng từ đó bạn tính đc vận tốc = xx vòng/giây
              k=0;
        }
    
    }

    Comment


    • #3
      Cảm ơn bạn đã giúp đỡ. Nhưng tín hiệu xung từ encoder bạn cho vào chân ngắt ngoài,mà mình nhớ ko nhầm thì tần số đáp ứng khi ta cho xung vào chân ngắt ngoài sẽ ko được cao (ví dụ như nếu encoder có 30 rãnh trên một vòng quay, tốc độ động cơ khoảng 600vong/phút ==> khi đó 1giaay sẽ có 300xung vào chân ngắt ngoài rồi.) Đấy là lý do vì sao mình thấy mọi ngươi thường dùng Timer để đếm xung chứ ko dùng ngắt ngoài(!?)
      Mình đang rất cần sự giúp đỡ của bạn và mọi người.
      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


      • #4
        Mình gửi thêm code và file mô phỏng. Mọi người xem giúp mình với (tên biến mình thay đổi, không phải là k ==> num).
        Do toc do dong co.rar
        Cảm ơn mọi người....
        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


        • #5
          Với tốc độ DC bạn xài là 300xung/s thì tần số xung lớn nhất từ Encode là 300Hz ..giá trị này là hợp lí trong nếu thạch anh mình xài là 8MHz (ngày tr'c mình xài xung lớn nhất từ Encoder là hơn 2KHz cơ ). Sử dụng counter để đếm xung từ encoder là phương pháp ít tốn tài nguyên từ encoder nhất tuy nhiên phương pháp này không ổn định khi vận tốc động cơ có sự thay đổi lớn, mặt khác phương pháp này ta không xác định được chiều quay của động cơ. Mình vẫn thích xài ngắt hơn khá dễ dàng và chính xác

          Comment


          • #6
            Nguyên văn bởi dvhai08 Xem bài viết
            Với tốc độ DC bạn xài là 300xung/s thì tần số xung lớn nhất từ Encode là 300Hz ..giá trị này là hợp lí trong nếu thạch anh mình xài là 8MHz (ngày tr'c mình xài xung lớn nhất từ Encoder là hơn 2KHz cơ ). Sử dụng counter để đếm xung từ encoder là phương pháp ít tốn tài nguyên từ encoder nhất tuy nhiên phương pháp này không ổn định khi vận tốc động cơ có sự thay đổi lớn, mặt khác phương pháp này ta không xác định được chiều quay của động cơ. Mình vẫn thích xài ngắt hơn khá dễ dàng và chính xác
            Cảm ơn bạn. Mình sẽ thử dùng theo phương pháp bạn nói. Tuy nhiên các bạn chỉ giúp mình thắc mắc ban đầu với, mình vẫn chưa biết được cách đọc giá trị từ thanh ghi TCNT0?
            Last edited by vietthanh123; 23-11-2011, 08:59.
            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


            • #7
              Code:
              unsigned char a;
              a=TCNT0;
              Xong
              Đã bỏ nghề về quê chăn gà...

              Comment


              • #8
                Nguyên văn bởi Katecka Xem bài viết
                Code:
                unsigned char a;
                a=TCNT0;
                Xong
                Hi. Được rồi bác ah. Cảm ơn bác và mọi người nhiều.
                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

                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