Mục lục:

Tạo bất kỳ cảm biến nào từ FPGA: 4 bước
Tạo bất kỳ cảm biến nào từ FPGA: 4 bước

Video: Tạo bất kỳ cảm biến nào từ FPGA: 4 bước

Video: Tạo bất kỳ cảm biến nào từ FPGA: 4 bước
Video: Thiết kế và mô phỏng FPGA - Bài 4. Thiết kế và mô phỏng mạch tuần tự đồng bộ - mạch đếm lên 4 bit. 2024, Tháng mười một
Anonim
Image
Image
FPGA
FPGA

Hầu hết các nhà sản xuất đã thử chế tạo ít nhất một lần trong đời một nhiệt kế, có thể cái họ có ở nhà không đủ thông minh, hoặc có thể họ nghĩ rằng họ có thể chế tạo NEST tiếp theo. Tuy nhiên, tại một số thời điểm, họ đã có một bộ vi điều khiển với phần mềm hiện đại được kết nối với cảm biến nhiệt độ (và có thể là các cảm biến khác: áp suất, ánh sáng). Cho đến bây giờ mọi thứ đều hoàn hảo, phần mềm đang chạy và cảm biến đang hoạt động. Hãy thử nghiệm nó!

Hmmmm… có lẽ anh ấy nên làm nóng cảm biến bằng máy sấy tóc và làm lạnh nó bằng đá, nó hoạt động trong một thời gian. Nhưng nó có vẻ không chuyên nghiệp, cảm biến thay đổi giá trị quá nhanh nếu bạn làm nóng nó, nó không nóng quá một vài độ. Dự án là một sự phá sản! Nhưng thuật toán mới, tính đến rất nhiều yếu tố, thật xấu hổ khi anh ấy lại mắc kẹt vào điều nhỏ nhặt ngu ngốc này.

Giải pháp của tôi là: làm cho một FPGA hoạt động như một cảm biến với các giá trị được truyền trực tuyến từ PC (hoặc được lưu trữ trong bộ nhớ, hoặc được tạo đặc biệt bên trong FPGA). Vì vậy, đối với MCU quý giá của bạn, FPGA trông giống như một cảm biến, nhưng không phải bất kỳ cảm biến nào: bất kỳ cảm biến nào bạn thích. Có thể bạn quyết định rằng bạn cần nhiều độ phân giải hơn hoặc thời gian phản hồi nhanh hơn mong đợi, bạn phải thay đổi cảm biến. Đặt hàng trực tuyến, nó sẽ đến trong một vài ngày, một vài tháng, ai biết được. Đáp ứng PCB của bạn hoặc đặt mua một mô-đun với cảm biến mới. Hoặc… một vài cú nhấp chuột và FPGA được định cấu hình làm cảm biến hoàn toàn mới của bạn và nó có thể mô phỏng cấu hình bên trong chính xác.

Tại thời điểm viết bài này, FPGA có thể hoạt động như một LM75 với dữ liệu nhiệt độ được lưu trữ trong BRAM (trên FPGA).

Bước 1: MCU

MCU mà tôi lựa chọn là LPC4337 trên LPCXpresso. Trên đầu tôi có một tấm chắn (LPC General Purpose Shield) với màn hình và một cảm biến LM75 thực. LPC4337 là ARM Cortex M4 chạy ở 200MHz và Cortex M0 nhỏ hơn (không được sử dụng ở đây). Cảm biến thực được kết nối với thiết bị ngoại vi I2C1 và cảm biến ảo của chúng ta sẽ được kết nối với I2C0. Nguồn có sẵn trên GitHub của tôi.

Làm thế nào để xây dựng nó? Tải xuống LPCXpresso IDE cùng với thư viện LPCOpen. Nhập thư viện đó vào IDE và cũng mở dự án từ GitHub. Mọi thứ phải được định cấu hình và bạn có thể nhấp vào "Gỡ lỗi" ở góc dưới cùng bên trái.

Toàn bộ dự án dựa trên một trong các ví dụ của NXP (để cho thấy rằng dự án của tôi mô phỏng một cảm biến thực và không cần mã đặc biệt ở phía MCU). Trong tệp chính (được gọi là iox_sensor.cpp) có mã này:

#define SENSORS_ON_SHIELD

#if được xác định (SENSORS_ON_SHIELD) #define SHIELD_I2C I2C1 #elif được xác định (SENSORS_ON_FPGA) #define SHIELD_I2C I2C0 #endif

Bằng cách thay đổi SENSOR_ON_SHIELD và SENSOR_OR_FPGA, người dùng có thể chuyển đổi tại thời điểm biên dịch sang cảm biến nào để nói chuyện, cảm biến thực hay cảm biến ảo, vì chúng nằm trên các chân I2C khác nhau.

Bước 2: FPGA

Bo mạch FPGA mà tôi lựa chọn là Artix 7 do Digilent sản xuất, có Xilinx Arty 7. Hai trong số các đầu nối PMod được sử dụng, một để gỡ lỗi và một cho tải trọng thực, kết nối với bảng MCU.

Một lần nữa, mã nguồn cho FPGA có sẵn trên GitHub (thư mục fpgaSide) của tôi.

Làm thế nào để xây dựng nó? Tải xuống, mua hoặc mở Xilinx Vivado IDE. Nhập tệp dự án từ GitHub. Một trong những tệp (content.coe) là dữ liệu nhiệt độ ở định dạng thô sẽ được truyền trực tuyến đến cảm biến giả. Ngoài ra còn có một tệp Excel có cùng tên giúp chuyển đổi dữ liệu nhiệt độ có thể đọc được của con người sang dữ liệu LM75 thô. Tôi đang lên kế hoạch thay đổi quy trình này thành quy trình tự động với một phần mềm được viết bằng Java nhưng cho đến khi đó giải pháp này mới hoạt động. Việc tổng hợp và triển khai sẽ mất một thời gian, hãy xem xét điều này.

Bước 3: Nó hoạt động như thế nào?

Làm thế nào nó hoạt động?
Làm thế nào nó hoạt động?
Làm thế nào nó hoạt động?
Làm thế nào nó hoạt động?

Như tôi đã nói, đối với MCU, FPGA trông giống như một cảm biến, chính xác hơn là một cảm biến I2C. Đầu ra của thiết bị ngoại vi I2C được kết nối với đầu vào của FPGA. Bên trong FPGA có 3 thành phần chính: - Bộ điều khiển I2C- Thiết bị I2C- Dữ liệu Bộ điều khiển I2C nhận dữ liệu I2C từ các chân của FPGA và gửi chúng đến phần còn lại của FPGA và thực hiện tương tự theo thứ tự ngược lại. Nó duy trì một máy trạng thái bên trong cho Giao thức I2C (nhân tiện, đây là tài liệu về nó). Thành phần này gửi gì đến Thiết bị I2C? Byte hiện nhận được, vị trí của byte đó trong giao tiếp hiện tại và liệu MCU có đang ghi hay đọc từ FPGA hay không. Thiết bị I2C nhận các byte đã gửi và cập nhật cấu trúc bên trong mô phỏng của cảm biến. Nó có thể chỉ cập nhật con trỏ thanh ghi hoặc yêu cầu dữ liệu mới từ nguồn dữ liệu. Thành phần Dữ liệu truyền các điểm dữ liệu mới. Hiện tại nó chỉ là một bộ nhớ ROM có địa chỉ được tăng (khoảng) hai lần mỗi giây.

Mục tiêu cuối cùng của tôi là gì? Nó được hiển thị trong hình thứ hai. Đó là: làm cho nhiều thiết bị I2C (cảm biến và các thiết bị khác) có thể được mô phỏng cùng lúc bên trong FPGA. Dữ liệu ở phần phụ trợ của cảm biến sẽ được lưu vào bộ nhớ đệm trong FPGA và được truyền trực tuyến từ PC qua USB hoặc Ethernet. Hỗ trợ các cảm biến nâng cao hơn và các Thiết bị I2C khác (bộ nhớ, trình điều khiển LED, v.v.).

Bước 4: Kết hợp tất cả lại với nhau

Để tất cả chúng cùng nhau
Để tất cả chúng cùng nhau
Để tất cả chúng cùng nhau
Để tất cả chúng cùng nhau

Bây giờ là lúc để kết nối mọi thứ với nhau. Về mặt lý thuyết, nó rất đơn giản: bo mạch mcu có một đầu nối PMod (I2C0 & SSP0 (có thể hoạt động như SPI)). Bảng Artix có 4 đầu nối PMod có thể được sử dụng theo cách bạn muốn. Tôi chọn đầu nối D để nói chuyện với MCU và đầu nối B để kết nối với Trình phân tích logic của tôi.

Cảnh báo

Bạn không thể kết nối hai bảng với nhau chỉ như vậy. Tại sao? PMod được xây dựng để dễ dàng kết nối bo mạch Chủ / Máy chủ (cấp nguồn) với bo mạch Slave / Cảm biến (nhận điện). Nhưng trong dự án này, cả hai bảng đều cung cấp điện và nếu bạn kết nối đầu ra 3.3V từ một bảng với đầu ra 3.3V của bảng khác, điều tồi tệ có thể xảy ra. Nhưng chúng có thể không và bạn có thể chỉ thay đổi các thông số của đường ray điện của FPGA (chúng được thiết kế rất cẩn thận). Vì vậy, đừng mạo hiểm và di chuyển đầu nối một chân sang trái (và cũng lật bảng FPGA) như trong các hình trên. Đây là thông số kỹ thuật của PMod, bạn cand nghiên cứu nó, điều tôi làm trong ngắn hạn là không kết nối các VCC của hai bo mạch.

Đề xuất: