4.5.1 Module tạo dao động của dsPIC33FJMC202 (oscillator) : Cấu trúc bộ dao động:
Hệ thống bộ dao động của họ dsPIC33F có các đặc điểm sau: - Tùy chọn giữa 4 bộ dao động ngoại và 1 bộ dao động nội.
- Bộ nhân tần số để đẩy tần số làm việc trong vi điều khiển lên tới tần số nguồn dao động ngoại (nội) đã chọn.
SVTH: Nguyễn Văn Chung – Lớp TBĐ-ĐT1-K51 44 - Chế độ tiết kiệm điện (doze mode)
Nguồn dao động của hệ thống có thể được cung cấp bởi 1 trong các nguồn sau: - Nguồn dao động sơ cấp (POSC) ở các chân OSC1 và OSC2.
- Nguồn dao động thứ cấp (SOSC) ở các chân SOSC1 và SOSC2. - Bộ dao động FRC (Internal Fast RC)
- Bộ dao động LPRC (Internal Low Power RC)
Cấu hình cho bộ nhân tần số:
Các nguồn dao động POSC và FRC có thể sử dụng 1 bộ nhân tần số tích hợp trên chip (Phase Locked Loop) để đạt được tốc độ làm việc cao hơn. Sơ đồ khối bộ nhân tần số cho ở hình sau: N1 M N2 VCO PFD 0.8<Fref<8.0 MHz 100<Fvco<200 MHz Fosc<80 MHz FIN
FREF FVCO Fosc
PLLDIVE<8:0>
PLLPOST<1:0>
Hình 4.3 Cấu trúc bộ nhân tần số
Để bộ PLL hoạt động chính xác, tần số đầu vào trước khối PFD (Phase Frequency Detector) và tần số đầu ra sau khối VCO phải đáp ứng các yêu cầu sau :
- Tần số đầu vào trước khối PFD (FREF) phải nằm trong dải 0.8-8.0 MHz - Tần số đầu ra sau khối VCO (FVCO) phải nằm trong dải 100-200 MHz
SVTH: Nguyễn Văn Chung – Lớp TBĐ-ĐT1-K51 45
Bit PLLPRE<4:0> trong thanh ghi chia tần số (CLKDIV<4:0>) xác định tỉ số
chia đầu vào (N1), được dùng để giảm tần số đầu vào (FIN)sao cho thỏa mãn được yêu cầu: tần số đầu vào khối FPD nằm trong dải 0,8-8MHz.
Bit PLLDIV<8:0> trong thanh ghi chia phản hồi (Clock Divisor register
PLLFBD<8:0>) xác định tỉ số M, dùng để xác định tỉ lệ giảm FVCO cho tín hiệu phản hồi của khối PFD: FVOC = M.FREF.
Bit PLLPOST<1:0> trong thanh ghi chia tần số (CLKDIV<7:6>) xác định tỉ số
chia N2, dùng để giới hạn FOSC ở ngưỡng dưới 80 MHz. Phương trình sau thể hiện mối quan hệ giữa FIN và FOSC:
OSC 1 2 2 ( ) ( ) . ( 2).2.( 1) IN IN M PLLDIV F F F N N PLLPRE PLLPOST Trong đó: N1 = PLLPRE+2 N2 =2.(PLLPOST +1) M = PLLDIV+2
Phương trình thể hiện mối quan hệ giữa FIN và FVCO:
VCO 1 2 ( ) ( ) 2 IN IN M PLLDIV F F F N PLLPRE
Thiết lập bộ nhân tần số để hoạt động với bộ dao động sơ cấp POSC:
Dưới đây là quy trình thiết lập bộ nhân tần số để có thể sử dụng vi điều khiển ở tốc độ 40Mbps với thạch anh gắn ngoài (tần số dao động 10MHz):
1. Để thực hiện lệnh ở 40MHz, cần đảm bảo rằng tần số dao động của hệ thống là: FOSC = 2.FCY = 80MHZ.
SVTH: Nguyễn Văn Chung – Lớp TBĐ-ĐT1-K51 46 2. Đảm bảo rằng giá trị reset mặc định của PLLPRE, PLLPOST và PLLDIV
phải phù hợp với bộ PLL và yêu cầu của người dùng.
3. Nếu bộ PLL đã phù hợp với yêu cầu của người dùng, ta cấu hình trực tiếp bit FNOSC<2:0 và FOSCSEL<2:0> để sử dụng POSC với bộ PLL tại ngay trạng thái POR.
Nếu bộ PLL chưa phù hợp với yêu cầu của người sử dụng, ta thao tác theo các bước sau:
- Lựa chọ tỉ lệ chia đầu ra PLL để đáp ứng yêu cầu của tần số đầu ra FVCO
(100<FVCO<200 MHz).
- Lựa chọn tỉ lệ chia đầu vào PLL để đáp ứng yêu cầu của tần số đầu vào khối PFD (0,8<FREF<8MHz).
- Lựa chọn tỉ lệ chia phản hồi PLL để tạo ra tần số FVCO dựa trên tần số PFD đầu vào.
- Cấu hình bit FNOSC<2:0> và FOSCSEL<2:0> để lựa chọn nguồn phát xung không kèm bộ PLL (ví dụ: bộ dao động nội FRC) tại trạng thái POR.
4.5.2 Module ADC :
a) Tóm lược chung về module ADC
Bộ chuyển đổi ADC tốc độ cao cho phép chuyển đổi tín hiệu vào tuần tự sang 10 bits hoặc 12 bits tín hiệu số (high-speed analog to digital converter).
Module ADC này dựa trên kiến trúc Succesive Approximation Register (SAR) và cung cấp khả năng lấy mẫu tối đa 1.1 Msps (với chế độ 10bits) hay 500 Ksps với chế độ 12 bits. Module ADC có 6 ngõ vào analog . Điện áp tham chiếu cho module ADC được lựa chọn bằng phần mềm, có thể là chính nguồn cung cấp cho MCU
SVTH: Nguyễn Văn Chung – Lớp TBĐ-ĐT1-K51 47 (AVDD/AVSS) hoặc mức điện áp trên các chân ( VREF+/VREF-) . Bộ ADC có khả năng hoạt động khi CPU đang trong trạng thái ngủ (Sleep Mode)
Module ADC được điều khiển bởi việc thiết lập cho các thanh ghi sau : AD1CON1: ADC1 CONTROL REGISTER 1
AD1CON2: ADC1 CONTROL REGISTER 2 AD1CON3: ADC1 CONTROL REGISTER 3
AD1CHS123: ADC1 INPUT CHANNEL 1, 2, 3 SELECT REGISTER AD1CHS0: ADC1 INPUT CHANNEL 0 SELECT REGISTER
AD1CSSL: ADC1 INPUT SCAN SELECT REGISTER LOW AD1PCFGL: ADC1 PORT CONFIGURATION REGISTER LOW
Module bao gồm bộ nhớ đệm kép 16-word (16-word dual port read-only buffer), đây là bộ nhớ chỉ đọc dùng để chứa giá trị của việc chuyển đổi tương tự - số. Nội dung của 16 thanh ghi trong bộ nhớ đệm ( từ ADCBUF0 đến ADCBUFF) không thể dược ghi vào bởi người sử dụng.
Sau khi Module ADC được thiết lập xong, việc thu thập mẫu được bắt đầu bằng việc set bit SAMP. Một số tác động như là các bit lập trình (Programable bit), sự kiện ngoài (external events), tràn timer (timer time-out), sẽ kết thúc việc thu thập mẫu và bắt đầu quá trình chuyển đổi. Khi sự chuyển đổi hoàn tất, kết quả sẽ được đưa vào các thanh ghi trong bộ nhớ đệm từ ADCBUF0…ADCBUFF. Cờ báo ADIF và bit DONE sẽ được set sau một số lần lấy mẫu được xác định bởi bit SMPI
SVTH: Nguyễn Văn Chung – Lớp TBĐ-ĐT1-K51 48 1. Lựa chọn chân dùng để đọc tín hiệu ADC . Điều này được thực hiện
thông qua việc cấu hình các thanh ghi ADxPCFGH<15:0> hoặc thanh ghi ADxPCFGL<15:0>.
2. Lựa chọn điện áp tham chiếu phù hợp với giải giá trị ADC đầu vào. Việc này được thực hiện dựa vào cấu hình cho thanh ghi ADxCON2<15:13>. 3. Lựa chọn xung clock cho hoạt động của bộ ADC dựa vào thanh ghi
ADxCON3<7:0>.
4. Thanh ghi ADxCON2<9:8> và thanh ghi ADxPCFGH<15:0> hoặc thanh ghi ADxPCFGL<15:0> để quyết định xem bao nhiêu quá trình lấy mẫu và giữ mẫu xảy ra trên một lần ngắt.
5. Việc lựa chọn tuần tự lấy mẫu trong trường hợp ta cần sử dụng nhiều tín hiệu ADC đầu vào sẽ được cấu hình trong thanh ghi ADxCON1<7:5> và ADxCON3<9:8>.
6. Lựa chọn cách lưu giá trị chuyển đổi ADC vào thanh ghi đệm (buffer) được thực hiện bằng cách cấu hình trong thanh ghi ADxCON1<9:8>. 7. Bit nằm trong thanh ghi ADxCON1<15> sẽ khởi động module ADC hoạt
động.
8. Cấu hình cho ngắt ADC gồm hai thủ tục như sau : - Xóa bit ADxIF
- Lựa chọn ưu tiên ngắt ADC.
SVTH: Nguyễn Văn Chung – Lớp TBĐ-ĐT1-K51 49
Sample Time Conversion Time
SOC Trigger SAR ADC + - + -
Hình 4.4 Trình tự trích mẫu và chuyển đổi
Theo hình vẽ trên ta có trình tự như sau :
1. Tín hiệu điện áp đầu vào được kết nối với tụ lấy mẫu. 2. Tụ lấy mẫu bị ngắt kết nối với đầu vào
3. Điện áp lưu giữ trong tụ lấy mẫu sẽ được chuyển đổi tương đương thành giá trị số.
d) Thời gian lấy mẫu :
Điều này phụ thuộc vào cách lựa chọn giá trị nạp vào bit ADxCON1<2> :
ASAM Start of Sampling Selection
0 Trích mẫu bằng tay
1 Trích mẫu tự động
e) Thời gian chuyển đổi :
Thời gian chuyển đổi phụ thuộc vào việc ta lựa chọn độ phân giải cho giá trị ADC ( 12bit hoặc 10bit ) và xung clock dùng để cung cấp cho bộ ADC .
SVTH: Nguyễn Văn Chung – Lớp TBĐ-ĐT1-K51 50 Trong đó: TCONV = Conversion Time (Thời gian chuyển đổi)
TAD = Chu kì bộ ADC
Đối với bộ ADC 12bit : TCONV = 14.TAD
TAD được xác định như sau :
÷N ADC Internal RC TCY ADRC ADC Clock (TAD) 0 1 ADCS<7:0>
Hình 4.5 Công thức xác định chu kì hoạt động của bộ ADC
Khi ADCS=1 thì TAD =TCY.(ADCS+1)
Trong đó : TCY là tần số mã lệnh.
Giá trị của ADRC được nạp vào bit 15 của thanh ghi AD1CON3
f) Hàm chuyển đổi ADC về giá trị thực :
Dựa vào giá trị điện áp max và min của điện áp tham chiếu đồng thời độ phân giải ta suy ra được giá trị thực.
SVTH: Nguyễn Văn Chung – Lớp TBĐ-ĐT1-K51 51 Output code 11 1111 1111 (=1023) 11 1111 1111 (=1023) (A) (B) (C) (D) (E) 00 0000 0000 (=0) 00 0000 0001 (=1) 10 0000 0011 (=515) 10 0000 0010 (=514) VREFL 1024 REFH REFL REFL V V V 512 1024 REFH REFL REFL V V V 1023 1024 REFH REFL REFL V V V VREFH Hình 4.6 Chế độ 10 bits Output code 1111 1111 1111 (=4095) 1111 1111 1110 (=4094) (A) (B) (C) (D) (E) 0000 0000 0000 (=0) 0000 0000 0001 (=1) 1000 0000 0011 (=2051) 1000 0000 0010 (=2050) VREFL 4096 REFH REFL REFL V V V 2048 4096 REFH REFL REFL V V V 1023 4096 REFH REFL REFL V V V VREFH 1000 0000 0001 (=2049) 0111 1111 1111 (=2047) 0111 1111 1110 (=2046) 0111 1111 1101 (=2045) 0111 1111 1100 (=2044) Hình 4.7 Chế độ 12 bits
SVTH: Nguyễn Văn Chung – Lớp TBĐ-ĐT1-K51 52
4.5.3 Module Timer:
MCU dsPIC33FJ12MC202 cung cấp 3 module timer 16 bits, mỗi module Timer/Counter 16 bit đều có các thanh ghi chỉ đọc( Reable/Writeable Register):
- TMRx: là thanh ghi 16 bit, dùng để lưu giá trị hiện tại của Timer tương ứng. - PRx: là thanh ghi 16 bit, dùng để nạp giá trị đếm cho Timer.
- TxCON: là thanh ghi điều khiển 16 bit, dùng để thiết lập các thông số điều khiển, chế độ hoạt động của Timer.
Mỗi Module Timer đều có các bits liên quan dùng cho phục vụ ngắt:
- Interrupt Enable Control bit(TxIE): kích hoạt hoặc ngưng kích hoạt Timer. - Interrupt Flag Status bit(TxIF): báo khi tràn bộ đếm.
- Interrup Priority Control bit( TxIP): đặt các mức độ ưu tiên cho ngắt Timer. Các timer được phân thành các loại sau:
Module Timer 1:
Timer 1 module là một timer 16 bits , có thể được sử dụng làm bộ đếm thời gian cho thời gian thực (Real Time Clock), hoặc có thể được vận hành như là bộ định thời nội bộ (interval timer), bộ đếm (counter), bộ 16-bits Timer1 có các chế độ:
- Chế độ định thời 16 bits (16-bits Timer)
- Chế độ bộ đếm đồng bộ 16 bits (16-bits Synchronous Counter) - Chế độ bộ đếm bất đồng bộ 16 bits (16-bits Asynchronous Counter)
Sự kiện ngắt Timer: 16-bit TIMER có khả năng tạo ra ngắt . Khi giá trị của Timer bằng với giá trị trong thanh khi PR1 thì bit T1IF sẽ được tác động và tạo ra ngắt. Và nếu được kích hoạt, bit T1IF phải được xoá bằng phần mềm. Cờ ngắt Timer T1IF được đặt trong thanh ghi điều khiển IFS0 .
SVTH: Nguyễn Văn Chung – Lớp TBĐ-ĐT1-K51 53 Module Timer 2/3:
Module Timer 2/3 là một 32-bit Timer và có thể được thiết lập thành 2 Timer 16 bits riêng biệt là Timer 2 và Timer 3, trong đó Timer 2 thuộc loại Timer B (typeB) và Timer 3 thuộc loại Timer C (type C)
Sự kiện ngắt Timer: 32-bit TIMER có khả năng tạo ra ngắt khi giá trị của Timer bằng với một giá trị định trước được nạp vào thanh ghi 32 bit PR2/PR3 hoặc khi phát hiện được có sườn xuống từ cổng tín hiệu bên ngoài.Bit T3IF (IFS0<7>) sẽ được tác động và tạo ra ngắt.Trong chế độ này, T3IF được sử dụng như là nguồn tạo ngắt và bit T3IF phải được xoá bằng phần mềm. Việc kích hoạt hoạt động của ngắt được thực hiện thông qua bit T3IE<ICE0<7>)( Timer Interrup Enable)
4.5.4 Module PWM :
DsPIC33FJ12MC202 có 2 Module PWM là MCPWM1 và MCPWM2
a) Tổng quan chung về Module MCPWM1:
Module MCPWM1 thường dùng để phát ra chuỗi xung đồng bộ với đầu ra. Dưới đây là các động cơ và bộ nguồn thực tế được hỗ trợ bởi MCPWM1 :
Động cơ phản kháng Động cơ BLDC
Bộ nguồn liên tục (UPS)
Các tính năng đặc biệt của khối MCPWM được tóm lược như sau :
Có đến 8 đầu ra PWM với bốn đầu ra làm nhiệm vụ điều biến độ rộng xung . Có phần cứng riêng để tạo ra nguồn phát Dead time.
SVTH: Nguyễn Văn Chung – Lớp TBĐ-ĐT1-K51 54 Các chế độ cho đầu ra và chế độ hoạt động :
Single event mode Edge-aligned mode Center-aligned mode
Center-aligned mode with double updates Complementary output mode
Independent output mode
b) Tổng quan chung về module MCPWM2:
MCPWM2 cung cấp các chế độ Comlementary đầu ra của PWM, điều này thì hữu dụng trong các trường hợp sau :
Nguồn PFC ( power factor correction) Điều khiển động cơ một chiều.
c) Mô tả các thanh ghi của Module PWM:
Dưới đây là các thanh ghi thường được dùng để điều khiển quá trình hoạt động của bộ MCPWM1 và MCPWM2 :
Thanh ghi PxTCON : Thanh ghi này dùng cấu hình tần số xung Clock đầu vào và tần số xung Clock đầu ra .
Thanh ghi PxTMR : Thanh ghi này dùng để đếm, cho biết giá trị đếm tức thời thông qua giá trị hiện tại của nó.
Thanh ghi PxTPER : Việc nạp giá trị vào thanh ghi này sẽ quyết định tần số
SVTH: Nguyễn Văn Chung – Lớp TBĐ-ĐT1-K51 55
Thanh ghi PxSECMP: Thanh ghi này cung cấp giá trị để so sánh với
PxTMR, mà tại đó sẽ xảy ra quá trình chuyển đổi ADC đồng bộ với bộ PWM.
Thanh ghi PWMxCON1: Đây là thanh ghi nhằm cấu hình chế độ Independent hoặc Comlementary ở đầu ra.
Thanh ghi PWMxCON2 : Thanh ghi này cung cấp các chức năng dưới đây :
- Lựa chọn giá trị nạp vào thanh ghi sự kiện đặc biệt. - Lựa chọn chức năng update tức thời.
- Lựa chọn chế độ update đồng bộ.
Thanh ghi PxDTCON1: Thanh ghi này giúp cấu hình khoảng deadtime phù
hợp với yêu cầu mong muốn
Các thanh ghi cấu hình độ rộng xung :
PxDC1: giá trị độ rộng xung 16 bit của cặp 1 được viết vào thanh ghi này. PxDC2: giá trị độ rộng xung 16 bit của cặp 2 được viết vào thanh ghi này. PxDC3: giá trị độ rộng xung 16 bit của cặp 3 được viết vào thanh ghi này. PxDC4: giá trị độ rộng xung 16 bit của cặp 4 được viết vào thanh ghi này.
SVTH: Nguyễn Văn Chung – Lớp TBĐ-ĐT1-K51 56 Time Base Input Prescaler 1:1 1:4 1:16 1:64 Tcy Zero Match Period Match PTMOD<1:0> Clock Control Logic PWM Period Buffer PWM Period Register (PxTPER) PWM Timer Register (PxTPER) PTMR Clock 0 PTMOD1 Period Compare
Zero Detect Timer
Direction Control
UDIS (Immediate Update Enable) UDIS (Update Disable)
Gated Duty Cycle Interrupt Control Time Base Out put Postscaler 1:1 1:4 1:16 Period Match PTMOD<1:0>
Gated Period Load
PWM Interrupt Flag
(PWMxIF)
Hình 4.8 Kiến trúc Module PWM
Nguyên lý hoạt động như sau :
Thông qua bộ chia tần số đầu vào ta có thể xác định được tần số nuôi cho bộ PWM là bao nhiêu (có các tỷ lệ so với tần số mã lệnh 1:1, 1:4, 1:16, 1:64). Nạp giá trị vào thanh ghi PxTPER (đỉnh của xung tam giác) .
Xem thanh ghi PxTMR như một biến đếm (tăng dần giá trị từ 0 cho tới giá trị nạp trong PxTPER).
Thông qua bộ so sánh 2 giá trị PxTPER và PxTMR ta sẽ biết lúc nào 2 giá trị bằng nhau. Khi 2 giá trị này bằng nhau thì thanh ghi PxTMR sẽ bị Reset.
SVTH: Nguyễn Văn Chung – Lớp TBĐ-ĐT1-K51 57 Đồng thời tại thời điểm này nó sẽ qua bộ AND (kết hợp với UDIS ) để hỏi xem có cho phép update giá trị PxTPER mới hay không.
Có hai thời điểm cho phép update giá trị PxTPER mới là tại lúc đỉnh và tại lúc bằng không (thông qua bộ so sánh với 0).
Khi thanh ghi PxTMR bằng 0 nó sẽ đi qua bộ Postscaler để hỏi xem có cho phép ngắt PWM hay không.
e) Duty Cycle:
Định nghĩa : Duty Cycle (ký hiệu là d) là tỷ số giữa khoảng thời gian tích cực so với một chu kỳ của PWM.
Module MCPWM có tới 4 nguồn phát PWM. Có 4 thanh ghi tương ứng liên quan tới việc phát PWM đó là các thanh ghi PxDCy.
f) Nguồn tạo Dead Time (Dead Time Generation):
Nguồn tạo Dead Time được tự động khởi tạo khi các cổng đầu ra PWM hoạt động ở chế độ bổ sung (Comlementary). Có hai khoảng cần tạo Dead Time (tại sườn lên và sườn xuống của mỗi xung).
PWM generator
Time selected by DTSxA bit (A or B) Time selected by DTSxI bit (A or B) Dead time =0
None zero Dead time
SVTH: Nguyễn Văn Chung – Lớp TBĐ-ĐT1-K51 58
Prescaler ControlClock
Zero Compare
6-bit Down Counter