Mục lục:

Arduino và TI ADS1110 ADC 16-bit: 6 bước
Arduino và TI ADS1110 ADC 16-bit: 6 bước

Video: Arduino và TI ADS1110 ADC 16-bit: 6 bước

Video: Arduino và TI ADS1110 ADC 16-bit: 6 bước
Video: a software simulation to design a dc speed controlling system using DC motors 2024, Tháng bảy
Anonim
Arduino và TI ADS1110 ADC 16-bit
Arduino và TI ADS1110 ADC 16-bit

Trong hướng dẫn này, chúng tôi kiểm tra việc sử dụng Arduino để làm việc với Texas Instruments ADS1110 - một IC chuyển đổi tín hiệu tương tự sang số 16-bit cực kỳ nhỏ nhưng hữu ích.

Nó có thể hoạt động trong khoảng từ 2,7 đến 5,5 V vì vậy nó cũng tốt cho Arduino Due và các bảng phát triển điện áp thấp hơn khác. Trước khi tiếp tục, vui lòng tải xuống bảng dữ liệu (pdf) vì nó sẽ hữu ích và được tham khảo trong hướng dẫn này. ADS1110 cung cấp cho bạn tùy chọn ADC chính xác hơn so với ADC 10 bit của Arduino cung cấp - và nó tương đối dễ sử dụng. Tuy nhiên, nó chỉ có sẵn dưới dạng một phần trống trong SOT23-6.

Bước 1:

Hình ảnh
Hình ảnh

Tin vui là bạn có thể đặt mua ADS1110 gắn trên bảng đột phá rất tiện lợi. ADS1110 sử dụng bus I2C để giao tiếp. Và vì chỉ có sáu chân nên bạn không thể đặt địa chỉ xe buýt - thay vào đó, bạn có thể chọn từ sáu biến thể của ADS1110 - mỗi biến thể có địa chỉ riêng (xem trang hai của bảng dữ liệu).

Như bạn có thể thấy trong ảnh ở trên, của chúng tôi được đánh dấu “EDO” phù hợp với địa chỉ xe buýt 1001000 hoặc 0x48h. Và với các mạch ví dụ, chúng tôi đã sử dụng điện trở kéo lên 10kΩ trên bus I2C.

Bạn có thể sử dụng ADS1110 làm ADC một đầu hoặc phân biệt - Nhưng trước tiên chúng ta cần kiểm tra thanh ghi cấu hình được sử dụng để điều khiển các thuộc tính khác nhau và thanh ghi dữ liệu.

Bước 2: Đăng ký cấu hình

Lật trang 11 của bảng dữ liệu. Thanh ghi cấu hình có kích thước một byte và khi ADS1110 đặt lại theo chu kỳ nguồn - bạn cần đặt lại thanh ghi nếu nhu cầu của bạn khác với giá trị mặc định. Bảng dữ liệu giải thích nó khá gọn gàng… bit 0 và 1 xác định cài đặt độ lợi cho PGA (bộ khuếch đại độ lợi có thể lập trình).

Nếu bạn chỉ đang đo điện áp hoặc thử nghiệm, hãy để chúng bằng 0 để đạt được mức tăng 1V / V. Tiếp theo, tốc độ dữ liệu cho ADS1110 được kiểm soát với bit 2 và 3. Nếu bạn đã bật lấy mẫu liên tục, điều này sẽ xác định số lượng mẫu mỗi giây được ADC lấy.

Sau một số thử nghiệm với Arduino Uno, chúng tôi nhận thấy các giá trị trả về từ ADC hơi sai khi sử dụng tốc độ nhanh nhất, vì vậy hãy để nó là 15 SPS trừ khi có yêu cầu khác. Bit 4 đặt lấy mẫu liên tục (0) hoặc lấy mẫu một lần (1). Bỏ qua bit 5 và 6, tuy nhiên, chúng luôn được đặt là 0.

Cuối cùng là bit 7 - nếu bạn đang ở chế độ lấy mẫu một lần, hãy đặt nó thành 1 yêu cầu lấy mẫu - và việc đọc nó sẽ cho bạn biết dữ liệu trả về là mới (0) hay cũ (1). Bạn có thể kiểm tra xem giá trị được đo có phải là giá trị mới hay không - nếu bit đầu tiên của byte cấu hình đứng sau dữ liệu là 0, thì đó là giá trị mới. Nếu nó trả về 1 thì chuyển đổi ADC vẫn chưa kết thúc.

Bước 3: Đăng ký dữ liệu

Vì ADS1110 là ADC 16-bit, nó trả về dữ liệu trên hai byte - và sau đó là giá trị của thanh ghi cấu hình. Vì vậy, nếu bạn yêu cầu ba byte, toàn bộ lô sẽ quay trở lại. Dữ liệu ở dạng "hai phần bù", là một phương pháp sử dụng các số có dấu với số nhị phân.

Việc chuyển đổi hai byte đó được thực hiện bằng một số phép toán đơn giản. Khi lấy mẫu ở 15 SPS, giá trị được trả về bởi ADS1110 (không phải điện áp) rơi vào khoảng -32768 đến 32767. Byte cao hơn của giá trị được nhân với 256, sau đó được thêm vào byte thấp hơn - sau đó được nhân với 2.048 và cuối cùng chia cho 32768. Đừng hoảng sợ, vì chúng tôi làm điều này trong bản phác thảo ví dụ sắp tới.

Bước 4: Chế độ ADC một đầu

Chế độ ADC một đầu
Chế độ ADC một đầu

Trong chế độ này, bạn có thể đọc điện áp rơi vào khoảng từ 0 đến 2.048 V (cũng là điện áp tham chiếu có sẵn cho ADS1110). Mạch ví dụ rất đơn giản (từ bảng dữ liệu).

Đừng quên các điện trở kéo lên 10kΩ trên bus I2C. Bản phác thảo sau sử dụng ADS1110 ở chế độ mặc định và chỉ cần trả về điện áp đo được:

// Ví dụ 53.1 - Vôn kế một mặt ADS1110 (0 ~ 2.048VDC) #include "Wire.h" #define ads1110 Điện áp phao 0x48, dữ liệu; byte highbyte, lowbyte, configRegister; void setup () {Serial.begin (9600); Wire.begin (); } void loop () {Wire.requestFrom (ads1110, 3); while (Wire.available ()) // đảm bảo tất cả dữ liệu đều có trong {highbyte = Wire.read (); // byte cao * B11111111 lowbyte = Wire.read (); // byte thấp configRegister = Wire.read (); }

dữ liệu = highbyte * 256;

data = data + lowbyte; Serial.print ("Dữ liệu >>"); Serial.println (dữ liệu, DEC); Serial.print ("Điện áp >>"); điện áp = dữ liệu * 2.048; điện áp = điện áp / 32768.0; Serial.print (điện áp, DEC); Serial.println ("V"); chậm trễ (1000); }

Bước 5:

Hình ảnh
Hình ảnh

Sau khi tải lên, hãy kết nối tín hiệu để đo và mở màn hình nối tiếp - bạn sẽ thấy một thứ tương tự như hình ảnh màn hình nối tiếp được hiển thị trong bước này.

Nếu bạn cần thay đổi mức khuếch đại của bộ khuếch đại khuếch đại có thể lập trình bên trong của ADC - bạn sẽ cần ghi một byte mới vào thanh ghi cấu hình bằng cách sử dụng:

Wire.beginTransmission (ads1110); Wire.write (byte cấu hình); Wire.endTransmission ();

trước khi yêu cầu dữ liệu ADC. Đây sẽ là 0x8D, 0x8E hoặc 0x8F cho các giá trị khuếch đại tương ứng là 2, 4 và 8 - và sử dụng 0x8C để đặt lại ADS1110 về mặc định.

Bước 6: Chế độ ADC vi sai

Chế độ ADC vi sai
Chế độ ADC vi sai

Trong chế độ này, bạn có thể đọc sự khác biệt giữa hai điện áp mà mỗi điện áp rơi vào khoảng từ 0 đến 5 V. Mạch ví dụ rất đơn giản (từ bảng dữ liệu).

Chúng tôi phải lưu ý ở đây (và trong bảng dữ liệu) rằng ADS1110 không thể chấp nhận điện áp âm trên một trong hai đầu vào. Bạn có thể sử dụng bản phác thảo trước đó để có kết quả tương tự - và điện áp thu được sẽ là giá trị của Vin- trừ đi cho Vin +. Ví dụ, nếu bạn có 2 V trên Vin + và 1 V trên Vin- điện áp kết quả sẽ là 1 V (với mức tăng được đặt thành 1).

Một lần nữa, chúng tôi hy vọng bạn thấy điều này quan tâm và có thể hữu ích. Bài đăng này do pmdway.com mang đến cho bạn - mọi thứ dành cho các nhà sản xuất và những người đam mê điện tử, với giao hàng miễn phí trên toàn thế giới.

Đề xuất: