|
本帖最后由 ickycccc 于 2024-10-22 18:47 编辑
我是用烧录软件里的范例去捕获PWM,这里使用了PWM5 和PWM1P通道,两个通道都试过了。
问题:
1.通过串口将得到的计数点cnt的值打印出来,。但是通过串口打印出来的值占空比时间(高电平脉宽时间)和脉宽周期的比值并不等于我发出的PWM信号。
2.当发出的PWM信号占空比接近50%的时候,串口打印的两个值也对不上而且误差很大。
3.范例里的程序一个计数点“cnt”是多少时间这个怎么去计算?
下面是一次串口打印的数据 :
Period Time: 44722
Duty Cycle Time: 55070
Period Time: 44630
Duty Cycle Time: 55109
Period Time: 44737
Duty Cycle Time: 55119
Period Time: 44694
Duty Cycle Time: 55101
Period Time: 44742
上面串口打印的数据由50%占空比输入的PWM信号生成的,但是数据有问题
使用的代码如下:
void PWMB_ISR() interrupt 27 {
unsigned int cnt;
if (PWMB_SR1 & 0x02)
{
PWMB_SR1 &= ~0x02;
cnt = PWMB_CCR5; //CC1捕获周期宽度
printf("Period Time: %u\n", cnt); // 打印占空比时间
}
if (PWMB_SR1 & 0x04) { // 检查CC6捕获中断
PWMB_SR1 &= ~0x04; // 清除中断标志
cnt = PWMB_CCR6 ; // CC6捕获占空比(高电平宽度)
printf("Duty Cycle Time: %u\n", cnt); // 打印占空比时间
}
}
补充:这个PWM信号是由另一块STC8H8K发出来的PWM信号 不会干扰
|
-
50%的占空比
|