




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
任務(wù)3溫感探測(cè)功能設(shè)計(jì)與開(kāi)發(fā)成都職業(yè)技術(shù)學(xué)院成都卓物科技有限公司任務(wù)情報(bào)HC32F460系列微控制器集成了高性能的模數(shù)轉(zhuǎn)換器(ADC)功能,如圖52所示內(nèi)部集成了ADC1和ADC2兩個(gè)獨(dú)立的ADC模塊,支持12位、10位和8位的分辨率配置,提供最多16個(gè)外部模擬輸入通道以及1個(gè)內(nèi)部基準(zhǔn)電壓/8位DAC輸出的檢測(cè)通道,一共兩個(gè)序列A和B,一個(gè)序列支持單次掃描或連續(xù)掃描。ADC模塊需要使用兩個(gè)時(shí)鐘:模擬電路時(shí)鐘ADCLK,數(shù)字接口時(shí)鐘PCLK4。兩個(gè)時(shí)鐘都來(lái)自時(shí)鐘控制器中的分頻器。ADCLK等效于PCLK2,與PCLK4是同步關(guān)系,PCLK4與ADCLK的頻率比率關(guān)系為1:1,2:1,4:1,8:1,1:2,1:4。ADCLK可以選擇與系統(tǒng)時(shí)鐘HCLK異步的PLL時(shí)鐘源,此時(shí)PCLK4與ADCLK相同,為同步同頻率關(guān)系。ADCLK的最高頻率為60MHz。ADC模塊有多個(gè)通道,可配置為兩個(gè)序列:序列A,序列B進(jìn)行轉(zhuǎn)換。序列A和B配有獨(dú)立的通道選擇寄存器ADC_CHSELRA,ADC_CHSELRB。寄存器每位代表一個(gè)通道,如bit0位寫(xiě)1表示轉(zhuǎn)換CH0,寫(xiě)0表示不轉(zhuǎn)換CH0。兩個(gè)序列可獨(dú)立選擇任意1個(gè)或多個(gè)通道進(jìn)行轉(zhuǎn)換。例如:ADC_CHSELRA設(shè)置為0x0055,ADCHSELRB設(shè)置為0x0002,則序列A的觸發(fā)條件發(fā)生時(shí),將依次轉(zhuǎn)換CH0,CH2,CH4和CH6這4個(gè)通道。序列B的觸發(fā)條件發(fā)生時(shí),將轉(zhuǎn)換CH1這一個(gè)通道。序列A可支持單次掃描模式和連續(xù)掃描模式,通過(guò)A/D控制寄存器ADC_CR0.MS[1:0]設(shè)置。序列A單次掃描模式下,如圖所示,當(dāng)寄存器ADC_TRGSR選擇的序列A啟動(dòng)條件發(fā)生,或者ADC_STR.STRT位寫(xiě)1軟件觸發(fā),ADC啟動(dòng),對(duì)序列A通道選擇寄存器ADC_CHSELRA中選擇的所有通道依次進(jìn)行采樣和轉(zhuǎn)換,轉(zhuǎn)換結(jié)果存入相應(yīng)的數(shù)據(jù)寄存器ADC_DR中。ADC轉(zhuǎn)換過(guò)程中ADC_STR.STRT保持為1,當(dāng)所有通道轉(zhuǎn)換結(jié)束后自動(dòng)清0,ADC進(jìn)入轉(zhuǎn)換待機(jī)狀態(tài),等待下次觸發(fā)條件的發(fā)生。當(dāng)所有通道轉(zhuǎn)換結(jié)束時(shí),序列A轉(zhuǎn)換結(jié)束標(biāo)志位ADC_ISR.EOCAF置1,并產(chǎn)生序列A轉(zhuǎn)換結(jié)束事件ADC_EOCA,可以用此事件啟動(dòng)DMA。若ADC_ICR.EOCAIEN為1,中斷許可的狀態(tài)下,同時(shí)還產(chǎn)生序列A轉(zhuǎn)換結(jié)束中斷請(qǐng)求。序列A連續(xù)掃描模式下,如圖所示,序列A連續(xù)掃描模式與序列A單次掃描模式動(dòng)作類似,不同點(diǎn)在于,連續(xù)模式在所用通道轉(zhuǎn)換結(jié)束后不是進(jìn)入轉(zhuǎn)換待機(jī)狀態(tài),而是重新開(kāi)始轉(zhuǎn)換序列A。STRT位也不會(huì)自動(dòng)清0。當(dāng)需要停止連續(xù)掃描時(shí),對(duì)STRT位寫(xiě)0,并讀STRT確認(rèn)為0以判斷ADC進(jìn)入轉(zhuǎn)換待機(jī)狀態(tài)。HC32F460系列MCU的ADC1有17個(gè)采樣通道,最多支持16個(gè)外部模擬輸入引腳,通道0~15可與外部模擬輸入引腳自由映射,通道16用于內(nèi)部基準(zhǔn)電壓/8bitDAC的輸出檢測(cè)。ADC2有9個(gè)采樣通道,最多支持8個(gè)外部模擬輸入引腳,通道0~7可與外部模擬輸入引腳自由映射,通道8用于內(nèi)部基準(zhǔn)電壓/8bitDAC的輸出檢測(cè)。HC32F460系列MCU的ADC模塊模擬輸入引腳等配置如表所示。ADC通道對(duì)應(yīng)引腳需要查看芯片硬件手冊(cè),手冊(cè)地址:國(guó)產(chǎn)嵌入式技術(shù)及應(yīng)用實(shí)踐資源\項(xiàng)目資料\DS_HC32F460系列數(shù)據(jù)手冊(cè)_Rev1.5.pdf看到手冊(cè)中的引腳功能表,如圖所示,例如PA0為ADC1_IN0、PA1為ADC1_IN1、PA2為ADC1_IN2、PA3為ADC1_IN3,其他引腳對(duì)應(yīng)的ADC功能請(qǐng)?jiān)谛酒布謨?cè)中查看。本次任務(wù)常用寄存器:1)A/D控制寄存器0ADC_CR02)A/D啟動(dòng)寄存器ADC_STR3)A/D中斷狀態(tài)寄存器ADC_ISR4)A/D數(shù)據(jù)寄存器ADC_DR初始化ADC時(shí),需要用到A/D控制寄存器0ADC_CR0,如圖所示,一共有五個(gè)功能位:AVCNT[2:0]:ADC平均轉(zhuǎn)換次數(shù),平均轉(zhuǎn)換次數(shù)越多,轉(zhuǎn)換時(shí)間更久,精度越高。DFMT:轉(zhuǎn)換數(shù)據(jù)格式可設(shè)為左對(duì)齊或右對(duì)齊。CLREN:數(shù)據(jù)寄存器自動(dòng)清除功能根據(jù)自己實(shí)際需要使用,注意CLREN位設(shè)定后,寄存器ADC_DRx將在CPU、DMA等讀取后被自動(dòng)清除。自動(dòng)清除功能主要用于檢測(cè)數(shù)據(jù)寄存器是否更新。ACCSEL[1:0]:設(shè)置ADC采樣分辨率。MS[1:0]:設(shè)置ADC的序列采樣模式。ADC初始化后,并設(shè)置相應(yīng)通道,需要使用A/D啟動(dòng)寄存器ADC_STR啟動(dòng)ADC。ADC的采集數(shù)據(jù)需要一定時(shí)間,要獲取A/D中斷狀態(tài)寄存器ADC_ISR中狀態(tài),才能知道ADC已經(jīng)采集結(jié)束了。ADC采集結(jié)束后,通過(guò)A/D數(shù)據(jù)寄存器ADC_DR獲取ADC采集到的數(shù)據(jù),根據(jù)數(shù)據(jù)對(duì)齊方式和轉(zhuǎn)換分辨率,轉(zhuǎn)換結(jié)果數(shù)據(jù)存儲(chǔ)方式有所不同。數(shù)據(jù)右對(duì)齊,3種分辨率如圖所示。數(shù)據(jù)左對(duì)齊,3種分辨率如圖所示。ADC的計(jì)算公式為Vin=ADValue/2^Resolution×VREF,說(shuō)明如下:Vin:經(jīng)過(guò)計(jì)算轉(zhuǎn)換出的輸入電壓。ADValue:是ADC轉(zhuǎn)換后得到的數(shù)字量。Resolution:是ADC的位數(shù)(例如12或16)。VREF:是ADC的參考電壓。例如,如果HC32F460的ADC以12位分辨率工作,且VREF為3.3V,且ADC讀數(shù)為2000,則對(duì)應(yīng)的輸入電壓為:Vin=2000/2^12×3.3V≈1.625V本次任務(wù)測(cè)溫度芯片采用德州儀器的LM50,能夠檢測(cè)-40°C至125°C的溫度范圍,總共只有3個(gè)引腳,搭載在板卡ZW-M601上,如圖所示。從圖中得出該芯片電源兩個(gè)引腳VS和GND,還有一個(gè)模擬信號(hào)輸出引腳Vo,供單片機(jī)ADC引腳采集,接的是單片機(jī)引腳PA0。根據(jù)手冊(cè)上電壓和溫度轉(zhuǎn)換曲線圖,得到的公式為Vo=(+10mV/℃×T℃)+500mV,如圖所示。ADC編程說(shuō)明ADC定義說(shuō)明小華半導(dǎo)體公司提供的驅(qū)動(dòng)庫(kù)包含了HC32F460芯片的ADC驅(qū)動(dòng),相關(guān)的定義和說(shuō)明可以在hc32_ll_adc.h和hc32_ll_adc.c文件中找到。在HC32F460.h文件中定義兩個(gè)ADC單元。#defineCM_ADC1((CM_ADC_TypeDef*)CM_ADC1_BASE)#defineCM_ADC2((CM_ADC_TypeDef*)CM_ADC2_BASE)在進(jìn)行ADC采集時(shí),需要與GPIO初始化一同進(jìn)行配置。為此,需要從hc32_ll_adc.h庫(kù)中調(diào)用stc_adc_init_t結(jié)構(gòu)體。該結(jié)構(gòu)體有3個(gè)參數(shù)需要配置。typedefstruct{uint16_tu16ScanMode;//ADC掃描轉(zhuǎn)換模式
uint16_tu16Resolution;//ADC分辨率
uint16_tu16DataAlign;//ADC數(shù)據(jù)對(duì)齊方式}stc_adc_init_t;紅外初始化在對(duì)ADC初始化需要在工程模板的BSP文件夾中,新建文件BSP_ADC.c和BSP_ADC.h用于存放與ADC相關(guān)的程序。在BSP_ADC.h文件中,對(duì)所需的端口和引腳進(jìn)行宏定義,以便于后續(xù)的管理。首先定義了ADC的單元和時(shí)鐘。#defineADC_UNIT (CM_ADC1) //使用CM_ADC1作為ADC單元#defineADC_PERIPH_CLK (FCG3_PERIPH_ADC1) //對(duì)應(yīng)的ADC1外設(shè)時(shí)鐘控制位定義ADC使用的引腳和通道。/*選擇所需的ADC通道。*/#defineADC_CH (ADC_CH0) //ADC通道,#defineADC_CH_PORT (GPIO_PORT_A) //ADC通道對(duì)應(yīng)的GPIO端口A#defineADC_CH_PIN (GPIO_PIN_00) //ADC通道對(duì)應(yīng)的GPIO引腳0設(shè)置ADC序列和轉(zhuǎn)換結(jié)束標(biāo)志位。/*要使用的ADC序列。*/#defineADC_SEQ (ADC_SEQ_A) //使用ADC的序列A/*轉(zhuǎn)換結(jié)束的標(biāo)志。*/#defineADC_EOC_FLAG (ADC_FLAG_EOCA) //序列A轉(zhuǎn)換結(jié)束的標(biāo)志設(shè)置ADC參考電壓、分辨率。/*ADC的參考電壓。引腳VREFH的電壓。*/#defineADC_VREF (3.3F) //電壓為3.3V/*ADC的精度(根據(jù)ADC的分辨率)。*/#defineADC_ACCURACY (1UL<<12U) //假設(shè)ADC的分辨率為12位,精度為2^12根據(jù)參考電壓和分辨率,預(yù)定義轉(zhuǎn)換公式。/*計(jì)算電壓(毫伏)。*/#defineADC_CAL_VOL(adcVal)(uint16_t)((((float32_t)(adcVal)*ADC_VREF)/((float32_t)ADC_ACCURACY))*1000.F)//將ADC值轉(zhuǎn)換為毫伏在BSP_ADC.c文件寫(xiě)ADC引腳初始化函數(shù)代碼,將引腳設(shè)置為模擬引腳。函數(shù)名稱:AdcSetPinAnalogMode輸入:無(wú)輸出:無(wú)作用:初始化ADC引腳;staticvoidAdcSetPinAnalogMode(void){stc_gpio_init_tstcGpioInit;(void)GPIO_StructInit(&stcGpioInit);stcGpioInit.u16PinAttr=PIN_ATTR_ANALOG;(void)GPIO_Init(ADC_CH_PORT,ADC_CH_PIN,&stcGpioInit);}在BSP_ADC.c文件寫(xiě)ADC初始化函數(shù)代碼。函數(shù)名稱:ADC_Iint輸入:無(wú)輸出:無(wú)作用:初始化ADC;voidADC_Iint(void){stc_adc_init_tstcAdcInit;//定義一個(gè)ADC初始化結(jié)構(gòu)體變量
/*1.啟用ADC外設(shè)時(shí)鐘。*/
FCG_Fcg3PeriphClockCmd(ADC_PERIPH_CLK,ENABLE);//根據(jù)ADC的外設(shè)時(shí)鐘ID,啟用其時(shí)鐘
/*2.根據(jù)應(yīng)用需要修改默認(rèn)值。此處不需要修改。*/(void)ADC_StructInit(&stcAdcInit);//初始化ADC結(jié)構(gòu)體
/*3.初始化ADC。*/(void)ADC_Init(ADC_UNIT,&stcAdcInit);//使用指定的ADC單元和初始化結(jié)構(gòu)體來(lái)初始化ADC/*4.ADC通道配置。*//*4.1將ADC引腳設(shè)置為模擬輸入模式。*/
AdcSetPinAnalogMode();//ADC引腳GPIO初始化,將ADC引腳設(shè)置為模擬輸入模式
/*4.2啟用ADC通道。如果需要啟用更多通道,請(qǐng)?jiān)俅握{(diào)用ADC_ChCmd()。*/ADC_ChCmd(ADC_UNIT,ADC_SEQ,ADC_CH,ENABLE);//啟用指定的ADC單元、序列和通道
/*5.如果需要,設(shè)置采樣時(shí)間。*/
ADC_SetSampleTime(ADC_UNIT,ADC_CH,0x40U);//為指定的ADC單元和通道設(shè)置采樣時(shí)間
/*6.如果需要,配置轉(zhuǎn)換數(shù)據(jù)平均計(jì)算功能。
//如果需要啟用更多平均通道,請(qǐng)?jiān)俅握{(diào)用ADC_ConvDataAverageChCmd()。*/ADC_ConvDataAverageConfig(ADC_UNIT,ADC_AVG_CNT8);//配置ADC單元的平均計(jì)算次數(shù)為8次
ADC_ConvDataAverageChCmd(ADC_UNIT,ADC_CH,ENABLE);//啟用指定的ADC單元和通道的平均計(jì)算功能}紅外測(cè)溫采集函數(shù)名稱:AdcPolling(void)輸入:無(wú)輸出:ADC采集的電壓值作用:采集電壓值floatAdcPolling(void){uint16_tu16AdcValue;int32_tiRet=LL_ERR;__IOuint32_tu32TimeCount=0UL;/*CanONLYstartsequenceAconversion.SequenceBneedshardwaretriggertostartconversion.*/ADC_Start(ADC_UNIT);do{if(ADC_GetStatus(ADC_UNIT,ADC_EOC_FLAG)==SET){ADC_ClearStatus(ADC_UNIT,ADC_EOC_FLAG);iRet=LL_OK;break;}}while(u32TimeCount++<ADC_TIMEOUT_VAL);if(iRet==LL_OK){/*GetanyADCvalueofsequenceAchannelthatneeded.*/u16AdcValue=ADC_GetValue(ADC_UNIT,ADC_CH);}else{ADC_Stop(ADC_UNIT);}returnADC_CAL_VOL(u16AdcValue);}該函數(shù)先啟動(dòng)ADC開(kāi)啟轉(zhuǎn)換,等待ADC轉(zhuǎn)換結(jié)束時(shí),再去獲取ADC值,然后停止ADC,返回ADC值。根據(jù)lm50芯片的計(jì)算溫度公式,寫(xiě)了一個(gè)函數(shù)溫度函數(shù)ADC_ValueToTemperature()。函數(shù)名稱:ADC_ValueToTemperature輸 入:無(wú)輸 出:ADC采集的電壓值作 用:采集電壓值轉(zhuǎn)化為溫度值floatADC_ValueToTemperature(void){//根據(jù)公式進(jìn)行轉(zhuǎn)換:采集電壓=10*溫度+500mV//溫度=(采集值-500mV)/10uint16_tadc_value;floattemperature;adc_value=AdcPolling();//獲取采集的電壓值
printf("Voltagevalue=%d\r\n",adc_value);temperature =(adc_value-500)/10.0;//轉(zhuǎn)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 漢辦拼音考試題目及答案
- 公共供水管網(wǎng)漏損治理工程項(xiàng)目社會(huì)穩(wěn)定風(fēng)險(xiǎn)評(píng)估報(bào)告
- 2025年九江滿分教育考試題庫(kù)及答案
- 2025年國(guó)家保安員(初級(jí))資格考試題庫(kù)及答案
- 2025年成都事業(yè)單位公開(kāi)招聘考試真題及答案
- 水庫(kù)工程社會(huì)穩(wěn)定風(fēng)險(xiǎn)評(píng)估報(bào)告
- 施工項(xiàng)目監(jiān)督與審計(jì)方案
- 鋼結(jié)構(gòu)構(gòu)件運(yùn)輸與堆放管理方案
- 2025年電工證考試試題+答案(+答案)
- 市政管網(wǎng)焊接技術(shù)質(zhì)量控制方案
- 橋梁亮化工程施工方案
- 2024年中級(jí)注冊(cè)安全工程師《安全生產(chǎn)法律法規(guī)》真題及答案
- 2025新外研社版英語(yǔ)七年級(jí)下單詞表
- 社會(huì)網(wǎng)絡(luò)分析課件
- 外科學(xué)-第三十六章-闌尾疾病
- 教科版科學(xué)四年級(jí)上冊(cè)第一單元《聲音》測(cè)試卷含答案(典型題)
- 肉桂課件講解
- 高中化學(xué)教師培訓(xùn)課件
- 鍥而不舍成功從不言敗主題班會(huì)課件
- 公司商業(yè)模式的人工智能技術(shù)
- 初中科學(xué) 浙教版初中科學(xué)教材分析
評(píng)論
0/150
提交評(píng)論