Tuesday, April 7, 2015

BÀI 6: (MSP430 - BASIC) - ADC

1. Giới thiệu chung ADC

Module ADC 10bit của MSP430x2xx là module chuyển tín hiệu tưng tự thành tín hiệu số 10bit , hỗ trợ việc đọc với tốc độ tối đa 200ksps(Tức là chu kỳ 200.000 lần lấy mẫu/s) ,có chế độ truyền dữ liệu DTC ( Truyền dữ liệu đến bất cứ đâu trong bộ nhớ mà không cần sự can thiệp của CPU).Đặc điểm cơ bản:
-       ADC 10 bit tốc độ lấy mẫu 200ksps
-       Chọn điện áp tham chiếu 1,5V hoặc 2,5V VCC hay điện áp tham chiếu ngoài
-       8 kênh chuyển đổi , kênh cảm biến nhiệt độ bên trong chip
-       Chuyển đổi đơn kênh,lặp 1 kênh,trình tự,lặp đi lặp lại
-       Tự động truyền dữ liệu vào bộ nhớ (Chức năng tượng tự DMA,ưu điểm so với các dòng VĐK đời cũ)

Sơ đồ khối:

Các chân có hỗ trợ chức năng ADC sẽ được ký hiệu Ax ,ví dụ A0 – Kênh ADC0 ; A1-Kênh ADC1

2. Lõi ADC10

         ADC 10bit có nhiệm vụ chuyển đổi điện áp đầu vào , so sánh với điện áp tham chiếu và xuất ra thanh ghi ADC10MEM . Điện áp tham chiếu là VR+ và VR- .Giá trị số hóa của điện áp đầu vào tính bằng công thức sau:
         Trong đó :    
o    Vin :Điện áp đầu vào
o   VR+:Điện áp tham chiếu mức dương (Có thể chọn bằng lập trình)
o   VR-: Điện áp tham chiếu mức âm (Có thể chọn bằng lập trình)
Khi tín hiệu đầu vào cao hơn hoặc bằng VR+ thì Nadc = 1023 và khi nhỏ hơn VR- thì bằng 0 .Kết quả có thể lưu ở dạng thường hoặc mã bù 2 . Lõi ADC được điều khiển bằng 2 thanh ghi ADC10CTL0 và ADC10CTL1 .Lõi chỉ hoạt động khi bit ADC10ON =1 . Bit ENC = 0 thì mới cho phép chỉnh sửa thông số các thanh ghi ADC và khi ENC =1 thì việc chuyển đổi mới được thực hiện .

3. Chọn tốc độ chuyển đổi

          ADC10 có thể dùng được cả nguồn xung nội và ngoại từ MCLK , SMCLK , ACLK , từ chân ADC10OSC bằng ADC10SEELx trong thanh ghi ADC10CTL1 .Các bạn cần chú ý khi dùng nguồn xung ngoại từ chân ADC10OSC là tần số cấp không được quá 5Mhz tuy dòng.

4. Chọn cổng chuyển đổi

         Thực chất trong mỗi chip MSP430 chỉ có một bộ chuyển đổi ADC,các cổng cần chuyển đổi ADC sẽ được lần lượt kết nối với bộ ADC qua một bộ MUX .Các cổng được phép chuyển đổi ADC có thể được chọn từ thanh ghi ADC10AEx,các bạn cần quan tâm đến các thanh ghi này vì các cổng khi được chọn ở chế độ ADC sẽ loại bỏ các bộ buffer input và output của chức năng GPIO,từ đo cho phép tiết kiệm điện.

5. Điện áp quy chiếu

Điện áp tham chiếu của ADC có thể chọn rất đa dạng , từ nguồn cấp nội 1.5V 2.5V hay nguồn cấp ngoài VCC hoặc từ chân VREF+ và VREF - .
-       REFON = 1 , Điện áp tham chiếu nội được chọn.
o   REF2_5=1,Điện áp tham chiếu là 2.5V
o   REF2_5=0,Điện áp tham chiếu là 1.5V
-       REFOUT = 1 , Điện áp tham chiếu ngoài được sử dụng nếu chip có sẵn pin Vref+ và Vref-  tương ứng ở chân A4 và A3.
Khi sử dụng điện áp tham chiếu ngoại thì nên tắt nguồn điện áp tham chiếu nội để bảo vệ nguồn.

6. Quá trình biến đổi và lấy mẫu


Biến đổi A-D được bắt đầu khi có xung cạnh lên của tín hiệu vào SHI. SHI được lựa chọn bởi bit SHSx từ các nguồn:
-       ADC10SC
-       Timer_Ax.1
-       Timer_Ax.0
-       Timer_Ax.2
Bit ISSH dùng để đảo chiều tín hiệu SHI. Bit SHTx dùng lựa chọn chu kỳ lấy mẫu là 4, 8, 16, hoặc 64 ADC10CLK. SAMPCON được điều khiển bằng bit ADC10SHTx và MSC trong thanh ghiADC10CTL0 (xem sơ đồ trên) . Tsample là thời gian lấy mẫu. Khi SAMPCON từ mức cao xuống thấp thì quá trình biến đổi A-D bắt đầu. Khi SAMPCON = 0 thì tất cả các ngã vào Ax có tổng trở cao. Khi SAMPCON = 1 thì ngã vào Ax giống như một bộ lọc thong thấp RC trong suốt thời gian lấy mẫu.

+ Thời gian lấy mẫu

         Khi bit SAMPCON = 0 , tất cả các chân Ax được chọn từ ADC10AEx ở trạng thái trở kháng cao.Khi SAMPCON = 1, chân Ax được chọn giống như một bộ lọc thông thấp RC (là bộ giúp loại bỏ nhiễu tần số cao) trong thời gian Tsample, khi đó chân Ax được nối với trở Ri và tụ Ci . Nói chung phải cài đặt thời gian lấy mẫu Tsample và điện trở ngoài Rs sao cho BĐT sau thỏa mãn :
Với :  Sr = 1us/V khi ADC10SR=0 và 2us/V khi ADC10SR=1
          Vref : Điện áp tham chiếu ngoài

7. Chế độ hoạt động

Nói chung có 4 chế độ hoạt động cho ADC ,về chi tiết các bạn có thể xem trong datasheet , ở đây mình chỉ hướng dẫn đặc điểm từng chế độ và các cài đặt. Thay đổi bit CONSEQx (trong thanh ghi ADC10CTL1) để chọn chế độ hoạt động. Kết quả lưu trong ADC10MEM.
-       Biến đổi từng kênh
o   CONSEQx = 00
o   Kênh cần biến đổi ADC được chọn từ bit INCHx.Bit ADC10SC dùng để kích hoạt sự biến đổi.ENC phải được đảo trạng thái sau mỗi lần biến đổi.
-       Biến đổi 1 dãy kênh
o   CONSEQx = 01
o   Biến đổi 1 dãy kênh,bắt đầu ở kênh được chọn trong INCHx,kết thúc ở A0. Bit ADC10SC dùng để kích hoạt sự biến đổi.ENC phải được đảo trạng thái sau mỗi lần biến đổi.
-       Biến đổi từng kênh lặp lại
o   CONSEQx = 10
o   Kênh được chọn trong INCHx được lấy mẫu và biến đổi liên tục
-       Biến đổi dãy kênh lặp lại
o   CONSEQx = 11
o   Dãy kênh bắt đầu ở INCHx và kết thúc ở A0 được lấy mẫu và biến đổi lần lượt.
Khi MSC = 1 và CONSEQx > 0 thì cạnh lên đầu tiên của SHI sẽ kích hoạt biến đổi. Sự biến đổi vẫn tiếp tục cho đến khi dãy kênh được biến đổi xong mặc dù trong quá trình biến đổi xuất hiện những xung cạnh lên ở tín hiệu kích hoạt SHI. Chức năng của Bit ENC không thay đổi khi sử dụng Bit MSC.  

8. Bộ điều khiển chuyển tiếp dữ liệu DCT

ADC10 có một bộ điều khiển chuyển giao dữ liệu ( DTC), nó sẽ tự động chuyển kết quả của biến đổi A-D từ thanh ghi ADC10MEM sang bộ nhớ của Chip. DTC được cho phép khi thiết lập thanh ghi ADC10DTC1 có giá trị khác 0. Khi DTC được cho phép, mỗi khi ADC10 hoàn thành việc biến đổi và lưu kết quả vào thanh ghi ADC10MEM thì việc chuyển giao dữ liệu được kích hoạt. Mỗi DTC yêu cầu một CPU MCLK. Không được sử dụng các bus có dữ liệu mà DTC truyền vào để tránh xung đột,nên để CPU ngừng chạy. DTC không được khởi tạo khi ADC10 đang bận.
Nếu bit ADC10CT được thiết lập thì chế độ DCT sẽ không dừng lại sau khi hoàn thành chuyển giao,mà sẽ reset và quay lại chuyển đổi trong chu kỳ mới.Ngược lại DCT sẽ dừng sau khi hoàn tất chu kỳ chuyển đổi.

8.1. Chế độ chuyển giao 1 khối

Được kích hoạt khi Bit ADC10TB Reset. Giá trị n trong ADC10TC1 xác định số lương chuyển giao cho một khối. Địa chỉ bắt đầu của khối là thanh ghi 16 Bit ADC10SA. Địa chỉ kết thúc là ADC10SA + 2n – 2.
Địa chỉ con trỏ bên trong được khởi tạo bằng ADC10SA và bộ đếm chuyển giao được khởi tạo bằng ‘n’. DTC chuyển giao giá trị từ ADC10MEM sang địa chỉ con trỏ ADC10SA. Sau mỗi lần chuyển giao thì địa chỉ con trỏ tăng 2 và bộ đếm giảm 1. DTC tiếp tục chuyển giao từ ADC10MEM cho đến khi bộ đếm giảm xuống băng 0. Khi sử dung DTC trong chế độ chuyển giao một khối thì cờ ADC10IFG được Set sau mỗi khối được chuyển giao hoàn thành.

8.2. Chế đội chuyển giao 2 khối

          Được chọn khi Bit ADC10TB được Set. Giá trị n trong ADC10TC1 xác định số chuyển giao trong một khối. Địa chỉ đầu tiên trong thanh ghi ADC10SA. Địa chỉ kết thúc của khối đầu tiên là ADC10SA + 2n – 2. Dãy địa chỉ của khối thứ 2 được xác định từ SA + 2n đến SA + 4n – 2. Địa chỉ con trỏ bên trong được khởi tạo bằng ADC10SA và bộ đếm chuyển giao được khởi tạo bằng ‘n’. DTC chuyển giao giá trị từ ADC10MEM sang địa chỉ con trỏ ADC10SA. Sau mỗi lần chuyển giao thì địa chỉ con trỏ tăng 2 và bộ đếm giảm 1. DTC tiếp tục chuyển giao từ ADC10MEM cho đến khi bộ đếm giảm xuống bằng 0. Ở thời điểm này, khối thứ nhất đầy, cờ ADC10IFG và Bit ADC10B1 thì được Set. DTC tiếp tục với khối 2. Bộ đếm chuyển giao bên trong tự động nạp lại giá trị n. DTC bắt đầu chuyển kết quả biến đổi từ ADC10MEM sang khối 2. Sau n lần chuyển giao hoàn thành thì khối 2 đầy. Cờ ADC10IFG Set, Bit ADC10B1 được clear.

8.3. Chu ký thời gian chuyển đổi DCT



9. Ngắt ADC10

        Một ngắt và một véc tơ ngắt được ghép với ADC10. Khi DTC không được sử dụng ( ADC10DTC1= 0), ADC10IFG được Set khi kết quả biến đổi A-D được tải xuống ADC10MEM. Khi DTC được sử dụng ( ADC10DTC1 > 0), ADC10IFG được Set khi sự chuyển giao một khối được hoàn thành và bộ đếm chuyển giao bằng 0. Nếu cả hai Bit ADC10IE và GIE được Set,ADC10IFG sẽ sinh ra một ngắt yêu cầu. Cờ ADC10IFG tự động Reset khi ngắt yêu cầu được duy trì hoặc có thể được Reset bằng phần mềm. 

10. Tập thanh ghi

         ADC10 của MSP430 có rất nhiều thanh ghi điều khiển,để xem chi tiết các bạn đọc thêm trong datasheet,ở đây mình không tiện liệt kê toàn bộ.

11. Lập trình

           Các chế độ hoạt động của ADC10 rất phức tạp,nên rất khó viết thư viện ADC hoàn chỉnh , dưới đây mình thực hiện thử 2 đoạn chương trình đó là đọc ADC ở chế độ đơn kênh và chế độ đơn kênh lặp lại.
      Trong ví dụ này mình sẽ thực hiện đọc điện áp ở chân A0 và điện áp VCC/2 dùng điện áp tham chiếu nội 2.5V .Các bạn có thể nối 1 biến trở có đầu xoay nối với chân A0 ,2 đầu còn lại nối VCC và GND trên Kit
Bắt đầu các bạn nên viết hàm khởi tạo cho ADC.Các cài đặt cần làm
-       Set bit ENC=0 thì mới có thể chỉnh sửa được thanh ghi ADC10CTL0 và ADC10CTL1
-       Chọn các chân Ax có chuyển đổi ADC (ADC10AE0),mục đích của việc này đế tách các chân này khỏi khối GPIO.
-       Chọn tần số lấy mẫu,bật module ADC10
-       Chọn điện áp tham chiếu.Cần chú ý bit SREFx.Phân biệt giá trị Vref+ là các điện áp tham chiếu nội ,trong khi Veref+ và Veref- là 2 chân điện áp tham chiếu ngoài(Xem Sơ đồ chân).Khi muốn dùng điện áp tham chiếu nội thì Vr+ phải được nối với Vref+(vì thế ta chọn SREF_1).Khi muốn dùng điện áp tham chiếu ngoài có thể chọn SREF_2.
-       Khi muốn dùng điện áp tham chiếu ngoài ở các chân Veref thì phải set REFOUT=1
-       Cuối cùng là bật ENC và ADC10ON để cho phép module hoạt động

Code tham khảo như sau:

#include "msp430g2553.h"
void main(void)
{
     P1DIR |= 0x01;
     ADC10CTL0 = SREF_1 + ADC10SHT_2 + REFON + ADC10ON + ADC10IE;
     ADC10CTL1 = INCH_1;
     ADC10AE0 |= 0x02;
     while(1)
     {
          ADC10CTL0 |= ENC _ADC10SC;
          while(ADC10CTL1&1);
          if(ADC10MEM < 0x88)
               P1OUT &=~ 0x01;
          else
               P1OUT |= 0x01;
     }
}

VIDEO HƯỚNG DẪN






0 nhận xét :

Post a Comment

Note: Only a member of this blog may post a comment.