Tải bản đầy đủ (.docx) (20 trang)

Điều khiển thiết bị điện trong nhà qua module thu phát RF 315m dung msp430

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (768.97 KB, 20 trang )

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN ĐIỆN TỬ - VIỄN THÔNG
*******************************
MÔN ĐỒ ÁN II
Báo cáo tiến độ Đồ Án II:
Điều khiển thiết bị điện trong nhà qua
Module thu phát RF 315M
Giáo viên hướng dẫn :
Sinh viên:
MỤC LỤC:
I.Tổng quan về MSP430.
II.Giới thiệu về KIT Launch Pad.
III.Phần thực hành trên KIT.
Phần I. Tổng quan về MSP430:
MSP 430 là họ vi điều khiển cấu trúc RISC 16-bit được sản xuất bởicông ty Texas
Instruments.MSP là chữ viết tắt của “MIXED SIGNAL MICROCONTROLLER”
- Làdòng vi điều khiển siêu tiết kiệm năng lượng, sử dụng nguồn thấp, khoảng
điệnáp nguồn cấp từ 1.8V – 3.6V
-MSP 430 kết hợp các đặc tính của một CPU hiện đại và tích hợp sẵn các module
ngoại vi. Đặc biệt ChípMSP 430 là giải pháp thích hợp cho những ứng dụng yêu
cầu trộn tín hiệu.
-Những đặc tính của dòng MSP 430 bao gồm:
+Điện áp nguồn: 1.8V – 3.6 V.
+Mức tiêu thụ năng lượng cực thấp:
+Chế độ hoạt động: 270 μA tại 1MHz, 2,2 V.
+Chế độ chờ: 0.7 μA.
+Chế độ tắt (RAM vẫn được duy trì): 0.1 μA.
+Thời gian đánh thức từ chế độ Standby nhỏ hơn 1μs.
+Cấu trúc RISC-16 bit, Thời gian một chu kỳ lệnh là 62.5 ns
+Cấu hình các module Clock cơ bản:
+Tần số nội lên tới 16 MHz với 4 hiệu chỉnh tần số +- 1%.


+Thạch anh 32 KHz.
+Tần số làm việc lên tới 16 MHz.
+Bộ cộng hưởng.
+Nguồn tạo xung nhịp bên ngoài.
+Điện trở bên ngoài.
+Timer_A 16 bit với 3 thanh ghi hình, 3 thanh ghi so sánh độ rộng 16 bit.
+Timer_B 16 bit với 3 thanh ghi hình, 3 thanh ghi so sánh độ rộng 16 bit.
+Giao diện truyền thông nối tiếp:
+Hỗ trợ truyền thông nối tiếp nâng cao UART, tự động dò tìmtốc độ Baud.
+Bộ mã hóa và giải mã IrDA (Infrared Data Associatio).
+Chuẩn giao tiếp động bộ SPI.
+Chuẩn giao tiếp I2C.
+Bộ chuyển đổi ADC 10 bit, 200 ksps với điện áp tham chiếu nội, Lấymẫu và
chốt. Tự động quét kênh, điều khiển chuyển đổi dữ liệu.
+Hai bộ khuếch đại thuật toán (hoạt động) có thể định cấu hình (Đối vớiMSP
430x22x4).
+Bảo vệ sụt áp.
+Bộ nạp chương trình.
+Module mô phỏng trên chip.
+Các thành viên của dòng MSP 430 bao gồm:
+MSP430G2553: 16MB + 16kB Flash Memory 512B RAM.
MSP43G2213: 16MB + 2KB Flash Memory 256B RAM
MSP430G2203: 16MB + 2KB Flash Memory 256B RAM.
-
MSP430G2303: 16MB + 4KB Flash Memory 256B RAM
MSP430G2313: 16MB + 4KB Flash Memory 256B RAM
-MSP430 được sử dụng và biết đến đặc biệt trong những ứng dụng về thiết bịđo có
sử dụng hoặc không sử dụng LCD với chế độ nguồn nuôi rất thấp. Với chế
độnguồn nuôi từ khoảng 1,8 đến 3,6v và 5 chế độ bảo vệ nguồn.Với sự tiêu thụ
dòng rất thấp trong chế độ tích cực thì dòng tiêu thụ là 200uA,1Mhz, 2.2v; với chế

độ standby thì dòng tiêu thụ là 0.7uA. Và chế độ tắt chỉ duy trì bộ nhớ Ram thì
dòng tiêu thụ rất nhỏ 0.1uA.MSP430 có ưu thế về chế độ nguồn nuôi. Thời gian
chuyển chế độ từ chế độstandby sang chế độ tích cực rất nhỏ (< 6us). Và có tích
hợp 96 kiểu hình cho hiểnthị LCD. 16 bit thanh ghi, 16 bit RISC CPU.Có một đặc
điểm của họ nhà MSP là khi MCU không có tín hiệu dao độngngoại, thì MSP sẽ tự
động chuyển sang hoạt động ở chế độ dao động nội.
Sơ đồ chân của các dòng MSP430G2x53va MSP430G2x13:
Thanh ghi vào /ra
-Bộ định thời:
MSP430 có hai bộ định thời 16 Bit là Timer_A và Timer_B nó cũng đồngthời
đóng vai trò là bộ đếm.
Timer_A:Đặc tính của Timer_A:
Là một bộ Timer/Counter 16 bit. Với ba thanh ghi lưu trữ và 3 thanh ghi sosánh.
Là một Timer đa chức năng. Đếm thời gian, so sánh, PWM . Timer_Acũng có khả
năng ngắt khi counter đếm tràn hoặc mỗi thanh ghi đếm tràn. Cácđặc tính chính
của Timer_A bao gồm:+ Là một Timer/counter 16 Bit không đồng bộ với 4 chế độ
hoạt động.+ Có thể lựa chọn và cấu hình nguồn xung+ Hai tới 3 thanh ghi có thể
cấu hình capture/compare+ Cấu hình đầu ra với chế độ PWM+ Chốt ngõ vào và
ngõ ra không đồng bộ.
Sơ đồ khối của Timer_A
Phần 2: Giới thiệu về kit launch pad
1.1.Giới thiệu kit:
Hình minh họa kit LaunchPad Rev.1.1 (bản ổn định hiện tại là Rev.1.5) :
Một kit LaunchPad gồm hai thành phần, với GND được phủ chung:
- Nửa trên: Là phần mạch nạp theo chuẩn spy-bi-wire Jtag (2 dây), kết hợp với
chuyển đổi giao tiếp UART với máy tính. Trên cùng là đầu USBmini để nối với
máy tính, phía dưới là hàng Header để nối ra đối tượng cần giao tiếp, bao gồm các

chân:
· TXD, RXD: phục vụ giao tiếp UART với máy tính.
· RST, TEST: phục vụ nạp và debug (sửa lỗi) theo chuẩn spy-bi-wire Jtag.
· VCC: cấp nguồn 3V3 cho đối tượng (thường là nửa dưới LaunchPad).
- Nửa dưới: là một mạch phát triển MSP430 đơn giản, bao gồm:
· Socket cắm MSP430 (thường gắn sẵn chip MSP430G2553), Pad hàn thạch anh,
Nút nhấn Reset chip.
· Nút nhấn gắn vào P1.3, hai Led hiển thị có jumper để gắn vào P1.0 và P1.6. Hai
hàng header để kết nối hai hàng chân của chip ra ngoài, một hàng header
nguồnGND-GND-VCC để lấy nguồn 3V3 trên LaunchPad.
1.2.Sơ đồ chân:
1.3.Cấp nguồn cho kit:
Việc cấp nguồn cho mạch main có thể tiến hành bằng 3 cách:
*Cp ngun ngoi vo mch Main
- Nguồn ngoài được cấp qua Domino J1 trong khối nguồn của mạch. Nguồn vào có thể
là AC hay DC, dải điện áp từ 8V đến 30V. Với phương án này, tổng dòng tiêu thụ của
mạch giới hạn ở khoảng 1A (giới hạn của 7805). Cụ thể, chúng ta có thể lựa chọn biến
áp 220V/12-24V; các cục sạc (adapter) AC, DC 9V, 12V, 19V, …; Ac-quy 12-24V; Pin
9V, …
- Ngoài ra, nếu có nguồn DC 5V, 3V3 bên ngoài thì có thể cắm vào header nguồn
J2 (5V) hay J14 (3V3) để sử dụng. Khi làm cách làm này cần phải chắc chắn, đảm
bảo điện áp cấp trong khoảng từ 3v3 đến 5v
- Sau khi cấp nguồn, Led D1, D2 sẽ sáng. Ta gạt công tắc để Led D4 sáng, cấp
nguồnMSP430
*Tận dụng nguồn 3V3 trên launch pad:
- Nguồn 3V3 LaunchPad được cấp qua header J11, với dòng tối đa
khoảng 250mA.
- Nguồn trên Launch Pad có thể lấy từ nhiều điểm, được đánh dấu
là VCC và GND (chú ý trạng thái của jumper VCC khi lấy nguồn). Thông thường,

ta giữ jumperVCC và lấy nguồn tự cụm header GND-GND-VCC phía dưới kit.
- Sau khi cấp nguồn vào J11, Led D3 sẽ sáng. Ta gạt công tắc để Led D4 sáng, cấp
nguồn cho MSP430
- Chú ý là khi mạch chỉ được cấp nguồn 3V3, các module dùng nguồn
5V (LCD, )sẽ không hoạt động.
*Tận dụng nguồn 5V
- LaunchPad có thiết kế lỗ TP1 (5V), TP3 (GND) để người dùng lấy nguồn USB-
5V từ máy tính khi cần thiết. Chúng ta có thể hàn thêm header để lấy nguồn tại đây
(chỉ cần hàn header vào TP1 là đủ, GND có thể lấy từ nhiều vị trí khác TP3).
- Nguồn USB-5V có dòng tối đa khoảng 500mA, đủ cho việc chạy LCD trên mạch
Main. Tuy nhiên, khi sử dụng nguồn này cần phải cẩn thận, tránh để chập nguồn,
ảnh hưởng đến hoạt động của máy tính. Đặc biệt chú ý phần vỏ ngoài của đầu cắm
USBmini được bắt dính với GND, không để cho header ở TP1 dính vào đây.
- Chúng ta cấp nguồn 5V-USB này vào mạch Main ở header nguồn J2 (5V). Sau
khi cấp nguồn, Led D1, D2 sẽ sáng. Ta gạt công tắc để Led D4 sáng, cấp nguồn
cho MSP430.
Phần 3: Thực hành trên kit:
Code giao tiếp spi giữa msp430g2553 và capacitive touch
#include <msp430g2553.h>
int count_default[5], count_edge[5], k;
char touch[4], touch_rem[4], touch_count[4], j, i, key, speed = 1, mode = 0,
proximity = 0, slider = 0;
const char sensivity = 30; //Threshold
void Init(void)
{
P1DIR |= 0xff;
P1SEL &= ~(BIT2 + BIT3 + BIT4 + BIT5); // Pin-Osc: PxSEL.x = 0; PxSEL2.x = 1;
P1OUT &= ~(BIT2 + BIT3 + BIT4 + BIT5);
P2DIR = 0xff;
P2OUT &= ~BIT6;

P2SEL &= ~BIT6; // Pin-Osc: PxSEL.x
= 0; PxSEL2.x = 1;
//Config timer A
TA0CTL = TASSEL_3+MC_2; // TACLK, cont mode
TA0CCTL1 = CM_3+CCIS_3+CAP; // Pos&Neg,GND,Cap
}
void Get_info(void)
{
P2SEL2 &= ~BIT6; //P2.6 -> Output
P2OUT &= ~BIT6; //P2.6 -> Ground
for (j = 0; j < 4; j++)
{
P1SEL2 &= ~(BIT2 + BIT3 + BIT4 + BIT5);
P1SEL2 |= 0x04 << j; // Pin-Osc: PxSEL.x = 0; PxSEL2.x = 1;
TA0CTL |= TACLR; // Clear Timer_A TAR
_delay_cycles(300); // Delay to count
TA0CCTL1 ^= CCIS0; // Create SW capture of CCR1
count_edge[j] = TACCR1; // Save result
}
// Set P2.6 : Pin-Osc (Proximity)
// Set P1.2 -> P1.5 are output, Turn off Pin-Osc
P1SEL2 &= ~(BIT2 + BIT3 + BIT4 + BIT5);
P1DIR |= BIT0 + BIT2 + BIT3 + BIT4 + BIT5 + BIT6;
P1OUT &= ~(BIT2 + BIT3 + BIT4 + BIT5); // Set P1.2 -> P1.5 = 0;
P2SEL2 |= BIT6;
TA0CTL |= TACLR; // Clear Timer_A TAR
_delay_cycles(10000);
TA0CCTL1 ^= CCIS0; // Create SW capture of CCR1
count_edge[4] = TACCR1; // Save result
}

void main(void)
{
WDTCTL = WDTPW + WDTHOLD; //Stop Watchdog Timer
Init(); //
touch_count[0]=1;
for (i = 0; i < 10; i++)
{
Get_info();
for (j = 0; j < 5; j++)
count_default[j] = (count_default[j] + count_edge[j]) /2;
}
while (1)
{
Get_info();
for (i = 0; i < 4; i++)
{
touch_rem[i] = touch[i];
if ((count_edge[i] + sensivity) < count_default[i]) //
{
if (touch_count[i] > 0)
touch_count[i]++;
touch[i] = 1;
}
else
{
touch[i] = 0;
touch_count[i] = 1;
}
if (touch_count[0] > 100)
{

touch_count[0] = 0;
proximity = ++proximity % 2;
P1OUT ^= BIT0;
}
if ((touch[i] != touch_rem[i]) && (touch[i] == 1))
{
if (touch_rem[(i-1) % 4] == 1)
slider =1;
if (touch_rem[(i+1) % 4] == 1)
slider = 2;
switch (i)
{
case 0:
break;
case 1:
speed++;
if (speed > 10)
speed = 10;
break;
case 2:
mode = ++mode % 3;
if (mode == 2)
{
P1OUT &= ~0x41;
P1OUT |= BIT0;
}
break;
case 3:
speed ;
if (speed < 1)

speed = 1;
break;
}
}
}
if (slider == 1)
{
P1OUT &= ~0x41;
for (i = 0; i < 29; i++)
{
P1OUT ^= BIT0;
_delay_cycles(100000);
}
}
else if (slider == 2)
{
P1OUT &= ~0x41;
for (i = 0; i < 29; i++)
{
P1OUT ^= BIT6;
_delay_cycles(100000);
}
}
switch (proximity)
{
case 0:
{
switch (mode)
{
case 0:

P1OUT &= ~BIT6;
P1OUT |= BIT0;
break;
case 1:
P1OUT &= ~BIT0;
P1OUT |= BIT6;
break;
case 2:
k = ++k % (3 * speed);
if (k == 0)
P1OUT ^= 0x41;
break;
}
_delay_cycles(2000);
}
break;
case 1:
if (count_edge[4] > count_default[4])
count_default[4] = (count_default[4] + count_edge[4])/2;
for (i = 0; i < 150; i++)
{
if (i < count_default[4] - count_edge[4] - 10)
P1OUT |= BIT0 + BIT6;
else
P1OUT &= ~(BIT0 + BIT6);
_delay_cycles(15);
}
break;
}
slider = 0;

}
}

×