- Vật liệu thiết yếu:
- Tính tốc độ và khoảng cách được bao phủ:
- Sơ đồ mạch và thiết lập phần cứng:
- Mô phỏng:
- Lập trình PIC16F877A của bạn:
- Giải thích làm việc:
Đo tốc độ / vòng / phút của một phương tiện hoặc một động cơ luôn là một dự án hấp dẫn để chúng tôi thử. Vì vậy, trong dự án này, chúng tôi sẽ xây dựng một cái sử dụng vi điều khiển PIC sẵn sàng cho công nghiệp. Chúng tôi sẽ sử dụng một miếng nam châm và một Cảm biến Hall để đo tốc độ. Có nhiều cách / cảm biến khác để đo tốc độ nhưng sử dụng cảm biến Hall thì rẻ và cũng có thể được sử dụng trên bất kỳ loại động cơ / Phương tiện nào. Bằng cách thực hiện dự án này, chúng tôi cũng sẽ nâng cao kỹ năng học PIC16F877A vì dự án liên quan đến việc sử dụng Ngắt và Bộ định thời. Vào cuối dự án này, bạn sẽ có thể tính toán tốc độ và khoảng cách được bao phủ bởi bất kỳ vật thể quay nào và hiển thị chúng trên màn hình LCD 16x2. Hãy bắt đầu với Đồng hồ tốc độ kỹ thuật số và Mạch đo tốc độ với PIC.
Vật liệu thiết yếu:
- PIC16F877A
- Bộ điều chỉnh điện áp 7805
- Cảm biến hiệu ứng Hall (US1881 / 04E)
- Màn hình LCD 16 * 2
- Một miếng nam châm nhỏ
- Kết nối dây
- Tụ điện
- Bảng mạch.
- Nguồn cấp
Tính tốc độ và khoảng cách được bao phủ:
Trước khi thực sự bắt đầu xây dựng mạch, chúng ta hãy hiểu cách chúng ta sẽ sử dụng cảm biến Hall và nam châm để tính toán tốc độ của một bánh xe. Trước đây, chúng tôi đã sử dụng Kỹ thuật tương tự để xây dựng Đồng hồ tốc độ Arduino hiển thị các kết quả đọc trên Điện thoại thông minh Android.
Cảm biến Hall là một thiết bị có thể phát hiện sự hiện diện của nam châm dựa trên cực của nó. Chúng tôi dán một miếng nam châm nhỏ lên bánh xe và đặt cảm biến Hall gần nó sao cho mỗi khi bánh xe quay, cảm biến Hall sẽ phát hiện ra nó. Sau đó, chúng tôi sử dụng sự trợ giúp của bộ hẹn giờ và Ngắt trên Vi điều khiển PIC của chúng tôi để tính thời gian thực hiện cho một vòng quay hoàn chỉnh của bánh xe.
Sau khi đã biết thời gian thực hiện, chúng tôi có thể tính RPM bằng cách sử dụng các công thức dưới đây, Trong đó 1000 / lần thực hiện sẽ cho chúng tôi RPS và nhân thêm nó với 60 sẽ cho bạn RPM
rpm = (1000 / timetaken) * 60;
Trong đó (1000 / lần quay) cho rps (Số vòng quay trên giây) và nó được nhân với 60 để chuyển rps thành vòng / phút (Số vòng quay trên phút).
Bây giờ để tính vận tốc của xe chúng ta phải biết bán kính của bánh xe. Trong dự án của chúng tôi, chúng tôi đã sử dụng một bánh xe đồ chơi nhỏ có bán kính chỉ 3cm. Tuy nhiên, chúng tôi giả định bán kính của bánh xe là 30cm (0,3m) để chúng tôi có thể hình dung các số liệu.
Giá trị cũng được nhân với 0,37699 vì chúng ta biết rằng Vận tốc = (RPM (đường kính * Pi) / 60). Các công thức được đơn giản hóa thành
v = radius_of_wheel * rpm * 0,37699;
Một khi chúng tôi tính toán vận tốc, chúng tôi cũng có thể tính toán khoảng cách được bao phủ bằng cách sử dụng một phương pháp tương tự. Với sự sắp xếp Hall và nam châm, chúng ta biết rằng bánh xe đã quay bao nhiêu vòng. Chúng ta cũng biết bán kính của bánh xe, bằng cách sử dụng nó, chúng ta có thể tìm được chu vi của bánh xe, giả sử bán kính của bánh xe là 0,3m (R) các giá trị của chu vi Pi * R * R sẽ là 0,2827. Điều này có nghĩa là cứ mỗi lần cảm biến hội trường gặp nam châm, bánh xe sẽ bao phủ một khoảng cách 0,2827 mét.
Distance_covered = distance_covered + cycle_of_the_circle
Vì bây giờ chúng tôi biết dự án này sẽ hoạt động như thế nào, hãy tiếp tục với sơ đồ mạch của chúng tôi và bắt đầu xây dựng nó.
Sơ đồ mạch và thiết lập phần cứng:
Sơ đồ mạch của Dự án đồng hồ tốc độ và công tơ mét này rất đơn giản và có thể được xây dựng trên bảng mạch. Nếu bạn đã làm theo các hướng dẫn PIC thì bạn cũng có thể sử dụng lại phần cứng mà chúng tôi đã sử dụng để học vi điều khiển PIC. Ở đây, chúng tôi đã sử dụng cùng một Bo mạch hoạt động mà chúng tôi đã xây dựng cho Đèn LED nhấp nháy với Vi điều khiển PIC, như được hiển thị bên dưới:
Các kết nối chân cho MCU PIC16F877A được đưa ra trong bảng bên dưới.
S.Không: |
Số PIN |
Tên ghim |
Kết nối với |
1 |
21 |
RD2 |
RS của LCD |
2 |
22 |
RD3 |
E của LCD |
3 |
27 |
RD4 |
D4 của LCD |
4 |
28 |
RD5 |
D5 của LCD |
5 |
29 |
RD6 |
D6 của LCD |
6 |
30 |
RD7 |
D7 của LCD |
7 |
33 |
RB0 / INT |
Chân thứ 3 của cảm biến Hall |
Sau khi bạn xây dựng dự án của mình, nó sẽ trông giống như thế này trong hình dưới đây
Như bạn có thể thấy, tôi đã sử dụng hai hộp để đặt Động cơ và cảm biến hội trường ở vị trí gần đó. Bạn có thể cố định nam châm trên vật thể đang quay của mình và giữ nguyên cảm biến Hall gần nó để nó có thể phát hiện ra nam châm.
Lưu ý: Cảm biến Hall có các cực, vì vậy hãy đảm bảo rằng nó đang phát hiện cực nào và đặt nó cho phù hợp.
Ngoài ra, hãy đảm bảo rằng bạn sử dụng điện trở kéo lên với chân đầu ra của cảm biến hội trường.
Mô phỏng:
Mô phỏng cho dự án này được thực hiện bằng Proteus. Vì dự án liên quan đến các đối tượng chuyển động nên không thể chứng minh dự án hoàn chỉnh bằng cách sử dụng mô phỏng nhưng hoạt động của màn hình LCD có thể được xác minh. Chỉ cần tải tệp hex vào Mô phỏng và mô phỏng nó. Bạn sẽ có thể nhận thấy màn hình LCD hoạt động như hình dưới đây.
Để kiểm tra đồng hồ tốc độ và đồng hồ đo quãng đường đang hoạt động, tôi đã thay thế cảm biến Hall bằng thiết bị trạng thái Logic. Trong quá trình mô phỏng, bạn có thể nhấp vào nút trạng thái logic để kích hoạt Ngắt và kiểm tra xem tốc độ và khoảng cách được bao phủ có được cập nhật như hình trên hay không.
Lập trình PIC16F877A của bạn:
Như đã nói trước đó, chúng tôi sẽ sử dụng sự trợ giúp của bộ định thời và ngắt trong Vi điều khiển PIC16F877A để tính toán thời gian thực hiện cho một vòng quay hoàn toàn của bánh xe. Chúng tôi đã học cách sử dụng Bộ hẹn giờ trong hướng dẫn dễ hiểu của chúng tôi. Tôi đã cung cấp mã hoàn chỉnh của dự án ở cuối bài viết này. Hơn nữa, tôi đã giải thích một số dòng quan trọng bên dưới.
Các dòng mã dưới đây khởi tạo Cổng D làm chân đầu ra cho giao diện LCD và RB0 làm chân đầu vào để sử dụng nó làm Chân bên ngoài. Hơn nữa, chúng tôi đã kích hoạt điện trở kéo lên bên trong bằng cách sử dụng OPTION_REG và cũng đã đặt 64 là bán trước. Sau đó CHÚNG TÔI Bật Ngắt Toàn Cầu và Ngắt Ngoại Vi để bật Bộ hẹn giờ và Ngắt Ngoài. Để xác định RB0 là bit ngắt bên ngoài INTE nên được đặt ở mức cao. Giá trị Overflow is được đặt thành 100 để cứ sau 1 mili giây, cờ ngắt bộ hẹn giờ TMR0IF sẽ được kích hoạt. Điều này sẽ giúp chạy bộ đếm thời gian mili giây để xác định thời gian tính bằng mili giây:
TRISD = 0x00; // PORTD được khai báo là đầu ra cho giao diện LCD TRISB0 = 1; // Xác định chân RB0 làm đầu vào để sử dụng làm chân ngắt OPTION_REG = 0b00000101; // Timer0 64 dưới dạng prescalar // Cũng cho phép PULL UPs TMR0 = 100; // Nạp giá trị thời gian cho 1ms; delayValue chỉ có thể nằm trong khoảng 0-256 TMR0IE = 1; // Kích hoạt bit ngắt bộ định thời trong thanh ghi PIE1 GIE = 1; // Bật ngắt toàn cục PEIE = 1; // Kích hoạt ngắt ngoại vi INTE = 1; // Bật RB0 làm chân ngắt bên ngoài
Hàm dưới đây sẽ được thực thi mỗi khi một Ngắt được phát hiện. Chúng ta có thể đặt tên cho hàm theo ý muốn của mình nên tôi đã đặt tên nó là speed_isr (). Chương trình này xử lý hai ngắt một là Ngắt bộ định thời và ngắt kia là Ngắt ngoài. Bất cứ khi nào xảy ra Ngắt bộ định thời, cờ TMR0IF đi lên cao, để xóa và đặt lại ngắt, chúng ta phải đặt nó ở mức thấp bằng cách xác định TMR0IF = 0 như được hiển thị trong đoạn mã bên dưới.
void speed_isr () {if (TMR0IF == 1) // Timer bị tràn {TMR0IF = 0; // Xóa cờ ngắt bộ định thời milli_sec ++; } if (INTF == 1) {rpm = (1000 / milli_sec) * 60; tốc độ = 0,3 * vòng / phút * 0,37699; // (Giả sử bán kính bánh xe là 30cm) INTF = 0; // xóa cờ ngắt milli_sec = 0; khoảng cách = khoảng cách + 028.2; }}
Tương tự khi Ngắt ngoài xảy ra cờ INTF sẽ tăng cao, điều này cũng nên được xóa bằng cách xác định INTF = 0. Thời gian thực hiện được theo dõi bởi Ngắt bộ hẹn giờ và Ngắt ngoài xác định khi bánh xe hoàn thành một vòng quay đầy đủ. Với dữ liệu này, tốc độ và khoảng cách được bao phủ bởi bánh xe được tính toán trong mỗi lần Ngắt ngoài.
Khi tốc độ và khoảng cách được tính toán, chúng có thể được hiển thị đơn giản trên màn hình LCD bằng các chức năng LCD của chúng tôi. Nếu bạn chưa quen với LCD, hãy tham khảo hướng dẫn về giao diện LCD với PIC16F877A MCU của chúng tôi.
Giải thích làm việc:
Sau khi bạn chuẩn bị xong Phần cứng và phần mềm, chỉ cần tải mã lên PIC16F877A của bạn. Nếu bạn hoàn toàn mới làm quen với PIC thì bạn nên đọc một vài hướng dẫn về cách tải chương trình lên Vi điều khiển PIC16F877A.
Tôi đã sử dụng một POT có thể thay đổi để điều chỉnh Tốc độ của Động cơ cho mục đích trình diễn. Bạn cũng có thể sử dụng cùng một ứng dụng tìm kiếm thời gian thực. Nếu mọi thứ hoạt động như mong đợi thì bạn sẽ có thể nhận được Vận tốc tính bằng km / giờ và Khoảng cách được tính theo mét như thể hiện trong Video bên dưới.
Hy vọng bạn thích dự án và làm cho nó hoạt động. Nếu không, bạn có thể sử dụng phần bình luận bên dưới hoặc diễn đàn để đăng nghi ngờ của bạn.