Nâng cấp nguồn điện cũ của bạn để có thể điều khiển bằng Smartphone

Ari Mahpour
|  Created: Tháng Hai 12, 2024  |  Updated: Tháng Bảy 1, 2024
Nguồn cấp có khả năng kết nối Wifi

Tôi gần đây đã tìm thấy một Nguồn cung cấp điện BK Precision 1787 cũ trong garage của bố tôi và, với tính cách ham hố của mình, tôi không thể bỏ qua cơ hội mang nó về nhà và thử nghiệm. Như một món đồ chơi bị bỏ rơi, nguồn cung cấp điện này đã nằm trong tủ của tôi hơn một năm, thu gom bụi bặm, chỉ chờ được sử dụng. Gần đây tôi đã lấy nó ra chỉ để phát hiện ra rằng nó có một cổng RS-232 ở mặt sau:

Hình 1

Hình 1: 

Tôi tự hỏi, “liệu tôi có thể thực sự điều khiển nó bằng cáp RS-232 không?” Sau một cuộc điều tra ban đầu trên trang web của BK Precision, tài liệu gốc (từ hơn 20 năm trước) cho biết rằng tôi cần một bộ dụng cụ đặc biệt để sử dụng giao diện PC:

Hình 2

Hình 2: 

Tôi khá thất vọng khi thấy thông báo đó và đã nghĩ đến việc vứt bỏ toàn bộ thiết bị nhưng tôi quyết định thực hiện một thí nghiệm nhỏ. Trong bài viết này, chúng ta sẽ xem xét cách tôi tháo nguồn cung cấp điện và biến nó thành một thiết bị điều khiển IoT, nơi mà điện áp và dòng điện có thể được thiết lập hoặc đọc qua điện thoại hoặc bất kỳ thiết bị kết nối internet nào. Chúng ta sẽ xem xét các lệnh UART, dò tìm bus để xác nhận giao tiếp nối tiếp, và xây dựng một máy chủ API REST trên Raspberry Pi Pico W để cung cấp khả năng IoT cho thiết bị này.

Dự án

Thay vì biến nguồn cung cấp điện thành rác điện tử, tôi quyết định muốn nghịch ngợm với nó một chút. Hầu hết nguồn cung cấp điện ngày nay có thể được điều khiển qua Serial (ví dụ UART), USB (thường là một thiết bị COM hoặc USBTMC), và/hoặc Ethernet (thường được điều khiển qua VISA). Tuy nhiên, tôi chưa thấy nhiều thiết bị hỗ trợ khả năng Wi-Fi. Tôi tưởng tượng điều này là bởi vì việc thiết lập khá phiền phức và hầu hết các nhà thiết kế hoặc kỹ sư thử nghiệm không thực sự quan tâm đến kết nối có dây. Nguồn cung cấp điện của tôi đi kèm với một cổng RS-232 nhưng không có gì khác. Tôi nghĩ sẽ thật thú vị khi trang bị cho nó khả năng Wi-Fi với một giao diện API REST để tôi có thể điều khiển nó từ bất cứ đâu sử dụng một thiết bị kết nối internet.

Vấn đề lớn nhất mà tôi gặp phải là khả năng không thể giao tiếp với nguồn cung cấp điện. Như bạn đã thấy ở trên, hướng dẫn sử dụng cho biết bạn cần một bộ dụng cụ và phần mềm độc quyền để sử dụng giao diện PC. Lần đầu tiên tôi cố gắng “hack” nguồn cung cấp điện đã thất bại hoàn toàn. Tôi kết nối một cáp RS-232 UART vào cổng ở mặt sau và bắt đầu gõ vào các ký tự ngẫu nhiên. Tôi đã tháo nắp và theo dõi tín hiệu qua cổng RS-232 đến một chip truyền dẫn MAX202C và quan sát các tín hiệu TX và RX ở cả hai bên của chip. Tất cả những gì tôi nhận được chỉ là một đống rác:

Hình 3

Hình 3:

May mắn thay, các bạn ở BK Precision đã rất nhiệt tình và cung cấp cho tôi bộ lệnh cần thiết để điều khiển nguồn. Họ thậm chí còn cung cấp cho tôi các ảnh chụp màn hình với phần mềm mà họ đang sử dụng và tất cả các cài đặt UART để tôi có thể xác nhận mình đã thiết lập mọi thứ một cách chính xác. Với sự giúp đỡ của họ, tôi đã có thể thử nghiệm các lệnh của mình và xem chúng được xử lý một cách chính xác trên máy hiện sóng của mình như sau:

Hình 4

Hình 4: 

Mặc dù đây có vẻ như là một bước không cần thiết, nhưng điều này đã giúp tôi thiết lập một cơ sở để so sánh khi tôi kết nối trực tiếp Raspberry Pi Pico W của mình vào các dây UART. Tại thời điểm này, tôi đã có thể thiết lập được giao tiếp đúng cách và tôi đã sẵn sàng để bắt đầu cải tiến nguồn cung cấp của mình trở thành một thiết bị có khả năng kết nối IoT.

Thiết lập giao tiếp

Bây giờ tôi đã có một cấu hình làm việc sử dụng cáp UART RS-232 USB, tôi muốn tái tạo cùng một cấu hình sử dụng Raspberry Pi Pico W. Hầu hết các dự án của tôi cho Raspberry Pi Pico đều được viết bằng MicroPython (một phiên bản nhỏ gọn hơn của Python dành cho vi điều khiển) nên tôi quyết định sử dụng thư viện machine.uart. Điều này yêu cầu tôi phải kết nối các dây UART/RS-232 của mình vào các chân phần cứng cụ thể của UART. Trong trường hợp này tôi sử dụng GPIO 16 và 17. Sau khi gửi các lệnh nối tiếp qua UART trong mã MicroPython của mình, tôi phát hiện ra rằng tất cả dữ liệu được gửi đi và nhận lại đều là rác. Mã liên tục báo cáo rằng các bytecodes trả về thậm chí không phải là các ký tự ASCII. Rõ ràng là có điều gì đó không ổn. Chính vì lý do cụ thể này mà việc tôi có được một bản ghi của một cấu hình hoạt động là rất quan trọng. Ngay lập tức tôi có thể xác định rằng các tín hiệu đã bị đảo ngược khi chúng đến với thiết bị Raspberry Pi Pico. Sau khi thiết lập TX và RX để đảo ngược (khi khởi tạo đối tượng thư viện UART) dữ liệu nối tiếp trả về đã sạch sẽ.

Điều quan trọng cần lưu ý là thiết bị Raspberry Pi Pico hoạt động ở mức điện áp 3.3V và BK Precision 1787 (cụ thể là chip MAX202C mà nó sử dụng) hoạt động ở mức 5V. Gửi tín hiệu 5V đến các chân GPIO của thiết bị Raspberry Pi Pico trong thời gian dài có thể làm hỏng các bộ đệm đầu vào của chip. Đối với việc sử dụng lâu dài, việc sử dụng một bộ chuyển đổi mức điện áp để chuyển đổi đúng cách các mức điện áp từ 3.3V sang 5V giữa các thiết bị là rất khuyến khích.

Xây dựng máy chủ API REST

Tại thời điểm này, tôi đã thiết lập được giao tiếp và viết một thư viện trình điều khiển cung cấp đầy đủ quyền kiểm soát nguồn cung cấp điện của tôi qua giao tiếp nối tiếp. Bước tiếp theo là cấu hình một máy chủ web cơ bản và xác nhận rằng tôi có thể kiểm soát thiết bị của mình qua web. Nhờ vào microdot, tôi đã có thể tạo ra một bản mẫu “Hello World” rất nhanh để xác nhận rằng thiết bị Raspberry Pi Pico H có thể lưu trữ một máy chủ web cho tôi. Ngoài một câu lệnh trả về “Hello World” đơn giản, tôi cũng xác nhận rằng tôi có thể chuyển đổi trạng thái của các LED bằng cách sử dụng các hàm POST. Tại thời điểm này, tôi đã sẵn sàng để tích hợp mọi thứ.

Tổng hợp lại

Để làm cho mã cuối cùng dễ đọc và có khả năng mở rộng hơn, tôi đã sử dụng các lớp trong mã của mình. Mã hướng đối tượng không phải là điều mới mẻ trong thế giới phần mềm nhưng thường bị bỏ qua trong các hệ thống nhúng. Khi viết dịch vụ web, đặc biệt là những dịch vụ kiểm soát các phần cứng khác nhau, việc trừu tượng hóa mã của bạn một cách đẹp đẽ để mã phần cứng chi tiết nằm ngoài ứng dụng chính là rất quan trọng. Trong trường hợp của tôi, bạn sẽ nhận thấy trong main.py rằng có rất ít mã tham chiếu đến nguồn cung cấp điện ngoại trừ việc gọi các chức năng cụ thể như thiết lập hoặc đọc dòng/điện áp (so với việc xử lý lệnh UART thực tế trong main.py). Điều này cho phép một cái nhìn sạch sẽ hơn về những gì đang xảy ra ở cấp độ ứng dụng web và trừu tượng hóa đi chi tiết của những gì đang diễn ra ở cấp độ giao tiếp thiết bị.

Trong main.py, tôi tạo ra hai loại điểm cuối khác nhau để kiểm soát nguồn cung cấp điện của mình. Một loại sử dụng phương thức POST thường được sử dụng trong REST API để cập nhật các trường trên một backend đến máy chủ (ví dụ: chèn một hàng của cơ sở dữ liệu). Tôi có thể dễ dàng sử dụng phương thức PUT vì chỉ là một giá trị đơn lẻ mà tôi đang chỉnh sửa nhưng, không có lý do thực sự tốt, tôi vẫn giữ POST. Thực sự, tùy bạn chọn phương thức nào bạn muốn triển khai trong tình huống cụ thể này.

Tôi cũng tạo ra một tuyến đường gọi là “controller” phát ra một biểu mẫu gửi đơn giản nơi người dùng có thể thiết lập điện áp/dòng và nhấn “submit” sẽ, đổi lại, thực hiện hành động POST và kích hoạt dịch vụ web để cập nhật cài đặt điện áp/dòng trên nguồn cung cấp điện. Đây là nơi mà khía cạnh IoT, kích hoạt bằng điện thoại thông minh, xuất hiện. Thực hiện phương thức POST không hề đơn giản từ điện thoại thông minh của bạn hoặc trình duyệt thông thường. Bạn có thể sử dụng phương thức GET nhưng bạn cũng sẽ kết thúc với một chuỗi URL dài nữa. Một cách rất đơn giản để đạt được khía cạnh “thông minh” của dự án của bạn là thả một biểu mẫu web cơ bản mà bất kỳ ai cũng có thể truy cập từ bất kỳ thiết bị nào. Một khi bạn hỗ trợ một biểu mẫu web cơ bản trong ứng dụng web của bạn (và định tuyến đúng cách lưu lượng truy cập đến qua tường lửa của bộ định tuyến), bạn đã, cơ bản, chứng minh rằng mã của bạn là “IoT enabled.”

Hình 5

Hình 5:

Một số tính năng giám sát sức khỏe/debug khác mà tôi đã thêm vào dự án này bao gồm:

  1. Thiết lập LED trên bo mạch để bật khi mọi thứ đã được khởi tạo
  2. Một trang “trạng thái” chứng minh rằng máy chủ web đang hoạt động
  3. Trả lại các câu lệnh qua HTTP từ nguồn cung cấp điện sau khi phát ra lệnh cho nó
Hình 6

Hình 6:

Những tính năng nhỏ này thực sự giúp biến một dự án sở thích thành một cái gì đó chín chắn hơn có thể được chẩn đoán khi gặp sự cố.

Tại thời điểm này, tôi đã thành công trong việc kết hợp tất cả các phần và giờ đây tôi sở hữu một nguồn cung cấp điện cũ kỹ với công nghệ tiên tiến. “Mục đích của nguồn cung cấp điện siêu cổ điển này sẽ phục vụ cho việc gì?” tôi tự hỏi. Chà, phần đó tôi vẫn đang cố gắng tìm hiểu.


Để xem toàn bộ kho lưu trữ mã, hãy truy cập https://gitlab.com/embedded-designs/rest-api-controlled-power-supply-using-micropython.

About Author

About Author

Ari is an engineer with broad experience in designing, manufacturing, testing, and integrating electrical, mechanical, and software systems. He is passionate about bringing design, verification, and test engineers together to work as a cohesive unit.

Related Resources

Tài liệu kỹ thuật liên quan

Back to Home
Thank you, you are now subscribed to updates.