同时测量四路高电平宽度并输出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);

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值