jinglixixi 发表于 2021-9-4 00:13

[液位传感器测评] A/D数据采集与数值显示

<p style="text-align:justify">光电-接触式液位传感器是一种输出模拟信号量的传感器,其应用电路如图1所示。</p>

<p> &nbsp;</p>

<p>图1 应用电路</p>

<p>在检测过程中,该传感器的输出性能如图2所示。</p>

<p> &nbsp;</p>

<p>图2 输出性能</p>

<p>我们可以PIC18F16Q41处理核心并利用其内部A/D转换器来采集模拟信号量,在为其配置一个串行数码管来显示检测值。。</p>

<p>为此对引脚的使用情况分配如下:</p>

<p>DIN---RC4</p>

<p>CLK---RC6</p>

<p>CS ---RC7</p>

<p>ANC2---RC2</p>

<p>其中DIN、CLK及CS为串行数码管的引脚,而RC2为模拟信号输入端,为此以MCC对引脚的配置如3所示。</p>

<p> &nbsp;</p>

<p>图3 &nbsp;MCC引脚配置</p>

<p>对应的引脚命名见图4,为使A/D正常进行,其时钟设置见图5。</p>

<p> &nbsp;</p>

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

<p> &nbsp;</p>

<p> &nbsp;</p>

<p>图5 时钟设置</p>

<p>在使用MCC生成框架代码后,实现数据采集与显示的主程序如下:</p>

<p>void main(void)</p>

<p>{</p>

<p>&nbsp;&nbsp;&nbsp; int v,d;</p>

<p>&nbsp;&nbsp;&nbsp; float s;</p>

<p>&nbsp;&nbsp;&nbsp; SYSTEM_Initialize();</p>

<p>&nbsp;&nbsp;&nbsp; DELAY_milliseconds(50);</p>

<p>&nbsp;&nbsp;&nbsp; Init_MAX7219();</p>

<p>&nbsp;&nbsp;&nbsp; DELAY_milliseconds(200);</p>

<p>&nbsp;&nbsp;&nbsp; Write_Max7219(0xff,0x00);</p>

<p>&nbsp;&nbsp;&nbsp; Write_Max7219(1,8);</p>

<p>&nbsp;&nbsp;&nbsp; Write_Max7219(2,7);</p>

<p>&nbsp;&nbsp;&nbsp; Write_Max7219(3,6);</p>

<p>&nbsp;&nbsp;&nbsp; Write_Max7219(4,5);</p>

<p>&nbsp;&nbsp;&nbsp; Write_Max7219(5,4);</p>

<p>&nbsp;&nbsp;&nbsp; Write_Max7219(6,3);</p>

<p>&nbsp;&nbsp;&nbsp; Write_Max7219(7,2);</p>

<p>&nbsp;&nbsp;&nbsp; Write_Max7219(8,1);</p>

<p>&nbsp;&nbsp;&nbsp; ADCC_Initialize();</p>

<p>&nbsp;&nbsp;&nbsp; ADCC_StartConversion(channel_ANC2);</p>

<p>&nbsp;&nbsp;&nbsp; while (1)</p>

<p>&nbsp;&nbsp;&nbsp; {</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LED_SetHigh();</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;DELAY_milliseconds(1000);</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LED_SetLow();</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DELAY_milliseconds(1000);</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; v=ADCC_GetSingleConversion(channel_ANC2); &nbsp;&nbsp;// A/D为12位</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Write_Max7219(1,v%10);</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(v&gt;10) Write_Max7219(2,v%100/10);</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else Write_Max7219(2,0x0f);</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(v&gt;100) Write_Max7219(3,v%1000/100);</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else Write_Max7219(3,0x0f);</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(v&gt;1000)&nbsp; Write_Max7219(4,v/1000);</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else Write_Max7219(4,0x0f);</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s=v*3.3/409.5;</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d=s;</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Write_Max7219(5,0x0f);</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Write_Max7219(6,d%10);</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Write_Max7219(7,(d%100/10)|0x80);</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Write_Max7219(8,0x0f);&nbsp;</p>

<p>&nbsp;&nbsp;&nbsp; &nbsp;}</p>

<p>}</p>

<p>经程序编译与下载,其运行效果如图6所示,其中左4位为电压值,右4位为检测值。</p>

<p> &nbsp;</p>

<p> &nbsp;</p>

<p>图4 双值显示</p>

<p>有了模拟量的采集与显示功能,将电位器模块该为光电-接触式液位传感器就能显示其输出结果了。</p>

soso 发表于 2021-9-4 08:43

<p>直观,赞</p>

jinglixixi 发表于 2021-9-4 11:48

soso 发表于 2021-9-4 08:43
直观,赞

<p>感谢支持!!!</p>

littleshrimp 发表于 2021-9-4 18:41

<p>液位传感器连接了吗?</p>

jinglixixi 发表于 2021-9-5 08:42

littleshrimp 发表于 2021-9-4 18:41
液位传感器连接了吗?

<p>先搭台</p>

w494143467 发表于 2021-9-6 11:09

<p>期待后续传感器连接效果!</p>

jinglixixi 发表于 2021-9-6 15:00

w494143467 发表于 2021-9-6 11:09
期待后续传感器连接效果!

<p>正在弄。。。</p>
页: [1]
查看完整版本: [液位传感器测评] A/D数据采集与数值显示