LẬP TRÌNH NHÚNG CHO KHỐI ĐIỀU KHIỂN TRUNG TÂM

Một phần của tài liệu Thiet ke va xay dung mach dieu khien (Trang 42)

3.2.1 Công cụ phần mềm lập trình

Lập trình cho khối điều khiển trung tâm sử dụng phần mềm Imagecraft C for MSP430. Có thể download phiên bản demo 45 ngày tại trang web: http://www.imagecraft.com

Công cụ lập trình này với giao diện thân thiện, sử dụng trình biên dịch C. Có thể nạp cho vi điều khiển trực tiếp thông qua JTAG mà không cần sử dụng phần mềm nạp hỗ trợ.

3.2.2 Lập cấu hình hoạt động cho khối điều khiển trung tâm

Sơ đồ khối và nguyên lý hoạt động của các khối được trình bày trong chương 2.Trong phần này chúng ta chỉ trình bày cách cấu hình bằng phần mềm cho các khối hoạt động.

Việc cấu hình cho các khối dựa vào việc đặt các bit trong thanh ghi điều khiển của từng khối, mỗi bit hay nhóm bit trong thanh ghi điều khiển này sẽ quy định tác vụ tương ứng của mỗi khối. Ví dụ, muốn bật chức năng biến đổi tương tự-số của bộ biến đổi ADC12 chỉ cần bật bit ADC12ON trong thanh ghi điều khiển ADC12CTL0 (ADC12 Control Register 0) của bộ biến đổi ADC12.

3.2.2.1 Cấu hình cho khối ADC12Thanh ghi điều khiển ADC12 Thanh ghi điều khiển ADC12

SHT1x Bits 15-12

Thời gian lầy và giữ mẫu. Các bit này định nghĩa số chu kỳ xung ADC12CLK trong khoảng thời gian lấy mẫu cho các thanh ghi ADC12MEM8 tới ADC12MEM15

SHT0x Bits

11-8

Thời gian lấy và giữ mẫu. Các bit này định nghĩa số chu kỳ xung ADC12CLK trong thời gian lấy mẫu cho các thanh ghi ADC12MEM0 tới ADC12MEM7

MSC Bit 7 Lấy mẫu và chuyển đổi đa hợp.

0 Khoảng thời gian lấy mẫu yêu cầu tín hiệu SHI.

1 Sườn lên đầu tiên của tín hiệu SHI kích hoạt thời gian lấy mẫu

REF2_5V Bit 6 Điện thế quy chiếu. Bít REFON phải được bật.

0 1.5V

1 2.5V

ADC12ON Bit 4 ADC12ON

0 ADC12 off

1 ADC12 on

ADC12OVIE Bit 3 ADC12MEMS cho phép ngắt tràn

0 Không cho phép ngắt tràn 1 Cho phép ngắt tràn

ENC Bit 1 Cho phép biến đổi

0 Không cho phép ADC12

1 Cho phép ADC12

ADC12SC Bit 0 Bắt đầu chuyển đổi

0 không bắt đầu lấy mẫu và chuyển đổi 1 bắt đầu lấy mẫu và chuyển đổi

Thanh ghi điều khiển ADC12

ADC12CTL1, ADC12 Control Register 1

CSTART ADDx

Bits 15-12

Địa chỉ bắt đầu chuyển đổi. Những bit này lựa chọn thanh ghi bộ nhớ cho lần chuyển đổi đầu tiên. Giá trị của CSTARTADDx từ 0 đến 0Fh tương ứng với ADC12MEM0 tới ADC12MEM12.

SHSx Bits

11-10

Lựa chọn nguồn xung lấy và giữ mẫu

0 ADC12SC bit

1 Timer_A.OUT1

SHP Bit 9 Lựa chọn chế độ xung lấy và giữ mẫu

0 Tín hiệu SAMPCON là nguồn được lấy từ tín hiệu đầu vào lấy mẫu

1 Tin hiệu SAMPCON là nguồn được lấy từ khoảng thời gian lấy mẫu

ISSH Bit 8 Đảo tín hiệu lấy và giữ mẫu

0 tín hiệu lấy và giữ mẫu không đảo 1 tín hiệu lấy và giữ mẫu đảo

ADC13DIVx Bits

7-5

Chia xung ADC12

00 /1 001 /2 010 /3 011 /4 100 /5 101 /6

10 MCLK 11 SMCL

CONSEQx Bits

2-1

Lựa chọn chế độ chuyển đổi 00 đơn kênh, chuyển đổi đơn 01 đa kênh

10 lặp lại đơn kênh 11 lặp lại đa kênh

ADC12BUSY Bit 0 ADC12 bận

0 không hoạt động nào tích cực

1 lấy mẫu, hay chuyển đổi đang tích cực

Ví dụ chương trình lấy biển đổi ADC sau đó biến đổi thành DAC

#include<msp430x16x.h> void delay(long time){

while(time--){}; }

void main(){

WDTCTL = WDTPW + WDTHOLD; P6SEL |= 0xFF;

ADC12CTL0 = ADC12ON+REFON+REF2_5V+SHT0_1+MSC;// bật ADC, chọn // điện áp tham chiếu cho bộ ADC là 2.5V

ADC12CTL1 = SHP+ADC12SSEL_2+CONSEQ_2; ADC12CTL0 |= ENC;

ADC12CTL0 |= ADC12SC;

DAC12_0CTL = DAC12IR + DAC12AMP_5 + DAC12ENC; delay(10000);

while(1){

DAC12_0DAT = ADC12MEM0; }}

3.2.2.2 Cấu hình cho khối DAC12Thanh ghi điều khiển DAC12 Thanh ghi điều khiển DAC12

DAC12 SREFx

Bits 14-13

Lựa chọn điện áp tham chiếu cho DAC12 00 VREF+ 01 VREF+ 10 VeREF+ 11 VeREF+ DAC12 RES Bits 12

Lựa chọn độ phân giải cho DAC12 0 độ phân giải 12 bit

1 độ phân giải 8 bit

DAC12IR Bit 8 Độ rộng đầu vào DAC12. Những bit này đặt độ rộng tham chiếu đầu vào và đầu ra.

0 Mức đầu ra DAC12 = 3x điện áp quy chiếu 1 Mức đầu ra DAC12 = 1x điện áp quy chiếu DAC12

AMPx

Bits 7-5

DAC12IE Bit 3 Cho phép ngắt DAC12 0 không cho phép 1 cho phép DAC12

ENC

Bit 1 Cho phép biến đổi DAC12. Những bit này cho phép module DAC12 khi bit DAC12LSELx > 0, khi DAC12LSELx = 0, DAC12ENC được bỏ qua.

0 không cho phép DAC12

Ví dụ chương trình tạo xung tam giác #include <msp430x16x.h>

void delay(long time){

while(time--){}; }

void main(void) {

unsigned int i;

WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer P6DIR = 0xFF;

P6SEL = 0x40;

ADC12CTL0 = REF2_5V + REFON; // Internal 2.5V ref on

DAC12_0CTL = DAC12IR + DAC12AMP_5 + DAC12ENC; // Internal ref gain 1 while(1){ i = 0; while(i < 4096){ DAC12_0DAT = i; // 2 i = i + 10; } while(i > 0){ DAC12_0DAT = i; // 2 i = i - 10; } }}

3.2.2.3 Cấu hình cho khối UARTThanh ghi điều khiển UART Thanh ghi điều khiển UART

PENA Bit 7 Cho phép chẵn lẻ

0 không cho phép chẵn lẻ 1 cho phép chẵn lẻ

PEV Bit 6 Lựa chọn chẵn lẻ. PEV không được sử dụng khi bit chẵn lẻ

không cho phép. 0 chẵn lẻ lẻ 1 chẵn lẻ chẵn

SPB Bit 5 Lựa chọn bit stop

0 một bit stop 1 hai bit stop

CHAR Bit 4 Chiều dài kí tự

0 dữ liệu là 7 bit 1 dữ liệu là 8 bit

LISTEN Bit 3 Cho phép lắng nghe

0 không cho phép 1 cho phép

SYNC Bit 2 Cho phép chế độ đồng bộ

0 chế độ UART 1 chế độ SPI

Thanh ghi UxTCTL, thanh ghi điều khiển truyền

Unused Bit 7 Bit này không được sử dụng

CKPL Bit 6 Lựa chọn xung chẵn lẻ

0 UCLKI = UCLK 1 UCLKI = đảo UCLK

SSELx Bits

5-4

Lựa chọn nguồn xung. Những bit này lựa chọn nguồn xung BRCLK

00 UCLKI 01 ACLK 10 SMCLK 11 SMCLK

URXSE Bit 3 Sườn xung bắt đầu nhận UART.

0 không cho phep 1 cho phép

TXEPT Bit 0 Cờ bộ truyển trống

0 UART thực hiện truyền dữ liệu và/hay đợi trong UxTXBUF

1 thanh ghi dịch của bộ truyền và UxTXBUF rỗng hay SWRST = 1

Thanh ghi điều khiển nhận USART

FE Bit 7 Cờ báo lỗi khung truyền

0 không lỗi

1 kí tự nhận được với bit stop là mức thấp

PE Bit 6 Cờ báo lỗi chẵn lẻ. Khi PENA = 0, PE được đọc như là 0. 0 không báo lỗi

1 kí tự nhận được với bit chẵn lẻ lỗi

Ví dụ chương trình truyền nhận USART của vi điều khiển MSP430F167

#include <msp430x16x.h> void UART1_init(void) { P3DIR |= BIT6; P3SEL |= 0xC0; // P3.6,7 = USART1 TXD/RXD //UCTL1 &= ~SWRST;

ME2 |= UTXE1 + URXE1; // Enable USART1 TXD/RXD

UCTL1 |= CHAR; // 8-bit character, No parity, 1 start bit, 1 stop bit UTCTL1 |= SSEL1; // UCLK = SMCLK = 8.00 MHz

UBR01 = 139; // 8.00M/57600 -> 139 UBR11 = 0x00; //

// UMCTL1 = 0x45; // Modulation = 0.375 UCTL1 &= ~SWRST; // Initialise USART1

//IE2 |= URXIE1; // Enable USART1 RX interrupt }

3.2.3 Kết luận

Việc cấu hình cho các khối trong khối xử lý trung tâm không quá phức tạp. Chúng ta cần hai yếu tố: nguyên lý hoạt động từng khối và các thanh ghi điều khiển của chúng. Từ đó chúng ta cấu hình tuỳ theo mục đích yêu cầu của cấu hình là gì. Việc cấu hình bằng ngôn ngữ phần với câu lệnh đơn giản gọn nhẹ. Đây cũng là một trong những ưu điểm lớn của công cụ phần mềm này. Nó giúp chúng ta dễ tiếp cận hơn với vi điều khiển MSP430F167 cũng như họ MSP430x1xx của loại vi điều khiển này.

Chương 4

Kết luận

Sau một thời gian tìm hiểu lý thuyết và thực nghiệm, khóa luận đã thu được một số kết quả như sau:

Về lý thuyết:

Tìm hiểu tổng quan về cấu trúc của vi kẹp có gắn cảm biến. Đặc điểm của bộ chấp hành điện nhiệt, mối liên hệ giữa độ dịch chuyển miệng của vi kép với điện áp cung cấp. Độ dịch chuyển tối đa giữa hai miệng của vi kẹp là 32 µm khi cung cấp một điện thế 4.5 V và tương ứng với công suất tiêu thụ trung bình cần 5 mW cho 1 µm dịch chuyển của miệng vi kẹp.

Tìm hiểu tổng quan về họ vi điều khiển MSP430x1xx với một CPU kiến trúc theo kiểu RISC 16 bit. Hệ thống giao tiếp ngoại vi, hệ thống đồng hồ linh hoạt. Bộ chuyển đổi tương tự-số (ADC12) và bộ chuyển đổi số-tương tự (DAC)12 bit. Ứng dụng vi điều khiển MSP430F167 cho mạch điều khiển vi kẹp có gắn cảm biến.

Về thực nghiệm:

Khóa luận đã thiết kế, chế tạo được mạch điều khiển vi kẹp có gắn cảm biến. Bo mạch này có khối khuếch đại tín hiệu vi sai từ cảm biến kiểu áp trở của vi kẹp, khối xử lý trung tâm, khối giao tiếp máy tính và khối điều khiển vi kẹp. Thí nghiệm điều khiển vi kẹp bằng bo mạch cho thấy mạch có khả năng cung cấp đủ công suất cho vi kẹp hoạt động theo như thông số kĩ thuật.

Hạn chế:

Tuy mạch đã điều khiển được vi kẹp chuyển động, đã có sự thay đổi giữa hai miệng của vi kẹp nhưng do khả năng hạn chế về mặt công cụ đo hỗ trợ nên trong quá trình thí nghiệm chưa khảo sát được chi tiết đặc tuyến phụ thuộc giữa điện áp cung cấp và dịch chuyển của miệng vi kẹp.

Phụ lục A

Mã nguồn chương trình điều khiển vi kẹp có gắn cảm biến từ PC

//********************************************************************** * // MAIN PROGRAM * //********************************************************************** * #include<msp430x16x.h> void delay(long time){

while(time--){}; }

void main(){

WDTCTL = WDTPW + WDTHOLD; P6SEL = 0x41;

ADC12CTL0 = SHT0_4 + REFON + REF2_5V; ADC12CTL1 = SHP + ADC12SSEL_1 + CONSEQ_1; delay(10000);

ADC12CTL0 |= ENC; ADC12CTL0 |= ADC12SC;

DAC12_0CTL = DAC12IR + DAC12AMP_5 + DAC12ENC; delay(10000); while(1){ DAC12_0DAT = ADC12MEM0; } } //********************************************************************************* ***

//Chương trình nhận và truyền tín hiệu giữa PC và vi điều khiển MSP430F167 * //********************************************************************************* *** #ifndef __UART169 #define __UART169 #include <msp430x16x.h> void UART1_init(void) {

UTCTL1 |= SSEL1; // UCLK = SMCLK = 8.00 MHz

UBR01 = 0x41; // 8.00M/57600 -> 139 UBR11 = 0x03; //

// UMCTL1 = 0x45; // Modulation = 0.375 UCTL1 &= ~SWRST; // Initialise USART1

//IE2 |= URXIE1; // Enable USART1 RX interrupt

}

void send_char_1(unsigned int s) {

while (!(IFG2 & UTXIFG1)); // USART1 TX buffer ready?

TXBUF1 = s; // char to TXBUF0 --> send

}

unsigned int get_char_1(void) {

while (!(IFG2 & URXIFG1)); return RXBUF1;

}

unsigned int get_char_0(void) {

while (!(IFG1 & URXIFG0)); return RXBUF0;

}

void send_12bit_1(unsigned int w) {

/*gui data 12 bit, thap truwoc, cao sau */ //lay 12 bit data

w &= 0x0FFF ; // 0000 xxxx xxxx xxxx data 12 bit //send Low_byte

send_char_1(w&0x3F); //00xx xxxx: low byte MSB = 0 // Delay(20);

//send Hi_byte

send_char_1((w>>6) | 0x40); //01xx xxxx Hight byte MSB = 1 }

unsigned int get_12bit(void){ unsigned int low,high,nhan;

low = get_char_1(); high = get_char_1(); if((low & 0xC0) == 0) { if((high & 0xC0) == 0xC0) { high &= 0x3F;

return (high*64 + low); }

} }

void UART0_init(void) {

P3SEL |= (BIT4+BIT5); //UCTL0 &= ~SWRST;

ME1 |= UTXE0 + URXE0; // Enable USART1 TXD UCTL0 |= CHAR; // 8-bit char, SWRST=1 UTCTL0 |= SSEL1; // UCLK = SMCLK

UBR00 = 0x8B; // 19200 from 8.00MHz = 416

UBR10 = 0x00;

UMCTL0 = 0x45; // Modulation = 0.375 UCTL0 &= ~SWRST; // Initialise USART0 //IE1 |= URXIE0; // Enable USART0 RX interrupt

}

void send_char_0(unsigned int s) {

// IE2 &= (~URXIE1);

while (!(IFG1 & UTXIFG0)); // USART1 TX buffer ready?

TXBUF0 = s; // char to TXBUF0 --> send

// IE2 |= URXIE1; // Enable USART1 RX interrupt

}

void send_10bit(unsigned int w) {

/*gui data 10 bit, thap truwoc, cao sau */ //lay 10 bit data

w &= 0x03FF ; // 0000 00xx xxxx xxxx data 10 bit //send Low_byte

send_char_0(w); //000x xxxx: low byte MSB = 0 //send Hi_byte

// Delay(20);

send_char_0((w>>5) | 0x20); //001x xxxx Hight byte MSB = 1 }

//****************************************************************** ************

void send_12bit_0(unsigned int w) {

// disable USART1 RX interrupt /*gui data 12 bit, thap truwoc, cao sau */

//lay 12 bit data

w &= 0x0FFF ; // 0000 xxxx xxxx xxxx data 12 bit //send Low_byte

Phụ lục B

Tài liệu tham khảo

[1] Ngô Diên Tập, Kĩ thuật ghép nối máy tính. NXB khoa học và kĩ thuật, 2005.

[2] Chử Đức Trình, Sensing Microgripper for Microparticle Handling. Luận văn TS, 2007.

[3] Trần Quang Vinh, Chử Văn An, Nguyên lý kĩ thuật điện tử. NXB ĐH QGHN, 2005.

[4] AD620 Low Cost,Low Power Instrumentation Amplifier.http://www.analog.com

[5] MSP430x1xx family User’s Guide(Re.F). http://www.focus.ti.com [6] MSP430f167 datasheet.http://www.datasheetcatalog.com

[7] William D.Stanly. Bộ khuếch đại và xử lý IC tuyến tính. NXB Khoa hoc- kĩ thuật, 1994.

[8] http://www.dientuvietnam.com [9] http://www.imagecraft.com

MỤC LỤC ... 1 HÀ NỘI - 2008 ... 1 ...3 Chương 1 ...1 Giới thiệu...1 1.1 Vi kẹp có gắn cảm biến...1 1.1.1 Giới thiệu ... 1 1.1.2 Chế tạo ... 1

1.1.3 Vi chấp hành điện nhiệt polymer-silicon ... 1

1.1.4 Thông số kỹ thuật của vi kẹp có gắn cảm biến ... 3

1.2 Bài toán xây dựng hệ thống điều khiển...7

1.3 Yêu cầu thiết kế hệ thống điều khiển...7

Chương 2...8

GIỚI THIỆU HỌ VI ĐIỀU KHIỂN MSP430x1xx...8

2.1 Giới thiệu...8

2.2 Không gian địa chỉ...8

2.2.1 Flash/ROM ... 9

2.2.2 RAM ... 9

2.2.3 Những khối ngoại vi ... 9

2.2.4 Những thanh ghi chức năng đặc biệt ( SFR ) ... 10

2.2.5 Truy cập bộ nhớ ... 10

2.3 Cổng vào/ra số...11

2.3.1 Giới thiệu vào/ra số ... 11

2.3.2 Hoạt động vào/ra số ... 11

2.3.3 Thanh ghi đầu vào PxIN ... 11

2.3.4 Thanh ghi ra PxOUT ... 11

2.3.5 Thanh ghi điều khiển PxDIR ... 11

... 11

2.3.6 Thanh ghi lựa chọn chức năng PxSEL ... 12

2.4 USART giao tiếp ngoại vi, chế độ UART...12

2.4.1 Chế độ hoạt động của UART ... 12

2.4.2 Khởi tạo và xác lập lại chế độ hoạt động USART ... 13

2.4.3 Dạng kí tự khung truyền ... 14

2.4.4 Định dạng truyền không đồng bộ ... 15

2.4.5 USART cho phép nhận ... 17

2.4.6 USART cho phép truyền ... 17

2.5 Bộ chuyển đổi tương tự số 12 bit ADC12...18

2.5.1 Giới thiệu ADC12 ... 18

2.5.2 Hoạt động của ADC12 ... 20

2.5.2.1 Nhân 12 bit của ADC12...20

2.5.2.2 Các đầu vào của ADC12 và bộ hợp kênh...20

2.5.2.3 Điện áp tham chiếu ...20

2.5.3 Các chế độ chuyển đổi ADC12: ... 23

2.5.3.1 Chế độ kênh-đơn chuyển đổi-đơn...24

2.5.3.4 Chế độ lặp lại kênh tuần tự...27

2.6 Bộ chuyển đổi số-tương tự DAC12...28

2.6.1 Giới thiệu về DAC12 ... 28

2.6.2 Hoạt động DAC12 ... 30

2.6.2.1 Nhân của DAC12...30

2.6.2.2 Lựa chọn cổng cho DAC12...31

2.6.2.3 Điện áp tham chiếu DAC12...31

2.6.2.4 Cập nhật đầu ra điện áp DAC12...31

Chương 3...32 THIẾT KẾ MẠCH...32 Phần 1...32 3.1 THIẾT KẾ PHẦN CỨNG...32 3.1.1 Đặt vấn đề ... 32 3.1.2 Đặc điểm kĩ thuật ... 32

3.1.3 Sơ đồ khối mạch thiết kế ... 32

3.1.4 Chức năng và sơ đồ nguyên lý từng khối ... 33

3.1.4.1 Khối khuếch đại tín hiệu từ sensor...33

3.1.4.2 Khối xử lý trung tâm...35

3.1.4.3 Khối ghép nối máy tính...35

3.1.4.4 Khối điều khiển vi kẹp...35

3.1.5 Thiết kế mạch bằng Protel 99SE ... 37

3.1.5.1 Mạch nguyên lý...37

3.1.5.2 Mạch in...37

3.1.6 Kết luận ... 37

Phần 2 ...38

3.2 LẬP TRÌNH NHÚNG CHO KHỐI ĐIỀU KHIỂN TRUNG TÂM...38

3.2.1 Công cụ phần mềm lập trình ... 38

3.2.2 Lập cấu hình hoạt động cho khối điều khiển trung tâm ... 38

3.2.2.1 Cấu hình cho khối ADC12...38

3.2.2.2 Cấu hình cho khối DAC12...42

3.2.2.3 Cấu hình cho khối UART...45

3.2.3 Kết luận ... 48

Chương 4 ...49

Kết luận...49

Phụ lục A...50

Mã nguồn chương trình điều khiển vi kẹp có gắn cảm biến từ PC...50

Phụ lục B...53

Một phần của tài liệu Thiet ke va xay dung mach dieu khien (Trang 42)

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

(60 trang)
w