Khối chức năng thời gian (Timer )

Một phần của tài liệu điều khiển mờ và giao thức can trong đồng bộ tốc độ hệ động cơ dc (Trang 72)

CHƯƠNG 5 : HỌ VI ĐIỀU KHIỂN HCS12 VÀ VI ĐIỀU KHIỂN MC9S12DP512

5.2 Vi điều khiển được sử dụng trong Luận vă n MC9S12DP512

5.2.2 Khối chức năng thời gian (Timer )

Hệ thống chức năng thời gian của vi điều khiển MC9S12DP512 là sự tổng hợp đầy đủ các chức năng về thời gian của họ vi điều khiển HCS12 , gồm các chức năng chính như sau:

- Kết nối với 8 chân của Port T , mỗi chân của Port T là 1 kênh trong bộ Timer

- 8 kênh chung cho 2 chức năng :Bắt giữ ngõ vào ( Input Capture ) , So sánh ngõ ra( Output Compare). Và giữa các kênh chức năng bắt giữ ngõ vào với nhau sẽ cĩ 1 thanh ghi đệm 16-bit. - Một bộ đếm 16-bit ,và hỗ trợ bộ chia tỷ lệ 4-bit ( prescaler )

- 2 bộ đếm xung 16-bit: Pulse Accumulator A , B ; cĩ thể tách ra thành 4 bộ đếm xung 8-bit - 4 bộ tạo trễ (delay) , cĩ thể chọn bởi người dùng : để tăng độ triệt nhiễu cho các ngõ vào

5.2.2.1 Bộ đếm 16-bit:

- Thanh ghi đếm thời gian 16 bit : TCNT ( Timer Counter Register )

- Cĩ 3 thanh ghi điều khiển và trạng thái liên quan đến TCNT :

+ Thanh ghi điều khiển hệ thống thời gian 1: TSCR1 ( Timer System Control Register 1 )

Hình 5.10: Thanh ghi điều khiển hệ thống thời gian 1- TSCR1

TEN (Timer enable) : Bit khởi động chức năng thời gian

0 - Tắt mơ-đun chức năng thời gian ; 1 – Khởi động mơ-đun chức năng thời gian TSWAI (Timer stop while in wait mode) : Bit thiết lập cho Timer khi vi điều khiển ở chế độ chờ ( Wait mode )

0 – Cho phép Timer cứ tiếp tục chạy ngay cả khi vi điều khiển ở chế độ Chờ 1 - Tắt Timer khi vi điều khiển ở chế độ Chờ ( Wait mode)

TSFRZ ( Timer stop while in freeze mode ): Bit thiết lập cho Timer khi vi điều khiển ở chế độ “đĩng băng” ( GIẢ NGHỈ: Pseudo Stop )

0 - Cho phép Timer cứ tiếp tục chạy khi vi điều khiển ở chế độ “đĩng băng” 1 - Tắt Timer khi vi điều khiển ở chế độ “đĩng băng” (freeze mode)

TFFCA ( Timer fast flag clear all ) : Bit thiết lập chế độ xĩa các cờ trạng thái của hệ thống thời gian (Timer)

0 – Xĩa các cờ trạng thái bằng chế độ bình thường

1 – Xĩa các cờ trạng thái của các thanh ghi trạng thái bằng cách so sánh các giá trị kênh chức năng liên quan

+ Thanh ghi điều khiển hệ thống thời gian 2: TSCR2 (Timer System Control Register 2)

Hình 5.11: Thanh ghi điều khiển hệ thống thời gian 2- TSCR2

1 – Cho phép ngắt khi bit cờ báo tràn TOF ( Timer Overflow Flag) cĩ giá trị 1 TCRE: ( Timer counter reset enable ) : Bit cho phép khởi động lại bộ đếm

0 – Bộ đếm khơng tự động reset và Timer chạy tự do ,khơng kiểm sốt được 1 – Timer sẽ reset khi mỗi lần chức năng so sánh ngõ ra thứ 7 thành cơng

PR[2:0] ( PreScale ) : Bộ chia tỷ lệ tần số xung nhịp 3-bit , tạo ra xung nhịp cho bộ đếm thời gian từ tần số xung nhịp bus nội.

+ Thanh ghi cờ báo ngắt Timer 2: TFLG2 ( Timer Interrupt Flag 2 Register )

Hình 5.12: Thanh ghi cờ báo ngắt Timer 2- TFLG2

Chú ý: Bit cờ báo tràn TOF (bit 7) sẽ lên giá trị 1 mỗi khi bộ đếm thời gian tràn ( giá trị của thanh ghi TCNT đã đếm đủ từ $FFFF à $0000 )

· Ví dụ: Hệ thống cĩ tần số xung nhịp nội là 8 Mhz , bộ chia tỷ lệ ( Prescale) là 1:1 , thì khoảng thời gian cho mỗi lần Timer tràn sẽ là : 64K x (1 : 8 Mhz ) = 8.192 ms

Đoạn chương trình khởi động bộ đếm Timer ,và cho phép Ngắt khi Timer tràn. void Timer_Init(void){

TSCR1 = 0x80; // Cho phép bộ đếm TCNT hoạt động

TSCR2 = 0x80; // Cho phép ngắt khi Timer tràn , bộ chia tỷ lệ 1:1 PACTL = 0; //

TFLG2 = 0x80; // Xĩa cờ báo ngắt }

5.2.2.2 Bộ đếm xung ( Pulse Accumulator )

· Vi điều khiển MC9S12DP512 cĩ 2 bộ đếm xung 16-bit là : PACA (Pulse Accumulator A) -kết nối với chân PT7 và PACB (Pulse Accumulator B) – kết nối với chân PT0 · Bộ đếm xung cĩ 2 chức năng chính: Đếm sự kiện và chế độ Cổng

· Hai bộ đếm xung 16-bit này , cĩ thể tách ra thành 2 bộ đếm xung 8-bit riêng biệt + Bộ đếm 16-bit PACA gồm: PAC3 – PAC2 (8-bit)

+ Bộ đếm 16-bit PACB gồm: PAC1 – PAC0 ( 8-bit) · Bộ đếm xung PACA ( Pulse Accumulator A)

+ Cĩ 3 thanh ghi liên quan : PACTL( điều khiển ) , PAFLG( cờ ) ; PACN32 ( dữ liệu)

Hình 5.13: Các thanh ghi liên quan đến bộ đếm xung

bit PAEN

0 / 1 : Bộ đếm xung PACA khơng được sử dụng / được sử dụng bit PAMOD

0 / 1 : Chế độ Đếm sự kiện / Chế độ đếm thời gian Cổng bit PEGDE

0 : Đếm khi Xung xuống ( chế độ đếm xung) - Chọn Mức cao ( chế độ CỔNG) 1 : Đếm khi Xung lên ( chế độ đếm xung) - Chọn Mức thấp ( chế độ CỔNG) bit PAOVI

0 / 1 : Ngắt khi bộ đếm xung PACA tràn bị cấm / Cho phép Bit PAI

0 / 1 : Ngắt khi cĩ xung ở chân PT7 bị cấm / Cho phép

+ Thanh ghi chứa dữ liệu của bộ đếm xung PACA là thanh ghi 16-bit PAC32 : Chứa giá trị số xung đếm được ( trong chế độ đếm sự kiện ) hay thời gian của mức (trong chế độ CỔNG) + Thanh ghi 16-bit PACN32 là do 2 thanh ghi 8-bit ghép lại : PACN3 và PACN2

TCTL1 = TCTL1 & ~0xC0 ;

PACTL = 0x50 ; // Dùng bộ PACA ,chế độ đếm sự kiện , phát hiện xung lên PACN32 = 0 ; // Xĩa giá trị trong bộ đếm

}

· Bộ đếm xung PACB ( Pulse Accumulator B) :

+ Chỉ cĩ chức năng đếm sự kiện ,mà khơng cĩ chức năng đếm thời gian cổng

+ Cĩ các thanh ghi liên quan: PBCTL (điều khiển) , PBFLG (cờ) , PACN10 (dữ liệu) + Cách khai báo và sử dụng tương tự như bộ đếm xung PACA

5.2.3 Bộ điều rộng xung ( PWM : Pulse Width Modulation )

- Vi điều khiển MC9S12DP512 cĩ 8 kênh 8-bit PWM , được kết nối với Port P

- Hai kênh 8-bit PWM kế nhau cĩ thể kết hợp tạo thành một kênh 16-bit . Nên sẽ cĩ tối đa 4 kênh 16-bit PWM. Ở đây ta chỉ trình bày về chế độ điều rộng xung 8-bit .

- Cĩ tổng cộng 32 thanh ghi dùng để thiết lập thơng số cho 8 kênh PWM.

Ø Trình tự thiết lập cho bộ PWM: · Tạo tần số dao động cho bộ PWM:

- Việc chọn nguồn dao động cho bộ PWM là phụ thuộc vào giá trị thanh ghi PWMCLK : Cĩ các nguồn dao động là: Clock A , Clock SA , Clock B , Clock SB

+ Giá trị của nguồn dao động Clock SA sẽ được tạo ra bằng cách : Lấy giá trị Clock A chia cho giá trị trong thanh ghi PWMSCLA , sau đĩ lấy kết quả chia tiếp cho 2

+ Giá trị của nguồn dao động Clock SB sẽ được tạo ra bằng cách : Lấy giá trị Clock B

chia cho giá trị trong thanh ghi PWMSCLB , sau đĩ lấy kết quả chia tiếp cho 2

Hình 5.14: Thanh ghi PWMCLK

0 / 1 : Nguồn dao động là Clock B / Clock SB + PCLKy : Dùng cho các kênh PWMy ( y = 5 , 4 , 1 , 0) 0 / 1 : Nguồn dao động là Clock A / Clock SA

- Giá trị Tỷ lệ chia tỷ lệ ( Prescaler ) sẽ theo giá trị trong thanh ghi PWMPRCLK

· Chọn các thuộc tính của xung vng cần tạo , cho phép các kênh PWM hoạt động: - Chu kỳ của xung , được chọn bởi giá trị của thanh ghi : PWMPERn khi so sánh với giá trị trong bộ đếm PWMCNTn

- Duty_Cycle của xung , được chọn bởi giá trị của thanh ghi : PWMDTYn khi so sánh với giá trị trong bộ đếm PWMCNTn ( n : là thứ tự của kênh PWM , giá trị từ [ 0:7 ] ) - Thanh ghi PWMPOL dùng để chọn kiểu ưu tiên Mức của xung ra ( mức Cao hay Thấp)

Hình 5.15 : Thanh ghi PWMPOL

Bit PPOLn ( n = [ 0:7 ] ) cĩ trị :

0 / 1 : Xung ra sẽ bắt đầu bằng mức Thấp (mức 0) / bắt đầu bằng mức Cao(mức 1) - Thanh ghi cho phép bộ PWM hoạt động: PWME

Hình 5.16: Thanh ghi PWME

Giá trị của bit PWMEn ( n = [ 0:7 ] ) :

0 / 1 : Kênh PWMn bị cấm hoạt động / Kênh PWMn hoạt động

· Chọn chuẩn canh (Alignment ) cho xung ra , cĩ 2 chuẩn: Canh theo bên trái (left-

Hình 5.17: Thanh ghi PWMCAE

Giá trị của bit CAEn ( n = [ 0:7 ] ) :

0 / 1 : Kênh PWMn cĩ xung theo chuẩn left-aligned / center-aligned - Canh theo bên trái (left-aligned) :

Hình 5.18: Kiểu xung canh bên trái ( left-aligned)

Lúc đĩ ,ta cĩ các cơng thức liên quan:

+ PWMn frequency = Clock(A, B, SA, SB frequency) ¸ PWMPERn

+ Polarity = 0 : PWMn duty cycle = [(PWMPERn – PWMDTYn) ¸ PWMPERn] ´ 100% + Polarity = 1 : PWMn duty cycle = [PWMDTYn ¸ PWMPERn] ´ 100%

- Canh theo chính giữa (center-aligned ) :

Hình 5.19: Kiểu xung canh theo chính giữa ( center -aligned)

Lúc đĩ ,ta cĩ các cơng thức liên quan:

+ PWMn frequency = Clock (A, B, SA, or SB) frequency ¸ (2 ´ PWMPERn)

+ polarity = 0: PWMn duty cycle = [(PWMPERn – PWMDTYn) ¸ PWMPERn] ´ 100% + polarity = 1: PWMn duty cycle = [PWMDTYn ¸ PWMPERn] ´ 100%

Ví dụ : Chương trình sử dụng kênh PWM0 , tạo xung vng 10 Khz , duty_cycle = 40%

/* period (chu_kỳ) = PWMPER0 * 2^(PCKA+1) * PWMSCLA (Khi : PWMCLK = 1) Sử dụng bộ PLL --> Bus-Clock là 24Mhz */

void PWM_Init(void){

PWMCTL = PWMCTL & ~0xF0 ;

PWMPRCLK = PWMPRCLK & ~0x07 ; // PCKA = 0 PWMCLK = PWMCLK | 0x01 ; // sử dụng PWMSCLA

PWMPOL = PWMPOL | 0x01 ; // Chọn bắt đầu xủa xung là mức cao PWMSCLA = 6 ; // 10KHz of Square_Wave

PWMCAE = PWMCAE & ~0x01 ; // Chuẩn canh theo bên trái ( Left-aligned) PWMPER0 = 200 ; // Period = 200 : là mức so sánh với PWMCNT0 PWME = PWME | 0x01 ; // Cho phép kênh PWM0 hoạt động

PWMDTY0 = 50 ; // Hi_duty = 50: 200 = 40% }

5.2.4 Giao tiếp nối tiếp bất đồng bộ ( SCI : Asynchronous Serial Comunication Interface)

· Vi điều khiển MC9S12DP512 cĩ 2 bộ SCI : SCI0 và SCI1

· Bộ SCI0 cĩ : TxD kết nối với chân 1 của Port S , RxD kết nối với chân 0 của Port S · Bộ SCI1 cĩ : TxD kết nối với chân 3 của Port S , RxD kết nối với chân 2 của Port S · Hỗ trợ các tốc độ Baude như sau: 1200 ,2400 ,9600 , 19200 , 38400 ,115200 (hai tốc

độ: 38400 và 115200 chỉ sử dụng được khi cĩ dùng bộ PLL ,lúc đĩ tần số xung nhịp Bus nội là 24 Mhz )

· Mỗi bộ SCIn ( n = [0:1] , là thứ tự của 2 bộ SCI ) sẽ cĩ 8 thanh ghi điều khiển-trạng thái-dữ liệu liên quan: ( Cách thiết lập được trình bày ở Ví dụ về SCI )

sử dụng các loại ngắt thuộc bộ SCI khơng ( như: Ngắt truyền , ngắt nhận ) + Thanh ghi điều khiển ở chế độ đặc biệt : SCInCR0

+ Thanh ghi điều khiển dùng tách rời 2 mơ-đun Truyền và Nhận với nhau: SCInCR2 + Thanh ghi trạng thái ở chế độ hoạt động: SCInSR1 (bình thường) , SCInSR0(đặc biệt) + Thanh ghi bộ đệm truyền/nhận : SCInDRL

· Bộ tạo tốc độ truyền-nhận nối tiếp ( Baud Rate Generation ):

- Bộ phát và nhận hoạt động độc lập với nhau , cho dù sử dụng chung một bộ tạo tốc độ

Hình 5.20: Bộ tạo tốc độ truyền nhận SCI

Ø Ví dụ : Cách khởi tạo ,cĩ dùng ngắt cho bộ bộ SCI0 . Bus-Clock là 8 Mhz .

· Hàm con khởi tạo bộ SCI0 : Khi cần ta chỉ cần gọi hàm này với thơng số baudRate void SCI0_Init(unsigned long baudRate){

SCI0BDH = 0; // baud = MCLK/(16*baudRate) switch(baudRate){

case 2400: SCI0BDL=208; break; case 4800: SCI0BDL=104; break; case 9600: SCI0BDL=52; break; case 19200: SCI0BDL=26; break; case 38400: SCI0BDL=13; break;

} SCI0CR1 = 0; // Chế độ truyền nhận bình thường : 1 start, 8 data, 1 stop ,No Parity

SCI0CR2 = 0x2C ; // Chỉ cho phép ngắt nhận bởi bit RDRF , bộ thu phát được hoạt động

}

· Bây giờ nếu muốn khởi tạo bộ SCI0 với tốc độ baudrate là 38400 Bit/s :

SCI0_Init (38400 ) ; // Khởi tạo bộ SCI0 theo đúng yêu cầu baudRate = 38400 bit/s

5.2.5 Khối chức năng Key-WakeUp ( là: Chức năng đánh thức bằng Phím nhấn )

- Việc tiết kiệm năng lượng là rất quan trọng , nên khi ở trạng thái vi điều khiển khơng xử lý việc gì cả hay chờ sự kiện gì xảy ra, vi điều khiển sẽ hoạt động ở các chế độ tiết kiệm năng lượng như : Chờ ( Wait ) , Giả Nghỉ ( Pseudo-Stop ) , Nghỉ (Stop) . Khi cĩ sự việc yêu cầu xử lý xảy ra ,sẽ tạo ra 1 ngắt tức thì “đánh thức” vi điều khiển thực hiện việc yêu cầu.

- Tất cả các vi điều khiển thuộc họ HCS12 cĩ chức năng này ,gọi là Key-WakeUp . Cĩ cơng dụng chính là: Khi nhấn 1 phím – được kết nối trực tiếp với 1 chân của vi điều khiển ,sẽ

tạo ra 1 ngắt và vi điều khiển HCS12 sẽ đọc giá trị từ Port cĩ chân I/O kết nối với phím nhấn đĩ . Dựa vào giá trị này , vi điều khiển sẽ biết được ngay lập tức phím nào được nhấn

- Mơ-đun Key-WakeUp của MC9SDP512 cĩ tổng cộng là20 kênh , kết nối với 3 port: Port H , Port P , Port J .Các thanh ghi điều khiển tương ứng là: PIEX, PIFX ( X: là H hoặc P hoặc J)

5.2.6 Khối Mơ-đun chức năng CAN ( Controller Area Network )

o Giới thiệu về khối chức năng CAN của vi điều khiển MC9S12DP512 :

- Cĩ 5 mơ-đun MSCAN (Motorola Scalable CAN ), hỗ trợ 2 chuẩn CAN: V2.0A ,V2.0B - Mỗi mơ-đun MSCAN cĩ 5 bộ đệm nhận dữ liệu theo kiểu Vào-trước-Ra-trước ( FIFO: first-in-first-out memory ) và 3 bộ đệm truyền dữ liệu .Mỗi bộ đệm truyền sẽ được truy cập sử dụng dựa vào số thứ tự hoặc dựa vào tình trạng đầy hay trống.

- Bộ lọc số căn cước ( ID: Identifier ) cuả khung dữ liệu trong mỗi bộ CAN là: 1 bộ lọc 32-bit ( hỗ trợ cho chuẩn ID mở rộng ) , hay 2 bộ lọc 16-bit , hay 4 bộ lọc 8-bit

- Mơ-đun MSCAN cĩ tích hợp chế độ “quay vịng” ( Loopback mode ), nhằm cĩ thể tự kiểm tra hoạt động của khối chức năng trong mơ-đun và các bộ đệm truyền nhận mà khơng cần dùng thêm ngoại vi. Và cĩ thêm chế độ “lắng nghe” ( Listen-only mode ) ,nhằm chỉ giám sát hoạt động trên đường truyền- khơng gởi được dữ liệu đi.

- Cĩ tất cả là 4 ngắt cho mỗi mơ-đun MSCAN : Ngắt Nhận , Ngắt khi truyền bị cảnh báo , Ngắt truyền khi cĩ lỗi bị động , ngắt khi đứt dây đường truyền (bus off ) .

- Xung dao động cho mơ-đun MSCAN cĩ thể chọn là dao động của bộ Thạch anh hay là dao động nội của bus hệ thống . Cĩ 1 timer riêng để sử dụng .

- Mơ-đun MSCAN u cầu phải cĩ một bộ giao tiếp (Transceiver , cĩ thể là MCP2551 của Microchip,PCA82C250 của Phillip ) làm trung gian để cĩ thể kết nối với CAN-Bus.

· Thanh ghi điều khiển CANnCTL0 ( n = 0 -:- 4 ) : Dùng để thiết lập đầu tiên các chế độ hoạt động của mơ-đun MSCAN

Hình 5.22: Thanh ghi điều khiển - CANnCTL0

RXFRM ( Received frame flag ) : Cờ báo nhận dữ liệu vào 0 / 1: Khơng cĩ / Cĩ bức điện được nhận vào

SYNCH ( Synchronization status ): Trạng thái đồng bộ

0 / 1 : Mơ-đun MSCAN khơng đồng bộ với CAN-Bus / đồng bộ với CAN-Bus SLPRQ ( Sleep mode request) : yêu cầu vào chế độ “Ngủ”

0 : Mơ-đun MSCAN hoạt động bình thường

1: Mơ-đun MSCAN sẽ vào chế độ “Ngủ” khi khơng cĩ hoạt động trên đường truyền INITRQ ( Initialization mode request ): Yêu cầu vào trạng thái khởi động

0 / 1 : Hoạt động bình thường / Mơ-đun MSCAN vào chế độ khởi động

· Thanh ghi điều khiển CANnCTL1 ( n = 0 -:- 4 ): Cho phép mơ-đun CAN hoạt động ,và chọn chế độ hoạt động sau khi đã khởi động xong

Hình 5.23: Thanh ghi điều khiển - CANnCTL1 CANE ( MSCAN Enable ) : Cho phép mơ-đun MSCAN hoạt động 0 / 1 : Mơ-đun MSCAN bị cấm hoạt động / được phép hoạt động CLKSRC ( MSCAN Clock Source) :

0 / 1 : Xung clock dao động của mơ-đun MSCAN lấy từ dao động thạch anh / Bus-Clock LOOPB ( Loop back seft test mode) :

LISTEN ( Listen Only mode )

0 / 1 : Chế độ “lắng nghe” bị cấm / được sử dụng INITAK ( Initialization mode acknowledge ) :

0 / 1 : Mơ-đun MSCAN đang ở chế độ hoạt động bình thường / chế độ khởi động. · Các thanh ghi thiết lập các giá trị SJW (synchronization jump width) và tốc độ truyền

dữ liệu : CANnBTR0, CANnBTR1 ( n = 0 -:- 4 )

· Các thanh ghi dùng để lọc các bức điện cĩ chỉ số căn cước (ID) phù hợp: + Thiết lập bộ lọc ( 32-bit , 16-bit hay 8-bit) : CANnIDAC

+ Các thanh ghi tạo mặt nạ cho bộ lọc: CANxIDMR0~7 ,CANxIDAR0~7 + Các thanh ghi chứa giá trị số căn cước là : IDR0 , IDR1 , IDR2 , IDR3 · Các thanh ghi dùng cho việc nhận dữ liệu ( receiver ):

+ Thanh ghi trạng thái : CANnRFLG

+ Thanh ghi thiết lập ,cho phép việc sử dụng Ngắt nhận: CANnRIER

Một phần của tài liệu điều khiển mờ và giao thức can trong đồng bộ tốc độ hệ động cơ dc (Trang 72)

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

(139 trang)