光照强度记录仪的设计
<div class='showpostmsg'> 本帖最后由 jennyzhaojie 于 2021-3-20 18:21 编辑<p>在家居环境的测评中,采光质量是一项重要指标。单凭人介绍,显然是缺乏数据支撑的。</p>
<p>使用CH32V103开发板,结合相应的光照强度传感器及OLED显示屏等即可自行设计一个实用的光照强度记录仪,其构成情况如图1所示。 </p>
<p>图1 光照强度记录仪构成</p>
<p> </p>
<p>在该设计过程中,主要涉及以下问题的处理:</p>
<p>1. 数据写入文本文件</p>
<p>在原U盘读写的例程中,已提供了将字符串写入文本文件的方式,但记录仪要求的则是将动态变化的数据写入文件。解决此问题的办法是使用如下语句:</p>
<p>i = sprintf( (PCHAR)buf,"%d %d:%d:%d %d\r\n",c+1,calendar.hour,calendar.min,calendar.sec,sd);</p>
<p> mCmdParam.ByteWrite.mByteCount = i;</p>
<p> mCmdParam.ByteWrite.mByteBuffer = buf;</p>
<p>这样就将多个变量的数据转换为可供存储的字符串,且统计出了其字节长度,并据此来写入文件中。</p>
<p>2.添加RTC计时功能和光照强度采集功能</p>
<p>作为RTC计时功能和光照强度采集功能,均已在前面的帖子中介绍过,但由于是对功能进行集成,所以要对引脚的使用进行重新地调节,比如此前的光照强度采集是使用PA11和PA12,但U盘读写所用的恰恰也是这两个引脚,为此便把其所用的引脚迁移到PA0和PA1上。</p>
<p></p>
<p>图2 USB接口原理图</p>
<p> </p>
<p>将2个功能混合后,其实时检测的输出效果如图3所示。</p>
<p></p>
<p>图3 实时输出效果</p>
<p> </p>
<p>3.添加OLED屏实时数显</p>
<p>为了便于实时观察光照强度的变换,将实时数显功能串入整体的功能处理中,其显示效果如图4所示。</p>
<p></p>
<p>图4 实时数显效果</p>
<p> </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> x=calendar.sec;</p>
<p>}</p>
<p>y=x;</p>
<p> </p>
<p></p>
<p>图5 采用延时的记录内容</p>
<p> </p>
<p></p>
<p>图6 按计时值的记录内容</p>
<p> </p>
<p>5.采用时长的控制</p>
<p>为了完整地记录一个采集周期的数据,为此将采集时长定为一天,采用间隔为1秒,其控制程序为:</p>
<p>for(c=0; c<86400; c++) // 60*60*24=86400</p>
<p>{</p>
<p>i = sprintf( (PCHAR)buf,"%d %d:%d:%d %d\r\n",c+1,calendar.hour,calendar.min,calendar.sec,sd);</p>
<p>mCmdParam.ByteWrite.mByteCount = i; /* 指定本次写入的字节数 */</p>
<p>mCmdParam.ByteWrite.mByteBuffer = buf; /* 指向缓冲区 */</p>
<p>s = CHRV3ByteWrite( ); /* 以字节为单位向文件写入数据 */</p>
<p>mStopIfError( s );</p>
<p>//printf("成功写入 %02X次\r\n",(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> 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> <p>和哪个“<a href="https://bbs.eeworld.com.cn/thread-1159932-1-1.html" target="_blank">【RISC-V MCU CH32V103测评】光照强度记录仪的设计 (兼结题报告)</a> ”贴是一样的哦</p>
Jacktang 发表于 2021-3-20 21:04
和哪个“【RISC-V MCU CH32V103测评】光照强度记录仪的设计 (兼结题报告) ”贴是一样的哦 ...
<p>嗐,先是发错版块了,也没法去除就稍改一点放着吧,管管看是重复的可能就给清除了。</p>
页:
[1]