复旦微MCU爱好者天地
直播中

jinglixixi

8年用户 1592经验值
擅长:嵌入式技术 光电显示 接口/总线/驱动 控制/MCU
私信 关注

【复旦微电子FM33LG0xx开发板免费试用】+ADC数据采集与温度检测

对于FM33LGxx开发板开发板,它配有2Msps的12位ADC模数转换器,并达到20个采集通道,其中有14个快速通道,可以组成7个差分输入对;有6个慢速通道,仅支持单端输入。

在ADC数据采集的例程中,有单端采集的示例,其采集通道为ADC_1,所使用的引脚为PD1。

该引脚可由IO扩展接口来引出,见图1所示。

image.png

图1 数据采集引脚

将例程中的ADC数据采集功能与OLED屏的显示功能相结合,便可快速构成一个数字式电压表,其显示效果如图2所示。

image.png

图2 电压检测效果

实现该显示效果的主程序为:

int main(void)
{
    MF_Clock_Init();
    MF_SystemClock_Config();
    FL_Init();
    MF_Config_Init();
    UserInit();
    AdcInit();
    oled_app();
    OLED_Init();
    OLED_Clear();
    OLED_ShowString(20,0,"FM33LG0XX",16);
    OLED_ShowCHinese(20,2,0);
    OLED_ShowCHinese(36,2,1);
    OLED_ShowCHinese(52,2,2);
    OLED_ShowCHinese(68,2,3);
    OLED_ShowCHinese(84,2,4);
    OLED_ShowCHinese(100,2,5);
    OLED_ShowString(20,5,"     mV",16);
    while(1)
    {
        Get122VSample = GetVREF1P2Sample();
        GetVSample = GetSingleChannelSample();
        GetV = (GetVSample * 3000 * (ADC_VREF)) / (Get122VSample * 4095);
        OLED_ShowNum(20,5,GetV,4,16);
        FL_DelayMs(1000);
    }
}

至于OLED屏的显示驱动,则可参考“OLED屏的显示驱动及其电子时钟”的内容。

https://bbs.elecfans.com/jishu_2322660_1_1.html

此外,在该数字式电压表的基础上再添加NTC的传感器电路即可进行温度的检测和控制,其电路如图3所示。

image.png

为此,将显示语句:

OLED_ShowString(20,5," mV",16);

改为:

OLED_ShowString(20,5," C",16);

然后修改while循环的内容,即可显示温度值。

其具体内容为:

while(1)
{
        Get122VSample = GetVREF1P2Sample();
        GetVSample = GetSingleChannelSample();       
        GetV = (GetVSample * 3000 * (ADC_VREF)) / (Get122VSample * 4095);
        u= GetV;
        ...
        if((u<=1495)&&(u>1153))
V=10+(1495-u)/34;
        if((u<=1153)&&(u>861))
V=20+(1153-u)/29;
        if((u<=861)&&(u>629))
V=30+(861-u)/23;
        ...

        OLED_ShowNum(20,5,V,3,16);
        FL_DelayMs(200);
}

由此可知,模数转换功能是十分有用的,而且还非常好用。

更多回帖

发帖
×
20
完善资料,
赚取积分