jennyzhaojie 发表于 2021-3-20 15:18

光照强度记录仪的设计

<div class='showpostmsg'> 本帖最后由 jennyzhaojie 于 2021-3-20 18:21 编辑

<p>在家居环境的测评中,采光质量是一项重要指标。单凭人介绍,显然是缺乏数据支撑的。</p>

<p>使用CH32V103开发板,结合相应的光照强度传感器及OLED显示屏等即可自行设计一个实用的光照强度记录仪,其构成情况如图1所示。&nbsp;</p>

<p>图1 光照强度记录仪构成</p>

<p>&nbsp;</p>

<p>在该设计过程中,主要涉及以下问题的处理:</p>

<p>1. 数据写入文本文件</p>

<p>在原U盘读写的例程中,已提供了将字符串写入文本文件的方式,但记录仪要求的则是将动态变化的数据写入文件。解决此问题的办法是使用如下语句:</p>

<p>i = sprintf( (PCHAR)buf,&quot;%d %d:%d:%d %d\r\n&quot;,c+1,calendar.hour,calendar.min,calendar.sec,sd);</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mCmdParam.ByteWrite.mByteCount = i;</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mCmdParam.ByteWrite.mByteBuffer = buf;</p>

<p>这样就将多个变量的数据转换为可供存储的字符串,且统计出了其字节长度,并据此来写入文件中。</p>

<p>2.添加RTC计时功能和光照强度采集功能</p>

<p>作为RTC计时功能和光照强度采集功能,均已在前面的帖子中介绍过,但由于是对功能进行集成,所以要对引脚的使用进行重新地调节,比如此前的光照强度采集是使用PA11和PA12,但U盘读写所用的恰恰也是这两个引脚,为此便把其所用的引脚迁移到PA0和PA1上。</p>

<p></p>

<p>图2&nbsp; USB接口原理图</p>

<p>&nbsp;</p>

<p>将2个功能混合后,其实时检测的输出效果如图3所示。</p>

<p></p>

<p>图3 实时输出效果</p>

<p>&nbsp;</p>

<p>3.添加OLED屏实时数显</p>

<p>为了便于实时观察光照强度的变换,将实时数显功能串入整体的功能处理中,其显示效果如图4所示。</p>

<p></p>

<p>图4 实时数显效果</p>

<p>&nbsp;</p>

<p>4.精准地控制采集间隔</p>

<p>在通常情况下,使用延时函数即可准确地控制采集的间隔。但在处理任务量比较重的情况下,会导致积累性的间隔差异。</p>

<p>此问题的解决方法是按计时值来控制采集间隔,所用的语句为:</p>

<p>Get_Sunlight_Value();</p>

<p>//Delay_Ms(1000);</p>

<p>x=calendar.sec;</p>

<p>while(y==x)</p>

<p>{</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x=calendar.sec;</p>

<p>}</p>

<p>y=x;</p>

<p>&nbsp;</p>

<p></p>

<p>图5 采用延时的记录内容</p>

<p>&nbsp;</p>

<p></p>

<p>图6 按计时值的记录内容</p>

<p>&nbsp;</p>

<p>5.采用时长的控制</p>

<p>为了完整地记录一个采集周期的数据,为此将采集时长定为一天,采用间隔为1秒,其控制程序为:</p>

<p>for(c=0; c&lt;86400; c++)&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp; 60*60*24=86400</p>

<p>{</p>

<p>i = sprintf( (PCHAR)buf,&quot;%d %d:%d:%d %d\r\n&quot;,c+1,calendar.hour,calendar.min,calendar.sec,sd);</p>

<p>mCmdParam.ByteWrite.mByteCount = i;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* 指定本次写入的字节数 */</p>

<p>mCmdParam.ByteWrite.mByteBuffer = buf;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* 指向缓冲区 */</p>

<p>s = CHRV3ByteWrite( );&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* 以字节为单位向文件写入数据 */</p>

<p>mStopIfError( s );</p>

<p>//printf(&quot;成功写入 %02X次\r\n&quot;,(UINT16)c);</p>

<p>Get_Sunlight_Value();</p>

<p>//Delay_Ms(1000);</p>

<p>x=calendar.sec;</p>

<p>while(y==x)</p>

<p>{</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x=calendar.sec;</p>

<p>}</p>

<p>y=x;</p>

<p>}</p>

<p>结束语:通过对光照强度记录仪的设计,可以发现尽管CH32V103开发板的体积很小,可其性能是很出色的,基于其串口通讯和U盘读写芯片的基地,其出品MCU是独具特色,且十分便于小型应用产品的开发。该设计所用到的U盘读写性能就大大地简化了设计难度并起到了提高设计效率的功效,CH32V103值得在设计中广泛采用。</p>
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

Jacktang 发表于 2021-3-20 21:04

<p>和哪个&ldquo;<a href="https://bbs.eeworld.com.cn/thread-1159932-1-1.html" target="_blank">【RISC-V MCU CH32V103测评】光照强度记录仪的设计 (兼结题报告)</a>&nbsp;&rdquo;贴是一样的哦</p>

jennyzhaojie 发表于 2021-3-21 00:50

Jacktang 发表于 2021-3-20 21:04
和哪个&ldquo;【RISC-V MCU CH32V103测评】光照强度记录仪的设计 (兼结题报告)&nbsp;&rdquo;贴是一样的哦 ...

<p>嗐,先是发错版块了,也没法去除就稍改一点放着吧,管管看是重复的可能就给清除了。</p>
页: [1]
查看完整版本: 光照强度记录仪的设计