ADC Trong Vi Điều Khiển AVR Atmega16 / 32 - CodeVisionAVR

Giới thiệu

ADC (Bộ chuyển đổi tương tự sang kỹ thuật số) là thiết bị được sử dụng rộng rãi nhất trong các hệ thống nhúng được thiết kế đặc biệt để thu thập dữ liệu. Trong dòng AVR ATmega thông thường ADC 10-bit được tích hợp sẵn trong bộ điều khiển.

ATmega16 / 32 hỗ trợ tám kênh ADC, có nghĩa là chúng ta có thể kết nối tám đầu vào tương tự cùng một lúc. ADC kênh 0 đến kênh 7 có trên PORTA. tức là Pin số 33 đến 40.

Chân ADC của ATmega 16/32

Bộ điều khiển có ADC 10 bit, có nghĩa là chúng ta sẽ nhận được đầu ra kỹ thuật số 0 đến 1023.

Tức là khi đầu vào là 0V, đầu ra kỹ thuật số sẽ là 0V và khi đầu vào là 5V (và Vref = 5V), chúng ta sẽ nhận được đầu ra kỹ thuật số cao nhất tương ứng với 1023 bước, đó là 5V

Vì vậy bộ điều khiển ADC có 1023 bước và

  • Step size with Vref=5V :  5/1023 = 4.88 mV. 
  • Step size with Vref=2.56 :  2.56/1023 = 2.5 mV.

Vì vậy đầu ra dữ liệu Digital sẽ là D out = Vin / Step size.

ATmega16 / 32 ADC

  • ADC 10-bit
  • Dữ liệu nhị phân đầu ra được chuyển đổi được giữ trong hai chức năng đặc biệt thanh ghi 8-bit ADCL (kết quả Thấp) và ADCH (kết quả Cao).
  • ADC cho đầu ra 10 bit, vì vậy (ADCH: ADCL) chỉ có 10 bit là hữu ích trong số 16 bit.
  • Chúng ta có các tùy chọn để sử dụng 10 bit này làm bit trên hoặc bit dưới.
  • Chúng ta cũng có ba tùy chọn cho Vref. 1. AVcc (analog Vcc), 2. Internal 2.56 v3. External Aref. Pin.
  • Tổng thời gian chuyển đổi phụ thuộc vào tần số thạch anh và ADPS0: 2 (bộ kiểm soát tần số)
  • Nếu bạn quyết định sử dụng chân AVcc hoặc Vref làm tham chiếu điện áp ADC, bạn có thể làm cho nó ổn định hơn và tăng độ chính xác của ADC bằng cách kết nối tụ điện giữa chân đó và GND.

Thanh ghi ADC

Trong AVR ADC, chúng ta cần hiểu bốn thanh ghi chính:

  1. ADCH: Lưu trữ dữ liệu được chuyển đổi kỹ thuật số byte cao hơn
  2. ADCL: Lưu trữ dữ liệu được chuyển đổi kỹ thuật số byte thấp hơn
  3. ADMUX: Thanh ghi lựa chọn Bộ ghép kênh ADC
  4. ADCSRA: Thanh ghi trạng thái và điều khiển ADC

ADCH: thanh ghi ADCL

Đầu tiên, hai thanh ghi giữ dữ liệu được chuyển đổi kỹ thuật số, là 10-bit.

Thanh ghi  ADMUX

Bit 7: 6 - REFS1: 0: Các bit lựa chọn tham chiếu

Lựa chọn điện áp tham chiếu cho ADC

REFS1

REFS0

Vref to ADC

0

0

AREF internal Vref turned off

0

1

AVCC with external capacitor at AREF pin

1

0

Reserved

1

1

Internal 2.56V Voltage reference with external capacitor at AREF pin

Bit 5 - ADLAR: ADC Left Adjust Result

Sử dụng đầu ra 10 bit làm bit trên hoặc bit dưới trong ADCH & ADCL.

Bit 4: 0 - MUX4: 0:  Analog Channel and Gain Selection Bits

Chúng ta có thể chọn kênh đầu vào ADC0 đến ADC7 bằng cách sử dụng các bit này. Các bit này cũng được sử dụng để chọn đầu vào so sánh (có sẵn trong AVR) với nhiều độ lợi khác nhau. Chúng tôi sẽ đề cập đến các hoạt động so sánh này trong phần khác.

  • Chọn kênh rất dễ dàng, chỉ cần đặt số kênh trong MUX4: 0.
  • Giả sử bạn đang kết nối đầu vào với kênh ADC 2 sau đó đặt 00010 trong MUX4: 0.
  • Giả sử bạn đang kết nối đầu vào với kênh ADC 5 sau đó đặt 00101 trong MUX4: 0.

Thanh ghi ADCSRA: Thanh ghi điều khiển và đọc trạng thái hệ số chia xung nhịp ADC

  • Bit 7 - ADEN: Kích hoạt ADC

Ghi 1 vào bit này sẽ kích hoạt ADC. Bằng cách ghi nó thành 0, ADC sẽ bị tắt. Tắt ADC trong khi đang tiến hành chuyển đổi sẽ chấm dứt chuyển đổi này.

  • Bit 6 - ADSC: Bắt đầu chuyển đổi ADC

Ghi 1 vào bit này bắt đầu chuyển đổi.

  • Bit 5 - ADATE: Kích hoạt ADC Auto Trigger

Ghi 1 vào bit này, kết quả là Tự động kích hoạt ADC được bật.

  • Bit 4 - ADIF: Cờ ngắt ADC

Bit này được đặt khi quá trình chuyển đổi ADC hoàn tất và các thanh ghi dữ liệu được cập nhật.

  • Bit 3 - ADIE: Bật ngắt ADC

Ghi 1 vào bit này, Ngắt Hoàn thành Chuyển đổi ADC được kích hoạt.

  • Bit 2: 0 - ADPS2: 0: ADC Prescaler Select Bits

Các bit này xác định hệ số phân chia giữa tần số XTAL và xung nhịp đầu vào ADC

Chúng ta có thể chọn bất kỳ số chia nào và đặt tần số Fosc / 2, Fosc / 4, v.v. cho ADC, Nhưng trong AVR, ADC yêu cầu tần số xung nhịp đầu vào nhỏ hơn 200KHz để tối đa sự chính xác. Vì vậy, chúng ta phải luôn chú ý đến tần số ADC không vượt quá 200KHz.

Giả sử tần số xung nhịp của AVR là 8MHz, thì chúng ta phải sử dụng devision 64 hoặc 128. Bởi vì 8MHz / 64 = 125KHz, nhỏ hơn 200KHz.

Điện áp tham chiếu AVCC

  • Điện áp tham chiếu là giá trị lón nhất mà bộ ADC có thể chuyển đổi
  • Bộ ADC có độ phân giải 10bit tức là có 1024 giá trị và giá trị lớn nhất là 1023
  • Giả sử điện áp ngõ vào là 2V điện áp tham chiếu là 5V thì gía trị thu được sau khi chuyển đổi sẽ là 1023*Vin/5 =409

Các bước lập trình ADC

  1. Đặt chân kênh ADC làm đầu vào.
  2. Đặt bit cho phép ADC trong ADCSRA, chọn tốc độ chuyển đổi bằng cách sử dụng ADPS2: 0. Ví dụ, chúng tôi sẽ chọn devisor 128.
  3. Chọn điện áp tham chiếu ADC bằng cách sử dụng REFS1: REFS0 trong thanh ghi ADMUX, ví dụ, chúng tôi sẽ sử dụng AVcc làm điện áp tham chiếu.
  4. Chọn kênh đầu vào ADC bằng MUX4: 0 trong ADMUX, ví dụ, chúng tôi sẽ sử dụng kênh 0.
  5. Vì vậy, giá trị của chúng tôi trong thanh ghi ADCSRA = 0x87 ADMUX = 0x40.
  6. Bắt đầu chuyển đổi bằng cách đặt ADSC bit trong ADCSRA. Eg ADCSRA | = (1 << ADSC);
  7. Chờ quá trình chuyển đổi hoàn tất bằng cách thăm dò bit ADIF trong thanh ghi ADCSRA.
  8. Sau khi bit ADIF tăng cao, đọc thanh ghi ADCL ADCH để nhận đầu ra kỹ thuật số.
  9. Lưu ý rằng đọc ADCL trước ADCH; nếu không kết quả sẽ không hợp lệ.

Nhận xét

Mới hơn Cũ hơn