jinglixixi 发表于 2021-9-8 23:45

[液位传感器测评] LED液位指示

本帖最后由 jinglixixi 于 2021-9-8 23:48 编辑

<p>除了以数码管来显示模拟量的值之外,更直观的是以LED模块来指示液位的状态。为此,我们可在前面的检测上再添加上LED指示液位的功能,使整体的结构如图1所示。</p>

<p>图1检测结构图</p>

<p>所添加的LED模块连接到RB4~RB7来控制,其指示范围则如下:</p>

<p>LED1:&nbsp; 0~1.25V</p>

<p>LED2:&nbsp; 1.25 ~2.5V</p>

<p>LED3:&nbsp; 2.5~3.75 V</p>

<p>LED3:&nbsp; 3.75~ 5V</p>

<p>因此,在MCC中是按图2所示来配置引脚,对应的引脚命名见图3所示。</p>

<p>图2 MCC引脚配置</p>

<p>图3 引脚命名</p>

<p>实现液位指示的主程序则为:</p>

<pre>
<code class="language-cpp">void main(void)
{
    int v,d;
    float s;
    SYSTEM_Initialize();
    DELAY_milliseconds(50);
    Init_MAX7219();
    DELAY_milliseconds(200);
    Write_Max7219(0xff,0x00);
    Write_Max7219(1,8);
    Write_Max7219(2,7);
    Write_Max7219(3,6);
    Write_Max7219(4,5);
    Write_Max7219(5,4);
    Write_Max7219(6,3);
    Write_Max7219(7,2);
    Write_Max7219(8,1);
    ADCC_Initialize();
    ADCC_StartConversion(channel_ANC2);
    LED1_SetHigh();
    LED2_SetHigh();
    LED3_SetHigh();
    LED4_SetHigh();
    while (1)
    {
       v=ADCC_GetSingleConversion(channel_ANC2);     // A/D为12位
        Write_Max7219(1,v%10);
        if(v&gt;10) Write_Max7219(2,v%100/10);
        else Write_Max7219(2,0x0f);
        if(v&gt;100) Write_Max7219(3,v%1000/100);
        else Write_Max7219(3,0x0f);
        if(v&gt;1000)  Write_Max7219(4,v/1000);
        else Write_Max7219(4,0x0f);
        s=v*5.0/409.5;
        d=s;
        Write_Max7219(5,0x0f);
        Write_Max7219(6,d%10);
        Write_Max7219(7,(d%100/10)|0x80);
        Write_Max7219(8,0x0f);
        LED2_SetHigh();
        LED3_SetHigh();
        if((s&gt;2)&amp;&amp;(s&lt;12.5))     LED1_SetLow();
        else LED1_SetHigh();
        if((s&gt;=12.5)&amp;&amp;(s&lt;25.0)) LED2_SetLow();
        if((s&gt;=25.0)&amp;&amp;(s&lt;37.5)) LED3_SetLow();
        if(s&gt;=37.5) LED4_SetLow();
        else LED4_SetHigh();
        DELAY_milliseconds(1000);
     }
}</code></pre>

<p>经程序的编译下载,其运行效果如图4所示。</p>

<p>图4 运行效果</p>

<p>若将循环内的程序修改为下面的内容,则可实现图5所示的指示效果。</p>

<pre>
<code class="language-cpp">    while (1)
    {
        v=ADCC_GetSingleConversion(channel_ANC2);     // A/D为12位
        Write_Max7219(1,v%10);
        if(v&gt;10) Write_Max7219(2,v%100/10);
        else Write_Max7219(2,0x0f);
        if(v&gt;100) Write_Max7219(3,v%1000/100);
        else Write_Max7219(3,0x0f);
        if(v&gt;1000)  Write_Max7219(4,v/1000);
        else Write_Max7219(4,0x0f);
        s=v*5.0/409.5;
        d=s;
        Write_Max7219(5,0x0f);
        Write_Max7219(6,d%10);
        Write_Max7219(7,(d%100/10)|0x80);
        Write_Max7219(8,0x0f);
        LED2_SetHigh();
        LED3_SetHigh();
        if(s&lt;2) LED1_SetHigh();
        else LED1_SetLow();
        if(s&gt;=12.5)
        {
            LED1_SetLow();
            LED2_SetLow();
        }
        if(s&gt;=25.0)
        {
            LED1_SetLow();
            LED2_SetLow();
            LED3_SetLow();
        }
        if(s&gt;=37.5)
        {
            LED1_SetLow();
            LED2_SetLow();
            LED3_SetLow();
            LED4_SetLow();
        }
        else LED4_SetHigh();
        DELAY_milliseconds(1000);
     }</code></pre>

<p>注:此时已将LED的共阴极接法,该为共阳极接法,以减弱驱动负担。</p>

<p>图5 指示效果</p>

<p>在接入传感器之后,其检测效果如图6所示。稍感遗憾的是似乎传感器出现了问题,无论是侵入水中还是放在空气中,其检测值变换的极小基本无法识别液位的差异性。若当初申请2个就好了,起码能做个比对呀!</p>

<p>此外,传感器的集成性还不够好,使得测试电路连线过多、易产生不稳定问题,不如电容-非接触式传感器好用。</p>

<p>图6 指示效果</p>

<p style="text-align:justify">&nbsp;</p>

Jacktang 发表于 2021-9-9 21:35

<p>应该是测试电路连线有点多,有干扰,是不稳定的原因</p>

jinglixixi 发表于 2021-9-9 23:34

Jacktang 发表于 2021-9-9 21:35
应该是测试电路连线有点多,有干扰,是不稳定的原因

<p>有道理</p>

littleshrimp 发表于 2021-9-11 17:29

<p>用万用表测试一下看看结果</p>

littleshrimp 发表于 2021-9-11 17:37

<p>另外传感器的供电电压是5V,不能使用3.3V供电。</p>

<p><em>&ldquo;传感器的集成性还不够好,使得测试电路连线过多、易产生不稳定问题&rdquo;</em></p>

<p>上边这个问题,光电版的使用4根线,实际接到板子的只有3根线,除了电流环应该不会有比3根线更少的方案了。</p>

jinglixixi 发表于 2021-9-12 00:56

littleshrimp 发表于 2021-9-11 17:37
另外传感器的供电电压是5V,不能使用3.3V供电。

&ldquo;传感器的集成性还不够好,使得测试电路连线过多 ...

<p>我指的是周边的电阻应集成到内部,使连接真正成为3个引脚。</p>

littleshrimp 发表于 2021-9-12 02:20

jinglixixi 发表于 2021-9-12 00:56
我指的是周边的电阻应集成到内部,使连接真正成为3个引脚。

<p>电阻确实应该集成在传感器内部</p>

jinglixixi 发表于 2021-9-12 11:21

littleshrimp 发表于 2021-9-12 02:20
电阻确实应该集成在传感器内部

<p>由其是在电流环的电阻,会起一定的保护作用,否则易产生受损。</p>

jinglixixi 发表于 2021-9-13 17:32

<p></p>
页: [1]
查看完整版本: [液位传感器测评] LED液位指示