請(qǐng)問(wèn)有ch582上移植DS18B20的案例嗎?

請(qǐng)問(wèn)有ch582上移植DS18B20的案例嗎?

可以參考本博客進(jìn)行驅(qū)動(dòng),內(nèi)附代碼582驅(qū)動(dòng)DS18B20 - JayWell - 博客園 (cnblogs.com)


請(qǐng)問(wèn)還有ch582上移植MQ-7的案例嗎?


暫時(shí)沒(méi)有這個(gè)例程,可以根據(jù)模塊特性和手冊(cè)對(duì)這個(gè)模塊進(jìn)行操作,可以通過(guò)ADC讀取傳感器輸出的模擬電壓信號(hào),再根據(jù)傳感器的特性曲線(xiàn)函數(shù)將電壓值轉(zhuǎn)換為一氧化碳濃度值。


我找了一篇MQ_7的文章跟著做發(fā)現(xiàn),沒(méi)法移植上去呢。文章鏈接:https://blog.csdn.net/m0_64562382/article/details/139247866


第二篇文章鏈接:https://blog.csdn.net/xhj1021/article/details/124016779


這樣代碼有問(wèn)題嗎?

#include "CH58x_adc.h"


#define CAL_PPM? 10? ?// 校準(zhǔn)環(huán)境中PPM值

#define RL? ? ? ?10? ?// RL阻值 (負(fù)載電阻)

static float R0;? ? ?// 元件在潔凈空氣中的阻值


// 傳感器初始化

void ADC_Init() {

? ? // 使能ADC電源

? ? R8_ADC_CFG |= RB_ADC_POWER_ON;


? ? // 設(shè)置采樣通道為 A8

? ? ADC_ChannelCfg(CH_EXTIN_12);


? ? // 設(shè)置采樣時(shí)鐘為 4M,適中的速度和分辨率

? ? ADC_SampClkCfg(SampleFreq_4);


? ? // 設(shè)置信號(hào)增益為 1 倍,如果信號(hào)太小可以嘗試增大

? ? ADC_PGACfg(ADC_PGA_0);


? ? // 開(kāi)始 ADC

? ? ADC_StartUp();

}


uint16_t ADC_GetResult(void) {

? ? // 讀取ADC轉(zhuǎn)換結(jié)果

? ? return ADC_ReadConverValue();

}


float Read_ADC_Voltage() {

? ? // 獲取ADC結(jié)果并轉(zhuǎn)換為電壓

? ? uint16_t adcValue = ADC_GetResult();

? ? return (adcValue * 3.3f) / 4095.0f;? // 轉(zhuǎn)換為電壓值

}


// 傳感器校準(zhǔn)函數(shù),根據(jù)當(dāng)前環(huán)境PPM值與測(cè)得的RS電壓值,反推出R0值

void MQ7_PPM_Calibration() {

? ? float Vrl = Read_ADC_Voltage();

? ? float RS = (3.3f - Vrl) / Vrl * RL;

? ? R0 = RS / pow(CAL_PPM / 98.322, 1 / -1.458f);

}


// 獲取傳感器的PPM值

float MQ7_GetPPM(void) {

? ? float Vrl = Read_ADC_Voltage();

? ? float RS = (3.3f - Vrl) / Vrl * RL;

? ? float ppm = 98.322f * pow(RS / R0, -1.458f);

? ? return ppm;

}


void MQ7_Init(void) {

? ? ADC_Init();? // 初始化ADC

? ? MQ7_PPM_Calibration();? // 執(zhí)行校準(zhǔn)

}


/*

?* MQ-7相關(guān)

?*/

? ? ? ? MQ7_Init();

? ? ? ? float ppm_ans=MQ7_GetPPM();



首先先確保獲取的電壓值是正確的,

注意不同增益的計(jì)算公式:

image.png

默認(rèn)是0增益,確實(shí)是只能采集到最高2.1V的電壓。ADC采集值用下發(fā)公式換算出實(shí)際電壓。vref 1.05V

計(jì)算公式中先乘以1050,數(shù)據(jù)類(lèi)型為16位無(wú)符號(hào)。

adcBuff[i]*1050/512-3*1050-12db增益。

adcBuff[i]*1050/1024-1050,-6db增益。

adcBuff[i]*1050/2048,0db增益。

上述貼出的程序中使用的也是0dB,注意計(jì)算公式的選用“? return (adcValue * 3.3f) / 4095.0f;? // 轉(zhuǎn)換為電壓值”使用上面0db的計(jì)算公式((adcValue?*1050)/2048)

使用單通道采樣時(shí)加上偏差值RoughCalib_Value = ADC_DataCalib_Rough();可以多次采樣取平均。

可以先用例程采集電壓與萬(wàn)用表量出的電壓對(duì)照是否正確,再進(jìn)行濃度的換算。


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频