You are on page 1of 35

1

Câu 1:
+ Giá trị đặt: 0-5 V
• Đặc điểm của vi điều khiển PIC16F877A là có các chân vào ra số và các chân
vào tương tự ADC. Do giá trị trị đặt là giá trị biến thiên tục trong khoảng 0-5 V
nên để có thể lấy thông tin về giá trị đặt vào chương trình điều khiển, ta sử dụng
chân đầu vào tương tự ADC của PIC16F877A
• Do ADC của PIC16F877A có thể chọn nhiều giá trị điện áp chuẩn (reference) là
0-5V, hoặc –Vref đến +Vref, nên để giao tiếp được với tín hiệu liên tục biến đổi
từ 0-5 V thì cần phải cấu hình ADC sao cho điện áp chuẩn là 0-5V.
• Cấu hình các chân ADC thích hợp: Chân vào ADC phải được chọn ở chế độ
INPUT. Cấu hình lựa chọn tần số lấy mẫu ADC phù hợp với bài toán điều khiển
(lưu ý chu kỳ nhỏ nhất để đọc 10 bit dữ liệu ADC là khoảng 20 micro giây).
+ Đo lường từ 0-5 V
• Cũng tương tự như với giá trị để có thông tin về giá trị đo lường trong khoảng
từ 0-5 V thì ta cũng sử dụng chân ADC của vi điều khiển
• Cấu hình ADC với điện áp trong khoảng 0-5 V.
• Cấu hình các chân ADC thích hợp: Chân vào ADC phải được chọn ở chế độ
INPUT. Cấu hình lựa chọn tần số lấy mẫu ADC phù hợp với bài toán điều khiển
(lưu ý chu kỳ nhỏ nhất để đọc 10 bit dữ liệu ADC là khoảng 20 micro giây)
• Chu kì ngắn nhất từ khi cấu hình đến khi hoàn tất đọc một word dữ liệu 10bit
trên một kênh ADC là 40 micro giây. Càng nhiều kênh ADC thì thời gian đọc
ADC sẽ tăng lên theo cấp số cộng.
+ Điều khiển trong khoảng 0-5 V
• Các chân vào ra số của vi điều khiển chỉ cho phép ở một trong 2 mức 0 hoặc 5
V. Để tạo ra tín hiệu ra liên tục trong khoảng 0-5 V ta phải sử dụng các bộ biến
đổi DAC. Vi điều khiển 16F877A không tích hợp module DAC, tuy nhiên ta có
thể tạo ra tín hiệu liên tục biến thiên trong khoảng 0-5 V sử dụng bộ CCP1 hoặc
CCP2 ở chế độ PWM và kết hợp với một bộ lọc thông thấp để tạo ra tín hiệu ra
liên tục.
• Tần số (quyết định bởi thanh ghi chu kỳ xung) đầu ra cần phải lớn hơn tần số cắt
của lọc của bộ lọc thông thấp , khi đó tín hiệu ra sẽ biến thiên liên tục trong
khoảng 0-5V: khi f > 1/(2πRC) thì
PWM

2
Với τ là độ rộng xung và T là chu kỳ xung (T > 2πRC)
Sơ đồ phần cứng : (1điểm)

Câu 2:
a. Sơ đồ nguyên lý mạch điều khiển

b.Tính toán và giải thích các linh kiện trong mạch

3
• Mỗi đèn led có giá trị áp định mức Udm=2,2V Idm=10mA. Vì vậy khi cấp
nguồn 5VDC trực tiếp cho LED thì LED sẽ hỏng vì vậy ta cần mắc nối tiếp
LED vơi một điện trở để đảm bảo điện áp định mức và dòng định mức cho
LED.
• Tính giá trị điện trở:
Ta có: UR=UN-Udm=5-2.2=2.8V. IR=Idm=10mA.
Trong đó: UR:điện áp đặt lên điện trở
UN:điện áp nguồn giá trị 5VDC.

Áp dụng định luật ohm:


R=UR/IR=2.8/(10x10-3)=280Ω.
• Trên mạch có sử dụng một oxilocope để hiện thị xung đầu ra.
• Cụm linh kiện nối vào chân MCLR có tác dụng tạo ra xung clock để cho VĐK
hoạt động
c.Viết chương trình điều khiển

#include <xc.h>
#include <pic.h>
#include <pic16f887.h>
#include<stdio.h>
#include<stdlib.h>
#pragma config FOSC = HS
#pragma config WDTE = OFF
#pragma config PWRTE = OFF
#pragma config CP = OFF
#pragma config CPD = OFF
#pragma config BOREN = OFF
#pragma config LVP = OFF
#pragma config WRT = OFF
#define _XTAL_FREQ 20000000
void main()
{
TRISDbits.TRISD0=0; // Chan RD0 la dau ra
PORTDbits.RD0=1; // Chan RD0 o muc cao
TRISDbits.TRISD1=0; // Chan RD1 la dau ra
PORTDbits.RD1=1; // Chan RD1 o muc cao
// Vong lap vo tan
while(1)
{
PORTDbits.RD0=1;

4
PORTDbits.RD1=1;
__delay_ms(250);
PORTDbits.RD0=0;
PORTDbits.RD1=0;
__delay_ms(250);
PORTDbits.RD0=0;
PORTDbits.RD1=1;
__delay_ms(250);
PORTDbits.RD0=1;
PORTDbits.RD1=0;
__delay_ms(250);
PORTDbits.RD0=1;
PORTDbits.RD1=1;
}
Câu 3:
a. Sơ đồ nguyên lý

b) Giải thích kinh kiện có trong mạch

-Cảm biến nhiệt độ LM35 đọc nhiệt độ

-Biến trở nối vào chân VEE có tác dụng điều chỉnh độ sáng của LCD

-Màn hình LCD LM016 có tác dụng hiện thị thông tin về nhiệt độ

-Transitor có tác dụng cấp tín hiệu đóng cuộn hút Relay RL1

5
-OPAMcó tác dụng khuếch đại tín hiệu

- 2 tụ nối ở 2 chân thạch anh ở các chip vi xử lý dùng để hỗ trợ mạch dao động bên trong pic

- Thạch anh dùng để tạo tần số dao động ổn định cho pic

-Cụm linh kiện nối với chân MCRL có tác dụng tạo xung clock cấp cho vi điều khiển hoạt động

c) code

#include <pic.h>
#include <pic16f877a.h>
#include <xc.h>
#include <stdio.h>
#include <stdlib.h>// khai bao thu vien
#include"lcd.h" // Tạo thư viện lcd
#define _XTAL_FREQ 20000000// khai báo thach anh
#define RS RD2
#define EN RD3
#define D4 RD4
#define D5 RD5
#define D6 RD6
#define D7 RD7 // khai báo chân lcd
#pragma config FOSC = HS
#pragma config WDTE = OFF
#pragma config PWRTE = OFF
#pragma config BOREN = OFF
#pragma config LVP = OFF
#pragma config CPD = OFF
#pragma config WRT = OFF
#pragma config CP = OFF// khai bao cau hinh
void ADC_Init(void)

6
{
ADCON0bits.ADCS1 = 1;
ADCON0bits.ADCS0 = 0; //FOSC/32 ứng với tần số thạch anh 20MHz
ADCON0bits.CHS2 = 0;
ADCON0bits.CHS1 = 0;
ADCON0bits.CHS0 = 0; // chon kenh AN0 kenh 0 Adc
ADCON0bits.ADON = 1; //Khởi động ADC
ADCON1bits.ADCS2 = 0;
ADCON1bits.ADFM = 1;
ADCON1bits.PCFG3 = 0;
ADCON1bits.PCFG2 = 0;
ADCON1bits.PCFG1 = 0;
ADCON1bits.PCFG0 = 0;
}
unsigned int ADC_Read()
{
unsigned int adcvalue = 0;
ADCON0bits.GO_nDONE = 1;
while(ADCON0bits.GO_nDONE); //Đợi quá trình chuyển đổi kết thúc
adcvalue = ((ADRESH*256)+ADRESL); //Lấy giá trị đọc được.
adcvalue=(((float)adcvalue*5)/(0.01*1024))/5;
return adcvalue;

}
void main(void)
{
int value=0;

7
TRISDbits.TRISD = 0; //cổng D là đầu ra
TRISBbits.TRISB0 = 0; //RB0 là đầu ra
PORTBbits.RB0 = 0; // gán chân RB0=0
TRISAbits.TRISA0 = 1; //RA0 là đầu vào
Lcd_Init();
ADC_Init();
char str[20];// mang gom 20 ki tu
while(1)
{
value = ADC_Read();
sprintf(str,"NHIET DO = %d ",value);
Lcd_Set_Cursor(1,1);// con tro hang 1 cot 1
Lcd_Write_String(str);
Lcd_Write_Char(223); // hien chu do LCD
Lcd_Write_String("C");// hien chu C tren LCD
if (value>=25 && value<=30)
PORTBbits.RB0=1;
Else
PORTBbits.RB0=0;
}
}

8
9
Câu 1 :
+ Giá trị đặt: 0-5 V
• Đặc điểm của vi điều khiển PIC16F877A là có các chân vào ra số và các chân
vào tương tự ADC. Do giá trị trị đặt là giá trị biến thiên tục trong khoảng 0-5 V
nên để có thể lấy thông tin về giá trị đặt vào chương trình điều khiển, ta sử dụng
chân đầu vào tương tự ADC của PIC16F877A.
• Do ADC của PIC16F877A có thể chọn nhiều giá trị điện áp chuẩn (reference) là
0-5V, hoặc –Vref đến +Vref, nên để giao tiếp được với tín hiệu liên tục biến đổi
từ 0-5 V thì cần phải cấu hình ADC sao cho điện áp chuẩn là 0-5V. --------------
----------------------------- 0.25 điểm
• Cấu hình các chân ADC thích hợp: Chân vào ADC phải được chọn ở chế độ
INPUT. Cấu hình lựa chọn tần số lấy mẫu ADC phù hợp với bài toán điều khiển
(lưu ý chu kỳ nhỏ nhất để đọc 10 bit dữ liệu ADC là khoảng 20 micro giây).
+ Đo lường từ 0-2.5 V
• Cũng tương tự như với giá trị để có thông tin về giá trị đo lường trong khoảng
từ 0-2.5 V thì ta cũng sử dụng chân ADC của vi điều khiển
• Sử dụng mạch khuếch đại để thu được giá trị đọ lường từ 0-5V để đưa vào VĐk
• Cấu hình ADC với điện áp trong khoảng 0-5 V
• Cấu hình các chân ADC thích hợp: Chân vào ADC phải được chọn ở chế độ
INPUT. Cấu hình lựa chọn tần số lấy m ẫu ADC phù hợp với bài toán điều khiển
(lưu ý chu kỳ nhỏ nhất để đọc 10 bit dữ liệu ADC là khoảng 20 micro giây)
• Chu kì ngắn nhất từ khi cấu hình đến khi hoàn tất đọc một word dữ liệu 10bit
trên một kênh ADC là 40 micro giây. Càng nhiều kênh ADC thì thời gian đọc
ADC sẽ tăng lên theo cấp số cộng.
+ Điều khiển trong khoảng 0-8V
• Các chân vào ra số của vi điều khiển chỉ cho phép ở một trong 2 mức 0 hoặc 5
V. Để tạo ra tín hiệu ra liên tục trong khoảng 0-8 V ta phải sử dụng các bộ đệm
transistor. Ta có thể tạo ra tín hiệu liên tục biến thiên trong khoảng 0-8 V sử
dụng bộ CCP1 hoặc CCP2 ở chế độ PWM và kết hợp với đệm transistor và một
bộ lọc thông thấp để tạo ra tín hiệu ra liên tục trong khoảng 0-8V.
• Tần số (quyết định bởi thanh ghi chu kỳ xung) đầu ra cần phải lớn hơn tần số cắt
của lọc của bộ lọc thông thấp , khi đó tín hiệu ra sẽ biến thiên liên tục trong
khoảng 0-8V: khi f > 1/(2πRC) thì
PWM

Với τ là độ rộng xung và T là chu kỳ xung (T > 2πRC)

10
• Sơ đồ phần cứng : (1điểm)

Câu 2:
a.Sơ đồ nguyên lý mạch điều khiển

11
b.Tính toán và giải thích các linh kiện trong mạch
• Mỗi đèn led có giá trị áp định mức Udm=2,2V Idm=10mA. Vì vậy khi cấp
nguồn 5VDC trực tiếp cho LED thì LED sẽ hỏng vì vậy ta cần mắc nối tiếp
LED vơi một điện trở để đảm bảo điện áp định mức và dòng định mức cho
LED.
• Tính giá trị điện trở:
Ta có: UR=UN-Udm=5-2.2=2.8V. IR=Idm=10mA.
Trong đó: UR:điện áp đặt lên điện trở
UN:điện áp nguồn giá trị 5VDC.
Áp dụng định luật ohm:
R=UR/IR=2.8/(10x10-3)=280Ω.
• Trên mạch có sử dụng một oxilocope để hiện thị xung đầu ra.
• Cụm linh kiện nối vào chân MCLR có tác dụng tạo ra xung clock để cho VĐK
hoạt động
c.Viết chương trình điều khiển

#include <xc.h>
#include <pic.h>
#include <pic16f887.h>
#include<stdio.h>
#include<stdlib.h>
#pragma config FOSC = HS
#pragma config WDTE = OFF
#pragma config PWRTE = OFF
#pragma config CP = OFF
#pragma config CPD = OFF
#pragma config BOREN = OFF
#pragma config LVP = OFF
#pragma config WRT = OFF
#define _XTAL_FREQ 20000000
void main()
{
TRISDbits.TRISD0=0; // Chan RD0 la dau ra
PORTDbits.RD0=1; // Chan RD0 o muc cao
TRISDbits.TRISD1=0; // Chan RD1 la dau ra
PORTDbits.RD1=1; // Chan RD1 o muc cao
// Vong lap vo tan
while(1)
{
PORTDbits.RD0=1;

12
PORTDbits.RD1=1;
__delay_ms(300);
PORTDbits.RD0=0;
PORTDbits.RD1=0;
__delay_ms(300);
PORTDbits.RD0=0;
PORTDbits.RD1=1;
__delay_ms(300);
PORTDbits.RD0=1;
PORTDbits.RD1=0;
__delay_ms(300);
PORTDbits.RD0=1;
PORTDbits.RD1=1;
}
Câu 3:
a.Sơ đồ nguyên lý mạch điều khiển

b) Giải thích kinh kiện có trong mạch


-Cảm biến nhiệt độ LM35 đọc nhiệt độ
-Biến trở nối vào chân VEE có tác dụng điều chỉnh độ sáng của LCD
13
-Màn hình LCD LM016 có tác dụng hiện thị thông tin về nhiệt độ
-Transitor có tác dụng cấp tín hiệu đóng cuộn hút Relay RL1
-OPAMcó tác dụng khuếch đại tín hiệu
- 2 tụ nối ở 2 chân thạch anh ở các chip vi xử lý dùng để hỗ trợ mạch dao động bên
trong pic
- Thạch anh dùng để tạo tần số dao động ổn định cho pic
-Cụm linh kiện nối với chân MCRL có tác dụng tạo xung clock cấp cho vi điều
khiển hoạt động
c) code

#include <pic.h>
#include <pic16f877a.h>
#include <xc.h>
#include <stdio.h>
#include <stdlib.h>// khai bao thu vien
#include"lcd.h" // Tạo thư viện lcd
#define _XTAL_FREQ 20000000// khai báo thach anh
#define RS RD2
#define EN RD3
#define D4 RD4
#define D5 RD5
#define D6 RD6
#define D7 RD7 // khai báo chân lcd
#pragma config FOSC = HS
#pragma config WDTE = OFF
#pragma config PWRTE = OFF
#pragma config BOREN = OFF
#pragma config LVP = OFF

14
#pragma config CPD = OFF
#pragma config WRT = OFF
#pragma config CP = OFF// khai bao cau hinh
void ADC_Init(void)
{
ADCON0bits.ADCS1 = 1;
ADCON0bits.ADCS0 = 0; //FOSC/32 ứng với tần số thạch anh 20MHz
ADCON0bits.CHS2 = 0;
ADCON0bits.CHS1 = 0;
ADCON0bits.CHS0 = 0; // chon kenh AN0 kenh 0 Adc
ADCON0bits.ADON = 1; //Khởi động ADC
ADCON1bits.ADCS2 = 0;
ADCON1bits.ADFM = 1;
ADCON1bits.PCFG3 = 0;
ADCON1bits.PCFG2 = 0;
ADCON1bits.PCFG1 = 0;
ADCON1bits.PCFG0 = 0;
}
unsigned int ADC_Read()
{
unsigned int adcvalue = 0;
ADCON0bits.GO_nDONE = 1;
while(ADCON0bits.GO_nDONE); //Đợi quá trình chuyển đổi kết thúc
adcvalue = ((ADRESH*256)+ADRESL); //Lấy giá trị đọc được.
adcvalue=(((float)adcvalue*5)/(0.01*1024))/5;
return adcvalue;

15
}
void main(void)
{
int value=0;
TRISDbits.TRISD = 0; //cổng D là đầu ra
TRISBbits.TRISB0 = 0; //RB0 là đầu ra
PORTBbits.RB0 = 0; // gán chân RB0=0
TRISAbits.TRISA0 = 1; //RA0 là đầu vào
Lcd_Init();
ADC_Init();
char str[20];// mang gom 20 ki tu
while(1)
{
value = ADC_Read();
sprintf(str,"NHIET DO = %d ",value);
Lcd_Set_Cursor(1,1);// con tro hang 1 cot 1
Lcd_Write_String(str);
Lcd_Write_Char(223); // hien chu do LCD
Lcd_Write_String("C");// hien chu C tren LCD
if (value>=20 && value<=30)
PORTBbits.RB0=1;
Else
PORTBbits.RB0=0;
}
}

16
17
Câu 1:
+ Giá trị đặt: 0-10 V
• Đặc điểm của vi điều khiển PIC16F877A là có các chân vào ra số và các chân
vào tương tự ADC. Do giá trị trị đặt là giá trị biến thiên tục trong khoảng 0-5 V
nên để có thể lấy thông tin về giá trị đặt vào chương trình điều khiển, ta sử dụng
chân đầu vào tương tự ADC của PIC16F877A
• Ghép nối tiếp điện trở vào để thu được giá trị đặt trong khoảng từ 0-5V.
• Do ADC của PIC16F877A có thể chọn nhiều giá trị điện áp chuẩn (reference) là
0-5V, hoặc –Vref đến +Vref, nên để giao tiếp được với tín hiệu liên tục biến đổi
từ 0-5 V thì cần phải cấu hình ADC sao cho điện áp chuẩn là 0-5V.
• Cấu hình các chân ADC thích hợp: Chân vào ADC phải được chọn ở chế độ
INPUT. Cấu hình lựa chọn tần số lấy mẫu ADC phù hợp với bài toán điều khiển
(lưu ý chu kỳ nhỏ nhất để đọc 10 bit dữ liệu ADC là khoảng 20 micro giây).
+ Đo lường từ 0-500mV
• Cũng tương tự như với giá trị để có thông tin về giá trị đo lường trong khoảng
từ 0-500mV thì ta cũng sử dụng chân ADC của vi điều khiển.
• Sử dụng mạch khuếch đại để thu được giá trị đọ lường từ 0-5V để đưa vào VĐk
• Cấu hình ADC với điện áp trong khoảng 0-5 V.
• Cấu hình các chân ADC thích hợp: Chân vào ADC phải được chọn ở chế độ
INPUT. Cấu hình lựa chọn tần số lấy mẫu ADC phù hợp với bài toán điều khiển
(lưu ý chu kỳ nhỏ nhất để đọc 10 bit dữ liệu ADC là khoảng 20 micro giây)
• Chu kì ngắn nhất từ khi cấu hình đến khi hoàn tất đọc một word dữ liệu 10bit
trên một kênh ADC là 40 micro giây. Càng nhiều kênh ADC thì thời gian đọc
ADC sẽ tăng lên theo cấp số cộng.
+ Điều khiển trong khoảng 0-12V
• Các chân vào ra số của vi điều khiển chỉ cho phép ở một trong 2 mức 0 hoặc 5
V. Để tạo ra tín hiệu ra liên tục trong khoảng 0-12 V ta phải sử dụng các bộ đệm
transistor. Ta có thể tạo ra tín hiệu liên tục biến thiên trong khoảng 0-8 V sử
dụng bộ CCP1 hoặc CCP2 ở chế độ PWM và kết hợp với đệm transistor và một
bộ lọc thông thấp để tạo ra tín hiệu ra liên tục trong khoảng 0-12V.
• Tần số (quyết định bởi thanh ghi chu kỳ xung) đầu ra cần phải lớn hơn tần số cắt
của lọc của bộ lọc thông thấp , khi đó tín hiệu ra sẽ biến thiên liên tục trong
khoảng 0-12V: khi f > 1/(2πRC) thì
PWM

18
Với τ là độ rộng xung và T là chu kỳ xung (T > 2πRC)
Sơ đồ phần cứng:

Câu 2:
a.Sơ đồ nguyên lý mạch điều khiển

19
b.Tính toán và giải thích các linh kiện trong mạch
• Mỗi đèn led có giá trị áp định mức Udm=2,2V Idm=10mA. Vì vậy khi cấp
nguồn 5VDC trực tiếp cho LED thì LED sẽ hỏng vì vậy ta cần mắc nối tiếp
LED vơi một điện trở để đảm bảo điện áp định mức và dòng định mức cho
LED.
• Tính giá trị điện trở:
Ta có: UR=UN-Udm=5-2.2=2.8V. IR=Idm=10mA.
Trong đó: UR:điện áp đặt lên điện trở
UN:điện áp nguồn giá trị 5VDC.
Áp dụng định luật ohm:
R=UR/IR=2.8/(10x10-3)=280Ω.
• Trên mạch có sử dụng một oxilocope để hiện thị xung đầu ra.
• Cụm linh kiện nối vào chân MCLR có tác dụng tạo ra xung clock để cho VĐK
hoạt động
c.Viết chương trình điều khiển

#include <xc.h>
#include <pic.h>
#include <pic16f887.h>
#include<stdio.h>
#include<stdlib.h>
#pragma config FOSC = HS

20
#pragma config WDTE = OFF
#pragma config PWRTE = OFF
#pragma config CP = OFF
#pragma config CPD = OFF
#pragma config BOREN = OFF
#pragma config LVP = OFF
#pragma config WRT = OFF
#define _XTAL_FREQ 20000000
void main()
{
TRISDbits.TRISD0=0; // Chan RD0 la dau ra
PORTDbits.RD0=1; // Chan RD0 o muc cao
TRISDbits.TRISD1=0; // Chan RD1 la dau ra
PORTDbits.RD1=1; // Chan RD1 o muc cao
while(1)
{
PORTDbits.RD0=1;
PORTDbits.RD1=1;
__delay_ms(125);
PORTDbits.RD0=0;
PORTDbits.RD1=0;
__delay_ms(125);
PORTDbits.RD0=0;
PORTDbits.RD1=1;
__delay_ms(125);
PORTDbits.RD0=1;
PORTDbits.RD1=0;
__delay_ms(125);
PORTDbits.RD0=1;
PORTDbits.RD1=1;
}
Câu 3:
a.Sơ đồ nguyên lý mạch điều khiển

21
b) Giải thích kinh kiện có trong mạch
-Cảm biến nhiệt độ LM35 đọc nhiệt độ
-Biến trở nối vào chân VEE có tác dụng điều chỉnh độ sáng của LCD
-Màn hình LCD LM016 có tác dụng hiện thị thông tin về nhiệt độ
-Transitor có tác dụng cấp tín hiệu đóng cuộn hút Relay RL1
-OPAMcó tác dụng khuếch đại tín hiệu
- 2 tụ nối ở 2 chân thạch anh ở các chip vi xử lý dùng để hỗ trợ mạch dao động bên
trong pic
- Thạch anh dùng để tạo tần số dao động ổn định cho pic
-Cụm linh kiện nối với chân MCRL có tác dụng tạo xung clock cấp cho vi điều
khiển hoạt động
c) code

#include <pic.h>
#include <pic16f877a.h>

22
#include <xc.h>
#include <stdio.h>
#include <stdlib.h>// khai bao thu vien
#include"lcd.h" // Tạo thư viện lcd
#define _XTAL_FREQ 20000000// khai báo thach anh
#define RS RD2
#define EN RD3
#define D4 RD4
#define D5 RD5
#define D6 RD6
#define D7 RD7 // khai báo chân lcd
#pragma config FOSC = HS
#pragma config WDTE = OFF
#pragma config PWRTE = OFF
#pragma config BOREN = OFF
#pragma config LVP = OFF
#pragma config CPD = OFF
#pragma config WRT = OFF
#pragma config CP = OFF// khai bao cau hinh
void ADC_Init(void)
{
ADCON0bits.ADCS1 = 1;
ADCON0bits.ADCS0 = 0; //FOSC/32 ứng với tần số thạch anh 20MHz
ADCON0bits.CHS2 = 0;
ADCON0bits.CHS1 = 0;
ADCON0bits.CHS0 = 0; // chon kenh AN0 kenh 0 Adc
ADCON0bits.ADON = 1; //Khởi động ADC

23
ADCON1bits.ADCS2 = 0;
ADCON1bits.ADFM = 1;
ADCON1bits.PCFG3 = 0;
ADCON1bits.PCFG2 = 0;
ADCON1bits.PCFG1 = 0;
ADCON1bits.PCFG0 = 0;
}
unsigned int ADC_Read()
{
unsigned int adcvalue = 0;
ADCON0bits.GO_nDONE = 1;
while(ADCON0bits.GO_nDONE); //Đợi quá trình chuyển đổi kết thúc
adcvalue = ((ADRESH*256)+ADRESL); //Lấy giá trị đọc được.
adcvalue=(((float)adcvalue*5)/(0.01*1024))/5;
return adcvalue;

}
void main(void)
{
int value=0;
TRISDbits.TRISD = 0; //cổng D là đầu ra
TRISBbits.TRISB0 = 0; //RB0 là đầu ra
PORTBbits.RB0 = 0; // gán chân RB0=0
TRISAbits.TRISA0 = 1; //RA0 là đầu vào
Lcd_Init();
ADC_Init();
char str[20];// mang gom 20 ki tu

24
while(1)
{
value = ADC_Read();
sprintf(str,"NHIET DO = %d ",value);
Lcd_Set_Cursor(1,1);// con tro hang 1 cot 1
Lcd_Write_String(str);
Lcd_Write_Char(223); // hien chu do LCD
Lcd_Write_String("C");// hien chu C tren LCD
if (value>=26.5 && value<=30.5)
PORTBbits.RB0=1;
Else
PORTBbits.RB0=0;
}
}

25
26
Câu 1:
+ Giá trị đặt: 0-15 V
• Đặc điểm của vi điều khiển PIC16F877A là có các chân vào ra số và các chân
vào tương tự ADC. Do giá trị trị đặt là giá trị biến thiên tục trong khoảng 0-5 V
nên để có thể lấy thông tin về giá trị đặt vào chương trình điều khiển, ta sử dụng
chân đầu vào tương tự ADC của PIC16F877A
• Ghép nối tiếp điện trở vào để thu được giá trị đặt trong khoảng từ 0-5V.
• Do ADC của PIC16F877A có thể chọn nhiều giá trị điện áp chuẩn (reference) là
0-5V, hoặc –Vref đến +Vref, nên để giao tiếp được với tín hiệu liên tục biến đổi
từ 0-5 V thì cần phải cấu hình ADC sao cho điện áp chuẩn là 0-5V.
• Cấu hình các chân ADC thích hợp: Chân vào ADC phải được chọn ở chế độ
INPUT. Cấu hình lựa chọn tần số lấy mẫu ADC phù hợp với bài toán điều khiển
(lưu ý chu kỳ nhỏ nhất để đọc 10 bit dữ liệu ADC là khoảng 20 micro giây).
+ Đo lường từ 0-5 V
• Cũng tương tự như với giá trị để có thông tin về giá trị đo lường trong khoảng
từ 0-5 V thì ta cũng sử dụng chân ADC của vi điều khiển
• Cấu hình ADC với điện áp trong khoảng 0-5 V.
• Cấu hình các chân ADC thích hợp: Chân vào ADC phải được chọn ở chế độ
INPUT. Cấu hình lựa chọn tần số lấy mẫu ADC phù hợp với bài toán điều khiển
(lưu ý chu kỳ nhỏ nhất để đọc 10 bit dữ liệu ADC là khoảng 20 micro giây)
• Chu kì ngắn nhất từ khi cấu hình đến khi hoàn tất đọc một word dữ liệu 10bit
trên một kênh ADC là 40 micro giây. Càng nhiều kênh ADC thì thời gian đọc
ADC sẽ tăng lên theo cấp số cộng.
+ Điều khiển trong khoảng 0-3.3 V
• Các chân vào ra số của vi điều khiển chỉ cho phép ở một trong 2 mức 0 hoặc 5
V. Để tạo ra tín hiệu ra liên tục trong khoảng 0-3.3 V ta phải sử dụng các bộ biến
đổi DAC. Vi điều khiển 16F877A không tích hợp module DAC, tuy nhiên ta có
thể tạo ra tín hiệu liên tục biến thiên trong khoảng 0-3.3 V sử dụng bộ CCP1
hoặc CCP2 ở chế độ PWM và kết hợp với một bộ lọc thông thấp để tạo ra tín
hiệu ra liên tục.
• Tần số (quyết định bởi thanh ghi chu kỳ xung) đầu ra cần phải lớn hơn tần số cắt
của lọc của bộ lọc thông thấp , khi đó tín hiệu ra sẽ biến thiên liên tục trong
khoảng 0-5V: khi f > 1/(2πRC) thì
PWM

27
Với τ là độ rộng xung và T là chu kỳ xung (T > 2πRC)
Sơ đồ phần cứng :

Câu 2:
a.Sơ đồ nguyên lý mạch điều khiển

b.Tính toán và giải thích các linh kiện trong mạch


• Mỗi đèn led có giá trị áp định mức Udm=2,2V Idm=10mA. Vì vậy khi cấp
nguồn 5VDC trực tiếp cho LED thì LED sẽ hỏng vì vậy ta cần mắc nối tiếp

28
LED vơi một điện trở để đảm bảo điện áp định mức và dòng định mức cho
LED.
• Tính giá trị điện trở:
Ta có: UR=UN-Udm=5-2.2=2.8V. IR=Idm=10mA.
Trong đó: UR:điện áp đặt lên điện trở
UN:điện áp nguồn giá trị 5VDC.
Áp dụng định luật ohm:
R=UR/IR=2.8/(10x10-3)=280Ω.
• Trên mạch có sử dụng một oxilocope để hiện thị xung đầu ra.
• Cụm linh kiện nối vào chân MCLR có tác dụng tạo ra xung clock để cho VĐK
hoạt động
c.Viết chương trình điều khiển

#include <xc.h>
#include <pic.h>
#include <pic16f887.h>
#include<stdio.h>
#include<stdlib.h>
#pragma config FOSC = HS
#pragma config WDTE = OFF
#pragma config PWRTE = OFF
#pragma config CP = OFF
#pragma config CPD = OFF
#pragma config BOREN = OFF
#pragma config LVP = OFF
#pragma config WRT = OFF
#define _XTAL_FREQ 20000000
void main()
{
TRISDbits.TRISD0=0; // Chan RD0 la dau ra
PORTDbits.RD0=1; // Chan RD0 o muc cao
TRISDbits.TRISD1=0; // Chan RD1 la dau ra
PORTDbits.RD1=1; // Chan RD1 o muc cao
while(1)
{
PORTDbits.RD0=1;
PORTDbits.RD1=1;
__delay_ms(500);
PORTDbits.RD0=0;
PORTDbits.RD1=0;

29
__delay_ms(500);
PORTDbits.RD0=0;
PORTDbits.RD1=1;
__delay_ms(500);
PORTDbits.RD0=1;
PORTDbits.RD1=0;
__delay_ms(500);
PORTDbits.RD0=1;
PORTDbits.RD1=1;
}
Câu 3:
a.Sơ đồ nguyên lý mạch điều khiển

b) Giải thích kinh kiện có trong mạch


-Cảm biến nhiệt độ LM35 đọc nhiệt độ
-Biến trở nối vào chân VEE có tác dụng điều chỉnh độ sáng của LCD
-Màn hình LCD LM016 có tác dụng hiện thị thông tin về nhiệt độ
-Transitor có tác dụng cấp tín hiệu đóng cuộn hút Relay RL1
-OPAMcó tác dụng khuếch đại tín hiệu

30
- 2 tụ nối ở 2 chân thạch anh ở các chip vi xử lý dùng để hỗ trợ mạch dao động bên
trong pic
- Thạch anh dùng để tạo tần số dao động ổn định cho pic
-Cụm linh kiện nối với chân MCRL có tác dụng tạo xung clock cấp cho vi điều
khiển hoạt động
c) code

#include <pic.h>
#include <pic16f877a.h>
#include <xc.h>
#include <stdio.h>
#include <stdlib.h>// khai bao thu vien
#include"lcd.h" // Tạo thư viện lcd
#define _XTAL_FREQ 20000000// khai báo thach anh
#define RS RD2
#define EN RD3
#define D4 RD4
#define D5 RD5
#define D6 RD6
#define D7 RD7 // khai báo chân lcd
#pragma config FOSC = HS
#pragma config WDTE = OFF
#pragma config PWRTE = OFF
#pragma config BOREN = OFF
#pragma config LVP = OFF
#pragma config CPD = OFF
#pragma config WRT = OFF
#pragma config CP = OFF// khai bao cau hinh

31
void ADC_Init(void)
{
ADCON0bits.ADCS1 = 1;
ADCON0bits.ADCS0 = 0; //FOSC/32 ứng với tần số thạch anh 20MHz
ADCON0bits.CHS2 = 0;
ADCON0bits.CHS1 = 0;
ADCON0bits.CHS0 = 0; // chon kenh AN0 kenh 0 Adc
ADCON0bits.ADON = 1; //Khởi động ADC
ADCON1bits.ADCS2 = 0;
ADCON1bits.ADFM = 1;
ADCON1bits.PCFG3 = 0;
ADCON1bits.PCFG2 = 0;
ADCON1bits.PCFG1 = 0;
ADCON1bits.PCFG0 = 0;
}
unsigned int ADC_Read()
{
unsigned int adcvalue = 0;
ADCON0bits.GO_nDONE = 1;
while(ADCON0bits.GO_nDONE); //Đợi quá trình chuyển đổi kết thúc
adcvalue = ((ADRESH*256)+ADRESL); //Lấy giá trị đọc được.
adcvalue=(((float)adcvalue*5)/(0.01*1024))/5;
return adcvalue;

}
void main(void)
{

32
int value=0;
TRISDbits.TRISD = 0; //cổng D là đầu ra
TRISBbits.TRISB0 = 0; //RB0 là đầu ra
PORTBbits.RB0 = 0; // gán chân RB0=0
TRISAbits.TRISA0 = 1; //RA0 là đầu vào
Lcd_Init();
ADC_Init();
char str[20];// mang gom 20 ki tu
while(1)
{
value = ADC_Read();
sprintf(str,"NHIET DO = %d ",value);
Lcd_Set_Cursor(1,1);// con tro hang 1 cot 1
Lcd_Write_String(str);
Lcd_Write_Char(223); // hien chu do LCD
Lcd_Write_String("C");// hien chu C tren LCD
if (value>=35 && value<=40)
PORTBbits.RB0=1;
Else
PORTBbits.RB0=0;
}
}

33
ĐỀ 04
Câu 1:
+ Giá trị đặt: 0-5 V
• Đặc điểm của vi điều khiển PIC16F877A là có các chân vào ra số và các chân
vào tương tự ADC. Do giá trị trị đặt là giá trị biến thiên tục trong khoảng 0-5 V
nên để có thể lấy thông tin về giá trị đặt vào chương trình điều khiển, ta sử dụng
chân đầu vào tương tự ADC của PIC16F877A.
• Do ADC của PIC16F877A có thể chọn nhiều giá trị điện áp chuẩn (reference) là
0-5V, hoặc –Vref đến +Vref, nên để giao tiếp được với tín hiệu liên tục biến đổi
từ 0-5 V thì cần phải cấu hình ADC sao cho điện áp chuẩn là 0-5V.
• Cấu hình các chân ADC thích hợp: Chân vào ADC phải được chọn ở chế độ
INPUT. Cấu hình lựa chọn tần số lấy mẫu ADC phù hợp với bài toán điều khiển
(lưu ý chu kỳ nhỏ nhất để đọc 10 bit dữ liệu ADC là khoảng 20 micro giây).
+ Đo lường từ 0-5 V
• Cũng tương tự như với giá trị để có thông tin về giá trị đo lường trong khoảng
từ 0-5 V thì ta cũng sử dụng chân ADC của vi điều khiển
• Cấu hình ADC với điện áp trong khoảng 0-5 V
• Cấu hình các chân ADC thích hợp: Chân vào ADC phải được chọn ở chế độ
INPUT. Cấu hình lựa chọn tần số lấy mẫu ADC phù hợp với bài toán điều khiển
(lưu ý chu kỳ nhỏ nhất để đọc 10 bit dữ liệu ADC là khoảng 20 micro giây)
• Chu kì ngắn nhất từ khi cấu hình đến khi hoàn tất đọc một word dữ liệu 10bit
trên một kênh ADC là 40 micro giây. Càng nhiều kênh ADC thì thời gian đọc
ADC sẽ tăng lên theo cấp số cộng.
+ Điều khiển trong khoảng 0-24 V
• Các chân vào ra số của vi điều khiển chỉ cho phép ở một trong 2 mức 0 hoặc 5
V. Để tạo ra tín hiệu ra liên tục trong khoảng 0-24 V ta phải sử dụng các bộ đệm
transistor. Ta có thể tạo ra tín hiệu liên tục biến thiên trong khoảng 0-24 V sử
dụng bộ CCP1 hoặc CCP2 ở chế độ PWM và kết hợp với đệm transistor và một
bộ lọc thông thấp để tạo ra tín hiệu ra liên tục trong khoảng 0-24V.
• Tần số (quyết định bởi thanh ghi chu kỳ xung) đầu ra cần phải lớn hơn tần số cắt
của lọc của bộ lọc thông thấp , khi đó tín hiệu ra sẽ biến thiên liên tục trong
khoảng 0-24V: khi f > 1/(2πRC) thì
PWM

Với τ là độ rộng xung và T là chu kỳ xung (T > 2πRC)

34
• Sơ đồ phần cứng : (1điểm)

35

You might also like