求一个可以在STM32F103VET6上运行的捕获占空比的程序。最好能够利用一个管脚发送PWM信号,另外一个进行捕获

求一个可以在STM32F103VET6上运行的捕获占空比的程序。最好能够利用一个管脚发送PWM信号,另外一个进行捕获,第1张

好像不能像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捕捉模式是什么意思等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9526567.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存