Chuyển đổi tương tự số( ADC):

Một phần của tài liệu Xây dựng hệ thống báo cháy và khóa điện tử (Trang 30)

VIII. Khối nguồn:

4. Chuyển đổi tương tự số( ADC):

4.1.ADC của của vi điều khiển Atmega32:

• Chip AVR ATmega32 của Atmel có tích hợp sẵn các bộ chuyển đổi ADC với độ phân giải 10 bit. Có tất cả 8 kênh đơn (các chân ADC0 đến ADC7), 16 tổ hợp chuyển đổi dạng so sánh, trong đó có 2 kênh so sánh có thể khuyếch đại. Bộ chuyển đổi ADC trên AVR không hoạt động theo nguyên lý flash ADC mà tôi đề cập ở phần trên, ADC trong AVR là loại chuyển đổi xấp xỉ lần lượt

(successive approximation ADC).

• ADC trên AVR cần được “nuôi” bằng nguồn điện áp riêng ở chân AVCC, giá trị điện áp cấp cho AVCC không được khác nguồn nuôi chip (VCC) quá +/-0.3V. Nhiễu (noise) là vấn đề rất quan trọng khi sử dụng các bộ ADC, để giảm thiểu sai số chuyển đổi do nhiễu, nguồn cấp cho ADC cần phải được “lọc” (filter) kỹ càng.

• Điện áp tham chiếu cho ADC trên AVR có thể được tạo bởi 3 nguồn: dùng điện áp tham chiếu nội 2.56V (cố định), dùng điện áp AVCC hoặc điện áp ngoài đặt trên chân VREF. Một lần nữa, bạn cần chú ý đến noise khi đặt điện áp tham chiếu, nếu dùng điện áp ngoài đặt trên chân VREF thì điện áp này phải được lọc thật tốt, nếu dùng điện áp tham chiếu nội 2.56V hoặc AVCC thì chân VREF cần được nối với một tụ điện. Việc chọn điện áp tham chiếu sẽ được đề cập chi tiết trong phần sử dụng ADC. Các chân trên PORTA của chip ATmega32 được dùng cho bộ ADC, chân PA0 tương ứng kênh ADC0 và chân PA7 tương ứng với kênh ADC7.

Từ hàm truyền trên ta có : U=t.K Trong đó : t là nhiệt độ môi trường/

K là điện áp đầu ra LM35 : 10mV/đô

U=t*10mV/oC Có ADC=10 bit : 1023

Dải đo 0-5 V;

Bước thay đổi 2560/1024=2.5

Giá trị ADC đo được từ điện áp đầu vào ADC = U/n =(t*10mV)/2.5

Giá trị nhiệt độ đo được t =(ADC*2.5)/10 Sai số :

tại 0 độ thì đầu ra LM35 là 10mV tại 150 độ thì đẩu ra LM35 là 1500mV dải điện áp biến đổi là 1.5-0.01= 1.49

ADC 10 bit nên bước biến đổi của ADC là n=2.5mV Vậy sai số của hệ thông là 2.5mV / 1.49 = 1.67 %

4.3.Chương trình:

#define AREF_MODE 0 Điện áp tham chiếu ngoài chấn Vref

#define AVCC_MODE (1<<REFS0) Dùng điện áp chân AVcc làm điện áp tham chiếu, chân Vref gắn với một tụ điện

#define INT_MODE (1<<REFS1)|(1<<REFS0) dùng điện áp tham chiếu nội 2.56 V

#define ADC_VREF_TYPE AREF_MODE Định nghĩa điện áp tham chiếu uint16_t ADC_val; khai báo biến chưa giá trị chuyển đổi từ ADC

uint16_t read_adc(unsigned char adc_channel) {//Chương trình con đọc ADC theo từng kênh ADMUX=adc_channel|ADC_VREF_TYPE;

ADCSRA|=(1<<ADSC); bắt đầu chuyển đổi loop_until_bit_is_set(ADCSRA,ADIF); //cho đến khi nào bit ADIF==1 return ADCW;

ADC_val=read_adc(0); Đọc tín hiệu từ ADC (0)đọc giá trị ADC ở kênh 0 bằng cách gọi chương trình con “read_adc(0)”

LED7_out(ADC_val);” sau đó hiển thị ra LED 7 đoạn ở dòng 40

_delay_ms(100); cuối cùng là delay 1 khoảng thời gian nhỏ (100ms) trước khi lặp lại quá trình đọc và hiển thị.

Một phần của tài liệu Xây dựng hệ thống báo cháy và khóa điện tử (Trang 30)

Tải bản đầy đủ (DOCX)

(59 trang)
w