lOMoARcPSD| 58504431
LƯƠNG PHƯỚC THỊNH
B1807018
BÁO CÁO ĐỒ ÁN CUỐI KỲ
KỸ THUẬT VI XỬ LÝ (CT141)
1. Mục tiêu và 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
Input
Hin
th
LED 7
đoạn
Nhiệt
độ đo
được
Nhiệt
độ
cài
đặt
Hin
th
mức
Output
Output
Input
Nút
nhn
cài đặt
nhit
độ
ngưỡn
g
SCảm biến nhiệt đ
LM35
SP MSP430
Điều khiển motor
quạt DC
lOMoARcPSD| 58504431
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 mô 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
lOMoARcPSD| 58504431
5. Lưu đồ giải thuật
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
Mô 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ị.
BEGIN
motorHiển thị các thông tin
Đọc nhiệt độ từ cảm biến
Hiển thị nhiệt độ đo được
hhiê
Nhiệt độ đo
được> nhiệt độ
ngưỡng
Quạt quay(tốc độ ph
độ)
và hiển thị mức
Hiển thị nhiệt độ đo được
Hiển thị nhiệt độ cài đặt
lOMoARcPSD| 58504431
- 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;
lOMoARcPSD| 58504431
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);
lOMoARcPSD| 58504431
}
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
lOMoARcPSD| 58504431
#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);
lOMoARcPSD| 58504431
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);
lOMoARcPSD| 58504431
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
}
lOMoARcPSD| 58504431
7. Sơ đồ nguyên lý mạch thực tế
Khối nguồn
lOMoARcPSD| 58504431
Khối điều khiển
Khối hiển thị
lOMoARcPSD| 58504431
8. Mạch in PCB layout Khối nguồn
lOMoARcPSD| 58504431
Khối điều khiển
lOMoARcPSD| 58504431
lOMoARcPSD| 58504431
Khối hiển thị
lOMoARcPSD| 58504431
lOMoARcPSD| 58504431
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

Preview text:

lOMoAR cPSD| 58504431
LƯƠNG PHƯỚC THỊNH B1807018
BÁO CÁO ĐỒ ÁN CUỐI KỲ
KỸ THUẬT VI XỬ LÝ (CT141)
1. Mục tiêu và 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 Nhiệt độ đo được 2. Sơ đồ khối Nhiệt độ cài đặt Hiển thị mức Output SP MSP430 Điều khiển motor quạt DC Output Input SCảm biến nhiệt độ Input LM35 Hiển Nút thị nhấn LED 7 cài đặt đoạn nhiệt độ ngưỡn g lOMoAR cPSD| 58504431
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 mô 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 lOMoAR cPSD| 58504431
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 hhiê Nhiệt độ đo
Quạt quay(tốc độ phụ được> nhiệt độ ngưỡng độ) và hiển thị mức
Hiển thị nhiệt độ đo được
Hiển thị nhiệt độ cài đặt
Mô 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ị. lOMoAR cPSD| 58504431
- 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; lOMoAR cPSD| 58504431 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); lOMoAR cPSD| 58504431 }
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 lOMoAR cPSD| 58504431 #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); lOMoAR cPSD| 58504431 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); lOMoAR cPSD| 58504431 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 } lOMoAR cPSD| 58504431
7. Sơ đồ nguyên lý mạch thực tế Khối nguồn lOMoAR cPSD| 58504431 Khối điều khiển Khối hiển thị lOMoAR cPSD| 58504431
8. Mạch in PCB layout Khối nguồn lOMoAR cPSD| 58504431 Khối điều khiển lOMoAR cPSD| 58504431 lOMoAR cPSD| 58504431 Khối hiển thị lOMoAR cPSD| 58504431 lOMoAR cPSD| 58504431
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