You are on page 1of 9

Chương 5: BỘ CHUYỂN ĐỔI TƯƠNG TỰ SỐ (6 tiết)

5.1. Khái niệm về bộ chuyển đổi tương tự số (ADC)


Tín hiệu là một tập thông tin hay dữ liệu. Định nghĩa tín hiệu thường dùng trong điện tử thì
tín hiệu là một hàm của biến thời gian trong đó biến thời gian là biến độc lập. Kết quả của hàm
có thứ nguyên là điện áp (V), dòng điện (I), tần số (f),…
Tín hiệu tương tự (analog) là tín hiệu có biên độ liên tục, tức là có thể nhận một giá trị bất
kỳ trong một khoảng nào đó. Tín hiệu số (digital) là tín hiệu có biên độ rời rạc, tức là chỉ nhận
m giá trị trong đó m là một số hữu hạn. Tín hiệu tương tự được xem là tín hiệu của thế giới
thực, tức là tín hiệu lấy được từ các cảm biến còn tín hiệu số được xem như là tín hiệu của vi
xử lý dùng để tính toán lưu trữ

Trong các ứng dụng đo lường và điều khiển bằng vi điều khiển bộ chuyển đổi tương tự-số
(ADC) là một thành phần rất quan trọng. Dữ liệu trong thế giới của chúng ta là các dữ liệu
tương tự (analog). Ví dụ nhiệt độ không khí buổi sáng là 26oC và buổi trưa là 32oC, giữa hai
mức giá trị này có vô số các giá trị liên tục mà nhiệt độ phải “đi qua” có thể là 30.12oC, đại
lượng nhiệt độ như thế gọi là một đại lượng tương tự. Trong khi đó, rõ ràng vi điều khiển là
một thiết bị số (digital), các giá trị mà một vi điều khiển có thể thao tác là các con số rời rạc vì
thực chất chúng được tạo thành từ sự kết hợp của hai mức 0 và 1. Ví dụ chúng ta muốn dùng
một thanh ghi 8 bit trong vi điều khiển để lưu lại các giá trị nhiệt độ từ 0oC đến 100oC, như
chúng ta đã biết, một thanh ghi 8 bit có thể chứa tối đa 256 (28) giá trị nguyên từ 0 đến 255,
như thế các mức nhiệt độ không nguyên như 30.12oC sẽ không được ghi lại. Nói cách khác,
chúng ta đã “số hóa” (digitalize) một dữ liệu analog thành một dữ liệu digital. Quá trình “số
hóa” này thường được thực hiện bởi một thiết bị gọi là “bộ chuyển đổi tương tự - số hay đơn
giản là ADC (Analog to Digital Converter).
Có rất nhiều phương pháp chuyển đổi ADC khác nhau nhưng cùng bản chất. Phương pháp
dể hình dung nhất là phương pháp chuyển đổi trực tiếp. Các bộ chuyển đổi ADC theo phương
pháp này được cấu thành từ một dãy các bộ so sánh (opamp), các bộ so sánh được mắc song
song và được kết nối trực tiếp với tín hiệu analog cần chuyển đổi. Một điện áp tham chiếu
(reference) và một mạch chia áp được sử dụng để tạo ra các mức điện áp so sánh khác nhau
cho mỗi bộ so sánh

Vo4

Vo3

Vin

Vo2

Vo1

Vo4 Vo3 Vo2 Vo1 Giá trị nhị phân Giá trị thập phân
0 0 0 0 000 0
0 0 0 1 0001 1
0 0 1 1 010 2
0 1 1 1 011 3
1 1 1 1 100 4

Nếu mạch điện có 4 bộ so sánh, ngõ ra digital sẽ có 5 mức giá trị. Tương tự nếu mạch điện
có 7 bộ so sánh thì sẽ có 8 mức giá trị có thể ở ngõ ra digital, khoảng cách giữa các mức tín
hiệu trong trường hợp 8 mức sẽ nhỏ hơn trường hợp 4 mức. Nói cách khác, mạch chuyển đổi
với 7 bộ so sánh có giá trị digital ngõ ra “mịn” hơn khi chỉ có 4 bộ, độ “mịn” càng cao tức độ
phân giải (resolution) càng lớn.
Độ phân giải được dùng để chỉ số bit cần thiết để chứa hết các mức giá trị digital ngõ ra.
Trong trường hợp có 8 mức giá trị ngõ ra, chúng ta cần 3 bit nhị phân để mã hóa hết các giá trị
này, vì thế mạch chuyển đổi ADC với 7 bộ so sánh sẽ có độ phân giải là 3 bit. Một cách tổng
quát, nếu một mạch chuyển đổi ADC có độ phân giải n bit thì sẽ có 2n mức giá trị có thể có ở
ngõ ra digital.

Để tạo ra một mạch chuyển đổi ADC có độ phân giải n bit, chúng ta cần đến 2n-1 bộ so
sánh. Độ phân giải liên quan mật thiết đến chất lượng chuyển đổi ADC, việc lựa chọn độ phân
giải phải phù hợp với độ chính xác yêu cầu và khả năng xử lý của bộ điều khiển.
5.2. Sơ đồ khối ADC
ADC của PIC16F887 có khả năng chuyển đổi được 14 kênh ngõ vào, độ phân giải 10 bit,
kết quả 10 bit được lưu giữ trong 2 thanh ghi 8 bit là ADRESH và ADRESL

5.3. Cấu hình của ADC và các bit, thanh ghi liên quan
5.3.1. Cấu hình ngõ vào
ADC là bộ chuyển đổi tín hiệu tương tự, khi sử dụng chức năng này thì các kênh tương tự
ngõ vào không còn là I/O số nữa. Thiết lập chức năng tương tự bằng cách set ANS_bit tương
ứng, cấu hình tương tự là ngõ vào bằng cách set TRISxy tương ứng
0
Số

Chân có chức năng tương tự Tương tự


1
ANSx
5.3.2. Chọn kênh cần chuyển đổi
PIC16F887 có 14 kênh ngõ vào tương tự trên 1 bộ ADC và tại mỗi thời điểm chỉ chuyển đổi
được 1 kênh tín hiệu mà thôi. Muốn chọn kênh nào cần chuyển đổi phải can thiệp đến các bit
CHS<3:0> (Chanel Select) theo các giá trị tương ứng (trên sơ đồ khối ADC)
5.3.3. Chọn điện áp tham chiếu
Cùng một bộ chuyển đổi ADC nhưng có người muốn dùng cho các mức điện áp khác nhau,
ví dụ người A muốn chuyển đổi điện áp trong khoảng 1V đến 2V trong khi người B muốn
dùng cho điện áp từ 0V đến 5V. Rõ ràng nếu hai người này dùng 2 bộ chuyển đổi ADC đều có
khả năng chuyển đổi đến điện áp 5V thì người A đang “phí phạm” tính chính xác của thiết bị.
Vấn đề sẽ được giải quyết bằng một đại lượng gọi là điện áp tham chiếu Vref (reference
voltage).
Điện áp tham chiếu có 2 loại điện áp tham chiếu dương (Vref+, Vrefh) và điện áp tham
chiếu âm (Vref-, Vrefl). Điện áp tham chiếu dương là giá trị điện áp lớn nhất mà bộ ADC có
thể chuyển đổi, điện áp tham chiếu âm là giá trị điện áp nhỏ nhất mà bộ ADC có thể chuyển
đổi.
Ví dụ, một bộ ADC 10 bit (độ phân giải) có Vrefh=3V, có Vrefl=0V, nếu điện áp ở ngõ vào
là 1V thì giá trị số thu được sau khi chuyển đổi sẽ là: 1023x(1/3)=314. Trong đó 1023 là giá trị
lớn nhất mà một bộ ADC 10 bit có thể tạo ra (1023=210-1). Vì điện áp tham chiếu ảnh hưởng
đến độ chính xác của quá trình chuyển đổi, chúng ta cần tính toán để chọn 1 điện áp tham
chiếu phù hợp với khoảng đo
Ví dụ đo nhiệt độ dùng cảm biến LM35, cảm biến này cho ngõ ra từ 0 đến 1000mV tương
ứng từ 0 đến 100oC (10mV/oC). Nhưng thực tế nếu mang cảm biến này đo nhiệt độ môi trường
thì thường chỉ dao động từ 25 đến 40oC do đó nên chọn điện áp tham chiếu Vrefl là 0.25V,
Vrefh là 0.4V
PIC16F887 cung cấp 2 khả năng lựa chọn điện áp tham chiếu cho Vrel và Vrefh là có thể
chọn từ bên ngoài hoặc bên trong. Nếu chọn bên trong thì Vrefl là 0V, Vrefh là VDD (5V).
Nếu chọn bên ngoài, điện áp tham chiếu được đưa vào từ chân RA2 (Vrefl) và RA3 (Vrefh)
Các bit chọn điện áp tham chiếu:
- VCFG0_bit (Voltage Reference): bit chọn điện áp tham chiếu Vrefh là VDD (5V) nếu
bằng 0, từ chân RA3 nếu bằng 1
- VCFG1_bit (Voltage Reference): bit chọn điện áp tham chiếu Vrefl là VSS (0V) nếu bằng
0, từ chân RA2 nếu bằng 1
5.3.4. Định dạng kết quả chuyển đổi ADC
Kết quả chuyển đổi 10 bit được lưu trong 2 thanh ghi 8 bit ADRESH và ADRESL, tùy theo
cách định dạng mà kết quả được lưu theo cách canh trái hay canh phải

Kết quả 10 bit chuyển đổi Rỗng, kết quả đọc là 0

Rỗng, kết quả đọc là 0 Kết quả 10 bit chuyển đổi

Định dạng canh trái nếu cho ADFM_bit bằng 0, canh phải nếu cho ADFM_bit bằng 1. Kết
quả chuyển đổi là kết quả tổng hợp từ 2 byte trên. Để cho dễ tính toán, thường phép canh phải
được dùng, khi đó kết quả sẽ là ADRESH x 256 + ADRESL
5.4. Hoạt động chuyển đổi ADC
Hoạt động chuyển đổi ADC được thực hiện như sau: tín hiệu tương tự được đưa vào ngõ
vào bộ AD, bộ AD sẽ hoạt động chuyển đổi nếu được cho phép chuyển đổi, sau một thời gian
sẽ chuyển đổi xong và kết quả được lưu trong 2 thanh ghi theo như đã định dạng ở trên. Đọc
kết quả từ 2 thanh ghi ta có được kết quả chuyển đổi
Người lập trình có thể cấu hình và đọc kết quả chuyển đổi theo các bước sau:
*Cấu hình ban đầu:
- Cấu hình chân cần chuyển đổi là ngõ vào TRISxy, chọn chức năng tương tự ANSx
- Chọn điện áp tham chiếu VCFGx_bit
- Canh lề kết quả ADFM_bit
- Có thể hoặc không cấu hình ngắt chuyển đổi ADC (ADIF_bit, ADIE_bit)
- Cho phép cấp nguồn cho ADC (ADON_bit)
*Đọc kết quả:
- Chọn kênh cần chuyển đổi (CHS<3:0>
- Bật GO_DONE_bit để thực hiện quá trình chuyển đổi ADC
- Đợi cho đến khi chuyển đổi xong GO_DONE_bit sẽ tự động bị xóa, dựa trên tín hiệu này
để đọc kết quả từ 2 thanh ghi chứa kết quả. Hoặc nếu có sử dụng ngắt, khi GO_DONE_bit bị
xóa sẽ tự động bật cờ ngắt và kết quả sẽ được đọc ở chương trình ngắt
Ví dụ cấu hình và đọc kết quả ADC trên kênh AN0 (RA0)
void main() {
TRISA0_BIT=1;ANS0_BIT=1;
VCFG1_BIT=0;VCFG0_BIT=0;
ADFM_BIT=1;
ADON_BIT=1;
while(1){
CHS3_BIT=0;CHS2_BIT=0;CHS1_BIT=0;CHS0_BIT=0;
GO_DONE_BIT=1;
while(GO_DONE_BIT==1){}
kq= ADRESH x 256 + ADRESL;
}
}
5.5. Ngắt chuyển đổi ADC
Như cách chuyển đổi ở ví dụ trên, để đọc được kết quả chuyển đổi phải chờ 1 thời gian
trong lệnh while(GO_DONE_BIT==1){} cho đến khi GO_DONE_BIT=0 như vậy sẽ lãng phí
thời gian trong khi vòng lặp vô tận while(1) có thể còn và làm được nhiều việc phía sau nữa.
Nếu sử dụng ngắt để đọc kết quả sẽ tránh được sự lãng phí không mong muốn này.
5.6. Bài tập ứng dụng
5.6.1. Bài tập 1
Cho mạch điện kết nối vào AN1 như hình vẽ

Viết chương trình đọc kết quả và hiển thị chuyển đổi ADC ra PORTD và PORTC
5.6.2. Bài tập 2
Cho mạch điện kết nối vào AN1 như hình vẽ bài tập 1
Viết chương trình đọc kết quả và hiển thị chuyển đổi ADC ra LCD 16x2
5.6.3. Bài tập 3
Cho mạch điện kết nối vào AN1 như hình vẽ
Viết chương trình đọc kết quả và hiển thị chuyển đổi ADC trên kênh AN1 và AN8 ra LCD
16x2
5.6.4. Bài tập 4
Cho mạch điện kết nối vào AN1 như hình vẽ

Viết chương trình đọc kết quả chuyển đổi ADC và hiển thị giá trị điện áp đo được trên AN1
ra LCD 16x2
5.6.5. Bài tập 5
Cho mạch kết nối như hình, cảm biến cần đo có giá trị điện áp ra từ 0V đến 2.5V được đưa
vào chân RB3
Tìm điện áp tham chiếu Vrefl và Vrefh cho bộ chuyển đổi ADC
Lập trình đo giá trị điện áp trên chân RB3 và hiển thị ra LCD 16x2
5.6.6. Bài tập 6
Cho mạch kết nối như hình, cảm biến LM35 cần đo có giá trị điện áp ra từ 0V đến 1V tương
ứng nhiệt độ từ 0 đến 100oC được đưa vào chân RB5

Tìm điện áp tham chiếu Vrefl và Vrefh cho bộ chuyển đổi ADC
Lập trình đo và hiển thị nhiệt độ ra LCD 16x2
5.6.7. Bài tập 7
Cho mạch kết nối như hình, cảm biến LM35 cần đo có giá trị điện áp ra từ 0V đến 1V tương
ứng nhiệt độ từ 0 đến 100oC được đưa vào chân RB5. Yêu cầu lập trình đo khoảng nhiệt độ từ
20 đến 40 oC
Tìm điện áp tham chiếu Vrefl và Vrefh cho bộ chuyển đổi ADC
Lập trình đo và hiển thị nhiệt độ ra LCD 16x2
5.6.8. Bài tập 8
Cho mạch kết nối như hình, cảm biến LM35 cần đo có giá trị điện áp ra từ 0V đến 1V tương
ứng nhiệt độ từ 0 đến 100oC được đưa vào chân RB5, 1 cảm biến khác đo độ ẩm có điện áp ra
từ 0V đến 5V tương ứng độ ẩm từ 0%RH đến 100%RH được mắc vào RA0. Yêu cầu lập trình
đo khoảng nhiệt độ từ 20 đến 40 oC, đo độ ẩm từ 0%RH đến 100%RH

Tìm điện áp tham chiếu Vrefl và Vrefh cho bộ chuyển đổi ADC tương ứng mỗi cảm biến để
có kết quả đo chính xác nhất
Lập trình đo và hiển thị nhiệt độ và độ ẩm ra LCD 16x2

You might also like