[技术问答]

RD8T37P48 PWM周期和占空比如何配置?

[复制链接]
1573|7
手机看帖
扫描二维码
随时随地手机跟帖
Anrenly|  楼主 | 2023-7-6 10:08 | 显示全部楼层 |阅读模式
本帖最后由 Anrenly 于 2023-7-6 10:12 编辑

PWM 广泛应用于测量、通信、功率控制与变换等需许多领域,使用非常广泛。RD8T37系列的PWM可支持周期及占空比的调整,寄存器PWMCFG、PWMCON0 和 PWMCON1 控制PWM的状态及周期,各路PWM的打开及输出波形占空比可单独调整。

一直想搞清楚PMW中的周期和占空比如何配置, 规格书里有2个公式,如下

下载.png

根据规格书中的描述,周期寄存器是PWMPD,占空比寄存器是PDT0x
比如设置周期为100us,占空比为50%的PWM0波形, 时钟为32MHz
周期套公式: 100us = (PWMPD[15:0]+1)/32Mhz
PWMPD[15:0]+1 = 3200
PWMPD[15:0] = 3200-1=3199,也就是0x0C7F , PWMPD 配置为0x0C7F
占空比套公式: 50% = PDT0x[15:0]/(PWMPD[15:0]+1)
PDT0x[15:0] = (PWMPD[15:0]+1) *50%= 3200*0.5=1600,也就是0x640, PDT0x[15:0] 配置为0x640

unsigned int xdata PWMREG[14] _at_ 0x2034;        //PWM占空比调节寄存器

void PWM_Init(void)
{
//设置周期为100us,占空比为50%的PWM0波形
  //PWM00,PWM01独立输出
  PWMCON0 = 0x00;     //分频系数设置为1分频,独立模式,边沿对齐
  PWMCFG |= 0x02;     //PWM00不反向,PWM01反向
  PWMCON1 |= 0x03;      //PWM00,PMW01输出
  PWMPDL = 0x7F;      //周期配置低8位
  PWMPDH = 0x0C;      //周期配置高8位
  PWMREG[6] = 0x640;      //PWM00占空比
  PWMREG[7] = 0x640;      //PWM01占空比
  PWMCON0 |= 0x80;     //使能PWM0
  IE1 |= 0x02;        //开启中断标志位
  
  //设置了周期为500us,占空比为50%的PWM2波形
  TXINX = 0x02;     //TimerX寄存器组指向TIM2
  THX = 0X00;     //计数器高8位清零
  TLX =  0x00;    //计数器低8位清零
  TXMOD |= 0x30;      //使能PWM20,PWM21波形输出
  TXMOD |= 0x08;      //PWM21输出反向
  RCAPXH = 0x3E;      //配置周期寄存器高8位
  RCAPXL = 0x7F;      //配置周期寄存器低8位
  PWMREG[0] = 0x1F40;      //配置PWM20占空比
  PWMREG[1] = 0x1F40;      //配置PWM21占空比
  TXCON |= 0x04;        //使能PWM2
  ET2 = 0;        //关闭PWM2中断
  
  //设置了周期为1ms,占空比为50%的PWM3波形
  TXINX = 0x03;     //TimerX寄存器组指向TIM3
  THX = 0X00;     //计数器高8位清零
  TLX =  0x00;    //计数器低8位清零
  TXMOD |= 0x30;      //使能PWM30,PWM31波形输出
  TXMOD |= 0x08;      //PWM31输出反向
  RCAPXH = 0x7C;      //配置周期寄存器高8位
  RCAPXL = 0xFF;      //配置周期寄存器低8位
  PWMREG[2] = 0x3E80;      //配置PWM30占空比
  PWMREG[3] = 0x3E80;      //配置PWM31占空比
  TXCON |= 0x04;        //使能PWM3
  IE1 &= ~0x40;         //关闭PWM3中断
  
   //设置了周期为2ms,占空比为50%的PWM4波形
  TXINX = 0x04;     //TimerX寄存器组指向TIM4
  THX = 0X00;     //计数器高8位清零
  TLX =  0x00;    //计数器低8位清零
  TXMOD |= 0x30;      //使能PWM40,PWM41波形输出
  TXMOD |= 0x80;      //PWM41输出反向
  RCAPXH = 0xF9;      //配置周期寄存器高8位
  RCAPXL = 0xFF;      //配置周期寄存器低8位
  PWMREG[4] = 0x7D00;      //配置PWM40占空比
  PWMREG[5] = 0x7D00;      //配置PWM41占空比
  TXCON |= 0x04;        //使能PWM4
  IE1 &= ~0x40;         //关闭PWM4中断
  
    EA = 1;       //总中断开启
}

RD8T37系列的PWM0具有的功能如下:
1、 16位PWM精度
2、 输出波形可反向
3、 类型:可设为中心对齐型或者边沿对齐型
4、 模式:可设为独立模式或互补模式
     a) 独立模式下,8路PWM周期相同,但每一路PMW输出波形的占空比单独可设置;
     b) 互补模式下课同时输出四组互补、带死区的PWM波形
5、 提供1个PWM溢出的中断
6、 支持故障检测机制



使用特权

评论回复
chenjun89| | 2023-7-10 08:50 | 显示全部楼层
16位PWM够用了

使用特权

评论回复
bestwell| | 2023-8-7 16:12 | 显示全部楼层
这个寄存器不是配置的?              

使用特权

评论回复
updownq| | 2023-8-7 16:18 | 显示全部楼层
RD8T37P48 PWM例程              

使用特权

评论回复
10299823| | 2023-8-7 16:42 | 显示全部楼层
可以使用定时器中断实现              

使用特权

评论回复
adolphcocker| | 2023-8-7 17:08 | 显示全部楼层
定时器实现的吗?              

使用特权

评论回复
xxrs| | 2023-8-13 19:41 | 显示全部楼层
这个寄存器不是配置的?              

使用特权

评论回复
RDS小定| | 2023-8-14 08:48 | 显示全部楼层
这个是寄存器的写法, 擅长直接对寄存器进行操作的,参考上面demo例程。
其实,更简单一些可以用魔盒,采用易码魔盒直接在魔盒里直接配置, 更简单一些

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

42

帖子

0

粉丝