1nnocet- 发表于 2019-7-20 17:18

【ufun学习】学习篇3:《基础例程2 - PWM控制》

<div class='showpostmsg'> 本帖最后由 1nnocet- 于 2019-7-21 08:54 编辑

<p style="text-align:justify">《基础例程2&nbsp;-&nbsp;PWM控制》</p>

<p style="text-align:justify"><span style="font-size:10.5pt"><span style="font-family:Calibri,sans-serif"><span style="font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;">脉宽调制(Pulse&ensp;Width&ensp;Modulation)是一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。此例程使用PWM控制RGB三色灯的亮度。下面我们详细看下例程的具体详情:</span></span></span></p>

<p style="text-align:justify"><span style="font-size:10.5pt"><span style="font-family:Calibri,sans-serif"><b><span style="font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;">例程说明:</span></b><span style="font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;">红、绿、蓝以随机的亮度比例组合成不同颜色的光</span></span></span></p>

<p style="text-align:justify"><span style="font-size:10.5pt"><span style="font-family:Calibri,sans-serif"><b><span style="font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;">实验操作/使用:</span></b><span style="font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;">烧录程序,上电,复位.</span></span></span></p>

<p style="text-align:justify"><span style="font-size:10.5pt"><span style="font-family:Calibri,sans-serif"><span lang="EN-US" style="font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;">1.</span><span style="font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;">该例程使用到的外设有:RGB灯,和定时器TIM2的通道一、通道二和通道三。RGB灯在原理图中对应芯片的PA0、PA1和PA2引脚,同时三个定时器的三个通道也对应着这三个引脚。</span></span></span></p>

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

<p style="text-align:justify"><span style="font-size:10.5pt"><span style="font-family:Calibri,sans-serif">2.<span style="font-family:宋体">下图为</span>main<span style="font-family:宋体">函数,函数的开始部分依然是对外设的初始化,</span>LED_Init()<span style="font-family:宋体">与学习篇</span>1<span style="font-family:宋体">中的基本相同这里不再赘述,</span></span></span></p>

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

<p style="text-align:justify"><span style="font-size:10.5pt"><span style="font-family:Calibri,sans-serif">TIM2_PWM_Init(399,0)<span style="font-family:宋体">中主要是对定时器赋周期值和预分频的值,其余的就可以套用例程的公式了,个人认为先学会使用,在实战的基础之上再慢慢深究其中的代码。需要注意的一点是要用到的定时器通道需要初始化外设相应的</span>OCx<span style="font-family:宋体">代码与下图</span>22<span style="font-family:宋体">、</span>23<span style="font-family:宋体">、</span>25<span style="font-family:宋体">、</span>26<span style="font-family:宋体">、</span>28<span style="font-family:宋体">、</span>29<span style="font-family:宋体">行类似。</span></span></span></p>

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

<p style="text-align:justify"><span style="font-size:10.5pt"><span style="font-family:Calibri,sans-serif"><span lang="EN-US" style="font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;">Main</span><span style="font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;">函数功能代码部分主要是使用了srand(2)函数生成随机数,用作后期定时器预分频的值,while(1)循环中三个TIM_SetComparex(TIM2,rand()%500);函数将产生的随机数作为预分频值赋值给三个定时器的三个不同通道,同时控制RGB灯。</span></span></span></p>

<p style="text-align:justify"><span style="font-size:10.5pt"><span style="font-family:Calibri,sans-serif"><span lang="EN-US" style="font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;">3.</span><span style="font-family:&quot;微软雅黑&quot;,&quot;sans-serif&quot;">例程运行情况:&nbsp;&nbsp; RGB灯随机地以不同的亮度闪烁,形成不同的颜色。</span></span></span><!--StartFragment --></p>

<p style="text-align:justify"><iframe allowfullscreen="true" frameborder="0" height="450" src="http://player.youku.com/embed/XNDI4MTA2NDc5Ng" style="background:#eee;margin-bottom:10px;" width="100%"></iframe></p>

<p>文中如果有讲述得不对的地方望指出,本人必将虚心接受,共同学习。或者有什么好的想法也可以评论分享,欢迎大家共同学习进步。<br data-filtered="filtered" />
&nbsp;</p>

<p style="text-align:justify">&nbsp;</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>

desk1983 发表于 2019-7-23 08:24

<p>非常好的资料,感谢分享;<br />
共享精神万岁。<br />
希望楼主以后多多分享资料,帮助更多的电子爱好者。</p>

<p>&nbsp;</p>
页: [1]
查看完整版本: 【ufun学习】学习篇3:《基础例程2 - PWM控制》