<p>
想请教一下站内大神,想要产生如下图所示含有</p><p>死区时间</p><p>的互补的pwm,具体的编程语言怎么写。我自己写的这一段只能在上升沿出有死区。</p><p><br></p><pre style="max-width: 100%;"><code class="cpp hljs" codemark="1">
always@(posedge CLK50M or negedge Rst_n)
<span class="hljs-function">begin
<span class="hljs-title">IF</span>
<span class="hljs-params">(!Rst_n)</span>begin
cntd1<</span>=<span class="hljs-number">5</span><span class="hljs-string">'d0;
dpwm_od1<=1'</span>b0;
<span class="hljs-function">end
<span class="hljs-keyword">else</span> begin
<span class="hljs-title">if</span><span class="hljs-params">(pwm_od1i==<span class="hljs-number">1</span><span class="hljs-string">'b0)begin
cntd1<=5'</span>d0;
dpwm_od1<=<span class="hljs-number">1</span><span class="hljs-string">'b0;
end
else if(cntd1==d_set)begin
cntd1<=d_set;
dpwm_od1<=1'</span>b1;
end
<span class="hljs-keyword">else</span> begin
cntd1<=cntd1+<span class="hljs-number">1</span><span class="hljs-string">'d1;
dpwm_od1<=1'</span>b0;
end
end
end </span></span></code></pre><br><p>
有大神可以解答一下吗,非常感谢!</p><br>
<ignore_js_op>
<dl class="tattl attm">
<dd>
自己的程序仿真图</dd><dd>
<img src="data/attach/1911/9m1u1aifgod66n0wm09i94r9ee5iy1ju.png" alt="自己的程序仿真图" title="自己的程序仿真图"></dd>
</dl>
</ignore_js_op>
<ignore_js_op>
<dl class="tattl attm">
<dd>
期望得到的pwm
<img src="data/attach/1911/hmvukmxlulbs1tt46ynjkwb9o5wn8kk9.jpg" alt="期望得到的pwm" title="期望得到的pwm">
</dd>
</dl>
</ignore_js_op>
<p><br></p>
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
1、互补PWM输出
使用高级定时器1的CH1和CH1N通道,该定时器可以选用144M的高频率,对应选用输出引脚PA8和PA7,参考库函数使用手册的步骤,大概概括一下:
1.使能时钟和配置相应GPIO,几乎所有外设使用的第一步
2.配置定时器分频值,重装载值,计数模式等基本参数
3.配置OC参数,也就是OCInitStructure结构体,注意CHxN的输出状态要使能,才能输出互补
4.完成上面步骤就可以输出互补PWM了,如果需要死区等功能,再配置BDTR
5.打开定时器,使能PWM输出
下面是使用144M频率产生100k PWM的主要部分代码:
复制代码
用示波器可以查看输出波形。
2、PWM输入捕获
用这个功能可以测量输入波形的频率或(和)占空比,使用的是定时器TIM3的Input capture mode,可以测量频率或者占空比,为了方便同时测量这两个量,使用该模式中的特殊情况PWM input mode,如图:
(截图自ST参考手册)
根据库函数说明手册的步骤:
1.开启时钟和配置GPIO
2.如果需要,配置定时器基本参数,如果不配置,将按默认配置运行
3.配置输入参数TIM_ICInitStruct,调用Call TIM_ICInit(TIMx, &TIM_ICInitStruct)配置测量频率或占空比中的一个,或者调用TIM_PWMIConfig(TIMx, &TIM_ICInitStruct)同时测量者两个量
4.开启中断或者DMA并初始化,用来读取结果数据
5.如果用PWM input mode需要把定时器设为主从Reset模式
6.打开定时器,在中断或者DMA读取数据
(细节参考ST参考手册PWM input mode部分和库函数说明手册Input Capture management functions部分)
主要代码:
复制代码
中断处理函数:
复制代码
将1、中输出引脚短接到2、中的输入引脚,即可以在串口打印出测量的结果,在一定误差范围内测量正确。
完整的源码:
一周热门 更多>