日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 廠商動態(tài) > ADI
[導讀]本文探討如何在項目中實現(xiàn)與硬件無關的驅動程序。即插即用的設計理念能夠顯著降低嵌入式軟件或固件設計的復雜性,無論設計者的經驗水平如何,都能從中受益。如果您想了解驅動程序的基本函數(shù)和嵌入式系統(tǒng)的軟件架構,請參見文章“利用與硬件無關的方法簡化嵌入式系統(tǒng)設計:基本知識”。

摘要

本文探討如何在項目中實現(xiàn)與硬件無關的驅動程序。即插即用的設計理念能夠顯著降低嵌入式軟件或固件設計的復雜性,無論設計者的經驗水平如何,都能從中受益。如果您想了解驅動程序的基本函數(shù)和嵌入式系統(tǒng)的軟件架構,請參見文章“利用與硬件無關的方法簡化嵌入式系統(tǒng)設計:基本知識”。

簡介

嵌入式系統(tǒng)設計中,設計人員通常要編寫驅動程序和固件的代碼,確保所選傳感器能夠實現(xiàn)其所需的基本功能。這一過程往往耗時且繁瑣。為解決這一難題,可以通過結合硬件、軟件和固件的方式,采用即插即用的設計思路,從而簡化傳感器的選擇和系統(tǒng)集成。與硬件無關的驅動程序不僅能夠讓傳感器集成變得更加高效,還可以作為一種通用解決方案,便于在未來的設計中重復使用。本文將以慣性測量單元(IMU)傳感器為例,說明如何實現(xiàn)與硬件無關的驅動程序,不過,這種方法同樣適用于其他類型的傳感器和器件。驅動程序采用C語言編寫,并在一款通用微控制器上進行了測試。

驅動程序實現(xiàn)

附錄中包含提及的所有圖片和代碼,可供讀者查閱。

adis16500_rd_error_flag

附錄中的圖10展示了該函數(shù)的實現(xiàn)。該函數(shù)讀取ADIS16500_REG_DIAG_STAT寄存器中包含的錯誤標志,如果未發(fā)生錯誤,所有位都為0??赡艿腻e誤有10個,因此,該函數(shù)會返回一個ADIS16500_ERROR_FLAGS結構,其中包含10個布爾字段,每個字段代表一個錯誤。該函數(shù)只讀取ADIS16500_REG_ DIAG_STAT寄存器,并使用特定錯誤掩碼檢查該寄存器的各個位,發(fā)現(xiàn)邏輯1時,該結構的相應字段就會設置為true。

adis16500_rd_temp

這是一個溫度讀取函數(shù),其實現(xiàn)方法與加速度和陀螺儀相同(詳情請見本系列第一篇文章)。讀取的值用℃為單位表示。其二進制值包含在16位寄存器ADIS16500_REG_TEMP_OUT中。之后,數(shù)據(jù)將經過二進制轉二進制補碼的轉換。得到的二進制補碼值將乘以溫度比例因子(單位為℃/LSB),最終得出以℃為單位的數(shù)值,并記錄在作為輸入傳遞的指針中。該函數(shù)實現(xiàn)可參見附錄中的圖9。

adis16500_get_ts_usec

該函數(shù)用于獲取IMU的時間戳,單位為μs。其實現(xiàn)方法與adis16500_rd_temp函數(shù)完全相同。具體可參見附錄中的圖9。

adis16500_rd_data_cntr

該程序讀取已輸出的數(shù)據(jù)數(shù)量。實際上,只需讀取名為ADIS16500_REG_DATA_CNTR的寄存器即可實現(xiàn)。當該寄存器達到最大值時,將從0重新開始。該函數(shù)的實現(xiàn)方式可參見附錄中的圖9。

adis16500_wr_acc_calib

該函數(shù)用于執(zhí)行自定義偏移校準。設計人員通過調用該函數(shù),可將偏移值添加到從輸出數(shù)據(jù)寄存器讀取的值中,從而將x、y、z校準值添加到x、y、z加速度數(shù)據(jù)中。該函數(shù)的輸入是指向ADIS16500_XL_OUT類型結構的指針,該結構包含x、y和z浮點類型字段。該函數(shù)的目標是從浮點值轉換為二進制補碼值,再從二進制補碼值轉換為二進制值。所有步驟可參見附錄中的圖11。接下來,需要將二進制值寫入偏置寄存器,例如,對于x軸,需要寫入兩個寄存器:ADIS16500_REG_X_ACCEL_BIAS_L(低16位)和ADIS16500_REG_X_ACCEL_BIAS_H(高16位)。y軸和z軸也是如此,各自有相應的偏置寄存器。為了檢查該程序是否正確執(zhí)行,放置IMU傳感器時,確保z軸垂直指向天空。在這種情況下,x軸和y軸的加速度值接近0,z軸的加速度值接近–9.81 m/s2 (–g)。調用校準函數(shù)并傳遞一個校準結構,其中x、y和z字段均等于–9.81 m/s2,校準后的讀取結果為x = –9.81;y = –9.81;z = 0,即表明校準偏移函數(shù)正常工作。

adis16500_wr_gyro_calib

這是與陀螺儀有關的偏移校準函數(shù),其實現(xiàn)方法與加速度校準函數(shù)完全相同。區(qū)別在于,陀螺儀的校準需要按照數(shù)據(jù)手冊中的說明,使用對應的陀螺儀偏移寄存器來完成。

本文著重介紹IMU傳感器驅動程序,但其軟件/固件結構可用于任何類型的傳感器。因此,要實現(xiàn)對所有傳感器的通用支持,只需根據(jù)傳感器與微控制器之間的通信協(xié)議(如 SPI、I2C、UART 等)進行調整。傳感器的初始化方式仍然有效,因為初始化階段記錄了通過通信協(xié)議進行收發(fā)的函數(shù)。

如何在項目中引入和使用驅動程序

除了關于傳感器和微控制器單元(MCU)間硬件連接的基本說明外,本文還提供了相關指南,從軟件和固件的角度介紹如何引入驅動程序。

圖1.項目文件夾結構。

傳感器驅動程序沒有通用的組織結構。圖1所示為建議的文件夾結構。userlib文件夾中包含所有傳感器驅動程序。在本示例中,只有IMU傳感器驅動程序,但如果項目包含更多傳感器,組織方式基本相同。userlib中有兩個文件夾,分別是include和src。include文件夾包含驅動程序的標頭文件,即本例中的adis16500.h,而src中包含源文件,即adis16500.c。userlib中還有一個指定include指令的makefile,如圖2所示。

圖2.userlib makefile。

圖3.主makefile。

圖3所示為主makefile。它位于應用層,靠近main.c。該makefile包含user.mk,如圖3中紅色下劃線所示(代碼第115行)。

借助makefile (.mk),設計人員可以在應用層(比如在main.c內)引入驅動程序的接口,并且可以調用傳感器驅動程序的所有公共函數(shù)。這樣,應用層和傳感器驅動層之間就會建立起鏈接。在應用層可以得知傳感器的驅動程序接口(adis16500.h)。因此,在應用層,將通過上文討論的初始化程序建立傳感器驅動層和外設驅動層之間的鏈接。在IMU傳感器的具體用例中,發(fā)送器、接收器SPI函數(shù)和系統(tǒng)延遲函數(shù)將在main.c文件中定義,如附錄中的圖2所示。這三個函數(shù)完全遵循驅動程序頭文件中的原型,即附錄中圖3頂部所示的原型。這三個函數(shù)內部是外設驅動層提供的函數(shù),如spiSelect、spiSend、spiReceive、spiUnselect和chThdSleepMicroseconds。因此,SPI接收器、發(fā)送器和系統(tǒng)延遲函數(shù)代表外設驅動層和傳感器驅動層之間的鏈接,這些函數(shù)將分配到初始化結構中,如附錄中的圖2所示。以上就是在項目中引入驅動程序的整個過程。

如果要從傳感器獲取輸出,設計人員可以使用adis16500_rd_acc和adis16500_rd_gyro部分介紹的函數(shù)。傳感器讀取并沒有完全通用的方法,圖4僅提供一個示例。

圖4.傳感器輸出讀取示例。

在此示例中,main.c中有一個無限循環(huán),始終檢查名為_adis16500_data_ready的布爾靜態(tài)變量。該變量與回調函數(shù)相關,當DR引腳變?yōu)楦唠娖綍r,它將切換到TRUE,這意味著已有新數(shù)據(jù)可用。在這種情況下,主函數(shù)將調用adis16500_rd_acc和adis16500_rd_gyro函數(shù)。通過全速運行IMU傳感器,設計人員將能夠以2 kHz的輸出數(shù)據(jù)速率(ODR)獲取數(shù)據(jù)。

結論

本文介紹了驅動程序功能,以及如何通過與硬件無關的方法簡化傳感器集成。與硬件無關的驅動程序可以作為一種通用解決方案,在未來的設計中重復使用。

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅動性能的關鍵。

關鍵字: 工業(yè)電機 驅動電源

LED 驅動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅動電源 照明系統(tǒng) 散熱

根據(jù)LED驅動電源的公式,電感內電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅動電源

在現(xiàn)代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質量和效率直接關系到城市的公共安全、居民生活質量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅動電源 功率因數(shù)校正

在LED照明技術日益普及的今天,LED驅動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅動電源

關鍵字: LED 驅動電源 開關電源

LED驅動電源是把電源供應轉換為特定的電壓電流以驅動LED發(fā)光的電壓轉換器,通常情況下:LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅動電源
關閉