Hỏi về accelerometer MMA7361

bigboy061293

Thành Viên PIF
Con này không dùng giao tiếp I2C như MMA7455L mà đọc ADC về từ 3 chân Xout, Yout, Zout.
hiện tại em đã đọc được về các giá trị từ 3 chân này, nhưng chúng rất lạ, nó thay đổi liên tục (thay đổi xung quanh một giá trị nào đó) mặc dù không hề đụng tới cảm biến. Cụ thể các giá trị như sau


x y z

158 160 160
163 163 164
168 159 155
165 153 162
156 156 165
149 164 160
155 165 152
167 160 154
166 153 160
158 155 165
149 162 161
154 165 153
165 161 154
167 153 159
159 155 165
149 161 161
153 166 154
163 161 153
167 154 158
160 154 165
149 160 162
152 165 155
161 162 153


Các số này em chỉ cho đọc liên tục và chưa xử lí
Các anh chị làm ơn hướng dẫn giúp em vụ này với. Em cám ơn trước :)
 

2death

Cố Vấn CLB
Staff member
À, chuyện bình thường í mà :)

Cảm biến này nhiễu kinh lắm. Cách khắc phục:

1. Phần cứng:

- Nguồn cho Cảm biến phải tốt. Chắc chắn ko được dùng nguồn xung cho nó. Gắn các tụ lọc nhiễu gần sát bên các chân cấp nguồn cho cảm biến:1 cặp tụ 10u + 104 hoặc 1u+104, chọn tụ xịn xịn tí.
10u nên chọn tụ Tantal, 104 thì chọn tụ polypropilen (tụ kẹo), ko thì xài đỡ tụ ceramic (but dùng tụ kẹo tốt hơn).

- Chọn chip MCU: chọn con nào có bộ ADC tốt một chút, tránh con PIC ra :D

- Nguồn cho MCU cũng phải tốt, quan trọng là: nguồn tham khảo cho ADC phải thật ổn định (Vref+,- cho ADC). Có thể gắn thêm L,C để lọc nguồn.

- Gắn thêm L, C cho mỗi kênh ADC đọc tín hiệu từ cảm biến. Làm biếng thì gắn tụ 104 cho nó xài tạm.

2. Phần mềm:
- Thực hiện các bộ lọc để lọc nhiễu tín hiệu.
- 1 cách cùi bắp (xài tạm) thì mình lọc bằng cách cộng n giá trị lại, lấy trung bình (nó cũng coi là bộ lọc FIR với tất cả các hệ số đều = 1 -- nhớ mang máng thế, ko biết có đúng ko :D)
- Tốt nhất là lọc Kalman.
 

bigboy061293

Thành Viên PIF
con này em mua luôn 1 cái module bên Thiên Minh nên hình như nó gắn đủ hết rồi phải không chị ?. Với lại em đang gắn nó lên arduino, xài nguồn của arduino luôn, như vậy có được không chị ?

cái hình thằng nhỏ nè chị

 

2death

Cố Vấn CLB
Staff member
Em lên trang của Tme down schematic về coi thử nó làm j với con accelero đó:d

Mà nhìn có vẻ như là nó gắn tụ 104 ceramic cho chân cấp nguồn và cho mỗi chân ADC out.
Em lấy nguồn bên arduino sang thì hạn chế chiều dài dây nôi, càng dài thì càng nhiễu.
Dù sao thì cũng nên gắn thêm tụ 10u tantal trên bo acce.

Mà arduino là dạng kit hobby nên cũng ko phải là quá tốt :)
Anyway, có thì cứ thế mà xài. Bổ sung thêm bộ lọc = phần mềm để đạt hiệu quả hơn
 

bigboy061293

Thành Viên PIF
cái "xì ke ma tíc" nó vầy nè chị



chị ơi, nếu gắn cái tụ 10u tantal thì gắn như thế nào vậy chị ? em cám ơn trước :)
 

bigboy061293

Thành Viên PIF
với lại em phát hiện một điều là mỗi lần nạp lại chương trình thì đọc được số khác nhau, ví dụ nạp chương trình lần 1 thì đọc được Xout là dao động quanh 400, lần 2 thì dao động quanh 300, ... số nó không cố định. Hoặc khi chạm tay vào cảm biến thì nó cũng thay đổi rồi buông tay ra thì không về được giá trị đầu :( chị có cách nào giúp em với :(
 
Em nên nói rõ số liệu đó em tính toán như thế nào, nhất là z, nếu em để cb tĩnh thì giá trị lấy về từ z phải khác x, y 1g. Còn chuyện mỗi lần nạp chương trình/ cấp điện lại cho cb mà nó thay đổi điểm giữa chẳng có gì lạ cả, nguyên nhân đến từ cả cb và ADC của em. Vì thế các giải thuật tự calib đóng vai trò quan trọng trong kỹ thuật analog. Nếu em có làm việc với các loại cảm biến nhạy cảm như CapSense trong CapTouch chẳng hạn, thì em sẽ thấy rõ việc Auto Calib quan trọng như thế nào.
Nếu em cần chính xác mà không cần tốc độ , cái nên là em hãy tăng số lượng mẫu lên, tốc độ lấy mẫu cũng không nên đẩy lên quá cao vì S/H của các MCU rất chuối, em cứ thử đẩy lên cao nhất mà thử đi là biết liền.
 

bigboy061293

Thành Viên PIF
à, nếu nhưng anh nói thì em tưởng tượng ra được là tìm giá trị trung bình phụ thuộc vào mỗi lần nạp chương trình hay cấp nguồn chứ không phải là một giá trị cụ thể phải không anh ?
 
Đúng đó em, các cảm biến cấu tạo MEMS đều bị như vậy cả. Calib = calibration hay là chỉnh định, cân chỉnh. Về giải thuật thì đơn giản nhất là sau khi khởi động em để cb cân bằng để lấy thông số gốc và dựa vào đó tính độ chênh lệch mà sử dụng. Nếu muốn calib thì em phải xác định quy luật, nếu không cần tuyến tính, thì em chơi theo kiểu thống kê nhiều lần để xác định tầm thay đổi điểm cb. Trong khoảng đó thì em cho là 0, ngoài khoảng thì bắt đầu em tăng dần dần chẳng hạn.
Tùy vào mục đích sử dụng mà em có nhiều kiểu calib khác nhau.
 

bigboy061293

Thành Viên PIF
cám ơn anh, tới đây em hiểu rồi. Tại lúc trước em chưa rõ nguyên lý của nó, cứ tưởng là cảm biến có 1 giá trị cụ thể.
để em mò tiếp rồi có gì không biết chắc phải nhớ tới mấy anh chị nữa :)
 
Top