BÀI 08 : ADC TRONG STM8S.


  1. Một số khái niệm về lý thuyết.
  2. ADC – Analog to digital Converter là bộ chuyển đổi tín hiệu tương tự sang tín hiệu số. ADC được ứng dụng rất nhiều như đo nhiệt độ, đọc giá trị điện áp, cường độ dòng điện, đọc phím nhấn, đọc giá trị biến trở…. Khi tìm hiểu về ADC chúng ta cần tìm hiểu bộ ADC đó là bao nhiêu bit, các phương pháp chuyển đổi. ADC có số bit càng cao tức là độ phân giải của bộ ADC càng lớn.

    ADC trong STM8S là bộ ADC có 10 bit tức là giá trị đọc về nằm trong khoảng 0 ->2^10= 1024. Giá trị điện áp maximum của chân đầu vào bộ ADC bằng giá trị cung cấp cho đầu vào(VDD) – ví dụ VDD=5V -> điện áp đo được chân đầu vào của chân VĐK(chân cấu hình ADC) là 5V -> giá trị ADC đọc về lúc đó là 1024. STM8S003F3P6 có 5 chân ADC vào với 2 mode cấu hình là mode single và continuous conversion mode với nhiều chế độ như ngắt khi kết thúc chuyển đổi, điều khiển bằng xung trigger từ timer, ngắt với giới hạn trên và giới hạn dưới của ADC( Analog watchdog)…

    Sơ đồ khối bộ ADC bên trong VĐK:

  3. Cấu hình bằng thư viện ST.
    1. Cấu hình không sử dụng ngắt và đọc 1 kênh ADC về.
    2. Ở đây mình sử dụng UARTđể truyền giá trị đọc về lên máy tính để quan sát thông qua phần mềm hercules. Ở bài 7 mình đã hướng dẫn sử dụng lênh printf nên bài này mình chỉ cấu hình ADC.

      • Cấu hình chương trình con ADC channel 2:
      • Chương trình thực thi trong main.

      LƯU Ý:

      • Để đọc giá trị ADC với mức độ tin cây cao hơn ta cần lấy trung bình n mẫu ADC rồi chia cho số mẫu để lấy giá trị trung bình. Số mẫu càng cao thì độ tin cậy càng lớn nhưng thời gian thực thi sẽ lâu hơn. Tùy vào từng ứng dụng mà số mẫu lấy sẽ khác nhau.
      • Khi sử dụng ADC và UART(hàm printf) 1 số chương trình sẽ báo lỗi bộ nhớ chương trình bị tràn, đây là nhược điểm lớn nhất mà STVD mắc phải so với IAR. Mình chỉ đưa ra 1 cách để chương trình biên dịch tối ưu hơn, còn nếu viết thêm code thì tùy thuộc vào độ dài của mỗi chương trình mà có thể báo lại lỗi cũ. Lỗi trước khi sửa chữa:

      CÁCH SỬA CHỮA :các bạn vào setting -> C compiler -> user define opptions thêm dòng chữ +split.

    3. Khi sử dụng nhiều kênh ADC.
      • Chương trình con cấu hình channel 2:
      • Chương trình con cấu hình channel 4:
      • Chương trình thực thi trong hàm main:

      Cấu hình nhiều kênh ADC thực ra là thay phiên sử dụng 1 bộ ADC ở các chân khác nhau. Sau khi sử dụng ở chân này thì disnable chân đó và chuyển sang sử dụng chân khác. Vì thời gian thực thi của VĐK là rất nhanh nên ta có thể sử dụng nhiều channel khác nhau. Khi cấu hình nhiều kênh khác bạn cũng có thể sử dụng cách trên.

  4. Một vài thanh ghi thông dụng.
    1. ADC_DRH /ADC_DRL – ADC data register High/Low.
    2. 2 thanh ghi này mỗi thanh ghi 8 bit chứa dữ liệu ADC đọc về và sẽ có 2 mode tương ứng cài đặt kiểu dữ liệu là ADC1_ALIGN_LEFT và ADC1_ALIGN_RIGHT:

      • ADC1_ALIGN_LEFT : bit data D9 -> D2 nằm trong thanh ghi DH[7...0] và D1,D0 nằm trong DL[1,0].
      • ADC1_ALIGN_RIGHT : bit data D7 -> D0 nằm trong thanh ghi DL[7...0] và D9,D8 nằm trong DH[1,0].
    3. ADC_CSR – ADC control/ status register.
    4. Thanh ghi này cung cấp một số bit điều khiển và hiển thị trạng thái của ADC.

      • EOC : bit thông báo đã kết thúc quá trình chuyển đổi ADC(1) hay chưa(0).
      • AWD: thông báo Analog watchdog: không có Analog watchdog event(0) và có Analog watchdog event(1).
      • EOCIE: cho phép ngắt khi kết thúc quá trình hoàn tất chuyển đổi ADC(1) hay không(0).
      • AWDIE : cho phép ngắt analog watchdog(1) hay không(0).
      • CH3[3:0]: lựa chọn kênh ADC sử dụng vd: kênh 2 thì CH3[3:0]= 0x02.
    5. ADC_CR1 – ADC configuration register 1.
      • SPSEL[2:0] : cấu hình chia clock hệ thống cho bộ Adc hoạt động.
      • CONT: cấu hình mode ADC là single hoặc Continouns mode.
      • ADON: cho phép bắt đầu chuyển đổi(1) hay không(0).
  5. Bài tập.
    1. Cấu hình kênh AI3 để đọc giá trị ADC có sử dụng ngắt khi kết thúc quá trình chuyển đổi hiển thị lênh máy tính sử dụng UART.
    2. Cấu hình để đọc 2 biến trở ở 2 kênh AI3,AI4 không sử dụng ngắt, kết quả hiển thị lên máy tính sử dụng UART.
    3. Cấu hình kênh AI3 để đọc ADC từ biến trở có sử dụng ngắt để đọc giá trị ADC trong khoảng 500< ADC_VALUE< 800. Led ở chân PA3 sáng khi ADC_VALUE nằm trong khoảng giá trị cho phép đó.









Link tải chương trình sử dụng 1 kênh ADC Link tải chương trình sử dụng 2 kênh ADC