Tuesday, October 14, 2014

Thư viện Clock UCS của MSP430x5xx và x6xx

Download thư viện tại đây
1.GIỚI THIỆU
Module UCS là module điều khiển tạo xung clock cho toàn bộ hệ thống,tất cả điều điều khiển được bằng phần mềm.Đầu vào của module là các nguồn xung ngoại XT1 (có thể có XT2) và xung nội (DCO,VLO,REFO).
Đầu ra của module là 3 nguồn xung clock như ở các dòng MSP430 khác là 
ACLK (Auxiliary Clock) : 
MCLK ( Master Clock) : Dùng cho CPU
SMCLK (Subsystem Master Clock) :
Chi tiết các bạn có thể xem sơ đồ sau ,nhìn sơ đồ này chúng ta sẽ biết cần tác động những bit nào để có điều mình muốn :3



2.HOẠT ĐỘNG
Một chú ý là khi khởi động,VĐK sẽ khởi tạo DCO = 2.097152Mhz ; MCLK và SMCLK= 1.048576 Mhz.Tức là nếu không thay đổi các thanh ghi UCS thì chương trình sẽ làm việc với MCLK ở tần số 1.048576 Mhz.

Từ sơ đồ khối,để có thể tạo được xung giữ nhịp đầu ra cho MSP ,chúng ta cần phải cài đặt 2 phần là cài đặt nguồn tạo xung và chọn nguồn xung cho từng đường tín hiệu đầu ra(ACLK,MCLK,SMCLK).

2.1.TẠO NGUỒN XUNG
Trước tiên chúng ta cần cài đặt cho các nguồn dao động đầu vào,đó là :
  • Các nguồn dao động nội sinh :
    • VLO : Nguồn dao động nội sử dụng khi cần tiết kiệm điện năng,sai số lớn,phụ thuộc nhiều vào điện áp và nhiệt độ (xem chi tiết datasheet) dải tần dao động từ  6 đến 14 Khz (tại 25*C là khoảng 9.4Khz).
    • REFO : Nguồn dao động chuẩn 32768Hz,ít phụ thuộc vào điện áp và nhiệt độ,dùng làm nguồn tham chiếu để cài đặt bộ dao động nội DCO theo bất cứ tần số nào.
    • DCO và DCODIV là 2 nguồn dao động có thể được hiệu chuẩn từ REFO,XT1,XT2 bằng bộ FLL.Kết quả hiệu chuẩn sẽ ra được thông số thanh ghi điều khiển DC Generator.Nguồn DCO có thể được cài đặt và thay đổi bằng phần mềm.
  • Nguồn dao động ngoài XT1 : Ở hầu hết các VDK họ MSP430x5xx và x6xx thì XT1 là module tạo dao động với dải rất rộng,chỉ trừ một số chip chỉ cho phép hoạt động ở tần số 32Khz ,hỗ trợ tụ dao động nội,hỗ trợ đồng thời cả thạch anh tần số thấp (32Khz) lẫn tần số cao đến 32Mhz .
  • Nguồn dao động ngoài XT2 (tùy từng chip có thể có hoặc không) : Hoạt động với dải tần số cao từ 4 đến 32Mhz .Cần chú ý là XT2 có 2 chân IN/OUT đồng thời là chân GPIO,khi muốn sử dụng là GPIO cần setup PSEL của bit tương ứng =0 vì khi khởi tạo 2 chân này mặc định là dùng cho bộ dao động thạch anh .Một chú ý nữa là khi dùng XT1 và XT2 cho tần số cao,nên mắc tụ khoảng 100-470nF vào chân Vcore ,và phải cài đặt cho bộ PMM của VĐK,sẽ nói rõ ở một bài khác.
  • Ngoài ra còn một nguồn đặc biệt là MODOSC chuyên cấp nguồn cho MODCLK dùng cho Flash và ADC12_A .
Cài đặt thanh ghi cho từng nguồn:
Cần chú ý là các nguồn xung nội thường có sai số khoảng vài % và phụ thuộc vào điện áp và nhiệt độ,cụ thể là MSP430F5419A thì độ dịch sẽ là 1.9%/V,tức là giảm 1V thì tần số giảm 1.9%.Nguồn xung dùng thạch anh nói chung có sai số gần như bằng 0,và không phụ thuộc vào nhiệt độ. Chi tiết các bạn cần xem datasheet cho từng loại MSP.
VLO và REFO
Mặc định hai nguồn xung này không cần cài đặt gì,khi chọn nó làm nguồn đầu vào cho các nguồn đầu ra thì tự động 2 nguồn này được cho phép hoạt động, sẽ đề cập ở phần sau.
XT2
Chỉ dùng cho thạch anh tần số cao,chú ý đến tần số tối đa mà chip được thiết kế.Ví dụ như MSP430F5419A là 25Mhz.Nếu hoạt động quá tần số này thì xác suất lỗi xung nhịp sẽ cao.Để MSP làm việc được với thạch anh ngoại tần số cao,cần cài đặt thêm cho module PMM(Power Management Module).Chi tiết về module này sẽ được đề cập sau,module này nhằm tạo điện áp cho lõi CPU,giảm điện áp nhằm giảm công suất tiêu thụ cho CPU.Khi CPU hoạt động ở tần số cao sẽ yêu cầu điện áp lớn hơn để hoạt động ổn định.
Hàm cài đặt điện áp Vcore:
void SetVcoreUp (PMMCOREV_x);
PMMCOREV_0 -> Fmax = 8Mhz ; DVCC >1.8V
PMMCOREV_1 -> Fmax = 12Mhz ;DVCC >2.0V
PMMCOREV_2 -> Fmax = 20Mhz ;DVCC >2.2V
PMMCOREV_3 -> Fmax = 25Mhz ;DVCC >2.4V

Để cài đặt cho XT2 chúng ta cần quan tâm các bit sau:
  • PxSEL : Cổng chưa chân X2IN và X2 OUT kéo lên 1
  • UCSCTL6 &=~XT2OFF : Cho phép XT2 hoạt động
  • UCSCTL6 |= XT2DRIVE_x : Chọn khoảng tần số hoạt động của XT2
    • 0 : 4 - 8 Mhz
    • 1 : 8 - 16 Mhz
    • 2 : 16 - 24 Mhz
    • 3 : 24 - 32 Mhz
  • UCSCTL6 |= XT2BYPASS : Chọn nguồn dao động cấp cho module XT2 là từ bên ngoài.Tức là nếu chọn nguồn từ bên ngoài thì sẽ không qua bộ khuếch đại tín hiệu nữa,nghĩa là tín hiệu sẽ yếu hơn,chọn nguồn cấp từ bên trong thì xung dao đông sẽ qua 1 bộ đệm giúp nâng cao độ ổn định của tín hiệu.Các bạn nhìn kỹ sơ đồ khối sẽ hiểu rõ.
XT1
Việc sử dụng thạch anh tần số bao nhiều sẽ quyết định việc phải cài đặt các thanh ghi thế nào.Về cơ bản XT1 giống XT2 nhưng nó được thêm bộ khuếch đại dao động và tụ nội dùng cho dao động tần số thấp.
Các cài đặt chung cho tất cả các chế độ :

  • UCSCTL6 &=~XT1OFF : Cho phép XT1 hoạt động
  • UCSCTL6 |= XT1BYPASS : Chọn nguồn dao động cấp cho module XT1 là từ bên trong hay bên ngoài.Tức là nếu chọn nguồn từ bên ngoài thì sẽ không qua bộ khuếch đại tín hiệu nữa,nghĩa là tín hiệu sẽ yếu hơn.Các bạn nhìn kỹ sơ đồ khối sẽ hiểu rõ.
Khi sử dụng thạch anh tần số thấp,cần xem datasheet chi tiết từng loại chip để biết cài đặt ứng với mỗi tần số.
  • UCSCTL6 &=~XTS : Chọn mode tần số thấp,sử dụng tụ nội .
  • UCSCTL6 |=XCAP : Chọn tụ nội cho mạch cộng hưởng .
  • UCSCTL6 |= XT1DRIVE_x : Chọn mức độ dòng ra ,x càng cao thì dòng càng lớn,tín hiệu sẽ ổn định hơn tuy nhiên sẽ tốn điện hơn.
Khi sử dụng thạch anh tần số cao sẽ giống XT
  • UCSCTL6 |= XTS : Chọn mode tần số cao.
  • UCSCTL6 |= XT1DRIVE_x : Chọn khoảng tần số hoạt động của XT1 ở chế độ HF,giá trị sau khi reset là 3 .
    • 0 : 4 - 8 Mhz
    • 1 : 8 - 16 Mhz
    • 2 : 16 - 24 Mhz
    • 3 : 24 - 32 Mhz
DCO và DCODIV
Nguồn DCO có thể dùng nguồn xung nội hoặc chia tần từ các nguồn xung đã tạo.Không giống như dòng cơ bản MSP430G2 mới ra đời,các dòng cũ hơn thường không có sẵn các giá trị các bit điều khiển DCO được calib sẵn trong Flash.Thay vào đó người dùng có thể tự calib dựa vào bộ chia tần FLL lấy nguồn xung từ xung ngoại.Vấn đề này mình sẽ viết chi tiết trong một bài khác.
Tạo từ nguồn xung nội DC Generator
  • UCSCTL0 |=MOD + DCO :Xem datasheet để biết ứng với từng tần số.
  • UCSCTL1 &=~DISMOD : Cho phép dùng DCO
  • UCSCTL1 |=DCORSEL_x : Chọn khoảng tần số hoạt động của MSP .
  • (UCSCTL2) FLLD_x : Chọn mức chia tần của đầu ra DCODIV lấy từ DCO
Chúng ta có thể chỉnh nguồn DCO bằng tay hoặc Calib thông qua bộ FLL trong UCS.
Module FLL có là bộ chỉnh tần số module DCO qua các thanh ghi DCO và MOD . FLL sẽ so sánh tần số vào ở 2 đầu âm và dương (xem hình) và chỉnh lại tần số của module DCO sao cho tần số ở đầu âm và dương bằng nhau.Đầu dương của FLL được nối với nguồn xung chẩn (REF,XT1,XT2) ,được chia tần qua mạch Divider .Đầu ân chính là nguồn DCODIV đã qua bộ chia tần Divider.Để có thể tạo ra tần số DCO bất kỳ ,có 2 việc cần phải làm :

  • Chọn nguồn xung tham chiếu cho FLL qua các bit SELREF(UCSCTL3 ,mặc định là XT1),sau đó chọn độ chia tần FLLREFDIV (UCSCTL3,mặc định là 1).Giả sử chọn nguồn tham chiếu là REF,chia tần 1,tức là tần số tại cực dương bộ so sánh là 32768Hz.Khi đó sau khi hiệu chỉnh DCO ,tần số tại cực âm FLL cũng là 32768Hz.
  • Để có được tần số tại DCODIV theo mong muốn,chúng ta chọn độ chia tần tại FLLN (UCSCTL2) ,giả sử chọn FLLN = 60 thì fDCODIV sẽ là 32768*(60+1) = 2Mhz (xem lại hình trên).Chọn FLLD (UCSCTL2) để chọn tần số cho DCO (fDCO = fDCODIV * FLLD) .Như vậy sau khi bộ FLL hiệu chỉnh xong chúng ta sẽ có tần số mong muốn.
  • Cần chú ý trong thời gian hiệu chỉnh tần số,MSP sẽ lấy ACLK làm nguồn để đồng bộ xung,tức là làm các sườn xung của các nguồn khác nhau xảy ra cùng thời điểm.Chúng ta cần cài đặt cho ACLK một nguồn xung chuẩn (vd REF) để làm nguồn đồng bộ xung,tốt nhất là nguồn chuẩn có tần số bé nhất có trong MSP.
2.2.CHỌN NGUỒN XUNG ĐẦU RA
Tiếp theo chúng ta sẽ sử dụng các nguồn xung trên cài đặt nguồn xung đầu ra cho các nguồn ACLK,MCLK,SMCLK . Các đường xung tín hiệu này mới chính là nguồn xung giữ nhịp cho tất cả các module khác trong MSP.
Ở mọi chip MSP đều có 3 nguồn xung đầu ra là ACLK , MCLK , SMCLK .Công việc cần làm chỉ là chọn nguồn đầu vào ,cho phép nguồn hoạt động và mức chia tần.
Cài đặt thanh ghi cho nguồn đầu ra:
ACLK
  • SELA__x (UCSCTL4) : Chọn nguồn cho MCLK ,có thể là VLO , REF , DCO , DCODIV , XT1 , XT2 nếu có .
  • DIVA__x (UCSCTL5) :Chia tần nguồn đầu vào lần lượt là 1,2,4,8,16,32 với x từ 1->5
  • DIVPA__x (UCSCTL5) : Thêm một nguồn đầu ra chia tần từ ACLK (mức chia tần từ 1 ->32)
MCLK
  • SELM__x (UCSCTL4): Chọn nguồn cho MCLK ,có thể là VLO , REF , DCO , DCODIV , XT1 , XT2 nếu có .
  • DIVM__x (UCSCTL5):Chia tần nguồn đầu vào lần lượt là 1,2,4,8,16,32 với x từ 1->5
SMCLK
  • SELS__x (UCSCTL4): Chọn nguồn cho MCLK ,có thể là VLO , REF , DCO , DCODIV , XT1 , XT2 nếu có .
  • DIVS__x (UCSCTL5):Chia tần nguồn đầu vào lần lượt là 1,2,4,8,16,32 với x từ 1->5

2.3.BỘ KIỂM SOÁT LỖI
Cuối cùng,mỗi khi điều chỉnh thông số UCS xong ,chúng ta cần một khoảng thời gian để các module này làm việc ổn định.MSP được thiết kế bộ kiểu soát lỗi xung nhịp (Oscillator Fault Logic ) cho biết chính xác khi nào các UCS sẵn sàng làm việc.Khối UCS sẽ sẵn sàng làm việc khi tất cả các lỗi được loại bỏ.
Công việc đơn giản chỉ là xóa tất cả các cờ báo lỗi (XT1,XT2,DCO) và cờ OIFG (SFRIFG1) và đọc cờ báo lỗi OIFG ở chu kỳ máy tiếp theo,nếu không có lỗi thì cho thoát khỏi vòng lặp và tiếp tục làm việc.

Như vậy là chúng ta đã hoàn tất việc cài đặt cho UCS.Các bạn cần lưu ý là chỉ nên cài đặt nguồn đầu vào 1 lần ,còn lại khi muốn thay đổi tần số chúng ta thay đổi cài đặt như trong mục 2.2 .Điều này giúp MSP làm việc nhanh chóng và ổn định hơn.

Chúc các bạn thành công!

No comments:

Post a Comment

END COMMENT FACEBOOK-->