标题:
STC单片机PWM如何改变占空比?
[打印本页]
作者:
15817780086
时间:
2021-4-14 15:09
标题:
STC单片机PWM如何改变占空比?
////输出占空比为10% :
////计算思路: 当CL及CH自增到3FF时会溢出到0, 3FF+1 = 400 。 则若想占空比为10%
////→ 400 换算成 十进制:1024 。(1024 - x)/1024 = 0.1 → x = 921.6 取整为922 换算成十六进制:
////39AH 。则3为XCCAPnL中的值,9A为CCAPnL中的值。
// CCAPM2 = 0x42; //PCA模块2为PWM工作模式
// PCA_PWM2 = 0xFC; //PCA模块2输出10位PWM
// CCAP2L = 0x9A; //PWM占空比为10%[(400H-39AH)/400H]
// CCAP2H = 0x9A;
////XCCAPnH 及 CCAPnH 中的值为 CH[1:0] CL[7:0]自加到3FF溢出后,重载进XCCAPnL及CCAPnL中的值, 因此 需与XCCAPnL及CCAPnL保持一致。
////若想输出占空比为50%:
// CCAPM2 = 0x42; //PCA模块2为PWM工作模式
// PCA_PWM2 = 0xE8; //PCA模块2输出10位PWM
// CCAP2L = 0x00; //PWM占空比为50%[(400H-200H)/400H]
// CCAP2H = 0x00;
////若想输出占空比为75%:
////(1024 - x)/1024 = 0.75 → x = 256 换算十六进制 100。 则 XCCAP2L中的值为01 。CCAP2L的值为00
// CCAPM2 = 0x42; //PCA模块2为PWM工作模式
// PCA_PWM2 = 0xD4; //PCA模块2输出10位PWM
// CCAP2L = 0x00; //PWM占空比为75%[(400H-100H)/400H]
// CCAP2H = 0x00;
void PWM_Init(void)
{
CCON = 0x00;
CMOD = 0x08;//PCA时钟为系统时钟
CL = 0x00; //PCA计数器初始值低8位
CH = 0x00; //PCA计数器初始值高8位
// CCAPM0 = 0x42; //PCA模块0为PWM工作模式
// PCA_PWM0 = 0xc0;//PCA模块0输出10位PWM
// CCAP0L = 0x00;
// CCAP0H = 0x00;//PCA模块用在PWM 模式中时,用来控制输出的占空比。
CCAPM1 = 0x42; //PCA模块0为PWM工作模式
PCA_PWM1 = 0xc0;//PCA模块0输出10位PWM
CCAP1L = 0x00;
CCAP1H = 0x00;//PCA模块用在PWM 模式中时,用来控制输出的占空比。
CCAPM2 = 0x42; //PCA模块0为PWM工作模式
PCA_PWM2 = 0xc0;//PCA模块0输出10位PWM
CCAP2L = 0x00;
CCAP2H = 0x00;//PCA模块用在PWM 模式中时,用来控制输出的占空比。
CR = 1; //启动PCA计时器
}
作者:
湖南
时间:
2021-4-14 23:42
定时器输出不同的PWM。在定时中断里面实现
作者:
hzm19640731
时间:
2023-5-3 19:24
错误太多,误人
作者:
wulin
时间:
2023-5-4 05:54
void PWM_Init(void)
{
CCON = 0x00;
CMOD = 0x08; //PCA时钟为系统时钟/256
CL = 0x00;
CH = 0x00;
CCAPM0 = 0x42; //PCA模块0为PWM工作模式
PCA_PWM0=0x00; //PCA模块0输出8位PWM
CCAP0L = 0xff; //PWM占空比为0%
CCAP0H = 0xff;
CR = 1; //启动PCA计时器
}
//VB数据范围0~100,控制VB大小可以就控制PWM占空比
CCAP0H = ~(VB*256/100);
作者:
coody_sz
时间:
2023-5-4 10:57
//===================================================
// 函数: void UpdatePwm(u8 id, u16 pwm_value)
// 描述: 更新PWM值.
// 参数: id: PCA序号, 0~2对应 PCA0 ~ PCA2
// pwm_value: pwm值, 这个值是输出低电平的时间. 设置输出高电平时间可以取反后再装载、
// 返回: none.
// 版本: V1.0, 2018-5-10
//========================================================================
void UpdatePwm(u8 id, u16 pwm_value)
{
if(id == 0)
{
PCA_PWM0 = (PCA_PWM0 & ~0x32) | (u8)((pwm_value >> 4) & 0x30);
CCAP0H = (u8)pwm_value;
}
else if(id == 1)
{
PCA_PWM1 = (PCA_PWM1 & ~0x32) | (u8)((pwm_value >> 4) & 0x30);
CCAP1H = (u8)pwm_value;
}
else if(id == 2)
{
PCA_PWM2 = (PCA_PWM2 & ~0x32) | (u8)((pwm_value >> 4) & 0x30);
CCAP2H = (u8)pwm_value;
}
}
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1