microchip dspic33 系列教程(6)

microchip dspic33 系列教程(6)

作为数字电源芯片,microchip的这款芯片拥有很强的PWM功能,这篇文章就先说说它的支持精细边沿定位的高分辨率PWM.

1)特性:

以下是这个PWM模块的特性不仅限于以下特性,有些特性不常用笔者省去了:
• 最多 8 个独立的 PWM 发生器,每个发生器均配有双输出
• 工作模式:
– 独立边沿 PWM 模式
– 可变相位 PWM 模式
– 独立边沿 PWM 模式,双输出
– 中心对齐 PWM 模式
– 双重更新中心对齐 PWM 模式
– 双边沿中心对齐 PWM 模式
• 输出模式:
– 互补
– 独立
– 推挽
• 死区发生器
• 灵活的周期/占空比更新选项
• PWM 控制输入(PWM Control Input,PCI),用于 PWM 引脚改写和外部 PWM 同步
• 高级触发选项
• 组合逻辑输出
• PWM 事件输出

2)框架:

PWM 发生器操作基于触发信号。要产生 PWM 周期,必须接收周期开始(Start-of-Cycle,SOC)触发信号;触发信号
可以是自触发的,也可以是来自外部源的。
在这里插入图片描述

在这里插入图片描述

3)控制寄存器:

本章只讨论部分寄存器,若要其他寄存器请去官网看资料;

3-1:PGxCONL

在这里插入图片描述
Bit 15 – ON PWM 发生器 x 使能位

1 使能 PWM 发生器 
0 禁止 PWM 发生器

Bit 10:8 – TRGCNT[2:0] PWM 发生器 x 触发计数选择位(默认000就好)
Bit 7 – HREN PWM 发生器 x 高分辨率使能位

1 PWM 发生器 x 工作在高分辨率模式下 
0 PWM 发生器 x 工作在标准分辨率模式下

Bit 4:3 – CLKSEL[1:0] 时钟选择位(1)
Bit 2:0 – MODSEL[2:0] PWM 发生器 x 模式选择位

111 双边沿中心对齐 PWM 模式(每周期中断/寄存器更新两次)
110 双边沿中心对齐 PWM 模式(每周期中断/寄存器更新一次)
101 双重更新中心对齐 PWM 模式
100 中心对齐 PWM 模式
011 保留
010 独立边沿 PWM 模式,双输出
001 可变相位 PWM 模式
000 独立边沿 PWM 模式

3-2 :PGxCONH

在这里插入图片描述
Bit 15 – MDCSEL 主占空比寄存器选择位

1 PWM 发生器使用 MDC 寄存器
0 PWM 发生器使用 PGxDC 寄存器

Bit 14 – MPERSEL 主周期寄存器选择位

1 PWM 发生器使用 MPER 寄存器
0 PWM 发生器使用 PGxPER 寄存器

Bit 13 – MPHSEL 主相位寄存器选择位

1 PWM 发生器使用 MPHASE 寄存器
0 PWM 发生器使用 PGxPHASE 寄存器

Bit 11 – MSTEN 主更新使能位

1 PWM 发生器向其他 PWM 发生器广播 UPDREQ 控制位的状态(通过软件设置)和 EOC 信号
0 PWM 发生器不广播 UPDREQ 状态位的状态和 EOC 信号

Bit 10:8 – UPDMOD[2:0] PWM 缓冲区更新模式选择位
Bit 7 – 保留 保持为 0
Bit 6 – TRGMOD PWM 发生器 x 触发模式选择位

1 PWM 发生器工作在可重触发模式下
0 PWM 发生器工作在单触发模式下

Bit 3:0 – SOCS[3:0] 周期开始选择位

1111 仅 TRIG 位或 PCI 同步功能(不选择硬件触发源)
1110-0101 保留
0100 通过 PG4 或 PG8 PGTRGSEL[2:0]位(PGxEVTL[2:0])选择的触发输出
0011 通过 PG3 或 PG7 PGTRGSEL[2:0]位(PGxEVTL[2:0])选择的触发输出
0010 通过 PG2 或 PG6 PGTRGSEL[2:0]位(PGxEVTL[2:0])选择的触发输出
0001 通过 PG1 或 PG5 PGTRGSEL[2:0]位(PGxEVTL[2:0])选择的触发输出
0000 本地 EOC——PWM 发生器自触发

3-3:PGxIOCONL

在这里插入图片描述
Bit 15 – CLMOD 限流模式选择位

1 如果 PCI 限流处于有效状态,则 PWMxH 和 PWMxL 输出信号反相(位翻转),不使用 CLDAT[1:0]0 如果 PCI 限流处于有效状态,则 CLDAT[1:0]位定义 PWM 输出电平

Bit 14 – SWAP 交换 PWMxH 和 PWMxL 器件引脚的 PWM 信号位

1 PWMxH 信号连接至 PWMxL 引脚,PWMxL 信号连接至 PWMxH 引脚
0 PWMxH/L 信号映射到它们各自对应的引脚

Bit 13 – OVRENH PWMxH 引脚的用户改写使能位

1 OVRDAT[1]为 PWMxH 引脚上的输出提供数据
0 PWM 发生器为 PWMxH 引脚提供数据

Bit 12 – OVRENL PWMxL 引脚的用户改写使能位

1 OVRDAT[0]为 PWMxL 引脚的输出提供数据
0 PWM 发生器为 PWMxL 引脚提供数据

Bit 11:10 – OVRDAT[1:0] 使能改写时 PWMxH/PWMxL 引脚数据位

如果 OVRENH = 1,则 OVRDAT[1]为 PWMxH 提供数据。
如果 OVRENL = 1,则 OVRDAT[0]为 PWMxL 提供数据。

Bit 9:8 – OSYNC[1:0] 用户输出改写同步控制位

11 保留
10 何时通过 SWAP、OVRENL/H 和 OVRDAT[1:0]位进行用户输出改写由 PGxCONH 寄存器中的UPDMOD[2:0]位指定
01 立即(尽快)通过 SWAP、OVRENL/H 和 OVRDAT[1:0]位进行用户输出改写
00 通过 SWAP、OVRENL/H 和 OVRDAT[1:0]位进行的用户输出改写与本地 PWM 时基同步(下一周期开
始时进行)

Bit 7:6 – FLTDAT[1:0] FLT 事件有效时 PWMxH/PWMxL 引脚数据位

如果故障有效,则 FLTDAT[1]为 PWMxH 提供数据。
如果故障有效,则 FLTDAT[0]为 PWMxL 提供数据。

Bit 5:4 – CLDAT[1:0] CLMT 事件有效时 PWMxH/PWMxL 引脚数据位

如果限流有效,则 CLDAT[1]为 PWMxH 提供数据。
如果限流有效,则 CLDAT[0]为 PWMxL 提供数据。

Bit 3:2 – FFDAT[1:0] 前馈事件有效时 PWMxH/PWMxL 引脚数据位

如果前馈有效,则 FFDAT[1]为 PWMxH 提供数据。
如果前馈有效,则 FFDAT[0]为 PWMxL 提供数据。

Bit 1:0 – DBDAT[1:0] 调试模式有效时 PWMxH/PWMxL 引脚数据位

如果调试模式有效且 PTFRZ = 1,则 DBDAT[1]为 PWMxH 提供数据。
如果调试模式有效且 PTFRZ = 1,则 DBDAT[0]为 PWMxL 提供数据。

3-4 PGxIOCONH:

在这里插入图片描述
Bit 14:12 – CAPSRC[2:0] 时基捕捉源选择位

111 保留
110 保留
101 保留
100 将所选 PCI 故障信号置为有效时捕捉时基值
011 将所选 PCI 限流信号置为有效时捕捉时基值
010 将所选 PCI 前馈信号置为有效时捕捉时基值
001 将所选 PCI 同步信号置为有效时捕捉时基值
000 没有为时基捕捉选择硬件源——仅限软件

Bit 8 – DTCMPSEL 死区补偿选择位

1 死区补偿由 PCI 前馈限制逻辑控制
0 死区补偿由 PCI 同步逻辑控制

Bit 5:4 – PMOD[1:0] PWM 发生器输出模式选择位

11 保留
10 PWM 发生器输出工作在推挽模式下
01 PWM 发生器输出工作在独立模式下
00 PWM 发生器输出工作在互补模式下

Bit 3 – PENH PWMxH 输出端口使能位

1 PWM 发生器控制 PWMxH 输出引脚
0 PWM 发生器不控制 PWMxH 输出引脚

Bit 2 – PENL PWMxL 输出端口使能位

1 PWM 发生器控制 PWMxL 输出引脚
0 PWM 发生器不控制 PWMxL 输出引脚

Bit 1 – POLH PWMxH 输出极性位

1 输出引脚为低电平有效
0 输出引脚为高电平有效

Bit 0 – POLL PWMxL 输出极性位

1 输出引脚为低电平有效
0 输出引脚为高电平有效

3-5:PGxEVTL

在这里插入图片描述

Bit 15:11 – ADTR1PS[4:0] ADC 触发 1 后分频比选择位

11111 1:32
... ...
00010 1:3
00001 1:2
00000 1:1

Bit 10 – ADTR1EN3 ADC 触发 1 源为 PGxTRIGC 比较事件使能位

1 使能 PGxTRIGC 寄存器比较事件作为 ADC 触发 1 的触发源
0 禁止 PGxTRIGC 寄存器比较事件作为 ADC 触发 1 的触发源

Bit 9 – ADTR1EN2 ADC 触发 1 源为 PGxTRIGB 比较事件使能位

1 使能 PGxTRIGB 寄存器比较事件作为 ADC 触发 1 的触发源
0 禁止 PGxTRIGB 寄存器比较事件作为 ADC 触发 1 的触发源

Bit 8 – ADTR1EN1 ADC 触发 1 源为 PGxTRIGA 比较事件使能位

1 使能 PGxTRIGA 寄存器比较事件作为 ADC 触发 1 的触发源
0 禁止 PGxTRIGA 寄存器比较事件作为 ADC 触发 1 的触发源

Bit 4:3 – UPDTRG[1:0] 更新触发源选择位

11 对 PGxTRIGA 寄存器进行写操作会自动将 UPDREQ 位置 1
10 对 PGxPHASE 寄存器进行写操作会自动将 UPDREQ 位置 1
01 对 PGxDC 寄存器进行写操作会自动将 UPDREQ 位置 1
00 用户必须手动将 UPDREQ 位(PGxSTAT[3])置 1

Bit 2:0 – PGTRGSEL[2:0] PWM 发生器触发输出选择位

111 保留
110 保留
101 保留
100 保留
011 PGxTRIGC 比较事件为 PWM 发生器触发信号
010 PGxTRIGB 比较事件为 PWM 发生器触发信号
001 PGxTRIGA 比较事件为 PWM 发生器触发信号
000 EOC 事件为 PWM 发生器触发信号

3-6:PGxEVTH

在这里插入图片描述
Bit 15 – FLTIEN PCI 故障中断允许位

1 允许故障中断
0 禁止故障中断

Bit 14 – CLIEN PCI 限流中断允许位

1 允许限流中断
0 禁止限流中断

Bit 13 – FFIEN PCI 前馈中断允许位

1 允许前馈中断
0 禁止前馈中断

Bit 12 – SIEN PCI 同步中断允许位

1 允许同步中断
0 禁止同步中断

Bit 9:8 – IEVTSEL[1:0] 中断事件选择位

11 禁止时基中断(同步、故障、限流和前馈事件可单独使能)
10 在发生 ADC 触发 1 事件时中断 CPU
01 在发生 TRIGA 比较事件时中断 CPU
00 在 EOC 时中断 CPU

Bit 7 – ADTR2EN3 ADC 触发 2 源为 PGxTRIGC 比较事件使能位

1 使能 PGxTRIGC 寄存器比较事件作为 ADC 触发 2 的触发源
0 禁止 PGxTRIGC 寄存器比较事件作为 ADC 触发 2 的触发源

Bit 6 – ADTR2EN2 ADC 触发 2 源为 PGxTRIGB 比较事件使能位

1 使能 PGxTRIGB 寄存器比较事件作为 ADC 触发 2 的触发源
0 禁止 PGxTRIGB 寄存器比较事件作为 ADC 触发 2 的触发源

Bit 5 – ADTR2EN1 ADC 触发 2 源为 PGxTRIGA 比较事件使能位

1 使能 PGxTRIGA 寄存器比较事件作为 ADC 触发 2 的触发源
0 禁止 PGxTRIGA 寄存器比较事件作为 ADC 触发 2 的触发源

Bit 4:0 – ADTR1OFS[4:0] ADC 触发 1 偏移选择位

11111 偏移 31 个触发事件
... ...
00010 偏移 2 个触发事件
00001 偏移 1 个触发事件
00000 无偏移

3-7:PGxPHASE

Bit 15:0 – PGxPHASE[15:0] PWM 发生器 x 相位寄存器位
在这里插入图片描述

3-8:PGxDC

Bit 15:0 – PGxDC[15:0] PWM 发生器 x 占空比寄存器位
注: 不得使用小于 0x0008 的占空比值(高分辨率模式下为 0x0020)。
在这里插入图片描述

3-9:PGxPER

Bit 15:0 – PGxPER[15:0] PWM 发生器 x 周期寄存器位
注: 不得使用小于 0x0010 的周期值(高分辨率模式下为 0x0080)。
在这里插入图片描述

3-10:PGxTRIGA

Bit 15:0 – PGxTRIGA[15:0] PWM 发生器 x 触发 A 寄存器位
在高分辨率模式下,bit[2:0]强制为 0。
在这里插入图片描述

3-11:PGxTRIGB

Bit 15:0 – PGxTRIGB[15:0] PWM 发生器 x 触发 B 寄存器位
在高分辨率模式下,bit[2:0]强制为 0。
在这里插入图片描述

3-12:PGxTRIGC

Bit 15:0 – PGxTRIGC[15:0] PWM 发生器 x 触发 C 寄存器位
在高分辨率模式下,bit[2:0]强制为 0。
在这里插入图片描述

3-13:PGxDTL

Bit 13:0 – DTL[13:0] PWMxL 死区延时位
注: 当 HREN(PGxCONL[7])= 0 时,DTL[13:11]位不可用。
在这里插入图片描述

3-14:PGxDTH

Bit 13:0 – DTH[13:0] PWMxH 死区延时位
注: 当 HREN(PGxCONL[7])= 0 时,DTH[13:11]位不可用
在这里插入图片描述

4)MCC生成PWM代码:

打开MCC在此处添加PWM模块。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
然后生成代码就可以了。具体代码先不做讲解了,大家对着寄存器去看吧。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值