思路有了,接下去就可编程了,假如我们将一个10位PWM的两进制数值,均分在这40次PWM输出中,即每一次输出扣除 1024/40 = 25.6 个数,取整后,得到每次扣除 26个数。
即每次PWM输出前,比较10位PWM之数值,大于等于26时,PWM输出一个完整的0xff高电平周期, 其PWM之数值减26,作为下次PWM值之用,依次循环输出PWM,直至PWM值小于26, 将PWM乘10, 输出之,之后的PWM输出以0增充,直到40个PWM输出周期结束,进入新一轮,重新进入循环40个PWM输出周期。
SH88F2051/4051的PWMP设置为0xff, 即256个PWM脉冲频率周期输出一个完整的8位PWM波,依次循环40次,输出一个完整的10位PWM波。
假设要输出的 10位 PWM值 PWM_10bit = 123; 每次当前 PWM值 如大于或等于 26, 则减 26, 如小于26, 则将数值乘10后直接输出, 之后以0输出填充。
相减之后的数据依次为: 123-26=97(输出0xff), 97-26=71(输出0xff), 71-26=45(输出0xff), 45-26=19(输出0xff), 19X10=190(输出190)。
模拟输出图:
|