Mục lục:
- Bước 1: Thiết kế PCB
- Bước 2: Thiết kế giao thức
- Bước 3: Thiết kế chương trình cơ sở
- Bước 4: Giao diện thông qua mã luồng
- Bước 5: Các phương pháp giao thoa khác
- Bước 6: Thành phẩm
Video: Bảng giao diện đa năng nhúng - Điều khiển USB / Bluetooth / WIFI: 6 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:34
Tôi thường thấy mình tạo thư viện cho các mô-đun nhúng mới từ đầu dựa trên biểu dữ liệu của thiết bị. Khi tạo thư viện, tôi thấy mình gặp khó khăn trong một chu trình viết mã, biên dịch, lập trình và kiểm tra khi đảm bảo mọi thứ hoạt động và không có lỗi. Thường thì thời gian biên dịch và chương trình có thể lâu hơn nhiều, sau đó là thời gian cần thiết để chỉnh sửa mã và do đó, một cách để loại bỏ các bước này khi phát triển sẽ rất hữu ích.
Tôi cũng thường thấy rằng tôi muốn giao diện một mô-đun nhúng với PC. Nếu mô-đun cụ thể không có kết nối USB, điều này thường xảy ra thì bạn thường phải mua một bộ chuyển đổi USB đắt tiền sẽ thực hiện một công việc như chỉ SPI hoặc chỉ I2C.
Đó là vì những lý do này, tôi quyết định tạo ra bảng giao diện phổ quát. Nó được thiết kế để cho phép giao tiếp dựa trên PC dễ dàng với các mô-đun nhúng.
Các tính năng giao diện nhúng của bảng tôi đã giải quyết bao gồm.
- I / O kỹ thuật số
- I2C
- SPI
- UART
- PWM
- Động cơ Servo
- Đầu vào ADC
- Đầu ra DAC
Tất cả đều có thể được sử dụng hoàn toàn độc lập.
Bo mạch giao diện có thể được điều khiển thông qua kết nối USB với PC, nhưng cũng có các kết nối mô-đun WIFI hoặc Bluetooth tùy chọn để cho phép bo mạch được sử dụng từ xa hoặc trong một kịch bản loại IoT.
Bằng cách sử dụng đầu cắm SIL cao độ 2,54mm tiêu chuẩn, có thể kết nối trực tiếp cáp dupont cái giữa bo mạch và mô-đun nhúng cho phép kết nối nhanh chóng, đáng tin cậy và không có mối hàn.
Tôi cũng đã nghĩ đến việc thêm những thứ như CAN, LIN, H-bridge, v.v. nhưng những thứ này có thể đến sau với bản sửa đổi v2.
Bước 1: Thiết kế PCB
Khi thiết kế PCB, tôi muốn cố gắng và giữ mọi thứ càng đơn giản càng tốt. Khi bạn chuẩn bị xây dựng bo mạch bằng tay, điều quan trọng là chỉ thêm các thành phần khi chúng thực hiện một mục đích cụ thể và sử dụng càng nhiều tính năng bên trong của bộ vi điều khiển càng tốt.
Nhìn vào nhà cung cấp thiết bị điện tử ưa thích của tôi, tôi tìm thấy một con chip mà tôi cảm thấy hài lòng với những tính năng mà tôi đang tìm kiếm và có chi phí hợp lý. Con chip tôi sử dụng là PIC18F24K50.
Với 23 chân I / O có sẵn, điều này cho phép tôi có những tính năng này
- I / O kỹ thuật số
- I2C
- SPI
- UART
- PWM x 2
- Động cơ Servo x 6
- Đầu vào ADC x 3
- Đầu ra DAC x 1
- I / O được điều khiển từ 5V hoặc 3V3
- Đèn LED trạng thái
Một nhược điểm của IC mà tôi chọn là nó chỉ có một thiết bị ngoại vi UART và vì vậy việc sử dụng phương pháp điều khiển Bluetooth hoặc Wifi sẽ khiến bạn không thể sử dụng kết nối UART.
Trong các hình ảnh trên là sơ đồ hoàn thiện và PCB.
Bước 2: Thiết kế giao thức
Bước đầu tiên trong việc thiết kế giao thức là quyết định những gì cụ thể bạn sẽ cần bảng để có thể thực hiện. Chia nhỏ mọi thứ giúp tăng mức độ kiểm soát tốt hơn trong khi kết hợp mọi thứ lại với nhau giúp đơn giản hóa giao diện và giảm lưu lượng truy cập giữa bảng và PC. Đó là một trò chơi cân bằng và khó hoàn hảo.
Đối với mỗi chức năng của bảng, bạn nên chỉ ra bất kỳ tham số nào và trả về. Ví dụ, một hàm để đọc một đầu vào ADC có thể có một tham số để chỉ định đầu vào nào để lấy mẫu và một giá trị trả về chứa kết quả.
Trong thiết kế của tôi, đây là danh sách các chức năng tôi muốn đưa vào:
-
I / O kỹ thuật số
- SetPin (PinNumber, State)
- State = GetPin (PinNumber)
-
SPI
- Khởi tạo (Chế độ SPI)
- DataIn = Truyền (DataOut)
- ControlChipSelect (Kênh, Trạng thái)
- SetPrescaler (Tỷ lệ)
-
I2C
- Khởi tạo ()
- Bắt đầu ()
- Khởi động lại ()
- Ngừng lại ()
- SlaveAck = Gửi (DataOut)
- DataIn = Nhận (Cuối cùng)
-
UART
- Khởi tạo ()
- TX Byte (DataOut)
- BytesAvailable = RX Count ()
- DataIn = RX Byte ()
- SetBaud (Baud)
-
PWM
- Bật (Kênh)
- Tắt (Kênh)
- SetFrequency (Kênh, Tần số)
- GetMaxDuty (Nhiệm vụ)
- SetDuty (Nhiệm vụ)
-
Servo
- Bật (Kênh)
- Tắt (Kênh)
- SetPosition (Kênh, Vị trí)
-
ADC
ADCsample = Mẫu (Kênh)
-
DAC
- Cho phép
- Vô hiệu
- SetOutput (Điện áp)
-
WIFI
- SetSSID (SSID)
- Đặt mật khẩu (Password)
- Trạng thái = CheckConnectionStatus ()
- IP = GetIPAddress ()
Các tham số được hiển thị trong dấu ngoặc và trả về được hiển thị trước biểu tượng bằng.
Trước khi bắt đầu viết mã, tôi gán cho mỗi hàm một mã lệnh bắt đầu từ 128 (nhị phân 0b10000000) và làm việc trở lên. Tôi ghi lại đầy đủ giao thức để đảm bảo rằng khi đầu tôi đã viết mã, tôi sẽ có một tài liệu hay để tham khảo lại. Tài liệu giao thức đầy đủ cho dự án này được đính kèm và bao gồm các mã lệnh đến và độ rộng bit.
Bước 3: Thiết kế chương trình cơ sở
Khi giao thức được thiết lập, đó là trường hợp triển khai chức năng trên phần cứng.
Tôi áp dụng phương pháp tiếp cận loại máy trạng thái đơn giản khi phát triển hệ thống nô lệ để thử và tối đa hóa thông lượng lệnh và dữ liệu tiềm năng trong khi vẫn giữ cho phần sụn đơn giản để hiểu và gỡ lỗi. Thay vào đó, một hệ thống tiên tiến hơn như Modbus có thể được sử dụng nếu bạn cần tương tác tốt hơn với các thiết bị được kết nối khác nhưng điều này làm tăng thêm chi phí, điều này sẽ làm chậm mọi thứ.
Máy trạng thái bao gồm ba trạng thái:
1) Chờ lệnh
2) Nhận các thông số
3) Trả lời
Ba trạng thái tương tác như sau:
1) Chúng tôi đi qua các byte đến trong bộ đệm cho đến khi chúng tôi có một byte có bộ bit quan trọng nhất. Khi chúng tôi nhận được một byte như vậy, chúng tôi kiểm tra nó với một danh sách các lệnh đã biết. Nếu chúng tôi tìm thấy một kết quả phù hợp thì chúng tôi chỉ định số lượng byte tham số và trả về các byte để khớp với giao thức. Nếu không có byte tham số nào thì chúng ta có thể thực hiện lệnh ở đây và bỏ qua trạng thái 3 hoặc khởi động lại trạng thái 1. Nếu có byte tham số thì chúng ta chuyển sang trạng thái 2.
2) Chúng tôi duyệt qua các byte đến lưu chúng cho đến khi chúng tôi đã lưu trữ tất cả các tham số. Khi chúng ta có tất cả các tham số, chúng ta thực hiện lệnh. Nếu có byte trả về thì chúng ta chuyển sang giai đoạn 3. Nếu không có byte trả về nào để gửi thì chúng tôi quay lại giai đoạn 1.
3) Chúng tôi duyệt qua các byte đến và đối với mỗi byte, chúng tôi ghi đè byte echo bằng một byte trả về hợp lệ. Khi chúng tôi đã gửi tất cả các byte trả về, chúng tôi quay lại giai đoạn 1.
Tôi đã sử dụng Flowcode để thiết kế phần sụn vì nó thể hiện một cách trực quan những gì tôi đang làm. Điều tương tự cũng có thể được thực hiện tốt như nhau trong Arduino hoặc các ngôn ngữ lập trình nhúng khác.
Bước đầu tiên là thiết lập giao tiếp với PC. Để làm điều này, vi cần được cấu hình để chạy ở tốc độ phù hợp và chúng tôi phải thêm mã để điều khiển thiết bị ngoại vi USB và UART. Trong Flowcode, điều này dễ dàng như kéo vào dự án một thành phần USB Serial và một thành phần UART từ menu thành phần Comms.
Chúng tôi thêm một bộ đệm và ngắt RX để bắt các lệnh đến trên UART và chúng tôi thường xuyên thăm dò ý kiến của USB. Sau đó, chúng tôi có thể xử lý bộ đệm giải trí của mình.
Dự án Flowcode và mã C đã tạo được đính kèm.
Bước 4: Giao diện thông qua mã luồng
Mô phỏng Flowcode rất mạnh mẽ và cho phép chúng tôi tạo ra một thành phần để nói chuyện với hội đồng quản trị. Khi tạo thành phần, bây giờ chúng ta có thể chỉ cần kéo thành phần đó vào dự án của mình và ngay lập tức có sẵn các chức năng bảng. Như một phần thưởng bổ sung, bất kỳ thành phần hiện có nào có thiết bị ngoại vi SPI, I2C hoặc UART đều có thể được sử dụng trong mô phỏng và dữ liệu kết nối có thể được chuyển đến Bảng giao diện thông qua thành phần Injector. Các hình ảnh đính kèm hiển thị một chương trình đơn giản để in thông báo lên màn hình. Dữ liệu kết nối được gửi qua Bảng giao diện đến phần cứng hiển thị thực tế và thiết lập thành phần với các thành phần I2C Display, I2C Injector và Interface Board.
Chế độ SCADA mới cho Flowcode 8.1 là một phần thưởng được bổ sung tuyệt đối mà sau đó chúng ta có thể lấy một chương trình thực hiện một cái gì đó trong trình mô phỏng Flowcode và xuất nó để nó chạy độc lập trên bất kỳ PC nào mà không có bất kỳ vấn đề cấp phép nào. Điều này có thể tuyệt vời cho các dự án như giàn thử nghiệm hoặc cụm cảm biến.
Tôi sử dụng chế độ SCADA này để tạo công cụ cấu hình WIFI có thể được sử dụng để định cấu hình SSID và mật khẩu cũng như thu thập địa chỉ IP của mô-đun. Điều này cho phép tôi thiết lập mọi thứ bằng kết nối USB và sau đó chuyển sang kết nối mạng WIFI khi mọi thứ đang chạy.
Một số dự án ví dụ được đính kèm.
Bước 5: Các phương pháp giao thoa khác
Cũng như Flowcode, bạn có thể sử dụng khá nhiều ngôn ngữ lập trình của mình để giao tiếp với bảng giao diện. Chúng tôi đã sử dụng Flowcode vì nó đã có sẵn một thư viện các phần mà chúng tôi có thể thiết lập và chạy ngay lập tức nhưng điều này cũng áp dụng cho nhiều ngôn ngữ khác.
Đây là danh sách các ngôn ngữ và phương pháp giao tiếp với bảng Giao diện.
Python - Sử dụng thư viện nối tiếp để truyền dữ liệu tới cổng COM hoặc địa chỉ IP
Matlab - Sử dụng lệnh Tệp để truyền dữ liệu tới cổng COM hoặc địa chỉ IP
C ++ / C # / VB - Sử dụng DLL được viết sẵn, truy cập trực tiếp vào cổng COM hoặc Windows TCP / IP API
Labview - Sử dụng DLL được viết trước, thành phần VISA Serial hoặc thành phần TCP / IP
Nếu có ai muốn xem các ngôn ngữ trên được triển khai thì vui lòng cho tôi biết.
Bước 6: Thành phẩm
Thành phẩm có thể sẽ là một tính năng nổi bật trong bộ công cụ nhúng của tôi trong nhiều năm tới. Nó đã giúp tôi phát triển các thành phần cho các màn hình và cảm biến Grove khác nhau. Bây giờ tôi có thể lấy mã hoàn toàn được đóng đinh trước khi dùng đến bất kỳ trò tai quái nào trong việc biên dịch hoặc lập trình.
Tôi thậm chí còn phát một số bảng cho các đồng nghiệp để họ cũng có thể cải thiện quy trình làm việc của mình và chúng đã được đón nhận rất tích cực.
Cảm ơn bạn đã đọc Tài liệu hướng dẫn của tôi, tôi hy vọng bạn thấy nó hữu ích và hy vọng nó sẽ truyền cảm hứng cho bạn để tạo ra các công cụ của riêng mình để tăng tốc năng suất của bạn.
Đề xuất:
Bắt đầu với giao diện cảm biến I2C ?? - Giao diện MMA8451 của bạn bằng ESP32s: 8 bước
Bắt đầu với giao diện cảm biến I2C ?? - Giao diện MMA8451 của bạn bằng cách sử dụng ESP32s: Trong hướng dẫn này, bạn sẽ tìm hiểu tất cả về Cách khởi động, kết nối và nhận thiết bị I2C (Gia tốc kế) hoạt động với bộ điều khiển (Arduino, ESP32, ESP8266, ESP12 NodeMCU)
Khiến người mù nhận biết mọi thứ bằng cách chạm vào những thứ xung quanh chúng bằng MakeyMakey: 3 bước
Làm cho người mù nhận biết mọi thứ bằng cách chạm vào mọi thứ xung quanh bằng cách sử dụng MakeyMakey: giới thiệu Dự án này nhằm mục đích làm cho cuộc sống của người mù trở nên dễ dàng bằng cách xác định mọi thứ xung quanh họ thông qua xúc giác. Tôi và con trai tôi Mustafa, chúng tôi đã nghĩ về việc tìm một công cụ để giúp họ và trong thời kỳ chúng tôi sử dụng phần cứng MakeyMakey t
Giao diện người-máy tính: Chức năng một Gripper (do Kirigami tạo ra) bằng Chuyển động cổ tay sử dụng EMG.: 7 bước
Giao diện người-máy tính: Chức năng một cái kẹp (do Kirigami tạo ra) bằng Chuyển động cổ tay Sử dụng EMG: Vì vậy, đây là lần thử đầu tiên của tôi với giao diện người-máy tính. thông qua python và arduino và kích hoạt một bộ kẹp dựa trên origami
Màn hình Nextion - Giải thích về giao diện và giao thức với PIC và Arduino: 10 bước
Màn hình Nextion | Giải thích về giao diện và giao thức với PIC và Arduino: Nextion Display rất dễ sử dụng và giao diện dễ dàng với bộ điều khiển vi mô. sẽ hành động trên để hiển thị
Sử dụng biểu thức Lambda với giao diện chức năng trong Java: 15 bước
Sử dụng biểu thức Lambda với giao diện chức năng trong Java: Giao diện chức năng trong Java là một công cụ rất hữu ích mà nhiều lập trình viên mới hơn không sử dụng. Chúng cho phép các nhà phát triển trừu tượng hóa mã của họ để nó có thể được áp dụng cho nhiều vấn đề khác nhau. Điều này đặc biệt hữu ích với các biểu thức Lambda mà