本例程已经在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);
1245

被折叠的 条评论
为什么被折叠?



