3.8.1. Chuyển đổi ADC
- Chuyển đổi A/D trong một số biến thể của LPC2000 là một bộ chuyển đổi 10 bít với tốc độ chuyển đổi 2.44 uSec hoặc 410KSps. Bộ chuyển đổi A/D có 4 hoặc 8 bít đầu ra tùy từng phiên bản.
Trang 84
Hình 3.30 Chuyển đổi A/D có 4 hoặc 8 kênh đầu ra với độ phân giải 10 bít -Thanh ghi điều khiển A/D thiết lập cấu hình chuyển đổi và khởi động bộ chuyển đổi.
- Trƣớc hết phải cài đặt xung clock cho thiết bị, xung clock A/D sẽ phân phối xung clock tới tất cả các thiết bị từ nguồn xung PCLK. Xung PCLK phải đƣợc chia xuống 4.5MHz. Đây là giá trị xung cực đại, nếu PCLK không thể đƣợc chia xuống 4.5MHz thì giá trị gần nhất với 4.5MHz sẽ đƣợc chọn.
Hình3.31. Các bít của thanh ghi điều khiển AD PCLK đƣợc chia theo giá trị lƣu trong CLKDIV và theo công thức sau:
CLKDIV = ( PCLK/Adclk) - 1
Thí dụ: Mô phỏng chuyển đồi A/D trong chế độ phần cứng int main(void)
{
VPBDIV = 0x00000002; //thiet lap Pclk la 30 MHz
IODIR1 = 0x00FF0000; // P1.16..23 dinh nghia cac chan ra ADCR = 0x00270607; // khoi dong A/D: 10-bit AIN0 @ 3MHz VICVectCntl0 = 0x00000032; //ket noi toi A/D qua slot 0
Trang 85
//VIC slot VICIntEnable = 0x00040000; //cho phep ngat while(1) {;}
}
void AD_ISR (void) {
unsigned val,chan; static unsigned result[4]; val = ADDR;
val = ((val >> 6) & 0x03FF); //Trich ket qua A/D chan = ((ADCR >>0x18) & 0x07);
result[chan] = val; }
3.8.2. Chuyển đổi D/A
- Biến thể LPC2132/2138 bộ chuyển đổi DA 10 bít. - Bộ chuyển đổi này đơn giản chỉ có 1 thanh ghi.
- DAC đƣợc cho phép bằng cách ghi tới bít 18 và 19 của PINSEL1 chuyển chân 0.25 từ GPIO thành chức năng AOUT. Chú ý rằng một kênh của bộ chuyển A/D cũng sử dụng chân này.
Hình 3.32. Thanh ghi điều khiển D/A
Bộ điều khiển D/A đƣợc khởi động bằng cách ghi giá trị tới bít VALUE trong thanh ghi điều khiển. Thời gian chuyển đổi phụ thuộc vào bít BIAS. Nếu =1 thì thời gian chuyển đổi là 2.5uSec nhƣng có thể đạt tới 700uA. Nếu =0 thì thời gian chuyển đổi là 1uSec nhƣng có thể đạt đến 350uA. Tuy nhiên, tổng thời gian thiết lập phụ thuộc vào trở kháng bên ngoài.
Trang 86
- Các biến thể của LPC có thể có 4 bộ điều khiển can độc lập trên board.
Giao thức CAN (Controller Area Network) đƣợc phát triển bởi Robert Bosch cho mạng tự động (Automotive Networking) vào năm 1982. Trải qua 22 năm sau, CAN trở thành một chuẩn cho mạng tự động và trở lên hấp dẫn đối với các hệ thống không tự động mà muốn yêu cầu một số nút đƣợc nhúng vào. CAN có những đặc tính hấp dẫn đối với những ngƣời phát triển hệ nhúng. Nó có chi phí thấp, dễ hiện thực hóa, các mạng ngang hàng với đặc tính kiểm tra lỗi mạnh và tốc độ truyền cao, hàng Mbit/s. Mỗi gói CAN khá nhỏ và có thể giữ một khối lƣợng cực đại là 8 byte dữ liệu. Do đó, CAN rất phù hợp với các mạng nhúng nhỏ để truyền một lƣợng dữ liệu nhỏ giữa các nút một cách tin cậy.
Thiết kế node CAN:
Một nút CAN điển hình đƣợc thiết kế nhƣ sau:
Hình 3.33. Cấu trúc CAN
- Một đặc tính quan trọng khi thiết kế CAN là bộ điều kiển CAN có đƣờng truyền và nhận dữ liệu riêng biệt và từ thiết bị vật lý. Bởi vậy một nút đang ghi dữ liệu lên bus, đồng thời cũng lắng nghe phản hồi trên bus. Do vậy cần có cơ chế phân xử và phát hiện lỗi trên bus.
Hai mức logic đƣợc ghi lên 2 cặp cáp nhƣ hình dƣới, hai mức logic 0 thể hiện trạng thái rỗi của bus.
Trang 87 Hình 3.34.
Cấu trúc một thông điệp CAN:
Hình 3.35. Cấu trúc thông điệp CAN
Các bít định danh dùng để dịnh danh gói tin: theo chuẩn 20A có 11 bít định danh, 20B thụ động thì có bít định danh và 20B chủ động có 29 bít định danh.
RTR luôn bằng 0.
Bít DLC chứa độ dài dữ liệu Bít CRC chứa mã lỗi khi truyền Bít ACK: cho phép chấp nhận gói tin
Để truyền một thông điệp CAN, Bộ điều khiển CAN có một tập các thanh ghi điều khiển và thanh ghi trạng thái nhƣ sau:
Trang 88
Hình 3.36 Các thanh ghi bộ điều khiển CAN
Tốc độ truyền tính theo công thức: Tốc độ baund=PCLK/(RBRx(1+Tseg1+Tseg2)) Với RBR là tốc đô prescaler.
Trang 89
Đoạn chƣơng trình sau mô tả khởi tạo CAN và truyền thông điệp: C2MOD = 0x00000001; //Khoi dong bo dieu khien CAN C2BTR = 0x001C001D; //thiet lap bi Timing la 125k C2MOD = 0x00000000; //dung bo dieu khie CAN if(C2SR & 0x00000004) //neu bo dem Tx Buffer 1 rong {
C2TFI1 = 0x00040000; //thiet lap DLC la 4 byte
C2TID1 = 0x00000022; //dia chi Standard Frame la 0x22 C2TDA1 = NetworkData; //copy du lieu vao 4 byte dau tien C2CMR = 0x00000001; //truyen thong diep
}
Trang 90
Cấu trúc vùng đệm nhận dữ liệu
Hình 3.37. Các thanh ghi dùng khi nhận dữ liệu từ CAN
int main(void) {
VPBDIV = 0x00000001; //thiet lap PClk la 60MHz IODIR1 = 0x00FF0000; // thiet lap cac chan ra
PINSEL1|= 0x00040000; //cho phep chan 0.25 la CAN1 RX C1MOD = 0x00000001; //reset CAN
C1BTR = 0x001C001D; //thiet lap bit Timing la 125k C1IER =0x00000001; //cho phep nhan ngat
Trang 91
VICVectCntl0 = 0x0000003A; //chon thu tu uu tien ngat VICVectAddr0 = (unsigned)CAN1IRQ; //lay dia chi ngat IRQ //into the VIC slot
VICIntEnable = 0x04000000; //cho phep ngat AFMR = 0x00000001; //Cam bo loc
C1MOD = 0x00000000; //ket thuc CAM while(1){;}
Trang 92
TÀI LIỆU THAM KHẢO
[1]. Philips (2005), The insider‟s guide to the Philips ARM7 based microcontroller. [2]. Jean J. Labrosse (2000), Embbeded System Building Block Second Edition:
Commplete and ready to use in module C, R&D Books