1. Trang chủ
  2. » Tất cả

Bai giang ADC

9 3 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 9
Dung lượng 226,52 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Ví dụ: Nếu VREF+=5volt, VREF-=0volt thì khi thực hiện biến đổi ta sẽ có giá trị số tương ứng với các giá trị điện áp tương tự như sau: Điện áp tương tự đầu vào Giá trị số đầu ra Ghi chú

Trang 1

Bộ biến đổi tương tự - số (Analog - Digital Converter: ADC)

Nội dung:

- Giới thiệu về ADC

- ADC trên PIC18F4520

- Lập trình biến đổi điện áp tương tự

1 Giới thiệu về ADC

Xem mục 1.1.1 trong giáo trình Tham khảo thêm:

https://voer.edu.vn/m/chuyen-doi-tuong-tu-so-adc-analog-digital-converter/d8fd4bc1

2 ADC trên PIC18F4520

Xem mục 6.1.2 trong giáo trình

Các vấn đề cần ghi nhớ:

- PIC18F4520 có 01 bộ ADC với 13 kênh (tại 1 thời điểm chỉ biến đổi được điện áp tương tự

từ 1 kênh)

- ADC trên PIC18F4520 có độ phân giải là 10bit, nghĩa là giá trị số ở đầu ra của ADC là một

số nguyên có giá trị từ 0 đến 1023

Ví dụ: Nếu VREF+=5(volt), VREF-=0(volt) thì khi thực hiện biến đổi ta sẽ có giá trị số tương ứng với các giá trị điện áp tương tự như sau:

Điện áp tương tự (đầu vào) Giá trị số (đầu ra) Ghi chú

Trong trường hợp cụ thể này, nếu đọc được từ ADC một giá trị số là x thì điện áp tương tự ở đầu vào sẽ là 5∗x

1023 (volt)

3 Lập trình biến đổi tương tự - số

Có 2 cách lập trình biến đổi tương tự - số bao gồm:

- Lập trình sử dụng thanh ghi (xem mục 7.3.3 trong giáo trình):

- Lập trình sử dụng các hàm trong thư viện pwm.h (xem mục 6.4 trong tài liệu tra cứu PIC) Cách này đơn giản hơn

Lưu ý:

Hàm OpenADC gồm 03 đối số (c onfig, config2 và portconfig) Các đối số

config, config2 được kết hợp bởi nhiều tham số bằng toán tử &

Ví dụ:

(1) Lựa chọn lần lượt 3 tham số của đối số config (trang 57) ta sẽ được:

Trang 2

ADC_FOSC_2 & ADC_RIGHT_JUST & ADC_0_TAD

(2) Lựa chọn lần lượt 4 tham số của đối số config2 (trang 58) ta sẽ được:

ADC_CH0 & ADC_INT_OFF & ADC_VREFPLUS_VDD & ADC_VREFMINUS_VSS

(3) Đối số portconfig cần phải chọn theo tham số ADC_CH0 nên sẽ là 14

(hệ thập phân) hoặc 00001110 (hệ nhị phân) hoặc 0x0E (hệ hexa)

Cuối cùng hàm OpenADC được viết như sau:

OpenADC (

ADC_FOSC_2 & ADC_RIGHT_JUST & ADC_0_TAD,

ADC_CH0 & ADC_INT_OFF & ADC_VREFPLUS_VDD & ADC_VREFMINUS_VSS, 14);

3.1 Các bước lập trình với ADC:

(1) Copy khung chương trình (không sử dụng ngắt), thêm #include<adc.h>

(2) Xác định các chân vào ra và viết lệnh với TRIS, ADCON1

(3) Lựa chọn các tham số và viết hàm OpenADC

TIPS: Gõ từ khóa OpenADC để tìm hàm này trong “Tài liệu tra cứu PIC”; giá trị của

portconfig là giá trị khởi tạo cho ADCON1

(4) Viết các lệnh đọc giá trị số từ ADC, bao gồm:

ConvertADC(); // ra lệnh biến đổi

while(BusyADC()); // chờ biến đổi xong

x=ReadADC(); // Đọc giá trị số lưu vào biến x (x là biến kiểu unsigned int)

(5) Viết các lệnh theo yêu cầu đề bài

3.2 Ví dụ:

Vẽ, lắp ráp mạch điện và lập trình theo yêu cầu:

a Vẽ, lắp ráp mạch điện như sau:

- Sử dụng biến trở để tạo điện áp 0 đến 5V nối với

chân AN0.

- LED1-LED8 nối lần lượt với các chân RD0:RD7;

I/O pin

VR

10k

5V

R

560

LED

+88.8

Volts

b Vẽ lưu đồ thuật toán và viết chương trình theo yêu cầu như sau:

- Đọc giá trị số biến đổi được từ điện áp trên kênh AN0 và hiển thị dưới dạng số nhị phân trên LED1-LED10 LED sáng tương ứng bit “1”, LED tắt tương ứng bit “0”; bit có trọng số lớn nhất (D9) tương ứng LED10, bit có trọng số nhỏ nhất (D0) tương ứng LED1.

Trang 3

B1: Copy khung chương trình (không sử dụng ngắt), thêm #include<adc.h>

B2: Xác định các chân vào ra và viết lệnh với TRIS, ADCON1:

Chân AN0/RA0: Chiều vào, dạng tín hiệu: tương tự; Các chân RD0-RD7, RC0-RC1: Chiều

ra, dạng tín hiệu: số

TRISA=0xFF; // AN0/RA0: vào

TRISC=0x00; //RC0, RC1: ra

TRISD=0x00; //RD0-RD7: ra

ADCON1=0x0e; // AN0: tương tự, AN1-AN12: số

B3: Lựa chọn các tham số và viết hàm OpenADC:

Đề bài yêu cầu biến đổi điện áp trong dải từ 0 – 5V trên chân AN0 nên cần chọn:

OpenADC (

ADC_FOSC_2 & ADC_RIGHT_JUST & ADC_0_TAD,

ADC_CH0 & ADC_INT_OFF & ADC_VREFPLUS_VDD & ADC_VREFMINUS_VSS, 14);

B4: Viết các lệnh đọc giá trị số từ ADC:

Trang 4

ConvertADC(); // ra lệnh biến đổi

while(BusyADC()); // chờ biến đổi xong

x=ReadADC(); // Đọc giá trị số lưu vào biến x (x là biến kiểu unsigned int)

B5: Viết các lệnh theo yêu cầu đề bài:

Biến x gồm 16 bit, trong đó có 10 bit phía phải chứa giá trị số đọc được từ ADC (do hàm OpenADC chọn tham số ADC_RIGHT_JUST):

D1

Không sử dụng Chứa giá trị số đọc từ hàm ReadADC()

Để hiển thị theo yêu cầu đề bài cần:

- Xóa đi các bit không sử dụng bằng lệnh:

x=x & 0b0000001111111111;

- Lấy các bit D0-D7 hiển thị trên các LED1-LED8 ở RD0-RD7 bằng lệnh:

PORTD=x % 256;

- Lấy các bit D8-D9 hiển thị trên các LED9-LED10 ở RC0-RC1 bằng lệnh:

PORTD=x / 256;

Chương trình đầy đủ như sau:

// B1 Viet khung CT vi dieu khien PIC

#include<p18f4520.h>

#include<delays.h>

#include<adc.h>

#pragma config OSC = HS

#pragma config LVP = OFF

#pragma config MCLRE = ON

#pragma config WDT = OFF

// chuong trinh con

unsigned int x;

void main (void)

{

// B2 Vao ra

TRISA=0xff;

TRISC=0x00;

TRISD=0x00;

ADCON1=0x0e; // AN0 - tuong tu

// B3 Cau hinh ADC

OpenADC (

ADC_FOSC_2 & ADC_RIGHT_JUST & ADC_0_TAD,

ADC_CH0 & ADC_INT_OFF & ADC_VREFPLUS_VDD & ADC_VREFMINUS_VSS, 14);

Trang 5

{

// B4 Doc ADC ConvertADC(); // ra lenh bien doi while(BusyADC()); // cho bien doi xong x=ReadADC();

// B5

x=x&0b0000001111111111;

PORTD=x%256;

PORTC=x/256;

}

}

Vẽ mạch mô phỏng:

Lấy biến trở:

Lấy voltmeter:

Trang 6

Kết quả mô phỏng:

- Khi điện áp là 5V: Giá trị số biến đổi được sẽ là 1023=0b1111111111 Các LED trên các chân RD0-RD7 và RC0, RC1 sáng

RA0/AN0/C1IN-2

RA1/AN1/C2IN-3

RA2/AN2/C2IN+/VREF-/CVREF 4

RA3/AN3/C1IN+/VREF+

5 RA4/T0CKI/C1OUT 6

RA5/AN4/SS/HLVDIN/C2OUT 7

RA6/OSC2/CLKO 14

RA7/OSC1/CLKI 13

RB0/AN12/FLT0/INT0 33

RB1/AN10/INT1 34

RB2/AN8/INT2 35

RB3/AN9/CCP2A 36

RB4/KBI0/AN11 37

RB5/KBI1/PGM 38

RB6/KBI2/PGC 39

RB7/KBI3/PGD 40

RC0/T1OSO/T13CKI 15 RC1/T1OSI/CCP2B 16 RC2/CCP1/P1A 17 RC3/SCK/SCL 18 RC4/SDI/SDA 23 RC5/SDO 24 RC6/TX/CK 25 RC7/RX/DT 26 RD0/PSP0 19 RD1/PSP1 20 RD2/PSP2 21 RD3/PSP3 22 RD4/PSP4 27 RD5/PSP5/P1B 28 RD6/PSP6/P1C 29 RD7/PSP7/P1D 30 RE0/RD/AN5 8 RE1/WR/AN6 9 RE2/CS/AN7 10 RE3/MCLR/VPP 1

U1

PIC18F4520

RV1

1k

Volts

+5.00

Trang 7

- RA0/AN0/C1IN-2

RA1/AN1/C2IN-3

RA2/AN2/C2IN+/VREF-/CVREF 4

RA3/AN3/C1IN+/VREF+

5 RA4/T0CKI/C1OUT 6

RA5/AN4/SS/HLVDIN/C2OUT 7

RA6/OSC2/CLKO 14

RA7/OSC1/CLKI 13

RB0/AN12/FLT0/INT0 33

RB1/AN10/INT1 34

RB2/AN8/INT2 35

RB3/AN9/CCP2A 36

RB4/KBI0/AN11 37

RB5/KBI1/PGM 38

RB6/KBI2/PGC 39

RB7/KBI3/PGD 40

U1

PIC18F4520

RV1

1k

Volts

+3.20

- RA0/AN0/C1IN-2

RA1/AN1/C2IN-3

RA2/AN2/C2IN+/VREF-/CVREF 4

RA3/AN3/C1IN+/VREF+

5 RA4/T0CKI/C1OUT 6

RA5/AN4/SS/HLVDIN/C2OUT 7

RA6/OSC2/CLKO 14

RA7/OSC1/CLKI 13

RB0/AN12/FLT0/INT0 33

RB1/AN10/INT1 34

RB2/AN8/INT2 35

RB3/AN9/CCP2A 36

RB4/KBI0/AN11 37

RB5/KBI1/PGM 38

RB6/KBI2/PGC 39

RB7/KBI3/PGD 40

RC0/T1OSO/T13CKI 15 RC1/T1OSI/CCP2B 16 RC2/CCP1/P1A 17 RC3/SCK/SCL 18 RC4/SDI/SDA 23 RC5/SDO 24 RC6/TX/CK 25 RC7/RX/DT 26 RD0/PSP0 19 RD1/PSP1 20 RD2/PSP2 21 RD3/PSP3 22 RD4/PSP4 27 RD5/PSP5/P1B 28 RD6/PSP6/P1C 29 RD7/PSP7/P1D 30 RE0/RD/AN5 8 RE1/WR/AN6 9 RE2/CS/AN7 10 RE3/MCLR/VPP 1

U1

PIC18F4520

RV1

1k

Volts

0.00

4 Bài tập

Câu 1 Vẽ, lắp ráp mạch điện và lập trình theo yêu cầu:

Trang 8

a Vẽ, lắp ráp mạch điện như sau:

- Sử dụng biến trở để tạo điện áp 0 đến 5V nối với

chân AN1.

- LED1-LED8 nối lần lượt với các chân RD0:RD7;

LED9-LED10 nối lần lượt với các chân RC0-RC1; LED11 nối

với RE1.

ANx

I/O pin

VR

10k

5V

R

560

LED

+88.8

Volts

b Vẽ lưu đồ thuật toán và viết chương trình theo yêu cầu như sau:

- Đọc giá trị số biến đổi được từ điện áp trên kênh AN1 và hiển thị dưới dạng số nhị phân trên LED1-LED10 LED sáng tương ứng bit “1”, LED tắt tương ứng bit “0”; bit có trọng số lớn nhất (D9) tương ứng LED10, bit có trọng số nhỏ nhất (D0) tương ứng LED1.

- LED11 sáng khi điện áp trên AN1 lớn hơn hoặc bằng 3V, tắt khi điện áp trên AN1 nhỏ hơn 3V

Trang 9

Thời hạn và hình thức nộp bài:

- Thời hạn: 23h59, thứ 5, ngày 2/4/2020

- Hình thức:

+ File word có tên theo thứ tự như sau: 3 số cuối mã SV_ Họ_Tên đệm_Tên

Ví dụ: 631_Chu_Quoc_An.docx.

+ Nội dung trong file word bao gồm: code (mã nguồn), 04 ảnh chụp kết quả mô phỏng gồm:

(1) Ảnh chụp khi điện áp trên AN1 là 0V, khi đó LED1-LED11 tắt

(2) Ảnh chụp khi điện áp trên AN1 là 2V, khi đó LED11 tắt, các LED1-LED10 sáng/tắt tương ứng giá trị số đọc được

(3) Ảnh chụp khi điện áp trên AN1 là 4V, khi đó LED11 sáng, các LED1-LED10 sáng/tắt tương ứng giá trị số đọc được

(4) Ảnh chụp khi điện áp trên AN1 là 5V, khi đó LED1-LED11 sáng.

Chú ý: Dùng phím mũi tên lên/xuống để điều chỉnh giá trị của biến trở cho đến khi có được điện áp mong muốn Các ảnh chụp cần hiển thị cả taskbar (có ngày giờ).

Nộp bài bằng cách: Vào “Bài tập trên lớp”, chọn “Biến đổi tương tự số - ADC”, nhấn “+ Thêm hoặc tạo”, chọn , chọn file word vừa làm xong, nhấn nút “Nộp”.

Các trường hợp nộp bài vào mục “Nhận xét” sẽ không được tính.

Ngày đăng: 24/04/2020, 18:02

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w