xutong 发表于 2022-12-9 11:23

PWM中心值计数

<div class='showpostmsg'><h1>中心值计数PWM</h1>

<p >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 中心值计数示意图,如下所示。</p>

<p align="center" > &nbsp;</p>

<p align="center" >上PWM和下PWM最大差一个大的周期</p>

<h2 >电路实现描述:</h2>

<p >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设:从O -&gt; A 要计数512</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 从 O -&gt; B要计数1024</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 问:当占空比设置为30%时候,OA与OB的计算方法</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 此时OA的占空比为512*30%=153,因为前面一段是空的,所以0~(512-153)是低电平,并且512~512+153是高电平。高电平结束后就低电平,持续到1024,从此开始B~D的中心值计数。</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 参考代码</p>

<pre>
<code>//Center Value Counter
//定义PWM分辨率
`define PWM_Resolution10
//定义PWM的中位值
`define HalfCounter   512
module PWM (
    inputwire clk,
    input wire rstn,
    //设置输入占空比
    input wire [`PWM_Resolution-1:0] duty,
    //输出占空比引脚
    output reg dout
);
//定义PWM_resolution的Counter
reg [`PWM_Resolution-1:0]Counter;
//Dutyl临时存放地址
reg [`PWM_Resolution-1:0]Duty_temp;
//初始化Counter和dout
initial begin
    dout&lt;=1'b0;
    Counter&lt;=0;
    Duty_temp&lt;=0;
end
//每次时钟到来Counter+1 并且将duty 赋值给DUTY_TEMP
always @(posedge clk or negedge rstn) begin
    if (!rstn) begin
      Counter&lt;=0;
      Duty_temp&lt;=0;
    end
    else begin
      //Counter+1
      Counter&lt;=Counter+1'b1;
      //Duty分成一半
      Duty_temp&lt;=duty/2;
    end
end
always @(posedge clk or negedge rstn) begin
    if (!rstn) begin
      Counter&lt;=0;
    end
    //在Counter小于1/2时候
    else if (Counter&lt;`HalfCounter) begin
      if (Counter&lt;(`HalfCounter-Duty_temp)) begin
            dout=1'b0;
      end
      else
            dout=1'b1;
    end
    //在Counter大于1/2时候
    else begin
      if (Counter&lt;(`HalfCounter+Duty_temp)) begin
            dout=1'b1;
      end
      else
            dout=1'b0;
    end
end

endmodule //PWM</code></pre>

<p> &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>

秦天qintian0303 发表于 2022-12-9 13:23

<p>这样计数的主要应用是哪方面?</p>

xutong 发表于 2022-12-9 13:47

秦天qintian0303 发表于 2022-12-9 13:23
这样计数的主要应用是哪方面?

<p>整着玩的</p>

xutong 发表于 2022-12-9 13:48

秦天qintian0303 发表于 2022-12-9 13:23
这样计数的主要应用是哪方面?

<p>push pull 架构是可以用,但是要配合其他代码</p>

lihuanyang 发表于 2022-12-10 18:11

<p>过去,都是是在系统计算的时候,算出来适应范围的,这下好了,直接软件计算,不过,你确定硬件一次回路的参数的调节窗口不需要计算么?</p>

xutong 发表于 2022-12-10 19:28

lihuanyang 发表于 2022-12-10 18:11
过去,都是是在系统计算的时候,算出来适应范围的,这下好了,直接软件计算,不过,你确定硬件一次回路的参 ...

<p>这只是一个part</p><br/>

xutong 发表于 2023-2-18 19:28

未来ic 发表于 2023-2-18 14:45
学习了,eeworld,内容很不错,非常好,对技术成长和视野的拓宽起到了不可替代的作用。

<p>感谢你的捧场</p><br/>
页: [1]
查看完整版本: PWM中心值计数