请下载参考:
03-PWMA-4个捕获通道
04-PWMB-4个捕获通道
万分感谢,懂了 神农鼎 发表于 2025-6-4 17:01
Ai8051U 可以
我的芯片手册老了,没找着的范例,也没敢细看你发的说明图片,
失败了回头看下你发的范例挺细的,谢谢!我来细细的摸索一下
神农鼎 发表于 2025-6-4 17:01
Ai8051U 可以
今天试了一下,
这种方法读取4路PWM后就没法再输出PWM了,
把PWMA和PWMB的口全占了,
我开始理解的是读取P1.0的同时能读取P1.2,
以为只要把中断中改为1到4的口就行,结果是不能的,
梁工 发表于 2025-6-5 20:34
请下载参考:
03-PWMA-4个捕获通道
04-PWMB-4个捕获通道
梁工,我用了例程测试,就改了I/O口,其他的都没动,但是读出来的是错的,我输入的是1000US的高电平结果显示是10000,我把高电平时间改为2000,读取出来的也是10000,不知道哪里的问题?PWMA_CCMR1= 0x31; // 通道1模式配置, 配置成输入通道, 8个时钟滤波
ccer1 |= 0x03; // 配置通道输入使能和极性, 允许输入, 下降沿
ps |= 0; // 选择IO, 0:选择P1.0 P1.1, 1:选择P2.0 P2.1, 2:选择P6.0 P6.1,
PWMA_ISR_En|= 0x02; // 使能中断
PWMA_CCMR2= 0x31; // 通道2模式配置, 配置成输入通道, 8个时钟滤波
ccer1 |= 0x30; // 配置通道输入使能和极性, 允许输入, 下降沿
ps |= (0<<2); // 选择IO, 0:选择P1.2 P1.3, 1:选择P2.2 P2.3, 2:选择P6.2 P6.3,
PWMA_ISR_En|= 0x04; // 使能中断
PWMA_CCMR3= 0x31; // 通道3模式配置, 配置成输入通道, 8个时钟滤波
ccer2 |= 0x03; // 配置通道输入使能和极性, 允许输入, 下降沿
ps |= (0<<4); // 选择IO, 0:选择P1.4 P1.5, 1:选择P2.4 P2.5, 2:选择P6.4 P6.5,
PWMA_ISR_En|= 0x08; // 使能中断
PWMA_CCMR4= 0x31; // 通道4模式配置, 配置成输入通道, 8个时钟滤波
ccer2 |= 0x30; // 配置通道输入使能和极性, 允许输入, 下降沿
ps |= (0<<6); // 选择IO, 0:选择P1.6 P1.7, 1:选择P2.6 P2.7, 2:选择P6.6 P6.7, 3:选择P3.3 P3.4
PWMA_ISR_En|= 0x10; // 使能中断
czlwf 发表于 2025-6-13 19:35
梁工,我用了例程测试,就改了I/O口,其他的都没动,但是读出来的是错的,我输入的是1000US的高电平结果 ...
先测试我原来的程序,正常了再修改,有错误就仔细检查程序。 梁工 发表于 2025-6-13 21:13
先测试我原来的程序,正常了再修改,有错误就仔细检查程序。
好的,是我偷懒了,没用试验板先做,周一再试试,一个老年人学习单片机是有点难度的,不过相信我能学会,谢谢梁工! czlwf 发表于 2025-6-13 19:31
今天试了一下,
这种方法读取4路PWM后就没法再输出PWM了,
把PWMA和PWMB的口全占了,
ai8051u下,可以通过pwma和pwmb捕获四路pwm,同时还有一个pca外设可以用来生成三路pwm
因为是你用的32g8k64系列,则没有pca硬件。因为您是仅需要捕获高电平宽度,则可以通过使用INT0+T0和INT1+T1的方式来组合读取两路高电平,需要额外占用两个定时器。
此时组合起来就是可以INT0+T0捕获一路,INT1+T1捕获一路,PWMB捕获两路,一共四路高电平捕获
同时PWMA还可输出4路带互补信号的PWM czlwf 发表于 2025-6-13 22:03
好的,是我偷懒了,没用试验板先做,周一再试试,一个老年人学习单片机是有点难度的,不过相信我能学会, ...
这里给出一个经过测试的完整程序:
测试使用了同一信号源,可以看到捕获后的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);以下是经过实际测试通过的程序文件:
王昱顺 发表于 2025-6-14 14:11
这里给出一个经过测试的完整程序:
测试使用了同一信号源,可以看到捕获后的h1~h4高电平值均相同,程序 ...
实用,到位, 帮另外开个贴,发出来,大家好搜索到:
标题:
同时测量四路高电平宽度并输出4路PWM, STC32G/STC8H系列
页:
1
[2]