Mục lục:

Máy đo độ cao mặt phẳng RC (tương thích với Spektrum Telemetry): 7 bước
Máy đo độ cao mặt phẳng RC (tương thích với Spektrum Telemetry): 7 bước

Video: Máy đo độ cao mặt phẳng RC (tương thích với Spektrum Telemetry): 7 bước

Video: Máy đo độ cao mặt phẳng RC (tương thích với Spektrum Telemetry): 7 bước
Video: LIVE: Chia GPU Plotting Bladebit 128GB Testing + Chia Client RC6 Testing 2024, Tháng mười một
Anonim
Máy đo độ cao mặt phẳng RC (tương thích với Spektrum Telemetry)
Máy đo độ cao mặt phẳng RC (tương thích với Spektrum Telemetry)

Tôi đã làm máy đo độ cao này để phi công có thể biết rằng họ đang ở dưới giới hạn 400 foot trên máy bay RC ở Mỹ. Bạn tôi lo lắng vì anh ấy không thể chắc chắn rằng anh ấy luôn ở độ cao dưới 400 ft và muốn có thêm sự đảm bảo mà một cảm biến với dữ liệu đo từ xa sẽ cung cấp. Có, bạn có thể mua một cảm biến từ Spektrum, nhưng bạn có thể xây dựng dự án này với giá dưới 20 đô la với các bảng đột phá (vốn đã bị tăng giá). Nếu bạn đã có trình lập trình J-link, bạn có thể xây dựng điều này trên một bảng tùy chỉnh với một vài đô la. Chưa kể khi bạn hiểu giao thức Xbus, bạn có thể tạo bất kỳ cảm biến nào được hỗ trợ khác! Nhưng tôi sẽ chỉ bao gồm một máy đo độ cao trong dự án này…

Danh sách các bộ phận:

  • Tôi đã sử dụng bảng vi điều khiển Seeeduino XIAO cho dự án này vì nó rất nhỏ, sử dụng bộ xử lý M0 có nhiều năng lượng cho dự án này, có cả I2C và SPI sẵn sàng hoạt động và sử dụng logic 3.3v nên không có sự thay đổi mức nào. yêu cầu.

    https://www.seeedstudio.com/Seeeduino-XIAO-Arduino…

  • Để cảm nhận áp suất không khí, tôi đã mua bảng đột phá BMP388 từ Adafruit. Bo mạch có cả I2C và SPI, và có thể hoạt động ở mức logic 3.3v hoặc 5v.

    https://www.adafruit.com/product/3966

  • Protoboard để nối dây mạch
  • Hàn / sắt hàn
  • Đầu cắm chân đực / cái để tôi có thể dễ dàng tháo rời cảm biến / vi điều khiển.
  • Nút nhỏ. Tôi sử dụng điều này để đặt lại độ cao bắt đầu.
  • Điện trở 10k cho một nút kéo xuống.
  • Đầu nối JST-XH 4 chân cái để cắm vào cổng đo từ xa của bộ thu Spektrum
  • Bộ lập trình SEGGER J-Link EDU để flash M0 mà không cần bộ nạp khởi động.

    https://www.adafruit.com/product/3571

  • Bảng đột phá 10 chân Adafruit SWD

    www.adafruit.com/product/2743

Quân nhu

  • Tôi cũng đã in 3D một vỏ bọc nhỏ cho máy đo độ cao của mình, nhưng điều này là không cần thiết.
  • Máy hiện sóng- Nếu bạn chưa có, tôi thực sự khuyên bạn nên dùng cái này:

    https://store.digilentinc.com/analog-discovery-2-1…

Bước 1: Tìm hiểu Giao thức đo từ xa Spektrum

Tìm hiểu Giao thức đo từ xa Spektrum
Tìm hiểu Giao thức đo từ xa Spektrum
Tìm hiểu Giao thức đo từ xa Spektrum
Tìm hiểu Giao thức đo từ xa Spektrum
Tìm hiểu Giao thức đo từ xa Spektrum
Tìm hiểu Giao thức đo từ xa Spektrum

Điều này hầu hết đã được thực hiện cho tôi bởi Raymond Domingo. Họ đã tạo ra một máy đo độ cao tương thích với Spektrum, vì vậy việc làm theo mã nguồn đó thực sự hữu ích. Biểu dữ liệu đo từ xa Spektrum đã điền vào phần còn lại của khoảng trống. Đo mức dữ liệu ra khỏi bộ thu cho thấy rằng tôi sẽ cần logic 3.3v.

Người nhận gửi địa chỉ thiết bị, và sau đó mong đợi một phản hồi 16 byte. Biểu dữ liệu hiển thị cấu trúc cho tất cả các cảm biến khác nhau. Ngay cả khi cấu trúc không dài 16 byte, người nhận mong đợi 16 byte trở lại mỗi lần.

Biểu dữ liệu Spektrum:

www.spektrumrc.com/ProdInfo/Files/SPM_Tele…

Dự án của Raymond Domingo:

www.aerobtec.com/download/altisSpektrumInte…

Bước 2: Chọn phần cứng

Chọn phần cứng
Chọn phần cứng
Chọn phần cứng
Chọn phần cứng
Chọn phần cứng
Chọn phần cứng

Tôi đã sử dụng bảng đột phá BMP388 từ Adafruit để cảm nhận áp suất. Đột phá cung cấp đột phá I2C và SPI, và hoạt động ở mức logic 3.3v hoặc 5v. Adafruit luôn làm một công việc tuyệt vời với bảng đột phá của họ, vì vậy tôi đã mua nó. Thay vào đó, tôi đã sử dụng bảng DFRobot Gravity BMP388 trong bản dựng của mình vì bảng Adafruit của tôi đã được sử dụng.

Cho rằng thiết bị I2C máy chủ sử dụng logic 3.3v, tôi cần một vi điều khiển 3.3v và tôi muốn nó nhỏ. Tôi đã định sử dụng Adafruit Trinket M0, nhưng chúng tương đối đắt tiền và không có nhiều chốt bị gãy. Sau đó, tôi tìm thấy bảng Seeeduino XIAO. Đây là bo mạch M0 với cả I2C và SPI đã sẵn sàng hoạt động, với đầu nối USB-C. Ngoài ra, nó thực sự rất nhỏ! Nhìn chung, tôi thực sự thích bảng này (mặc dù tinh thể khởi động chậm khiến tôi mất nhiều thời gian để tìm ra).

Spektrum sử dụng đầu nối đực 4 chân kích thước JST-XH trên bộ thu cho cổng "Xbus" mà chúng ta sẽ khai thác. Tôi đã sử dụng phích cắm nữ JST-XH 4 chân trên máy đo độ cao và nó hoạt động hoàn hảo.

Bước 3: Viết phần mềm

Tôi đã sử dụng Arduino IDE để viết tất cả mã. Tôi đã sao chép giao thức đo từ xa Spektrum ra khỏi biểu dữ liệu của họ và thêm nó vào thư viện Arduino của tôi. Vì Adafruit luôn có các thư viện đẹp cho các đột phá của họ, tôi đã sử dụng thư viện BMP3XX của họ cho cảm biến BMP388.

Những điều rút ra chính từ thiết kế của tôi là:

  • Thiết lập I2C hoạt động như một thiết bị khách và phản hồi địa chỉ đo độ cao Spektrum (0x12).
  • Đọc phong vũ biểu BMP388 qua SPI.
  • Lưu dữ liệu độ cao trong hai bộ đệm khác nhau để yêu cầu I2C từ người nhận sẽ không làm hỏng dữ liệu và luân phiên giữa hai bộ đệm khi tìm nạp dữ liệu. Điều này đảm bảo rằng dữ liệu được gửi đến người nhận luôn hoàn chỉnh.
  • Sử dụng một nút để đo độ cao bằng không.

Để biết thêm chi tiết và phân tích mã, hãy xem video.

Bước 4: Nối mạch

Nối dây mạch
Nối dây mạch
Nối dây mạch
Nối dây mạch
Nối dây mạch
Nối dây mạch
Nối dây mạch
Nối dây mạch

Tôi đã sử dụng protoboard, nhưng nếu bạn muốn dành thời gian để thiết kế một bảng mạch xay tùy chỉnh, bạn có thể làm cho mạch sạch hơn rất nhiều.

Tôi đã kết nối đầu nối JST-XH với các chân I2C của XIAO. Vì máy thu xuất ra 5 volt cho bus đo từ xa, dương từ bus đi đến chân VCC của XIAO. Bằng cách đó, bộ điều chỉnh 3.3v tích hợp được sử dụng để cấp nguồn cho cảm biến BMP388.

Bước 5: Biên dịch mà không cần Bootloader

Biên dịch mà không cần bộ nạp khởi động
Biên dịch mà không cần bộ nạp khởi động
Biên dịch mà không cần bộ nạp khởi động
Biên dịch mà không cần bộ nạp khởi động
  1. Tìm tệpboards.txt của bạn (cho bất kỳ bảng nào bạn đang sử dụng).

    Trong trường hợp của tôi, nó nằm ở đây: C: / Users / AppData / Local / Arduino15 / package / Seeeduino / phần cứng / samd / 1.7.7 \boards.txt

  2. Sao chép bảng của bạn và đổi tên khóa đầu tiên để chỉ định phiên bản không có bộ nạp khởi động. Tôi chỉ thêm _nbl vào tên ban đầu.

    • Cũ: seeed_XIAO_m0
    • Mới: seeed_XIAO_m0_nbl
  3. Thay đổi giá trị.name:

    • Cũ: seeed_XIAO_m0_nbl.name = Seeeduino XIAO
    • Mới: seeed_XIAO_m0_nbl.name = Seeeduino XIAO No Bootloader
  4. Sửa đổi trình liên kết để flash mà không có bộ nạp khởi động bằng cách thay đổi tập lệnh ld của trình tạo:

    • Cũ: seeed_XIAO_m0_nbl.build.ldscript = linker_scripts / gcc / flash_with_bootloader.ld
    • Mới: seeed_XIAO_m0_nbl.build.ldscript = linker_scripts / gcc / flash_with out _bootloader.ld
  5. Khởi động lại Arduino IDE.
  6. Chọn bảng "Seeeduino XIAO No Bootloader" mới từ menu bảng.
  7. Chọn "Xuất nhị phân đã biên dịch"
  8. Sau khi được biên dịch, tệp.bin sẽ nằm trong thư mục dự án Arduino của bạn.

Bước 6: Flash MCU với J-Link

Flash MCU với J-Link
Flash MCU với J-Link
Flash MCU với J-Link
Flash MCU với J-Link
Flash MCU với J-Link
Flash MCU với J-Link

Adafruit có một hướng dẫn tuyệt vời về cách lập trình lại bộ nạp khởi động trên thiết bị M0 / M4. Trong trường hợp của chúng tôi, chúng tôi muốn loại bỏ bộ nạp khởi động, nhưng nó hoạt động theo cùng một cách.

learn.adafruit.com/how-to-program-samd-boo…

Sau khi thực hiện việc này, bạn sẽ không thể tải mã lên qua USB. Bạn có thể làm theo hướng dẫn trên để flash lại bootloader vào thiết bị để tải lại mã qua USB như lúc xuất xưởng.

Hướng dẫn Adafruit rất kỹ lưỡng, nhưng đây là các bước cơ bản:

  1. Dây nhảy hàn vào mặt sau của bo mạch XIAO.

    • Hướng dẫn Adafruit không nói rằng chân RST trên bảng đột phá 2x5 cần được kết nối với chân đặt lại trên bảng Adafruit. Nhưng đối với XIAO, tôi cần kết nối với tất cả bốn miếng đệm ở mặt sau của bo mạch.
    • Chân VREF cần được kết nối với chân XIAO 3.3v. Điều này cho trình gỡ lỗi biết rằng logic thiết bị là 3.3v. Không có nó, nếu bạn chọn sai tùy chọn, bạn có thể làm hỏng bộ vi điều khiển.
  2. Kết nối dây jumper với J-Link.
  3. Bật nguồn bo mạch XIAO bằng cáp USB.
  4. Mở Atmel Studio.
  5. Chọn công cụ Lập trình thiết bị
  6. Chọn bảng M0 của bạn. Trong trường hợp này, ATSAMD21G18A
  7. Chọn SWD.
  8. Đọc cấu hình từ mục tiêu.
  9. Nếu bạn đang sử dụng EDU J-Link, hãy đồng ý với các điều khoản sử dụng (nếu bạn đang tuân thủ các điều khoản sử dụng).
  10. Xác minh rằng điện áp đọc được là chính xác ở góc trên bên phải. Nếu nó không phải là 3.3v, bạn có thể phá vỡ bảng của mình!
  11. Xóa cầu chì bảo vệ khởi động (đặt kích thước bộ nạp khởi động thành 0 byte), rồi chọn chương trình.
  12. Trong phần bộ nhớ, chọn tệp.bin hoặc.hex đã biên dịch của bạn và chọn chương trình.

Xử lý sự cố:

Khi bạn đọc cấu hình thiết bị, nếu bạn gặp lỗi điện áp ngoài dải, hãy đảm bảo MCU đã được cắm vào nguồn và chân J-Link VREF được kết nối với 3,3 volt

Bước 7: Biên dịch lại mà không có tinh thể bên ngoài

Biên dịch lại mà không cần tinh thể bên ngoài
Biên dịch lại mà không cần tinh thể bên ngoài

Bo mạch XIAO co tinh ngoai troi de lam giay dau tien. Bộ thu Spektrum thực hiện khám phá thiết bị trên bus đo từ xa 350 mili giây sau khi bật nguồn, vì vậy chúng tôi cần yêu cầu trình biên dịch sử dụng bộ dao động bên trong để thay thế việc khởi động gần như ngay lập tức.

  1. Tìm tệpboards.txt mà bạn đã sửa đổi trước đó (vâng, tôi có thể đã lưu bạn bước này trước đó, nhưng đây là một quá trình học hỏi đối với tôi)
  2. Thêm "-DCRYSTALLESS" vào chuỗi seeed_XIAO_m0_nbl.build.extra_flags. Điều này sẽ yêu cầu trình biên dịch sử dụng bộ dao động bên trong.
  3. Biên dịch lại mã.
  4. Kích hoạt lại MCU.
  5. Xác minh thời gian khởi động đủ nhanh bằng cách sử dụng máy hiện sóng.

Như bạn thấy trên hình, kênh 1 màu vàng là nguồn cấp. Kênh màu lục lam 2 là chân sẵn sàng trên vi điều khiển. Khoảng 10 mili giây sau khi khởi động, kênh hai được bộ vi điều khiển kéo lên cao cho biết nó đang ở trong vòng lặp thiết lập. Sau khi thiết lập xong, MCU được mã hóa để kéo chân cắm xuống thấp, cho biết vòng lặp chính đang bắt đầu. Phạm vi cho thấy rằng quá trình thiết lập mất khoảng 3 mili giây. Nhìn chung, bộ vi điều khiển mất 13 mili giây sau khi khởi động để sẵn sàng hoạt động.

Đề xuất: