【松翰单片机--SN8F5702学习笔记(五)PWM】PW1定时器包括一个16位二进制上升4通道PWM和一个脉冲PWM功能。由计数器达到上限值(PW1Y),清除其计数器并触发中断信号。PWM的占空比由PW1D寄存器控制。PWM还支持一个脉冲输出信号,该信号可在第一个PWM结束时自行禁用周期。因此,在这种情况下只能产生一个脉冲。 PWM有四个可编程通道与GPIO引脚共用,由PW1CH寄存器控制。输出操作必须是通过使能PW1CH寄存器的每个位/通道。启用的PWM通道交换GPIO到PWM输出。当PW1CH寄存器禁用时,PWM通道返回上一状态GPIO模式。如果中断使能,则PWM内置空闲模式唤醒功能。当PWM时发生定时器溢出(从PW1Y-1到PW1Y计数),PWM1F将立即发出可以通过固件读/写。 PWM时钟源为fosc,除以1至128倍由PW1R [2:0]位控制。 PW1中断功能由EPWM1??控制。
文章图片
普通PWM
?PW1定时器内置PWM功能,由PW1EN和PW1CH寄存器控制。 PWM10,PWM11,PWM20,PWM21是输出引脚(与P0.5,P0.6,P1.4和P1.5共用)。 那些输出引脚是与PW1CH寄存器控制的GPIO引脚共用。 输出PWM功能时,必须设置PW1EN = 1。 当PWM输出信号同步完成时,PWM通道交换GPIO到PWM输出。 当PW1EN = 0时,PWM通道返回GPIO模式并返回上一个状态。
?从PW1Y和PW1D比较组合的结果产生PWM信号。 当PW1C从0x0000开始计数,PWM输出高电平状态,即PWM初始状态。 PW1C是从PW1Y寄存器加载新数据以确定PWM周期和分辨率。 PW1C继续计数,并且系统比较PW1C和PW1D。 当PW1C = PW1D时,PWM输出状态交换到低PW1C继续计数。 当PW1定时器溢出时(PW1Y-1至0x0000),并且PWM信号的一个周期结束。 PW1C自动从0x0000重新加载,并且PWM
输出状态在下一个周期交换为高电平。 PW1D决定高占空比和PW1Y决定PWM的分辨率和周期。 PW1D不能大于PW1Y,否则PWM信号将是错误的。
文章图片
单脉冲PWM
?当PW1PO = 0时,PW1为PWM功能模式。 当PW1PO = 1且PW1EN = 1时,PW1将输出PW1计数器溢出时,发出单脉冲PWM功能和PWM1F。 PW1EN位清零自动和脉冲输出引脚返回空闲状态。 输出下一个脉冲是设置PW1EN位按程序再次。 由PW1CH寄存器选择的一个脉冲PWM通道。 当输出一个脉冲PWM功能时,我们必须设置PW1PO = 1和PW1EN = 1。 当一个脉冲PWM输出信号同步完成后,PWM通道从GPIO切换到PWM输出。 当一个脉冲PWM输出结束,PW1EN = 0,PWM通道返回GPIO模式和上一个状态。
文章图片
反转和死区
?PWM建立反向输出功能。 当PWNVn = 1时,PWM具有一个反向PWM信号。当PWNVn = 1时,PW1输出PWM1的反向PWM信号。 当PWNVn = 0时,PW1输出PWM1的非反向PWM信号。反向PWM输出波形如下图。
文章图片
?PWM死区出现在PWM高脉冲宽度,死区周期可编程来自PW1A和PW1D-PW1B寄存器。 死区周期在左右终端是对称的PWM脉冲宽度与否。 如果死区周期长于PWM占空比,则PWM不输出。
PWM寄存器
文章图片
1、PWM输出引脚控制:PW1CH
寄存器 | bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
---|---|---|---|---|---|---|---|---|
PW1CH | - | - | PWCH21 | PWCH20 | - | - | PWCH11 | PWCH10 |
引脚对应 | - | - | P1.5 | P0.6 | - | - | P1.4 | P0.5 |
解释 | - | - | 设置为0则为普通引脚,设置为1则作为PWM输出引脚 | 同左 | - | - | 同左 | 同左 |
寄存器 | bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
---|---|---|---|---|---|---|---|---|
PW1M | PW1EN | PW1R2 | PW1R1 | PW1R0 | PWNV2 | PWNV1 | - | PW1PO |
解释 | PWM使能:1打开,0关闭 | 时钟源选择2位 | 时钟源选择1位 | 时钟源选择0位 | PWM20/21输出控制:1可反转,0不可反转 | PWM10/11输出控制:1可反转,0不可反转 | - | 单脉冲功能:1打开,0关闭 |
值 | 分频 |
---|---|
000 | fosc / 128 |
001 | fosc / 64 |
010 | fosc / 32 |
011 | fosc / 16 |
100 | fosc / 8 |
101 | fosc / 4 |
110 | fosc / 2 |
111 | fosc / 1 |
16位
4、PWM占空比控制:PW1DH,PW1DL
16位
5、PWM死区控制B点:PW1BH,PW1BL
16位
6、PWM死区控制A点:PW1A
8位
注意:在死区控制配置中,B点必须要大于A点
PW1M |= 0x70;
// PW1 rate is Fhosc/1PWMê?3??μ?ê?£(32/1)/256 = 125KHZPWM?ü?ú?a8uSPW1M |= 0x08;
// enable PWM20/21 output
PW1M |= 0x04;
// enable PWM10/11 output//PW1M |= 0x01;
// enable PW1 pulse output function (PW1PO)PW1YH = 0x00;
PW1YL = 0xFF;
// set PW1 cycle control256PW1DH = 0x00;
PW1DL = 0x40;
// set PWM duty control64占空比为25%(低电平的占空比)
推荐阅读
- 松翰单片机--SN8F5702学习笔记(六)TIMER2
- 阿里开发规范--笔记(二)
- 最优化方法|二次规划基础(二次型、正定矩阵、海塞矩阵)
- "按位取反加一"的新理解——在FFT频分析后如何获得其频率分量