请问有ch582上移植DS18B20的案例吗?

请问有ch582上移植DS18B20的案例吗?

可以参考本博客进行驱动,内附代码582驱动DS18B20 - JayWell - 博客园 (cnblogs.com)


请问还有ch582上移植MQ-7的案例吗?


暂时没有这个例程,可以根据模块特性和手册对这个模块进行操作,可以通过ADC读取传感器输出的模拟电压信号,再根据传感器的特性曲线函数将电压值转换为一氧化碳浓度值。


我找了一篇MQ_7的文章跟着做发现,没法移植上去呢。文章链接:https://blog.csdn.net/m0_64562382/article/details/139247866


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


这样代码有问题吗?

#include "CH58x_adc.h"


#define CAL_PPM  10   // 校准环境中PPM值

#define RL       10   // RL阻值 (负载电阻)

static float R0;     // 元件在洁净空气中的阻值


// 传感器初始化

void ADC_Init() {

    // 使能ADC电源

    R8_ADC_CFG |= RB_ADC_POWER_ON;


    // 设置采样通道为 A8

    ADC_ChannelCfg(CH_EXTIN_12);


    // 设置采样时钟为 4M,适中的速度和分辨率

    ADC_SampClkCfg(SampleFreq_4);


    // 设置信号增益为 1 倍,如果信号太小可以尝试增大

    ADC_PGACfg(ADC_PGA_0);


    // 开始 ADC

    ADC_StartUp();

}


uint16_t ADC_GetResult(void) {

    // 读取ADC转换结果

    return ADC_ReadConverValue();

}


float Read_ADC_Voltage() {

    // 获取ADC结果并转换为电压

    uint16_t adcValue = ADC_GetResult();

    return (adcValue * 3.3f) / 4095.0f;  // 转换为电压值

}


// 传感器校准函数,根据当前环境PPM值与测得的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();  // 执行校准

}


/*

 * MQ-7相关

 */

        MQ7_Init();

        float ppm_ans=MQ7_GetPPM();



首先先确保获取的电压值是正确的,

注意不同增益的计算公式:

image.png

默认是0增益,确实是只能采集到最高2.1V的电压。ADC采集值用下发公式换算出实际电压。vref 1.05V

计算公式中先乘以1050,数据类型为16位无符号。

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

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

adcBuff[i]*1050/20480db增益。

上述贴出的程序中使用的也是0dB,注意计算公式的选用“? return (adcValue * 3.3f) / 4095.0f;? // 转换为电压值”使用上面0db的计算公式((adcValue?*1050)/2048)

使用单通道采样时加上偏差值RoughCalib_Value = ADC_DataCalib_Rough();可以多次采样取平均。

可以先用例程采集电压与万用表量出的电压对照是否正确,再进行浓度的换算。


只有登录才能回复,可以选择微信账号登录