1. Trang chủ
  2. » Tất cả

Nghiên cứu hệ thống tự động đo góc pha trở kháng điện sinh học

74 3 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 74
Dung lượng 2,07 MB

Nội dung

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI LUẬN VĂN THẠC SĨ Nghiên cứu hệ thống tự động đo góc pha trở kháng điện sinh học VŨ HOÀNG CHƯƠNG Ngành Kỹ thuật Y sinh Giảng viên hướng dẫn: TS Trịnh Quang Đức Viện: Điện tử - Viễn thông HÀ NỘI, 2022 TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI LUẬN VĂN THẠC SĨ Nghiên cứu hệ thống tự động đo góc pha trở kháng điện sinh học VŨ HOÀNG CHƯƠNG Ngành Kỹ thuật Y sinh Giảng viên hướng dẫn: TS Trịnh Quang Đức Chữ ký GVHD Viện: Điện tử - Viễn thơng HÀ NỘI, 2022 CỘNG HỊA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh phúc BẢN XÁC NHẬN CHỈNH SỬA LUẬN VĂN THẠC SĨ Họ tên tác giả luận văn : Vũ Hoàng Chương Đề tài luận văn: Nghiên cứu hệ thống tự động đo góc pha trở kháng điện sinh học Chuyên ngành: Kỹ thuật Y sinh Mã số SV: 20202827M Tác giả, Người hướng dẫn khoa học Hội đồng chấm luận văn xác nhận tác giả sửa chữa, bổ sung luận văn theo biên họp Hội đồng ngày 01/10/2022 với nội dung sau: - Đã chỉnh sửa số lỗi hành văn luận văn - Đã kết cấu lại luận văn thành chương từ chương ban đầu - Đã chỉnh sửa việt hóa số hình ảnh nhỏ cịn mờ - Đã sửa lại đơn vị số liệu bảng chương - Đã bổ sung kịch đánh giá vào phần 4.5 Ngày tháng năm 2022 Giáo viên hướng dẫn Tác giả luận văn TS Trịnh Quang Đức Vũ Hoàng Chương CHỦ TỊCH HỘI ĐỒNG TS Lê Huy Tùng LỜI CẢM ƠN Trong trình thực luận văn, em nhận định hướng, bảo tận tình, chỉnh sửa, góp ý từ Giảng viên hướng dẫn – TS Trịnh Quang Đức Em xin gửi lời cảm ơn chân thành đến thầy Đồng thời, em xin gửi lời cảm ơn đến thầy cô giảng viên Bộ môn Kỹ thuật Y sinh – Viện Điện tử Viễn thông giúp đỡ em suốt trình học tập nghiên cứu trường Hà Nội, ngày tháng Tác giả năm 2022 Vũ Hoàng Chương MỤC LỤC DANH MỤC KÝ HIỆU VÀ CHỮ VIẾT TẮT i DANH MỤC HÌNH VẼ ii DANH MỤC BẢNG BIỂU v PHẦN MỞ ĐẦU CHƯƠNG CƠ SỞ LÝ THUYẾT 1.1 Các thành phần thể 1.2 So sánh kỹ thuật đo lường thành phần thể 1.3 Phân tích trở kháng điện sinh học (BIA) 1.3.1 Độ dẫn điện thể 1.3.2 Đo trở kháng 1.3.3 Góc pha trở kháng điện sinh học mơ hình mạch tương đương cho tế bào 10 1.4 Đo độ lệch pha trở kháng điện sinh học người 15 CHƯƠNG THIẾT KẾ HỆ THỐNG 16 2.1 Mục tiêu tổng thể lựa chọn thông số kỹ thuật 16 2.1.1 Thơng số kỹ thuật dịng điện 16 2.2 Thiết kế sơ đồ khối cho hệ thống BIPA 17 2.3 Thiết kế mạch tương tự cho hệ thống đo bipa 19 2.4 Thiết kế khối nguồn 19 2.5 Thiết kế khối tạo nguồn dòng 20 2.5.1 Bộ tạo sóng hình sin 21 2.5.2 Bộ lọc thông cao khuếch đại đảo 23 2.5.3 Chuyển đổi điện áp thành dòng điện 24 2.6 Thiết kế khối xử lý tín hiệu tương tự 27 2.6.1 Khối khuếch đại đệm khuếch đại vi sai 27 2.6.2 Khối tạo điện áp 28 2.6.3 Khối mạch nhân tương tự 29 2.6.4 Khối xác định đỉnh xung .30 CHƯƠNG THIẾT KẾ MẠCH SỐ CHO HỆ THỐNG 31 3.1 Điều khiển AD9833 thông qua giao tiếp SPI .32 3.1.1 Giới thiệu giao tiếp SPI 32 3.1.2 Giao tiếp TIVA-C với module AD9833 35 3.2 Thu tín hiệu thơng qua ADS1115 qua giao tiếp I2C 36 3.2.1 Giới thiệu giao tiếp I2C 36 3.2.2 Giao tiếp TIVA-C với module ADS1115 39 CHƯƠNG ĐÁNH GIÁ KẾT QUẢ THIẾT KẾ HỆ THỐNG 40 4.1 Mô sơ đồ tương đương phần mềm mô TINA TI 40 4.2 Sơ đồ khối mô hệ thống 42 4.3 Kết thiết kế 42 4.4 Kết đo thử nghiệm .44 4.4.1 Khối tạo nguồn dòng 44 4.4.2 Đánh giá khối tạo hai tín hiệu lệch pha .46 4.4.3 Đánh giá khối đo góc pha 48 4.5 Hướng phát triển kịch đánh giá 52 DANH MỤC TÀI LIỆU THAM KHẢO 53 PHỤ LỤC 54 DANH MỤC KÝ HIỆU VÀ CHỮ VIẾT TẮT BIA Bioelectrical Impedance Analysis PA Phase Angle BIPA Bioelectrical Impedance Phase Angle TBW Total Body ICW Intracellular Water ECW Extracellular Water BF Body Fat DEXA Dual Energy X-ray Absorptionmetry BMI Body Mass Index SPI Serial Peripheral Interface LCD Liquid Crystal Display ADC Analog to Digital Converter i DANH MỤC HÌNH VẼ Hình 1.1 Biểu đồ thành phần thể người trưởng thành khỏe mạnh [3] Hình 1.2 Bốn ngun tố Oxy, Hydro, Cacbon Nitơ chiếm khoảng 96% khối lượng thể người [4] Hình 1.3 Phương pháp kiểm tra nếp gấp da (Skinfold Test) Hình 1.4 Phương pháp kiểm tra tỷ lệ eo hơng (Waist-Hip ratio) Hình 1.5 Phương pháp đo trọng lượng nước (Underwater weighing) Hình 1.6 Dịng điện chạy qua mơ thể: (a) qua mô cơ; (b) qua mô mỡ Hình 1.7 Cơ thể người giả định dây dẫn thể tích hình trụ đồng [5] Hình 1.8 Tế bào ngun vẹn góc pha lớn 10 Hình 1.9 Tế bào khơng ngun vẹn góc pha nhỏ 10 Hình 1.10 Đường dịng điện mơi trường ngoại bào .11 Hình 1.11 Mơ hình mạch tương đương mơ sinh học 11 Hình 1.12 Đồ thị thể mối quan hệ tổng trở kháng, điện trở điện kháng 12 Hình 1.13 Biểu đồ thể giá trị điện kháng liên quan đến khối lượng nội bào thể người [7] 13 Hình 1.14 Mơ hình tương đương mô sinh học 13 Hình 1.15 Mối quan hệ góc pha trở kháng điện sinh học tình trạng sức khỏe tế bào [7] 14 Hình 16 Góc pha tham chiếu cho nam nữ [9] 15 Hình 1.17 Minh họa phép đo trở kháng thể với phương pháp sử dụng điện cực điện cực 15 Hình 2.1 Ngưỡng dòng điện đặt lên thể theo tần số [5] 16 Hình 2.2 Sơ đồ khối hệ thống đo góc pha trở kháng điện sinh học hoàn chỉnh 18 Hình 2.3 Khối nguồn cung cấp cho hệ thống 18 Hình 2.4 Khối nguồn cung cấp cho hệ thống 20 ii Hình 2.5 Sơ đồ khối khối tạo nguồn dòng 21 Hình 2.6 Module AD9833 21 Hình 2.7 Sơ đồ kết nối mạch tạo sóng hình sin 22 Hình 2.8 Mô tả chức chân AD9833 22 Hình 2.9 Mạch nguyên lý lọc thông cao 23 Hình 2.10 Mạch nguyên lý khối khuếch đại đảo 24 Hình 2.11 Mạch nguyên lý mạch tạo nguồn dòng Howland cải tiến 25 Hình 2.12 Mạch nguyên lý chuyển đổi điện áp sang dòng điện 26 Hình 2.13 Sơ đồ mạch đệm khuếch đại vi sai 28 Hình 2.14 Khối tạo điện áp tham chiếu 29 Hình 2.15 Nguyên lý khối mạch nhân tương tự 29 Hình 2.16 Nguyên lý khối xác định đỉnh xung 30 Hình 3.1 Sơ đồ chân TM4C123GH6PM 31 Hình 3.2 Phần mềm Code Composer Studio 32 Hình 3.3 Giao tiếp SPI với nhiều module 33 Hình 3.4 Bốn chế độ hoạt động SPI 35 Hình 3.5 Cấu hình SPI 03 dây với Slave 35 Hình 3.6 Kết nối TM4C123GH6PM với AD9833 36 Hình 3.7 Sơ đồ khởi tạo thiết lập cho module AD9833 36 Hình Mơ hình ghép nối I2C 38 Hình 3.9 Mơ hình truyền liệu thông qua giao thức giao tiếp I2C 38 Hình 3.10 Sơ đồ kết nối KIT TIVA-C với module ADS1115 39 Hình 3.11 Thanh ghi cấu hình ADS1115 39 Hình Mơ mạch tương đương tế bào phần mềm TINA 40 Hình 4.2 Đặc tuyến thể mối quan hệ tụ điện góc pha 41 Hình 4.3 Sơ đồ khối mô hệ thống 42 Hình 4.4 Phần mềm Altium Designer phiên 19 42 Hình 4.5 Mạch tạo xung chế độ layout 3D 43 Hình 4.6 Mạch tạo xung sau hồn thành 43 Hình 4.7 Mạch thu tín hiệu tương tự chế độ layout 3D 43 Hình 4.8 Mạch xử lý tín hiệu tương tự sau hồn thành 44 iii Hình 4.9 Tín hiệu sóng sin tạo module AD9833 44 Hình 4.10 Nguyên lý đo trở kháng đầu 45 Hình 4.11 Đồ thị trở kháng đầu nguồn dòng phụ thuộc vào tần số 45 Hình 4.12 Đồ thị mối quan hệ điện trở điện áp 46 Hình 4.13 Máy sóng kỹ thuật số ocilloscope (MSOX2024A, KEYSIGHT) 47 Hình 4.14 Hai tín hiệu tạo module tạo xung với độ lệch pha 00 47 Hình 4.15 Hai tín hiệu tạo module tạo xung với độ lệch pha 900 47 Hình 4.16 Hai tín hiệu tạo module tạo xung với độ lệch pha 1800 48 Hình 4.17 Đồ thị tương quan giá trị pha đo giá trị pha thiết lập 51 iv Hình 4.16 Hai tín hiệu tạo module tạo xung với độ lệch pha 1800 Dựa vào số liệu trích xuất từ oscilloscope khẳng định tín hiệu tạo có độ xác cao sai số bé Do đó, việc đánh giá độ xác mạch đo độ lệch pha vơ đơn giản đem lại độ xác cao 4.4.3 Đánh giá khối đo góc pha Mục đánh giá độ xác mạch đo góc pha Việc đánh giá dựa việc so sánh độ lệch pha giá trị thiết lập kết đo Hai tín hiệu sóng hình sin tần số giống hệt tạo việc lập trình với bước lệch góc 10 khoảng từ 20 đến 100 cho đầu vào biến đổi điện áp lệch pha Tín hiệu sau lấy mẫu ADC 12 bit với tốc độ lấy mẫu 100 mẫu/giây Các giá trị góc pha đo hiển thị từ Bảng 5-1 đến Bảng 5-9 Em thực đo với độ lệch pha từ 20 (0.0349 rad) đến 100 (0.1745 rad) tương ứng với độ lệch pha 10 lần đo để đánh giá khối đo góc pha Bảng 4.2 Kết đo góc pha độ lệch pha thiết lập 20(0.0349 rad) Lần đo Kết quả(rad) 10 0.0329 0.0329 0.0285 0.0435 0.0463 0.0435 0.0308 0.0285 0.0368 0.0386 Trung bình(rad) 0.0363 Bảng Kết đo góc pha độ lệch pha thiết lập 30(0.0524 rad) Lần đo Kết quả(rad) Trung bình(rad) 10 0.0604 0.0570 0.0507 0.0480 0.0507 0.0520 0.0451 0.0546 0.0570 0.0507 0.0526 48 Bảng 4.4 Kết đo góc pha độ lệch pha thiết lập 40(0.0698 rad) Lần đo Kết quả(rad) 10 0.0688 0.0745 0.0698 0.0668 0.0708 0.0668 0.0754 0.0717 0.0726 0.0744 Trung bình(rad) 0.0711 Bảng 4.5 Kết đo góc pha độ lệch pha thiết lập 50(0.0873 rad) Lần đo Kết quả(rad) 10 0.0886 0.0916 0.0878 0.0901 0.0847 0.0870 0.0847 0.0855 0.0878 0.0923 Trung bình(rad) 0.088 Bảng 4.6 Kết đo góc pha độ lệch pha thiết lập 60(0.1047 rad) Lần đo Kết quả(rad) 10 0.1021 0.1007 0.1047 0.1053 0.1040 0.1079 0.1072 0.1047 0.1027 0.1034 Trung bình(rad) 0.1043 Bảng 4.7 Kết đo góc pha độ lệch pha thiết lập 70(0.1222 rad) Lần đo Kết quả(rad) Trung bình(rad) 10 0.1209 0.1220 0.1253 0.1214 0.1198 0.1192 0.1231 0.1203 0.1226 0.1214 0.1216 49 Bảng 4.8 Kết đo góc pha độ lệch pha thiết lập 80(0.1396 rad) Lần đo Kết quả(rad) 10 0.1411 0.1391 0.1401 0.1411 0.1401 0.1396 0.1415 0.1381 0.1396 0.1396 Trung bình(rad) 0.1400 Bảng 4.9 Kết đo góc pha độ lệch pha thiết lập 90(0.1571 rad) Lần đo Kết quả(rad) 10 0.1574 0.1566 0.1566 0.1552 0.1548 0.1522 0.1566 0.1539 0.1579 0.1561 Trung bình(rad) 0.1557 Bảng 4.10 Kết đo góc pha độ lệch pha thiết lập 100(0.1745 rad) Lần đo Kết quả(rad) 10 0.1726 0.1722 0.1722 0.1714 0.1754 0.1722 0.1738 0.1710 0.1734 0.1718 Trung bình(rad) 0.1726 Từ kết trên, ta có bảng thể góc lệch pha thiết lập góc lệch pha trung bình đo tương ứng 50 Bảng 4.11 Góc lệch pha thiết lập góc lệch pha trung bình đo tương ứng Thứ tự Giá trị góc lệch pha thiết lập (đơn vị: Radians) Giá trị góc lệch pha trung bình đo (đơn vị: Radians) 0.0349 0.0363 0.0524 0.0526 0.0698 0.0711 0.0873 0.088 0.1047 0.1043 0.1222 0.1216 0.1396 0.1400 0.1571 0.1557 0.1745 0.1726 Hình minh họa mối tương quan giá trị pha đo giá trị pha thiết lập Các kết đo từ hệ thống đề xuất có mối tương quan cao với giá trị thiết lập (hệ số xác định R²=0.997) Giá trị pha thiết lập 12 10 0 Giá trị pha đo 10 12 Hình 4.17 Đồ thị tương quan giá trị pha đo giá trị pha thiết lập 51 4.5 Hướng phát triển kịch đánh giá • Thực hồn thành tồn module cịn thiếu hệ thống • Đo thực mơ có sẵn thịt,… • Sau có kết thực yêu cầu an toàn điện thực đo vùng thể • Thu thập liệu đưa kết để đánh giá 52 DANH MỤC TÀI LIỆU THAM KHẢO [1] Satish Kumar, Aswini Dutt, Sandhya Hemraj, Shankar Bhat, Bhat Manipadybhima (2012) Phase Angle Measurement in Healthy Human Subjects through Bio-Impedance Analysis [Online] Available: http://www.ncbi.nlm.nih.gov [2] Cornish, B H (1994) Swept frequency bioimpedance analysis for the determination of body water compartments School of Physics Queensland University of Technology [3] https://www.otsuka.co.jp/en/nutraceutical/about/nutrition/sports- nutrition/basis/essential-water.html, truy cập cuối ngày 13/06/2020 [4] https://en.wikipedia.org/wiki/Composition_of_the_human_body, truy cập cuối ngày 13/06/2020 [5] Tushar Kanti Bera, “Bioelectrical Impedance Methods for Noninvasive Health Monitoring”, Journal of Medical Engineering, Vol 2014, No 381251, 2014 [6] https://www.biodyncorp.com/knowledgebase/circuit_model.html, truy cập cuối ngày 14/06/2020 [7] Clinician Desk Reference for BIA Testing [Online] Available: https://www.biodyncorp.com/pdf/clinician_desk_reference_bio.pdf [8] O Grundmann, S L Yoon, J J Williams (2015) The value of bioelectrical impedance analysis and phase angle in the evaluation of malnutrition and quality of life in cancer patients-a comprehensive review [Online] Available: https://www.nature.com/articles/ejcn2015126 [9] http://dammedientu.vn/chuan-giao-tiep-spi-va-cach-ket-noi/, truy cập cuối ngày 17/06/2020 53 PHỤ LỤC ////// - Code sử dụng cho mạch tạo xung AD9833 -//////// void AD9833_SSI_Master_Configure() { SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD); SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI3); SysCtlDelay(10); GPIOPinConfigure(GPIO_PD0_SSI3CLK); GPIOPinConfigure(GPIO_PD2_SSI3RX); GPIOPinConfigure(GPIO_PD3_SSI3TX); GPIOPinTypeSSI(GPIO_PORTD_BASE, GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_0); GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE, GPIO_PIN_1); GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE, GPIO_PIN_6); GPIOPadConfigSet(GPIO_PORTD_BASE, GPIO_PIN_2, GPIO_STRENGTH_4MA, GPIO_PIN_TYPE_STD_WPU); GPIOPadConfigSet(GPIO_PORTD_BASE, GPIO_PIN_3 | GPIO_PIN_0, GPIO_STRENGTH_4MA, GPIO_PIN_TYPE_STD); GPIOPadConfigSet(GPIO_PORTD_BASE, GPIO_PIN_1, GPIO_STRENGTH_4MA, GPIO_PIN_TYPE_STD); GPIOPadConfigSet(GPIO_PORTD_BASE, GPIO_PIN_6, GPIO_STRENGTH_4MA, GPIO_PIN_TYPE_STD); SysCtlDelay(10); // SSIConfigSetExpClk(SSI3_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 1000000, 8); SSIConfigSetExpClk(SSI3_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_2, SSI_MODE_MASTER, 20000000, 8); SSIEnable(SSI3_BASE); } /////////////////////////////////////////////////////////////////////////// void AD9833_selectFSY1() { GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_1, 0); } /////////////////////////////////////////////////////////////////////////// 54 void AD9833_deselectFSY1() { GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_1, GPIO_PIN_1); } void AD9833_selectFSY2() { GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_6, 0); } /////////////////////////////////////////////////////////////////////////// void AD9833_deselectFSY2() { GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_6, GPIO_PIN_6); } void GenSignal1(long frequency, uint16_t waveform, float Phase ) { AD9833_selectFSY1(); Reset(); AD9833_deselectFSY1(); WriteFrequencyAD9833V1(frequency , waveform , Phase); AD9833_selectFSY1(); Reset(); AD9833_deselectFSY1(); } void WriteFrequencyAD9833V1(long frequency, uint16_t waveform, float Phase ) { uint16_t MSB, LSB , PhaseVal; // uint16_t waveform = 0x2000; uint32_t calculated_freq_word; float AD9837Val = 0.00000000; /* Frequency */ AD9837Val = (((float)(frequency))/16000000); calculated_freq_word = AD9837Val*0x10000000; MSB = (uint16_t)((calculated_freq_word & 0xFFFC000)>>14); //14 bits 55 LSB = (uint16_t)(calculated_freq_word & 0x3FFF); //Set control bits DB15 ande DB14 to and one, respectively, for frequency register LSB |= 0x4000; MSB |= 0x4000; /* Phase */ PhaseVal = (((uint16_t)(Phase*BITS_PER_DEG)) & 0x0FFF) ; //Set control bits DB15 and DB14 to for write phase PhaseVal |= PHASE_WRITE_CMD; /* Set Signal -*/ AD9833_selectFSY1(); WriteRegister_AD9833(0x2100); WriteRegister_AD9833(LSB); //lower 14 bits WriteRegister_AD9833(MSB); //upper 14 bits //WriteRegister_AD9833(0xC000); WriteRegister_AD9833(PhaseVal); WriteRegister_AD9833(waveform); //sin AD9833_deselectFSY1(); } void WriteFrequencyAD9833V2(long frequency, uint16_t waveform, float Phase ) { uint16_t MSB, LSB , PhaseVal; // uint16_t waveform = 0x2000; uint32_t calculated_freq_word; float AD9837Val = 0.00000000; /* Frequency */ AD9837Val = (((float)(frequency))/16000000); calculated_freq_word = AD9837Val*0x10000000; MSB = (uint16_t)((calculated_freq_word & 0xFFFC000)>>14); //14 bits LSB = (uint16_t)(calculated_freq_word & 0x3FFF); //Set control bits DB15 ande DB14 to and one, respectively, for frequency register LSB |= 0x4000; MSB |= 0x4000; /* Phase */ PhaseVal = (((uint16_t)(Phase*BITS_PER_DEG)) & 0x0FFF) ; 56 //Set control bits DB15 and DB14 to for write phase PhaseVal |= PHASE_WRITE_CMD; AD9833_selectFSY2(); WriteRegister_AD9833(0x2100); WriteRegister_AD9833(LSB); //lower 14 bits WriteRegister_AD9833(MSB); //upper 14 bits //WriteRegister_AD9833(0xC000); WriteRegister_AD9833(PhaseVal); WriteRegister_AD9833(waveform); //sin AD9833_deselectFSY2(); } void WriteRegister_AD9833(uint16_t data) { SSIDataPut(SSI3_BASE, (data>>8)&0xFF);// Transfer high byte while(SSIBusy(SSI3_BASE)){} SSIDataPut(SSI3_BASE, (data&0xFF));// Transfer low byte while(SSIBusy(SSI3_BASE)){} } ////// - Code sử dụng cho mạch xử lý tín hiệu số //////// void Config_I2C() { SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C1); SysCtlPeripheralReset(SYSCTL_PERIPH_I2C1); while(!SysCtlPeripheralReady(SYSCTL_PERIPH_I2C1)){} SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); SysCtlDelay(10); GPIOPinConfigure(GPIO_PA6_I2C1SCL); GPIOPinConfigure(GPIO_PA7_I2C1SDA); GPIOPinTypeI2CSCL(GPIO_PORTA_BASE, GPIO_PIN_6); GPIOPinTypeI2C(GPIO_PORTA_BASE, GPIO_PIN_7); 57 I2CMasterInitExpClk(I2C1_BASE, SysCtlClockGet(), false); } void writeWords_ADS1115(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint16_t *data) { I2CMasterSlaveAddrSet(I2C1_BASE, devAddr, false); I2CMasterDataPut(I2C1_BASE, regAddr); I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_SEND_START); while(I2CMasterBusy(I2C1_BASE)); uint8_t i = 0; for (i = 0; i < length-1 ; i++) { I2CMasterDataPut(I2C1_BASE, (uint8_t)(data[i]>>8));//send((uint8_t)(data[i] >> 8)); // send MSB I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_SEND_CONT); while(I2CMasterBusy(I2C1_BASE)); I2CMasterDataPut(I2C1_BASE, (uint8_t)data[i++]);// send((uint8_t)data[i++]); // send LSB I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_SEND_CONT); while(I2CMasterBusy(I2C1_BASE)); } I2CMasterDataPut(I2C1_BASE, (uint8_t) (data[i] >> 8)); // Wire.send((uint8_t)(data[i] >> 8)); // send MSB I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_SEND_CONT); while (I2CMasterBusy(I2C1_BASE)); I2CMasterDataPut(I2C1_BASE, (uint8_t) data[i++]); // Wire.send((uint8_t)data[i++]); // send LSB I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_SEND_FINISH); while (I2CMasterBusy(I2C1_BASE)); } 58 uint16_t readI2C1( uint8_t Conv_Register ) { uint8_t UpperByte = 0; uint8_t LowerByte = 0; uint16_t data = 0; //specify that we want to communicate to device address with an intended write to bus I2CMasterSlaveAddrSet(I2C1_BASE, ADDRESS_DEVICE, false); //the register to be read I2CMasterDataPut(I2C1_BASE, Conv_Register); //send control byte and register address byte to slave device I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_SINGLE_SEND); //wait for MCU to complete send transaction while(I2CMasterBusy(I2C1_BASE)); //read from the specified slave device I2CMasterSlaveAddrSet(I2C1_BASE, ADDRESS_DEVICE, true); //send control byte and read from the register from the MCU I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_RECEIVE_START); //wait while checking for MCU to complete the transaction while(I2CMasterBusy(I2C1_BASE)); UpperByte = I2CMasterDataGet(I2C1_BASE); I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_RECEIVE_FINISH); while(I2CMasterBusy(I2C1_BASE)); LowerByte = I2CMasterDataGet(I2C1_BASE); data = UpperByte

Ngày đăng: 09/01/2023, 14:25

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN