如何用stm32使用tim1输出pwm的TIM1产生 带死区的互补PWM

21ic官方微信-->
后使用快捷导航没有帐号?
查看: 5654|回复: 14
旧产品升级STM32,互补输出PWM死区问题,请教版主和各位朋友
&&已结帖(20)
主题帖子积分
中级技术员, 积分 228, 距离下一级还需 72 积分
中级技术员, 积分 228, 距离下一级还需 72 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
中级技术员, 积分 228, 距离下一级还需 72 积分
中级技术员, 积分 228, 距离下一级还需 72 积分
本帖最后由 eagle109 于
10:11 编辑
目前旧产品需要升级,准备使用STM32,但是在PWM实验的时候发现,PWM互补输出的死区只能按照参考手册的方式输出,但是我们需要下面的画的那种方式输出。
请问版主和各位朋友,如何做到?
满意回复+20
我明白 PWM 输出的机理,
我感觉要得到你的波形, 就象8楼说的, 只需要把输出极性 (CCxP, CCxNP) 置1.
但是为了在没有输出 PWM 的时候信号无效, 应该把 IDLE 状 ...
本帖子中包含更多资源
才可以下载或查看,没有帐号?
主题帖子积分
中级技术员, 积分 228, 距离下一级还需 72 积分
中级技术员, 积分 228, 距离下一级还需 72 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
中级技术员, 积分 228, 距离下一级还需 72 积分
中级技术员, 积分 228, 距离下一级还需 72 积分
下面一张图为我们想要的输出方式
主题帖子积分
中级技术员, 积分 228, 距离下一级还需 72 积分
中级技术员, 积分 228, 距离下一级还需 72 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
中级技术员, 积分 228, 距离下一级还需 72 积分
中级技术员, 积分 228, 距离下一级还需 72 积分
初始化代码如下:
TimerPeriod = (SystemCoreClock / 10000) - 1;& & & &&&
&&/* Time Base configuration */
&&TIM_TimeBaseStructure.TIM_Prescaler = 0;
&&TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
&&TIM_TimeBaseStructure.TIM_Period = TimerP
&&TIM_TimeBaseStructure.TIM_ClockDivision = 0;
&&TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
&&TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
/* Channel 1, 2,3 and 4 Configuration in PWM mode */
&&TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
&&TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_E
&&TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_E
&&TIM_OCInitStructure.TIM_OCPolarity = TIM_OCNPolarity_H
&&TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_H
&&TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_R
&&TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_R
&&/* 25% duty */
&&TIM_OCInitStructure.TIM_Pulse = (uint16_t) (((uint32_t) 25 * (((SystemCoreClock / 10000 ) - 1) - 1)) / 100);
&&TIM_OC1Init(TIM1, &TIM_OCInitStructure);& & & && & /* Set OC1&OC1N duty */
/* Automatic Output enable, Break, dead time and lock configuration*/
& & TIM1_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_E
& & TIM1_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_E
& & TIM1_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_1;
& & TIM1_BDTRInitStructure.TIM_DeadTime = 0xC0;& & & & /* 3.55us */
& & TIM1_BDTRInitStructure.TIM_Break = TIM_Break_D
& & TIM1_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_L
& & TIM1_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_E
& & TIM_BDTRConfig(TIM1,&TIM1_BDTRInitStructure);
/* TIM IT enable */
&&TIM_ITConfig(TIM1, TIM_IT_Update , ENABLE);
&&/* TIM1 counter enable */
&&TIM_Cmd(TIM1, ENABLE);
&&/* TIM1 Main Output Enable */
&&TIM_CtrlPWMOutputs(TIM1, ENABLE);
主题帖子积分
中级技术员, 积分 228, 距离下一级还需 72 积分
中级技术员, 积分 228, 距离下一级还需 72 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
中级技术员, 积分 228, 距离下一级还需 72 积分
中级技术员, 积分 228, 距离下一级还需 72 积分
10KHz PWM波,25%占空比,死区时间3.55us
主题帖子积分
中级技术员, 积分 228, 距离下一级还需 72 积分
中级技术员, 积分 228, 距离下一级还需 72 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
中级技术员, 积分 228, 距离下一级还需 72 积分
中级技术员, 积分 228, 距离下一级还需 72 积分
PWM1和PWM2模式,以及输出极性,我都调整过,没有用
主题帖子积分
主题帖子积分
专家等级:结帖率:36%打赏:0.00受赏:9.00
主题帖子积分
把OCx与OCxN对换一下可以吗?即把上下桥臂的驱动信号换一下。
I do not teach, but I coach. I do not feed, but I seed.
欢迎访问我的博客:/BLOG_OWNER_199055.HTM
主题帖子积分
中级技术员, 积分 228, 距离下一级还需 72 积分
中级技术员, 积分 228, 距离下一级还需 72 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
中级技术员, 积分 228, 距离下一级还需 72 积分
中级技术员, 积分 228, 距离下一级还需 72 积分
对换之后效果也是一样的
我的目的是:在死区波形处,OCx和OCxN同时为高电平
但是实际情况是:在死区波形处,OCx和OCxN同时为低电平了
主题帖子积分
助理工程师, 积分 1462, 距离下一级还需 538 积分
助理工程师, 积分 1462, 距离下一级还需 538 积分
主题帖子积分
专家等级:结帖率:96%
主题帖子积分
助理工程师, 积分 1462, 距离下一级还需 538 积分
助理工程师, 积分 1462, 距离下一级还需 538 积分
把上下桥臂的驱动信号交换 是不行的.
pwm 模式没有关系,
应该是把 输出极性 (CCxP, CCxNP) 变换一下 (也就是都变1).
主题帖子积分
中级技术员, 积分 228, 距离下一级还需 72 积分
中级技术员, 积分 228, 距离下一级还需 72 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
中级技术员, 积分 228, 距离下一级还需 72 积分
中级技术员, 积分 228, 距离下一级还需 72 积分
把上下桥臂的驱动信号交换 是不行的.
pwm 模式没有关系,
应该是把 输出极性 (CCxP, CCxNP) 变换一下 (也就是都变1).
acgean 发表于
这样我也实验过,不行。
起初我也认为变换一下极性就可以了,而能够影响极性的地方有:
1. PWM1和PWM2模式,直接对Ref信号反转
2.CCxP和CCxNp,输出极性选择
3.Idle极性
4.死区极性
按照这4个极性选择,我就是不懂原理,做个真值表试也可以试出来啊
但是实际情况,对死区输出方式没有任何影响
主题帖子积分
中级技术员, 积分 228, 距离下一级还需 72 积分
中级技术员, 积分 228, 距离下一级还需 72 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
中级技术员, 积分 228, 距离下一级还需 72 积分
中级技术员, 积分 228, 距离下一级还需 72 积分
难道没有人遇到过这个问题?
逼我在外面加一个反向器吗,成本啊
主题帖子积分
中级技术员, 积分 228, 距离下一级还需 72 积分
中级技术员, 积分 228, 距离下一级还需 72 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
中级技术员, 积分 228, 距离下一级还需 72 积分
中级技术员, 积分 228, 距离下一级还需 72 积分
可以实现的,下面的代码出现笔误了,我说怎么改变极性没有反映呢 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCNPolarity_H
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_H
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_R
TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_R
另外死区应该是没有极性的,那个应该叫刹车输入极性。
按照下面的图,基本上可以实现所有的输出可能
本帖子中包含更多资源
才可以下载或查看,没有帐号?
主题帖子积分
中级技术员, 积分 228, 距离下一级还需 72 积分
中级技术员, 积分 228, 距离下一级还需 72 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
中级技术员, 积分 228, 距离下一级还需 72 积分
中级技术员, 积分 228, 距离下一级还需 72 积分
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_H
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_H
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_R
TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_R
主题帖子积分
中级技术员, 积分 228, 距离下一级还需 72 积分
中级技术员, 积分 228, 距离下一级还需 72 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
中级技术员, 积分 228, 距离下一级还需 72 积分
中级技术员, 积分 228, 距离下一级还需 72 积分
1X111这种情况就可以输出我们想要的波形
主题帖子积分
---------------------
主题帖子积分
---------------------
专家等级:结帖率:100%打赏:0.00受赏:40.00
主题帖子积分
---------------------
本帖最后由 airwill 于
08:54 编辑
我明白 PWM 输出的机理,
我感觉要得到你的波形, 就象8楼说的, 只需要把输出极性 (CCxP, CCxNP) 置1.
但是为了在没有输出 PWM 的时候信号无效, 应该把 IDLE 状态的信号都置1.
也就是说, 高电平为安全的输出关断状态.
如果不是这么情况. 那你的要求就是错误的.
欢迎进入 !
主题帖子积分
资深技术员, 积分 346, 距离下一级还需 154 积分
资深技术员, 积分 346, 距离下一级还需 154 积分
主题帖子积分
专家等级:结帖率:58%
主题帖子积分
资深技术员, 积分 346, 距离下一级还需 154 积分
资深技术员, 积分 346, 距离下一级还需 154 积分
香水城 发表于
把OCx与OCxN对换一下可以吗?即把上下桥臂的驱动信号换一下。
板主啊&&我现在想 把 OC2 和OC2N在 CC2E和CC2NE关闭的时候 输出高电平 ( 我按CCER那个表格设置的)是CC2P和CC2NP 为高电平有效 可是就是不会输出高电平 一直是低电平
MOE=1,OSSR=1,OSSI在MOE=1时候设不设置就无所谓了吧&&急求版主回复啊
荣誉元老奖章
等级类勋章
坚毅之洋流
发帖类勋章
时间类勋章
技术领袖奖章
人才类勋章
社区建设奖章
等级类勋章
欢快之小溪
发帖类勋章
技术导师奖章
人才类勋章
技术高手奖章
人才类勋章
时间类勋章查看: 1517|回复: 3
『转贴』STM32汇编 TIM1定时器输出六路互补PWM 带死区延时
主题帖子精华
中级会员, 积分 252, 距离下一级还需 248 积分
在线时间10 小时
新手代码错误多多!!!!&小学文化自学汇编。
程序用TIM3定时控制TIM1定时器,然后在TIM3中断服务函数中写入TIM1PWM的下一个状态(手册上是这样写的)
驱动光驱里面的无刷电机成功转起来了,实现电机转速快慢循环
&&&&&&& .thumb&&&&&&&&&&&&&&& &
&&&&&&& .syntax unified
&&&&&&& .equ STACKINIT,&&&& 0x
&&& .equ rcckz,&&&&&&& 0x @rcc时钟控制寄存器
&&& .equ rccpz,&&&&&&& 0x @时钟配置寄存器
&&& .equ flashacr,&&&&&&& 0x @flash闪存访问寄存器
&&&&&& .equ syskz,&&&&&&&&&& 0xE000E010 @ 控制寄存器
&&&&&&& .equ syscz,&&&&&&&&&&& 0xE000E014 @systick定时器重载
&&&&&&& .equ syssz,&&&&&&&&&&& 0xE000E018 @systick计数值查询
&&&&&&&&&&&&&&&&&&&&&& &
.section .text
vectors_table:
vectors:&&&&&&&
&&&&&&& .word STACKINIT&&&&&&&&
&&&&&&& .word _start + 1&&&&&&&
&&&&&&& .word _nmi_handler + 1&
&&&&&&& .word _hard_fault& + 1&
&&&&&&& .word _memory_fault + 1
&&&&&&& .word _bus_fault + 1&&&
&&&&&&& .word _usage_fault + 1&&
&&& .word 0
&&& .word 0
&&& .word 0
&&& .word 0
&&& .word 0
&&& .word 0
&&& .word 0
&&& .word 0
&&& .word _dingshiqi + 1
&&& .word 0
&&& .word 0
&&& .word 0
&&& .word 0
&&& .word 0
&&& .word 0
&&& .word 0
&&& .word 0
&&& .word 0
&&& .word 0
&&& .word 0
&&& .word 0
&&& .word 0
&&& .word 0
&&& .word 0
&&& .word 0
&&& .word 0
&&& .word 0
&&& .word 0
&&& .word 0
&&& .word 0
&&& .word 0
&&& .word 0
&&& .word 0
&&& .word 0
&&& .word 0
&&& .word 0
&&& .word 0
&&& .word 0
&&& .word _tim3dingshiqi +1
chushihua:
&&& mov r0, #0
&&& mov r1, #0
&&& mov r2, #0
&&& mov r3, #0
&&& mov r4, #0
&&& mov r5, #0
&&& mov r6, #0
&&& mov r7, #0
&&& mov r8, #0
&&& ldr r0, = rcckz
&&& ldr r1, = 0x14D83
&&& str r1, [r0]
gsszbz: @高速时钟标志位
&&& ldr r1, [r0]
&&& ldr r2, = 0x34D83
&&& cmp r2, r1
&&& bne&&& gsszbz
&&& @FLASH缓冲 缓冲开启
&&& ldr r0, = flashacr
&&& mov r1, # 0x
&&& str r1, [r0]
&&& ldr r0, = rccpz
&&& ldr r1, = 0x1D8400
&&& str r1, [r0]
&&& ldr r0, = rcckz
&&& ldr r1, = 0x1033D03
&&& str r1, [r0]
&&& ldr r1, [r0]
&&& ldr r2, = 0x03033D03
&&& cmp r1, r2
&&& bne chaxun
&&& ldr r0, = rccpz
&&& ldr r1, = 0x1D8402
&&& str r1, [r0]
&&& ldr r0, =0xE000ED23&
&&& ldr r1, = 0xC0
&&& str r1, [r0]
&&& ldr r1, = syskz
&&& ldr r0, = syscz
&&& ldr r2, = syssz
&&& mov r3, #0
&&& str r3, [r1]
&&& ldr r3, = 0x2328
&&& str r3, [r0]
&&& str r3, [r2]
&&& mov r3, # 0x03
&&& str r3, [r1]
&&& ldr r0, = 0x
&&& ldr r1, = 0x80C
&&& str r1, [r0]
&&& ldr r0, = 0x
&&& ldr r1, = 0x44444BBB
&&& str r1, [r0]
&&& ldr r0, = 0x40010C04
&&& ldr r1, = 0xBBB44444
&&& str r1, [r0]
&&& ldr r0, = 0x4001080C
&&& ldr r1, = 0x700
&&& str r1, [r0]
&&& ldr r0, = 0x40010C0C
&&& ldr r1, = 0xE000
&&& str r1, [r0]
dingshiqi3:
&&& ldr r0, = 0xE000E100
&&& ldr r1, = 0x
&&& str r1, [r0]
&&& ldr r0, =0xE000ED23&
&&& ldr r1, = 0x00
&&& str r1, [r0]
&&& ldr r0, = 0x4002101C
&&& mov r1, # 0x02
&&& str r1, [r0]
&&& ldr r0, = 0x4000042C
&&& ldr r1, = 0x200
&&& str r1, [r0]
&&& ldr r0, = 0x
&&& ldr r1, = 300
&&& str r1, [r0]
&&& ldr r0, = 0x&
&&& ldr r1, = 0x78&&&&
&&& str r1, [r0]
&&& ldr r0, = 0x
&&& mov r1, #0x40
&&& str r1, [r0]
&&& ldr r0, = 0x4000040C
&&& ldr r1, = 0x02&&&&&&&&
&&& str r1, [r0]
&&& ldr r0, = 0x
&&& mov r1, #0x03
&&& str r1, [r0]
&&& ldr r0, = 0x
&&& mov r1, #0x01
&&& str r1, [r0]
dingshiqi1:
&&& ldr r0, = 0x40012C2C
&&& ldr r1, = 0x366
&&& str r1, [r0]
&&& ldr r0, = 0x40012C28
&&& ldr r1, = 0xE10
&&& str r1, [r0]
&&& ldr r0, = 0x40012C04
&&& ldr r1, = 0x05
&&& str r1, [r0]
&&& ldr r0, = 0x40012C08
&&& ldr r1, = 0x26
&&& str r1, [r0]
&&& ldr r0, = 0x40012C44 @TIM1_BDTR
&&& ldr r1, = 0x8077
&&& str r1, [r0]
&&& ldr r0, = 0x40012C18 @CCMR1
&&& ldr r1, = 0x7878
&&& str r1, [r0]
&&& ldr r0, = 0x40012C1C @CCMR2
&&& ldr r1, = 0x78
&&& str r1, [r0]
&&& ldr r0, = 0x40012C00
&&& ldr r1, = 0x81
&&& str r1, [r0]
&&& ldr r0, = 0x
&&& mov r1, #0x81
&&& str r1, [r0]
&&& ldr r0, = 0x40012C34
&&& ldr r1, = 0x1
&&& str r1, [r0]
&&& ldr r0, = 0x40012C38
&&& ldr r1, = 0x1
&&& str r1, [r0]
&&& ldr r0, = 0x40012C3C
&&& ldr r1, = 0x1
&&& str r1, [r0]
&&& ldr r0, = 0x
&&& ldr r1, = 0x100
&&& str r1, [r0]
&&& mov r8, # 500
&&& bl PWMzhankong
&&& subs r8, 1
&&& bl yanshi
&&& cmp r8, # 50&
&&& bne jisuan
&&& bl PWMzhankong&&&&&&&&&&&&
&&& adds r8, 1
&&& bl yanshi
&&& cmp r8, #500
&&& bne jisuan1
&&& b main
PWMzhankong:
&&& ldr r0, = 0x
&&& str r8, [r0]
yanshi:&&&
&&& cmp r5, #200
&&& bne yanshi
&&& mov r5, #0
_nmi_handler:
_hard_fault:
_memory_fault:
_bus_fault:
_usage_fault:
_dingshiqi:
&&& adds r5, 1
_tim3dingshiqi:
&&& push {lr}
&&& ldr r3, = 0x40012C20
&&& adds r7, 1
&&& cmp r7, # 1
&&& beq zhuangt1
&&& cmp r7, # 2
&&& beq zhuangt2
&&& cmp r7, # 3
&&& beq zhuangt3
&&& cmp r7, # 4
&&& beq zhuangt4
&&& cmp r7, # 5
&&& beq zhuangt5
&&& cmp r7, # 6
&&& beq zhuangt6
&&& ldr r1, = 0x41
&&& str r1, [r3]
&&& bl fanhui1
&&& ldr r1, = 0x401
&&& str r1, [r3]
&&& bl fanhui1
&&& ldr r1, = 0x410
&&& str r1, [r3]
&&& bl fanhui1
&&& ldr r1, = 0x14
&&& str r1, [r3]
&&& bl fanhui1
&&& ldr r1, = 0x104
&&& str r1, [r3]
&&& bl fanhui1
&&& ldr r1, = 0x140
&&& str r1, [r3]
&&& mov r7, # 0
&&& bl fanhui1
&&& ldr r0, = 0x
&&& mov r1, # 0
&&& str r1, [r0]
&&&&&&& pop {pc}
22:24 上传
点击文件名下载附件
664 Bytes, 下载次数: 32
主题帖子精华
在线时间359 小时
主题帖子精华
新手上路, 积分 22, 距离下一级还需 28 积分
在线时间0 小时
谢谢LZ分享
主题帖子精华
初级会员, 积分 173, 距离下一级还需 27 积分
在线时间0 小时
谢谢楼主分享!
Powered by后使用快捷导航没有帐号?
查看: 837|回复: 0
STM32(带死区)互补PWM的极性问题,请大虾指导,谢谢
在线时间17 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 6, 距离下一级还需 194 积分
一粒金砂(中级), 积分 6, 距离下一级还需 194 积分
问题是这样的,以定时器1的通道1为例,先考虑不带死区的互补PWM,假设使用PWM模式1,CCER(捕获比较通道使能)低四位依次是:CC1NP(通道1互补输出要性),CC1NE,NN1P(通道1极性),CC1E。现在我关心的是CC1NP和CC1P,如果CC1NP,CC1P设置成以下四种情况,产生的一对互补PWM分别是什么情形,求高手指导:
情况一:CC1NP=0& &&&CC1P=0
情况二:CC1NP=0& &&&CC1P=1
情况三:CC1NP=1& &&&CC1P=0
情况四:CC1NP=1& &&&CC1P=1
然后我还想知道,在以上四种情况下,如果我插入死区时间,请问在死区的那段时间内,输出电平的极性又是怎么确定的呢??
&&&&&&&&&&
Powered by
逛了这许久,何不进去瞧瞧?21ic官方微信-->
后使用快捷导航没有帐号?
查看: 1572|回复: 2
STM32 互补带死区 PWM
&&未结帖(5)
主题帖子积分
资深技术员, 积分 472, 距离下一级还需 28 积分
资深技术员, 积分 472, 距离下一级还需 28 积分
主题帖子积分
专家等级:结帖率:29%
主题帖子积分
资深技术员, 积分 472, 距离下一级还需 28 积分
资深技术员, 积分 472, 距离下一级还需 28 积分
最近做个项目
需要用到互补带死区的PWM信号输出
另外在互补输出的时候 需要上面的和下面的PWM输出波形 占空比分别可调
不知道STM32F103系列的mcu是否可以做出这个
现在没有什么思路
还请各位大侠 赐教
主题帖子积分
初级技术员, 积分 60, 距离下一级还需 40 积分
初级技术员, 积分 60, 距离下一级还需 40 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
初级技术员, 积分 60, 距离下一级还需 40 积分
初级技术员, 积分 60, 距离下一级还需 40 积分
完全可以的,亲,用高级定时器
主题帖子积分
资深技术员, 积分 472, 距离下一级还需 28 积分
资深技术员, 积分 472, 距离下一级还需 28 积分
主题帖子积分
专家等级:结帖率:29%
主题帖子积分
资深技术员, 积分 472, 距离下一级还需 28 积分
资深技术员, 积分 472, 距离下一级还需 28 积分
亲 有代码示例吗
怎么感觉 带死区 对称可以做到
但是 对称的pwm 占空比是一样的 不可分别调整
涓涓之细流
发帖类勋章
时间类勋章
技术奇才奖章
人才类勋章
技术新星奖章
人才类勋章
热门推荐 /121ic官方微信-->
后使用快捷导航没有帐号?
查看: 874|回复: 9
stm32f407之高级定时器 死区互补PWM(操作寄存器)
&&已结帖(0)
主题帖子积分
助理工程师, 积分 1266, 距离下一级还需 734 积分
助理工程师, 积分 1266, 距离下一级还需 734 积分
主题帖子积分
专家等级:结帖率:28%
主题帖子积分
助理工程师, 积分 1266, 距离下一级还需 734 积分
助理工程师, 积分 1266, 距离下一级还需 734 积分
十四、高级定时器死区互补PWM
& && && &高级定时器的功能有很多,这里只介绍死区互补PWM输出功能。其实死区互补PWM跟通用定时器的PWM配置差异不大,只是需要设置多CCER寄存器中的几个位以及刹车与死区寄存器BDTR。对寄存器的具体描述请参考数据手册。& && &&&
& && && &配置步骤:1.& &&&使能相关时钟。2.& &&&配置相关的引脚模式、速度、以及复用功能。3.& &&&使能TIM时钟4.& &&&设置分频。5.& &&&设置周期。(ARR的值)周期=(PSC+1)* ARR / TIMx时钟6.& &&&产生一次更新事件,更新影子寄存器的值。7.& &&&在CCMR中设置PWM模式。8.& &&&设置各通道占空比。占空比= CCRx / ARR。9.& &&&使能比较输出。10.&&启动预装载。11.&&死区时间设定,使能输出。12.&&打开定时器。
主题帖子积分
助理工程师, 积分 1266, 距离下一级还需 734 积分
助理工程师, 积分 1266, 距离下一级还需 734 积分
主题帖子积分
专家等级:结帖率:28%
主题帖子积分
助理工程师, 积分 1266, 距离下一级还需 734 积分
助理工程师, 积分 1266, 距离下一级还需 734 积分
程序:[plain]
/************************************&&& & 标题:死区互补PWM&&& & 软件平台:IAR for ARM6.21&&& & 硬件平台:stm32f4-discovery&&& & 主频:168M&&&&& & 描述:三对死区互补PWM、一路普通PWM&&& && && & PE8 ----- TIM1_CH1N&&& && && & PE9 ----- TIM1_CH1&&& && && & PE10 ----- TIM1_CH2N&&& && && & PE11 ----- TIM1_CH2&&& && && & PE12 ----- TIM1_CH3N&&& && && & PE13 ----- TIM1_CH3&&& && && & PE14 ----- TIM1_CH4&&& && && & author:小船&&& & data:&&*************************************/&&&&#include &stm32f4xx.h&& &&&void main ()&&{& &&&&&&&SCB-&AIRCR = 0x05FA0000 | 0x400;&&//中断优先级分组 抢占:响应=3:1&&& & &&RCC-&AHB1ENR |= (1&&4); //打开GPIOE时钟&&&&GPIOE-&MODER |= 0X2AAA0000;//PE8、9、10、11、12、13、14第二功能&&& && &&&//推挽输出&&&&GPIOE-&OSPEEDR |= 0x3fff0000;//速度100m&&&&GPIOE-&PUPDR |= 0x;//上拉& & & & &&//PE8、9、10、11、12、13、14第二功能AF1&&&&GPIOE-&AFR[1] |= 0x;&&& & &&RCC-&APB2ENR |= (1&&0); //打开TIM1时钟&&&&TIM1-&PSC = 167; //对时钟168M进行168分频,使得计数频率为1M&&&&TIM1-&ARR = 10000;&&//周期10ms&&&&TIM1-&EGR |= 1; //产生一次更新事件&&& & &&TIM1-&CCMR1 |= 0x6060;//PWM模式1&&&&TIM1-&CCMR2 |= 0x6060;//PWM模式1&&& & &&TIM1-&CCR1 = 8000;//设置占空比&&&&TIM1-&CCR2 = 6000;&&&&TIM1-&CCR3 = 4000;&&&&TIM1-&CCR4 = 2000;&&& & &&TIM1-&CCER |= 0x1//使能比较输出&&& & &&TIM1-&CCMR1 |= 0x0808;//启动预装载&&&&TIM1-&CCMR2 |= 0x0808;&&& & &&TIM1-&BDTR|=1&&15;& & // 刹车使能位置1,开启所有输出通道&&&&TIM1-&BDTR|=0xCD;& &&&// 死区时间设定&&&&TIM1-&CR1 |= 1; //开始计时&&&&&&while(1)&&&&{&&&&};&&}&&
主题帖子积分
助理工程师, 积分 1290, 距离下一级还需 710 积分
助理工程师, 积分 1290, 距离下一级还需 710 积分
主题帖子积分
专家等级:结帖率:60%
主题帖子积分
助理工程师, 积分 1290, 距离下一级还需 710 积分
助理工程师, 积分 1290, 距离下一级还需 710 积分
死区互补PWM跟通用定时器的PWM配置差异不大,只是需要设置多CCER寄存器中的几个位以及刹车与死区寄存器BDTR
主题帖子积分
主题帖子积分
专家等级:结帖率:75%
主题帖子积分
提示: 作者被禁止或删除 内容自动屏蔽
主题帖子积分
助理工程师, 积分 1290, 距离下一级还需 710 积分
助理工程师, 积分 1290, 距离下一级还需 710 积分
主题帖子积分
专家等级:结帖率:60%
主题帖子积分
助理工程师, 积分 1290, 距离下一级还需 710 积分
助理工程师, 积分 1290, 距离下一级还需 710 积分
(ARR的值)周期=(PSC+1)* ARR / TIMx时钟
主题帖子积分
助理工程师, 积分 1293, 距离下一级还需 707 积分
助理工程师, 积分 1293, 距离下一级还需 707 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
助理工程师, 积分 1293, 距离下一级还需 707 积分
助理工程师, 积分 1293, 距离下一级还需 707 积分
寄存器还需要怎么配置啊,怎么感觉是直接拿来用就可以了。
主题帖子积分
中级工程师, 积分 4263, 距离下一级还需 737 积分
中级工程师, 积分 4263, 距离下一级还需 737 积分
主题帖子积分
专家等级:结帖率:30%打赏:0.00受赏:15.00
主题帖子积分
中级工程师, 积分 4263, 距离下一级还需 737 积分
中级工程师, 积分 4263, 距离下一级还需 737 积分
程序: view plaincopy
能看懂一些,还需要楼主讲得再详细一些
不过还是得谢谢
主题帖子积分
资深工程师, 积分 10437, 距离下一级还需 9563 积分
资深工程师, 积分 10437, 距离下一级还需 9563 积分
主题帖子积分
专家等级:结帖率:91%
主题帖子积分
资深工程师, 积分 10437, 距离下一级还需 9563 积分
资深工程师, 积分 10437, 距离下一级还需 9563 积分
配置步奏居然这么复杂啊
主题帖子积分
中级技术员, 积分 273, 距离下一级还需 27 积分
中级技术员, 积分 273, 距离下一级还需 27 积分
主题帖子积分
专家等级:结帖率:88%
主题帖子积分
中级技术员, 积分 273, 距离下一级还需 27 积分
中级技术员, 积分 273, 距离下一级还需 27 积分
在stm32的互补对称的PWM里面:
Re-directing OCxREF to OCx or OCxN
In output mode (forced, output compare or PWM), OCxREF can be re-directed to the OCx
output or to OCxN output by configuring the CCxE and CCxNE bits in the TIMx_CCER
This allows you to send a specific waveform (such as PWM or static active level) on one
output while the complementary remains at its inactive level. Other alternative possibilities
are to have both outputs at inactive level or both outputs active and complementary with
dead-time.
在输出模式下(强置、输出比较或PWM),通过配置TIMx_CCER寄存器的CCxE和CCxNE位,OCxREF可以被重定向到OCx或者OCxN的输出。 这个功能可以在互补输出处于无效电平时,在某个输出上送出一个特殊的波形(例如PWM或者静态有效电平)。另一个作用是,让两个输出同时处于无效电平,或处于有效电平和带死区的互补输出。
但是不理解什么意思,是不是互补的两个通道OCx和OCxN通过寄存器的配置可以产生一个输出PWm波,一个没有输出呢?谢谢
主题帖子积分
资深技术员, 积分 310, 距离下一级还需 190 积分
资深技术员, 积分 310, 距离下一级还需 190 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
资深技术员, 积分 310, 距离下一级还需 190 积分
资深技术员, 积分 310, 距离下一级还需 190 积分
MARK下先,下次看
技术新星奖章
人才类勋章
沉静之湖泊
发帖类勋章
无冕之王奖章
等级类勋章
时间类勋章
晶莹之水滴
发帖类勋章
精英会员奖章
等级类勋章
技术高手奖章
人才类勋章
时间类勋章

我要回帖

更多关于 stm32f4 tim1 pwm 的文章

 

随机推荐