下边是STC15系列CCP为6位PWM输出,正弦波计算占空比的函数
//CCP为6位PWM输出
BYTE xdata Sin_Num[256] = {0};
#define STEP ((2.0 * PI) / 64.0)//正弦波采样步长
#define PWM_DUTY_MIN 0X01
#define PWM_DUTY_MAX 0X3E
void GetReloadNum()
{
int i;
float Value = 0.0,aa = 0.0;
for(i = 0;i < 64;i++)
{
Value = 32.0 * (1 - sin(aa));
Sin_Num[i ] = (unsigned int)Value;
if(Sin_Num[ i] < PWM_DUTY_MIN) Sin_Num[ i] = PWM_DUTY_MIN;
else if(Sin_Num[ i] > PWM_DUTY_MAX) Sin_Num[ i] = PWM_DUTY_MAX;
aa += STEP;
}
}
这是输出的波形,不够漂亮。
|