请教:如何才能让PWMA的占空比从0一直到100,把呼吸灯的效果充分展示?(已解决)
请教:如何才能让PWMA的占空比从0一直到100,把呼吸灯的效果充分展示?最近在学习AiCube,先练习一下PWMA
看看下面这个程序片段(用在呼吸灯改变占空比):
////////////////////////////////////////
// PWMA中断服务程序
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void PWMA_ISR(void) interrupt PWMA_VECTOR
{
//<<AICUBE_USER_PWM0_ISR_CODE1_BEGIN>>
// 在此添加中断函数用户代码
if(blinkflag == 0) duty -= 40; //由暗到亮过程:duty-10
else if(blinkflag == 1) duty += 40; //有亮到暗过程:duty+10
if(duty >= 1000) blinkflag = 0; //防溢出周期1000
else if(duty <= 0) blinkflag = 1; //防溢出
updateduty = 1; //占空比更新标志置1
P33=0;
P32=0;
if (PWMA_CheckCC1Flag()) //判断PWM捕获/比较中断
{
PWMA_ClearCC1Flag(); //清除PWM捕获/比较中断标志
}
if (PWMA_CheckCC2Flag()) //判断PWM捕获/比较中断
{
PWMA_ClearCC2Flag(); //清除PWM捕获/比较中断标志
}
//<<AICUBE_USER_PWM0_ISR_CODE1_END>>
}
现在的问题是占空比在50左右变动,但是幅度太小,变成眨眼灯啦!频率没问题,已经定在100HZ
点灯先做gamma校正吧,视觉亮度和占空比之间是非线性的 DebugLab 发表于 2025-11-4 19:29
点灯先做gamma校正吧,视觉亮度和占空比之间是非线性的
谢谢大侠指点,{:weixiao:} wuzhengmin 发表于 2025-11-4 20:25
谢谢大侠指点,
伽马校正计算公式:
#define PWM_PERIOD 1023 //定义PWM周期
#define GAMMA 2.2f //定义伽马系数
#define DOTS 256 //定义总点数(步数)
//N为当前点数
pwm_duty = pow((float)N / DOTS, GAMMA) * PWM_PERIOD;
查表法的话,再给你个伽马校正的EXCEL表:
10bit IN 10bit OUT:(pow(duty,2.2F))/4088.0F
12bit IN 12bit OUT:(pow(duty,2.2F))/21608.0F
12bit IN 15bit OUT:(pow(duty,2.2F))/2700.91F
梁工 发表于 2025-11-4 21:05
wuzhengmin 发表于 2025-11-4 20:25
谢谢大侠指点,
伽马校正计算公式:
谢谢梁工的耐心指导,我看了一下资料,已经知道呼吸灯的话,PWM的频率不能太高,我主频选22.1184M,分频系数我取219,然后ARR取999,目的是搞个100HZ的PWM波,呼吸(亮度)我只调整占空比CCR,因为占空比分母已经是ARR+1,所有CCR从0变化到1000
但现在效果不好,可以看出呼吸,但是太快,想细化一下!
这个伽马矫正,我慢慢研究一下! DebugLab 发表于 2025-11-4 21:49
10bit IN 10bit OUT:(pow(duty,2.2F))/4088.0F
12bit IN 12bit OUT:(pow(duty,2.2F))/21608.0F
感谢大佬的耐心指导,我慢慢来研究! 另外,我用AiCube来试验了,我只是要产生4组PWM波(同时需要PWM中断+USD-CDC)
用AI8051U和STC8H8G64U ,都可以由AiCube先产生程序框架,但是芯片换成STC32G12K128就不行,
首先STC32G12K128的PWMA通道1引脚选择,选择不了,我折腾了好几天,后来投降了,干脆不用通道1
但是也不能同时产生4组PWM波(同时需要PWM中断+USD-CDC),感觉是和USB-CDC功能相冲突:
并且PS寄存器设置的脚位也没能实现。。。。。。。。
到今天为止,也没有搞明白
我先把stc-8h8k64u芯片用AiCube生成大框架,我再增加呼吸灯的完整程序打包发送上来:
DebugLab 发表于 2025-11-4 21:49
10bit IN 10bit OUT:(pow(duty,2.2F))/4088.0F
12bit IN 12bit OUT:(pow(duty,2.2F))/21608.0F
另外,随时欢迎来顺德伦教玩,我请你吃饭喝茶!我电话17364970665 wuzhengmin 发表于 2025-11-5 08:35
谢谢梁工的耐心指导,我看了一下资料,已经知道呼吸灯的话,PWM的频率不能太高,我主频选22.1184M,分频 ...
PWM频率无所谓,100~1000Hz都行,亮度变化的频率低一些就行
页:
[1]
2