Báo cáo đồ án cuối kỳ môn Kỹ thuật vi xử lý

Báo cáo đồ án cuối kỳ môn Kỹ thuật vi xử lý

Hiển thị LED 7 đoạn
Nhiệt độ đo được
Nhiệt độ cài đặt
Hiển thị mức
Nút nhến cài đt
nhiệt độ nỡng
LƯƠNG PHƯỚC THỊNH
B1807018
BÁO CÁO ĐỒ ÁN CUỐI KỲ
KỸ THUẬT VI XỬ (CT141)
1.
Mục tiêu giới hạn của đề tài
Mục tiêu: thiết kế được hình phỏng quạt tự động đo nhiệt độ môi trườnghiển thị kết
quả đo được trên LED 7 đoạn
2.
đồ khối
Output
Input
Output
Input
Điếều
khiển
motor
quạt DC
MSP430
Cm biếến nhit độ
LM35
3.
Lựa chọn linh kiện
Đối với đề tài này:
- Chọn MSP430G2553 tích hợp chức năng biến đổi ADC
- Sử dụng cảm biến nhiệt độ LM35 ngõ ra điện thế để thể dùng chức năng biến đổi ADC
được tích hợp trong chip vi điều khiển
- Chọn LED 7 đoạn anode chung
- IC giải 7447 cho LED 7 đoạn chuyển đổi từ BCD để tiết kiệm chân cho chip vi điều
khiển
- Opto PC817 làm đầu ra của vi điều khiển để điều khiển quạt
- Quạt DC 12V
4.
hình phỏng
BEGIN
Khởi tạo ngắt ngoài cho nút
nhấnKhởi tạo ADC10
Khởi tạo mã LED 7 đoạn
Khởi tạo xung PWM cho
motorHiển thị các thông tin
-Do chip MSP430G2553 phỏng không chính xác ADC trong Protues nên ta chọn chip tương
đương là MSP430F2122. Về GPIO chip này có đến 3 port nhiều hơn MSP430G2553 loại 20
chân chỉ có 2 Port vào ra (port 1 và port2). Nên trong mô phỏng chỉ dùng port 1 và port 2 của
chip MSP430F2122
-LED 7 đoạn được giải qua IC 7447 để tiết kiệm tài nguyên
5.
Lưu đồ giải thuật
Nhiệt độ đo
được> nhiệt độ
ngưỡng
Đ
S
Qut quay(tếc độ phụ
thuộc vào mức nhiệt
độ)và hiển thị mức
Hiển thị nhiệt độ đo được
Hiển thị nhiệt độ cài đặt
tả hoạt động
-LED 7 đoạn sẽ hiển thị nhiệt độ đo được từ cảm biến LM35 , nhiệt độ cài đặt và các mức nhiệt
-Nhiệt độ cài đặt thể điều chỉnh tăng giảm bằng nút nhấn. Khi ấn TANG thì nhiệt độ ngưỡng
sẽ tăng lên 1 đơn vị, khi ấn GIAM thì nhiệt độ ngưỡng sẽ giảm lên 1 đơn vị.
- Khi nhiệt độ đo được lớn hơn nhiệt độ ngưỡng quạt sẽ quay tùy theo từng mức nhiệt độ tốc độ
quạt nhanh hay chậm và LED 7 đoạn sẽ hiển thị mức nhiệt độ
-Nếu nhiệt độ đo được nhỏ hơn nhiệt độ ngưỡng thì quạt không quay hoặc đang quay thì sẽ quay chậm
dần rồi dừng hẳn. LED 7 hiển thị mức sẽ hiện mức 00
6.
Chương trình chính
#include "msp430f2122.h"
void hienthi(int);
void hienthicanhbao(int);
void hienthimuc(int);
int nhietdo, giatri_nhietdo=28;
void in_out(void);
void timer(void);
void setPWM(void);
int value;
int maled[10]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09};// ma BCD
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
// KHAI BAO NGAT NGOAI CHO TANG/GIAM
P2IE |= BIT5+BIT6;
P2IES |= BIT5+BIT6;
P2IFG &= ~ (BIT5+BIT6);
// CHON TAN SO DCO
BCSCTL1 = CALBC1_1MHZ; // Set DCO range
DCOCTL = CALDCO_1MHZ;
// 1.5V ->1023 = ADC10MEM
// ADC10ON, interrupt enabled => CHON DIEN THE THAM CHIEU NOI LA 1.5
ADC10CTL0 = SREF_1+ ADC10SHT_2 + REFON + ADC10ON + ADC10IE;
ADC10CTL1 |= INCH_4;
ADC10AE0 |= BIT4; // A4 ADC option select
P1DIR |= BIT6+BIT7+BIT4+BIT5+BIT0+BIT1; // P1.6 = hang chuc, P1.7 = hang don vi
P2DIR |= BIT0+BIT1+BIT2+BIT3;// xuat data ra led 7 doan
// DIEU KHIEN QUAT
in_out();
timer();
setPWM();
value=333;
_BIS_SR(GIE);
while(1)
{
TACCR1=value;
ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start
// XUAT NHIET DO NGUONG CANH BAO
// HIEN THI DUOC NHIET DO RA LED 7SEG
nhietdo=ADC10MEM*150/1023;
hienthi(nhietdo);
hienthicanhbao(giatri_nhietdo);
if( nhietdo < giatri_nhietdo )
{
value=0; // MUC 0
hienthimuc(0);
}
if(giatri_nhietdo <= nhietdo&&nhietdo<=33)
{
value=333 +150; // MUC 1
hienthimuc(1);
}
if(33 < nhietdo&&nhietdo<=38)
{
value=333 +300; // MUC 2
hienthimuc(2);
}
if(38 < nhietdo)
{
value=933; // MUC 3
hienthimuc(3);
}
}
}
#pragma vector=TIMER0_A0_VECTOR
interrupt void Timer0_A0 (void)
{ TACCR1 = value; }
// ADC10 interrupt service routine
#pragma vector=ADC10_VECTOR
interrupt void ADC10_ISR(void)
{
bic_SR_register_on_exit(CPUOFF); // Clear CPUOFF bit from 0(SR)
}
// INTERRUPT ISR
#pragma vector=PORT2_VECTOR
interrupt void TANG_GIAM(void)
{
// AN TANG NHIET DO
if(P2IFG&BIT5)
{giatri_nhietdo +=1;
if (giatri_nhietdo==100)
giatri_nhietdo=28;
}
P2IFG &= ~BIT5;
// AN GIAM NHIET DO
if(P2IFG&BIT6)
{giatri_nhietdo -=1;
if (giatri_nhietdo==35)
giatri_nhietdo=28;
}
P2IFG &= ~BIT6;
}
// HIEN THI NHIET DO RA LED 7SEG
void hienthi(int so_hien_thi)
{
int so_chuc,so_donvi;
so_chuc=so_hien_thi/10;
so_donvi=so_hien_thi%10;
P1OUT = BIT7;
P2OUT = maled[so_donvi];
delay_cycles(1000);
P1OUT = BIT6;
P2OUT = maled[so_chuc];
delay_cycles(1000);
}
// hien thi nhiet do canh bao
void hienthicanhbao(int nhietdo_canhbao)
{
int so_chuc,so_donvi;
so_chuc=nhietdo_canhbao/10;
so_donvi=nhietdo_canhbao%10;
P1OUT = BIT5;
P2OUT = maled[so_donvi];
delay_cycles(1000);
P1OUT = BIT4;
P2OUT = maled[so_chuc];
delay_cycles(1000);;
}
// HIEN THI SO MUC
void hienthimuc(int so_muc)
{
P1OUT = BIT1;
P2OUT = maled[so_muc];
delay_cycles(1000);
P1OUT = BIT0;
P2OUT = maled[0];
delay_cycles(1000);
}
// DIEU KHIEN QUAT
void in_out(void)
{ P1DIR |= BIT2;
P1SEL |= BIT2; }
void timer(void)
{
CCTL0=CCIE;
TACTL = TASSEL_2 + MC_1;
} // SMCLK, up mode
void setPWM(void)
{
CCR0=999; // PWM tan so 1kHZ
CCTL1 = OUTMOD_7; // CCR1 reset/set
}
7.
đồ nguyên mạch thực tế
Khối nguồn
Khối điều khiển
Khối hiển th
8.
Mạch in PCB layout
Khối nguồn
Khối điều khiển
Khối hiển th
9.
Kết luận đề i
- hình phỏng quạt tự động dùng cảm biến nhiệt độ LM35 điều khiển quạt DC, hiển thị
thông số nhiệt độ ra LED 7 đoạn hoạt động ổn
-Nhược điểm: chưa thực hiện được chức năng cài đặt theo thời tiết từng mùa
| 1/18

Preview text:

LƯƠNG PHƯỚC THỊNH B1807018
BÁO CÁO ĐỒ ÁN CUỐI KỲ
KỸ THUẬT VI XỬ (CT141)
1. Mục tiêu giới hạn của đề tài
Mục tiêu: thiết kế được mô hình mô phỏng quạt tự động đo nhiệt độ môi trường và hiển thị kết
quả đo được trên LED 7 đoạn
2. Sơ đồ khối Hiển thị LED 7 đoạn Nhiệt độ đo được Nhiệt độ cài đặt Hiển thị mức Output Input Cảm biếến nhiệt độ MSP430 Điếều khiển motor LM35 quạt DC Output Input Nút nhấến cài đặt nhiệt độ ngưỡng
3. Lựa chọn linh kiện Đối với đề tài này:
- Chọn MSP430G2553 có tích hợp chức năng biến đổi ADC
- Sử dụng cảm biến nhiệt độ LM35 có ngõ ra là điện thế để có thể dùng chức năng biến đổi ADC
được tích hợp trong chip vi điều khiển
- Chọn LED 7 đoạn anode chung
- IC giải mã 7447 cho LED 7 đoạn chuyển đổi từ mã BCD để tiết kiệm chân cho chip vi điều khiển
- Opto PC817 làm đầu ra của vi điều khiển để điều khiển quạt - Quạt DC 12V
4. Mô hình phỏng
-Do chip MSP430G2553 mô phỏng không chính xác ADC trong Protues nên ta chọn chip tương
đương là MSP430F2122. Về GPIO chip này có đến 3 port nhiều hơn MSP430G2553 loại 20
chân chỉ có 2 Port vào ra (port 1 và port2). Nên trong mô phỏng chỉ dùng port 1 và port 2 của chip MSP430F2122
-LED 7 đoạn được giải mã qua IC 7447 để tiết kiệm tài nguyên
5. Lưu đồ giải thuật BEGIN
Khởi tạo ngắt ngoài cho nút nhấnKhởi tạo ADC10
Khởi tạo mã LED 7 đoạn Khởi tạo xung PWM cho
motorHiển thị các thông tin
Đọc nhiệt độ từ cảm biến
Hiển thị nhiệt độ đo được
Hiển thị nhiệt độ cài đặt Nhiệt độ đo Đ
Quạt quay(tốếc độ phụ được> nhiệt độ thuộc vào mức nhiệt ngưỡng độ)và hiển thị mức S
Hiển thị nhiệt độ đo được
Hiển thị nhiệt độ cài đặt
tả hoạt động
-LED 7 đoạn sẽ hiển thị nhiệt độ đo được từ cảm biến LM35 , nhiệt độ cài đặt và các mức nhiệt
-Nhiệt độ cài đặt có thể điều chỉnh tăng giảm bằng nút nhấn. Khi ấn TANG thì nhiệt độ ngưỡng
sẽ tăng lên 1 đơn vị, khi ấn GIAM thì nhiệt độ ngưỡng sẽ giảm lên 1 đơn vị.
- Khi nhiệt độ đo được lớn hơn nhiệt độ ngưỡng quạt sẽ quay tùy theo từng mức nhiệt độ mà tốc độ
quạt nhanh hay chậm và LED 7 đoạn sẽ hiển thị mức nhiệt độ
-Nếu nhiệt độ đo được nhỏ hơn nhiệt độ ngưỡng thì quạt không quay hoặc đang quay thì sẽ quay chậm
dần rồi dừng hẳn. LED 7 hiển thị mức sẽ hiện mức 00
6. Chương trình chính #include "msp430f2122.h" void hienthi(int); void hienthicanhbao(int); void hienthimuc(int);
int nhietdo, giatri_nhietdo=28; void in_out(void); void timer(void); void setPWM(void); int value;
int maled[10]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09};// ma BCD void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop WDT
// KHAI BAO NGAT NGOAI CHO TANG/GIAM P2IE |= BIT5+BIT6; P2IES |= BIT5+BIT6; P2IFG &= ~ (BIT5+BIT6); // CHON TAN SO DCO
BCSCTL1 = CALBC1_1MHZ; // Set DCO range DCOCTL = CALDCO_1MHZ; // 1.5V ->1023 = ADC10MEM
// ADC10ON, interrupt enabled => CHON DIEN THE THAM CHIEU NOI LA 1.5
ADC10CTL0 = SREF_1+ ADC10SHT_2 + REFON + ADC10ON + ADC10IE; ADC10CTL1 |= INCH_4; ADC10AE0 |= BIT4; // A4 ADC option select
P1DIR |= BIT6+BIT7+BIT4+BIT5+BIT0+BIT1; // P1.6 = hang chuc, P1.7 = hang don vi
P2DIR |= BIT0+BIT1+BIT2+BIT3;// xuat data ra led 7 doan // DIEU KHIEN QUAT in_out(); timer(); setPWM(); value=333; _BIS_SR(GIE); while(1) { TACCR1=value; ADC10CTL0 |= ENC + ADC10SC;
// Sampling and conversion start
// XUAT NHIET DO NGUONG CANH BAO
// HIEN THI DUOC NHIET DO RA LED 7SEG nhietdo=ADC10MEM*150/1023; hienthi(nhietdo);
hienthicanhbao(giatri_nhietdo);
if( nhietdo < giatri_nhietdo ) { value=0; // MUC 0 hienthimuc(0); }
if(giatri_nhietdo <= nhietdo&&nhietdo<=33) { value=333 +150; // MUC 1 hienthimuc(1); }
if(33 < nhietdo&&nhietdo<=38) { value=333 +300; // MUC 2 hienthimuc(2); } if(38 < nhietdo) { value=933; // MUC 3 hienthimuc(3); } } }
#pragma vector=TIMER0_A0_VECTOR
interrupt void Timer0_A0 (void) { TACCR1 = value; }
// ADC10 interrupt service routine #pragma vector=ADC10_VECTOR
interrupt void ADC10_ISR(void) {
bic_SR_register_on_exit(CPUOFF);
// Clear CPUOFF bit from 0(SR) } // INTERRUPT ISR #pragma vector=PORT2_VECTOR
interrupt void TANG_GIAM(void) { // AN TANG NHIET DO if(P2IFG&BIT5) {giatri_nhietdo +=1; if (giatri_nhietdo==100) giatri_nhietdo=28; } P2IFG &= ~BIT5; // AN GIAM NHIET DO if(P2IFG&BIT6) {giatri_nhietdo -=1; if (giatri_nhietdo==35) giatri_nhietdo=28; } P2IFG &= ~BIT6; }
// HIEN THI NHIET DO RA LED 7SEG void hienthi(int so_hien_thi) { int so_chuc,so_donvi; so_chuc=so_hien_thi/10; so_donvi=so_hien_thi%10; P1OUT = BIT7; P2OUT = maled[so_donvi]; delay_cycles(1000); P1OUT = BIT6; P2OUT = maled[so_chuc]; delay_cycles(1000); } // hien thi nhiet do canh bao
void hienthicanhbao(int nhietdo_canhbao) { int so_chuc,so_donvi; so_chuc=nhietdo_canhbao/10; so_donvi=nhietdo_canhbao%10; P1OUT = BIT5; P2OUT = maled[so_donvi]; delay_cycles(1000); P1OUT = BIT4; P2OUT = maled[so_chuc]; delay_cycles(1000);; } // HIEN THI SO MUC void hienthimuc(int so_muc) { P1OUT = BIT1; P2OUT = maled[so_muc]; delay_cycles(1000); P1OUT = BIT0; P2OUT = maled[0]; delay_cycles(1000); } // DIEU KHIEN QUAT void in_out(void) { P1DIR |= BIT2; P1SEL |= BIT2; } void timer(void) { CCTL0=CCIE; TACTL = TASSEL_2 + MC_1; } // SMCLK, up mode void setPWM(void) { CCR0=999; // PWM tan so 1kHZ
CCTL1 = OUTMOD_7; // CCR1 reset/set }
7. Sơ đồ nguyên mạch thực tế Khối nguồn
Khối điều khiển
Khối hiển thị
8. Mạch in PCB layout Khối nguồn
Khối điều khiển
Khối hiển thị
9. Kết luận đề tài
- Mô hình mô phỏng quạt tự động dùng cảm biến nhiệt độ LM35 điều khiển quạt DC, hiển thị
thông số nhiệt độ ra LED 7 đoạn hoạt động ổn
-Nhược điểm: chưa thực hiện được chức năng cài đặt theo thời tiết từng mùa