王昱顺 发表于 前天 17:23

同时测量四路高电平宽度并输出4路PWM, STC32G/STC8H系列

本例程已经在STC32G-V9.62实验箱测试通过,测试频率为24Mhz
使用【INT0+T0】、【INT1+T1】和PWMB组合实现了四路脉冲高电平测量
===【INT0+T0】测量一路外部输入信号的高电平宽度
===【INT1+T1】测量一路外部输入信号的高电平宽度
===PWMB组的 【PWM5+PWM6】测量一路外部输入信号的高电平宽度
       外部输入信号只需要从 PWM5输入,或只需要从 PWM6输入

===PWMB组的 【PWM7+PWM8】测量一路外部输入信号的高电平宽度
       外部输入信号只需要从 PWM7输入,或只需要从 PWM8输入

使用PWMA实现了4路带互补输出的PWM,输出同时与四路输入捕获进行了关联
===PWMA组的 【PWM1P+PWM1N】
===PWMA组的 【PWM2P+PWM2N】
===PWMA组的 【PWM3P+PWM3N】
===PWMA组的 【PWM4P+PWM4N】


测试使用了同一信号源,可以看到捕获后的h1~h4高电平值均相同,

程序采用USB-CDC接口直接回传
,使用STC32G-V9.62实验箱测试通过,测试频率为24Mhz
或者可以使用32G8K64芯片,下载使用40Mhz频率进行测试
测试端口如下所示:

// PWM输出为P60~P67,分别对应PWM1P、PWM1N、PWM2P、PWM2N、PWM3P、PWM3N、PWM4P、PWM4N
// PWM输入为P32(INT0)、P33(INT1)、P00(PWM5P)、P02(PWM7P)

程序内使用INT0+T0、INT1+T1、PWMB捕获2路的组合方式,可同时捕获四路信号的高电平
同时使用PWMA产生了四路互补带死区的高级PWM信号,上电默认50%,与捕获输入对应映射:
以下为其中一路的示例,程序中使用了协程,来减缓捕获时间,方便打印到USB-CDC端口进行观察


[*]      task_start(0);// 协程0
[*]      task_wait(P32); // 等待 INT0 为低
[*]      TR0 = 1;
[*]      // 启动定时器
[*]      IT0 = 1;
[*]      // 使能 INT0 下降沿中断
[*]      EX0 = 1;
[*]      f1 = 1;
[*]      task_wait(f1);                     // 等待读取完成
[*]      UpdatePwm(1, high_level_time1 >> 2); // 缩放至0~16384
[*]      printf_usb("h1:%u\r\n", high_level_time1);
[*]      task_delay(100);
[*]      task_end(1);

以下是经过测试的完整例程,欢迎下载测试:



国芯人工智能 发表于 前天 17:28

测试报告

本例程在STC32G-V962实验箱测试通过,测试频率为24MHz。

1. 测试方法与结果
   使用STC32G-V962实验箱进行高电平捕获测试,捕获结果表明,四路信号的高电平值均保持一致,验证了捕获方法的可靠性。程序采用USB-CDC接口直接回传信号,确保了数据的准确传输。

2. 捕获方法与实现
   本例程采用了多重捕获方法:
INT0+T0、INT1+T1:通过这两个组合实现了四路高电平的捕获,确保了捕获的完整性与准确性。
PWMB:结合了脉冲宽度比(PWMB)技术,进一步提高了捕获的效率与准确性。
PWMA:通过互补输出的方式,实现了四路带互补输出的PWM信号生成,与捕获输入进行了映射关系的关联。

3. PWM输出与输入端口
输出端:输出的PWM信号由以下8个端口组成:
P60~P67:对应PWM1P、PWM1N、PWM2P、PWM2N、PWM3P、PWM3N、PWM4P、PWM4N
输入端:捕获的4路高电平信号分别由以下4个端口组成:
P32(INT0)、P33(INT1)、P00(PWM5P)、P02(PWM7P)

4. 捕获方法优化
   为了提高捕获效率,程序采用协程技术,通过减缓捕获时间,方便于打印到USB-CDC端口进行观察。同时,可以选择32G8K64芯片,下载40MHz的测试频率,以满足更高要求的测试需求。

测试通过,确认了实验箱的稳定性与性能,为后续的高电平捕获测试奠定了良好基础。

[本文内容由国芯人工智能辅助生成,仅供参考]
页: [1]
查看完整版本: 同时测量四路高电平宽度并输出4路PWM, STC32G/STC8H系列