
好像不能像PIC某些带运动反馈检测的单片机一样,可以直接通过硬件得到高电平时间
STM32最好是通过两个中断+一个定时器来做
一个上升沿触发中断:开启定时与下降沿中断
下降沿中断到来时,捕捉定时器计数,得到高电平时间
下一个上升沿到来时,捕捉定时器计数,得到周期
这个思路应该是可以的实现的,反正STM32中断也多,
#include <stc51h>
int X ; // PWM的周期 单位:us微秒
int duty; //占空比变量
void main()
{
X=2000; //周期100uS 即PWM的频率=10KHZ
duty=50; //占空比 50%
TMOD=0X11;
EA=1;
ET0=1;
ET1=1;
TH0=(65535-duty)/256; //定时器0 改变占空比
TL0=(65535-duty)%256;
TH1=(65535-X)/256 ; //定时器1 改变频率
TL1=(65535-X)%256;
TR0=1;
TR1=1;
while(1) ;
}
void timer0_isr() interrupt 1 //定时器0;改变占空比
{
TR0=0;
P1=0X00;
++duty;
if(duty>=X-1) duty=1;
}
void timer1_isr() interrupt 3 //定时器1 ;改变PWM频率 即周期
{
P1=0XFF;
TH1=(65535-X)/256; //改变周期
TL1=(65535-X)%256;
TH0=(65535-duty)/256; //改变占空比
TL0=(65535-duty)%256;
TR0=1;
//TR1=1;
}
PWM,是脉冲宽度调制的意思,主要参数有三个,整个脉冲的宽度,高电平的宽度,占空比。这里假设高电平有效。
占空比 = 高电平的宽度 / 整个脉冲的宽度。PWM捕捉,就是同时捕捉PWM的整个脉冲的宽度以及高电平的宽度,进而可以计算得出占空比。
典型的做法,在脉冲上升沿和下降沿都执行捕捉。上升沿复位并启动定时器,下降沿捕捉定时器内容作为高电平宽度,下一个上升沿捕捉定时器内容作为整个脉冲的宽度,同时复位并重启定时器以进行下一轮捕捉。
我觉得可以把PWM信号读入I/O口,定义两个变量,一个high表示高电平,一个low表示低电平,遇到第一个上升沿开始给high+1,遇到第一个下降沿给low+1,遇到第二个上升沿,则停止计数。统计high与low,就可以知道一个周期内,占空比。
是搞模型的吗?无刷电调不是可以接收来自无线接收器输出的PWM信号吗,怎么还有STM32的事呢?如果你要对遥控信号进行转换,可以如下处理:
用STM32的定时器捕获功能测量输入的PWM信号脉宽,一般是油门信号。再用定时器的PWM输出功能,输出转换后的PWM信号。
以上就是关于求一个可以在STM32F103VET6上运行的捕获占空比的程序。最好能够利用一个管脚发送PWM信号,另外一个进行捕获全部的内容,包括:求一个可以在STM32F103VET6上运行的捕获占空比的程序。最好能够利用一个管脚发送PWM信号,另外一个进行捕获、求51单片机实现PWM的程序、单片机PWM捕捉模式是什么意思等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)