Tôi đã thiết kế một PCB cảm biến nhỏ cho luận án thạc sĩ của mình với một vi điều khiển ATtiny44 . Tôi cần khoảng 200 bảng này cho ứng dụng của mình và 16 bảng luôn được kết nối cục bộ với bảng điều khiển. Toàn bộ mạng trông như thế này:
Để giao tiếp giữa bộ điều khiển và bảng cảm biến, tôi đã viết bus 1 pin của riêng mình (dựa trên thời gian). Vấn đề duy nhất là bảng cảm biến phải có địa chỉ để biết vị trí của nó trong mạng, khi tôi gửi dữ liệu của nó đến bảng điều khiển.
Khi tôi chỉ còn 1 pin trên ATtiny, tôi đã nghĩ ra một mạch DAC dựa trên jumper để tạo ra một điện áp tương tự dựa trên cài đặt của bốn jumper. Vì mạch cảm biến sử dụng các giá trị (47, 470, 1k, 3k, 4k7, 10k, 100k và 220k) và tôi muốn tối ưu hóa cho sản xuất, tôi đã sử dụng các giá trị dưới đây cho DAC (về cơ bản là 100k, 50k, 20k và 10k ). Giá trị này sẽ cho tôi một giá trị tốt trong khoảng từ 0 V đến 760 mV dựa trên cài đặt jumper. Chính xác những gì tôi cần để đọc như một điện áp tương tự với tham chiếu 1.1 V bên trong của ATtiny. Khi khởi động, ATtiny đọc điện áp này và nên biết vị trí của nó.
mô phỏng mạch này - Sơ đồ được tạo bằng CircuitLab
Về lý thuyết điều này hoạt động tốt. Tôi thậm chí đã làm một phân tích Monte Carlo trong LTspice để xác nhận rằng tôi không có vùng chồng lấn nào, khi xem xét dung sai của các điện trở (tất cả đều là 1% BTW). Dưới đây bạn có thể tìm thấy những hình ảnh của phân tích này.
Bây giờ tôi đã sản xuất một số (may mắn không phải 200) trong số các bảng này và một số bảng không đọc được địa chỉ chính xác của chúng (đặc biệt là ở các khu vực địa chỉ cao hơn, nơi tất cả các dung sai đến chơi cùng một lúc). Tôi đã đo tất cả các giải pháp có thể và cuối cùng đã tìm ra vấn đề của mình. Phân tích ban đầu của tôi không bao gồm dung sai của điện áp cung cấp 5 V, được tạo ra cục bộ từ 12 V với MC7805 trên mỗi bảng điều khiển. Trên mỗi biểu dữ liệu, MC7805 có điện áp đầu ra trong khoảng 4,8 đến 5,2 V.
Sau khi tôi nhận ra điều này, tôi đã sửa đổi phân tích Monte Carlo. Bây giờ nó trông như thế này:
Như bạn có thể thấy có những khu vực chồng chéo đẹp, nơi tôi chắc chắn không thể nói điện áp này chỉ có nghĩa là địa chỉ này. Về cơ bản tất cả các địa chỉ bắt đầu bằng không. 8 có thể nhận được đọc sai (với khả năng cao hơn cho đọc sai cho địa chỉ cao hơn).
Tôi không muốn thêm các giá trị điện trở khác với giá trị đã được sử dụng trên bảng (như đối với luận án tôi muốn tối ưu hóa cho sản xuất).
Tôi không muốn thêm một tham chiếu điện áp (ví dụ, diode Zener) để cung cấp cho mạng điện trở DAC.
Tôi không thể sửa đổi bảng điều khiển nữa (và sử dụng ở đó một bộ điều chỉnh điện áp chính xác hơn).
Tôi vẫn có thể sửa đổi thiết kế / sơ đồ PCB của bảng cảm biến!
Làm thế nào tôi có thể đảm bảo luôn luôn đọc chính xác địa chỉ (theo chương trình hoặc bằng cách thay đổi mạch)?