PWM模块原理与应用
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 上述的两个功能结合,定时器中断服务程序中在特定的计数器时 刻改变信号电平,就可以产生PWM信号波形。
PWM = GPIO(O)+ Timer
PWM工作原理就是在指定时刻进行信号电平变化,来 产生PWM信号波形。
v
信号电平变化
t0
t1
t
指定时刻
PWM模块主要组成
• 1. PWM工作时钟TBCLK • 2. PWM计数器TBCTR • 3. PWM周期 • 4. PWM事件 • 5. PWM动作 • 6. PWM引脚输出 • 7. PWM中断源
• 引脚有2个,分别是PwmA、PwmB。
特别说明
• TBClkSYNC=0 void CLK_disableTbClockSync(CLK_Handle clkHandle); • TBClkSYNC=1 void CLK_enableTbClockSync(CLK_Handle clkHandle);
PWM 引脚配置(三步)
• 第一步:配置上拉电阻 • 第二步:配置GPIO引脚工作模式为PWM模式 • 第三步:配置GPIO引脚输出方向
第一步:配置上拉电阻
• void GPIO_setPullUp(GPIO_Handle gpioHandle,const GPIO_Number_e gpioNumber,const GPIO_PullUp_e pullUp);
TPWM
TPWM
4
4
3
3
2
2
1
1
0
0
TPWM
TPWM
4
4
3
3
2
2
1
1
0
0
TPWM
4
33
2
2
1
1
0
0
连续增计数模式
连续减计数模式
连续增连续减计数模式
TPWM (TBPRD 1) TTBCLK
TPWM (TBPRD 1) TTBCLK
TPWM 2 TBPRD TT百度文库CLK
3. PWM周期
PWM周期TPWM与周期寄存器TBPRD的关系: • 连续增计数模式:TPWM=(TBPRD+1)*TTBCLK • 连续减计数模式:TPWM=(TBPRD+1)*TTBCLK • 连续增连续减计数模式:TPWM=2*TBPRD*TTBCLK
5. PWM动作
PWM动作有: • 保持不变,没有动作 • 低电平 • 高电平 • 原电平状态翻转
6. PWM引脚输出
PWM引脚输出:一个PWM模块控制2个引脚(1A、1B),控制 PWM动作作用在哪个引脚上。
7. PWM中断源
PWM中断源:PWM事件作为触发源,输送给中断系统产生PWM中 断源PWMINT。
PWM 操作(中断方式)(三步)
• 第一步:建立PWM中断源EPWMxINT • 第二步:PIE中断管理(中断服务程序注册、三层次中断开关许可) • 第三步:中断服务程序(读取转换结果、清除标志)
第一步:建立PWM中断源EPWMxINT
• 选择中断触发事件 void PWM_setIntMode(PWM_Handle pwmHandle,const PWM_IntMode_e intMode); • 设置事件分频数 void PWM_setIntPeriod(PWM_Handle pwmHandle,const PWM_IntPeriod_e intPeriod);
PWM 环境配置(六步)
• 第一步:引入系统时钟信号SYSCLKOUT • 第二步:产生PWM时钟TBCLK • 第三步:设置PWM计数器TBCTR计数模式 • 第四步:设置PWM周期TBPRD(周期值、值更新方式) • 第五步:设置比较值CMPA/CMPB(比较值、值更新方式、更新时刻) • 第六步:设置PWM动作 特别说明,在配置请需要把时钟同步信号TBClkSYNC关闭 (TBClkSYNC=0),配置结束再启用时钟同步信号TBClkSYNC (TBClkSYNC=1)。
第三步:设置PWM计数器TBCTR计数模式
• void PWM_setCounterMode(PWM_Handle pwmHandle,const PWM_CounterMode_e counterMode);
第四步:设置PWM周期TBPRD
• 周期值 void PWM_setPeriod(PWM_Handle pwmHandle, const uint16_t period); • 值更新方式 void PWM_setPeriodLoad(PWM_Handle pwmHandle, const PWM_PeriodLoad_e periodLoad);
第一步:引入系统时钟信号SYSCLKOUT
• void CLK_enablePwmClock(CLK_Handle clkHandle, const PWM_Number_e pwmNumber);
第二步:产生PWM时钟TBCLK
void PWM_setHighSpeedClkDiv(PWM_Handle pwmHandle,const PWM_HspClkDiv_e clkDiv); void PWM_setClkDiv(PWM_Handle pwmHandle,const PWM_ClkDiv_e clkDiv);
第六步:设置PWM动作
• void PWM_setActionQual_事件_引脚(PWM_Handle pwmHandle,const PWM_ActionQual_e actionQual);
其中:事件有6个,分别是
• CntDown_CmpA/CmpB • CntUp_CmpA/CmpB • Period • Zero
第五步:设置比较值CMPA/CMPB
• 比较值 void PWM_setCmpA(PWM_Handle pwmHandle,const uint16_t pwmData); • 值更新方式 void PWM_setShadowMode_CmpA(PWM_Handle pwmHandle,const PWM_ShadowMode_e shadowMode); • 更新时刻 void PWM_setLoadMode_CmpA(PWM_Handle pwmHandle,const PWM_LoadMode_e loadMode); 注:设置CMPB就是上述函数中CmpA改为CmpB。
第二步:PIE中断管理
• 定位好在PIE和CPU的中断号,中断向量位置
• PWM模块级许可 void PWM_enableInt(PWM_Handle pwmHandle); • PIE级许可 • CPU级许可
第三步:中断服务程序
• PWM模块可以改变周期值和比较值的设定。
• 清除标志 void PWM_clearIntFlag(PWM_Handle pwmHandl;
第二步:配置GPIO引脚工作模式为PWM模式
• void GPIO_setMode(GPIO_Handle gpioHandle,const GPIO_Number_e gpioNumber,const GPIO_Mode_e mode);
第三步:配置GPIO引脚输出方向
• void GPIO_setDirection(GPIO_Handle gpioHandle,const GPIO_Number_e gpioNumber,const GPIO_Direction_e direction);
1. PWM工作时钟TBCLK
系统时钟 SYSCLKOUT
f TBCLK
分频电路
工作时钟 TBCLK
f SYSCLKOUT N 分频系数
2. PWM计数器TBCTR
PWM计数器TBCTR由TBCLK控制,其计数方式有连续增、连续减、 连续增连续减三种模式。示意图中设PWM周期寄存器TBPRD=4。
4. PWM事件
PWM事件:TBCTR与特定值(零、周期、比较值)相等时产生事件。 事件有: • CTR=ZERO:TBCTR=0 • CTR=PRD:TBCTR=周期TBPRD • CTR=CMP:TBCTR=比较值CMP,进一步分连续增和连续减计数模式
• CTR=Up_CMP:TBCTR工作在连续增计数模式,TBCTR=比较值CMP • CTR=Down_CMP:TBCTR工作在连续减计数模式,TBCTR=比较值CMP
PWM模块原理与应用
如何产生一个PWM信号波形? 特征:在指定的时刻产生信号波形的变化。
v
信号电平变化
t0
t1
t
指定时刻
思路
• 信号变化点输出:应用GPIO(Output)模块,可以输出指定电平 的信号。
• 时刻控制:应用Timer模块提供时间服务。设定定时器周期,在定 时器中断服务程序中构造计数器(软件计数器,计数方式软件代 码实现)。
PWM = GPIO(O)+ Timer
PWM工作原理就是在指定时刻进行信号电平变化,来 产生PWM信号波形。
v
信号电平变化
t0
t1
t
指定时刻
PWM模块主要组成
• 1. PWM工作时钟TBCLK • 2. PWM计数器TBCTR • 3. PWM周期 • 4. PWM事件 • 5. PWM动作 • 6. PWM引脚输出 • 7. PWM中断源
• 引脚有2个,分别是PwmA、PwmB。
特别说明
• TBClkSYNC=0 void CLK_disableTbClockSync(CLK_Handle clkHandle); • TBClkSYNC=1 void CLK_enableTbClockSync(CLK_Handle clkHandle);
PWM 引脚配置(三步)
• 第一步:配置上拉电阻 • 第二步:配置GPIO引脚工作模式为PWM模式 • 第三步:配置GPIO引脚输出方向
第一步:配置上拉电阻
• void GPIO_setPullUp(GPIO_Handle gpioHandle,const GPIO_Number_e gpioNumber,const GPIO_PullUp_e pullUp);
TPWM
TPWM
4
4
3
3
2
2
1
1
0
0
TPWM
TPWM
4
4
3
3
2
2
1
1
0
0
TPWM
4
33
2
2
1
1
0
0
连续增计数模式
连续减计数模式
连续增连续减计数模式
TPWM (TBPRD 1) TTBCLK
TPWM (TBPRD 1) TTBCLK
TPWM 2 TBPRD TT百度文库CLK
3. PWM周期
PWM周期TPWM与周期寄存器TBPRD的关系: • 连续增计数模式:TPWM=(TBPRD+1)*TTBCLK • 连续减计数模式:TPWM=(TBPRD+1)*TTBCLK • 连续增连续减计数模式:TPWM=2*TBPRD*TTBCLK
5. PWM动作
PWM动作有: • 保持不变,没有动作 • 低电平 • 高电平 • 原电平状态翻转
6. PWM引脚输出
PWM引脚输出:一个PWM模块控制2个引脚(1A、1B),控制 PWM动作作用在哪个引脚上。
7. PWM中断源
PWM中断源:PWM事件作为触发源,输送给中断系统产生PWM中 断源PWMINT。
PWM 操作(中断方式)(三步)
• 第一步:建立PWM中断源EPWMxINT • 第二步:PIE中断管理(中断服务程序注册、三层次中断开关许可) • 第三步:中断服务程序(读取转换结果、清除标志)
第一步:建立PWM中断源EPWMxINT
• 选择中断触发事件 void PWM_setIntMode(PWM_Handle pwmHandle,const PWM_IntMode_e intMode); • 设置事件分频数 void PWM_setIntPeriod(PWM_Handle pwmHandle,const PWM_IntPeriod_e intPeriod);
PWM 环境配置(六步)
• 第一步:引入系统时钟信号SYSCLKOUT • 第二步:产生PWM时钟TBCLK • 第三步:设置PWM计数器TBCTR计数模式 • 第四步:设置PWM周期TBPRD(周期值、值更新方式) • 第五步:设置比较值CMPA/CMPB(比较值、值更新方式、更新时刻) • 第六步:设置PWM动作 特别说明,在配置请需要把时钟同步信号TBClkSYNC关闭 (TBClkSYNC=0),配置结束再启用时钟同步信号TBClkSYNC (TBClkSYNC=1)。
第三步:设置PWM计数器TBCTR计数模式
• void PWM_setCounterMode(PWM_Handle pwmHandle,const PWM_CounterMode_e counterMode);
第四步:设置PWM周期TBPRD
• 周期值 void PWM_setPeriod(PWM_Handle pwmHandle, const uint16_t period); • 值更新方式 void PWM_setPeriodLoad(PWM_Handle pwmHandle, const PWM_PeriodLoad_e periodLoad);
第一步:引入系统时钟信号SYSCLKOUT
• void CLK_enablePwmClock(CLK_Handle clkHandle, const PWM_Number_e pwmNumber);
第二步:产生PWM时钟TBCLK
void PWM_setHighSpeedClkDiv(PWM_Handle pwmHandle,const PWM_HspClkDiv_e clkDiv); void PWM_setClkDiv(PWM_Handle pwmHandle,const PWM_ClkDiv_e clkDiv);
第六步:设置PWM动作
• void PWM_setActionQual_事件_引脚(PWM_Handle pwmHandle,const PWM_ActionQual_e actionQual);
其中:事件有6个,分别是
• CntDown_CmpA/CmpB • CntUp_CmpA/CmpB • Period • Zero
第五步:设置比较值CMPA/CMPB
• 比较值 void PWM_setCmpA(PWM_Handle pwmHandle,const uint16_t pwmData); • 值更新方式 void PWM_setShadowMode_CmpA(PWM_Handle pwmHandle,const PWM_ShadowMode_e shadowMode); • 更新时刻 void PWM_setLoadMode_CmpA(PWM_Handle pwmHandle,const PWM_LoadMode_e loadMode); 注:设置CMPB就是上述函数中CmpA改为CmpB。
第二步:PIE中断管理
• 定位好在PIE和CPU的中断号,中断向量位置
• PWM模块级许可 void PWM_enableInt(PWM_Handle pwmHandle); • PIE级许可 • CPU级许可
第三步:中断服务程序
• PWM模块可以改变周期值和比较值的设定。
• 清除标志 void PWM_clearIntFlag(PWM_Handle pwmHandl;
第二步:配置GPIO引脚工作模式为PWM模式
• void GPIO_setMode(GPIO_Handle gpioHandle,const GPIO_Number_e gpioNumber,const GPIO_Mode_e mode);
第三步:配置GPIO引脚输出方向
• void GPIO_setDirection(GPIO_Handle gpioHandle,const GPIO_Number_e gpioNumber,const GPIO_Direction_e direction);
1. PWM工作时钟TBCLK
系统时钟 SYSCLKOUT
f TBCLK
分频电路
工作时钟 TBCLK
f SYSCLKOUT N 分频系数
2. PWM计数器TBCTR
PWM计数器TBCTR由TBCLK控制,其计数方式有连续增、连续减、 连续增连续减三种模式。示意图中设PWM周期寄存器TBPRD=4。
4. PWM事件
PWM事件:TBCTR与特定值(零、周期、比较值)相等时产生事件。 事件有: • CTR=ZERO:TBCTR=0 • CTR=PRD:TBCTR=周期TBPRD • CTR=CMP:TBCTR=比较值CMP,进一步分连续增和连续减计数模式
• CTR=Up_CMP:TBCTR工作在连续增计数模式,TBCTR=比较值CMP • CTR=Down_CMP:TBCTR工作在连续减计数模式,TBCTR=比较值CMP
PWM模块原理与应用
如何产生一个PWM信号波形? 特征:在指定的时刻产生信号波形的变化。
v
信号电平变化
t0
t1
t
指定时刻
思路
• 信号变化点输出:应用GPIO(Output)模块,可以输出指定电平 的信号。
• 时刻控制:应用Timer模块提供时间服务。设定定时器周期,在定 时器中断服务程序中构造计数器(软件计数器,计数方式软件代 码实现)。