人只要不失去方向,就不会失去自我。
1、任务计划
(1)搜索关于高级定时器写PWM波的资料
(2)完成第二个课题:利用高级定时器产生6路带死区的互补pwm波,占空比40%(拓展:改变有效电平,使得互补的pwm波极性相同);产生的pwm在示波器上显示,并记录相关参数,包括幅值、占空比、频率。
2、任务完成度
(1)翻阅了STM32的库函数指南,中文参考手册,固件库使用手册中文翻译。查找有关高级定时器的定义及概念,还有一些相关函数的应用。
[1]死区:就是在上半桥关断后,延迟一段时间再打开下半桥,或者在下半桥关断后,延迟一段时间再打开下半桥。从而避免功率元件被烧坏,这段延迟时间就是死区。
[2]刹车:就是紧急停止。紧急停止之后进入死区。
刹车输入信号可以将定时器输出信号置于复位状态,或者一个已知状态。
[3]BDTR是刹车和死区寄存器
[4]TIM_BDTRConfig:设置刹车特性、死区时间、锁电平、OSSI、OSSR状态和AOE(自动输出使能)
[5]TIM_BDTRStructInit:把TIM1_BDTRInitStruct中的每一个参数按缺省值填入。
[6]TIM1_BDTRInitStruct结构体定义在“stm32f4xx.tim.h”,它包括
u16 TIM1_OSSRState; //设置在运行模式下非工作状态选项。
u16 TIM1_OSSIState; //设置在运行模式下非工作状态选项。
u16 TIM1_LOCKLevel; //设置了锁电平参数。
u16 TIM1_DeadTIM1; //指定了输出打开和关闭状态之间的延时。
u16 TIM1_Break; //使能或者失能TIM1刹车输入。
u16 TIM1_BreakPolarity; //设置TIM1刹车输入管脚极性
u16 TIM1_AutomaticOutput; //使能或者失能自动输出功能。
u16 TIM1_OSSIState; //设置在运行模式下非工作状态选项。
u16 TIM1_LOCKLevel; //设置了锁电平参数。
u16 TIM1_DeadTIM1; //指定了输出打开和关闭状态之间的延时。
u16 TIM1_Break; //使能或者失能TIM1刹车输入。
u16 TIM1_BreakPolarity; //设置TIM1刹车输入管脚极性
u16 TIM1_AutomaticOutput; //使能或者失能自动输出功能。
[7]对于[6]可以这样设置:
TIM1_BDTRInitTypeDef TIM1_BDTRInitStructure;
TIM1_BDTRInitStructure.TIM1_OSSRState=TIM1_OSSRState_Enable;
TIM1_BDTRInitStructure.TIM1_OSSIState=TIM1_OSSIState_Enable;
TIM1_BDTRInitStructure.TIM1_LOCKLevel=TIM1_LOCKLevel_1;
TIM1_BDTRInitStructure.TIM1_DeadTIM1= 0x05;
TIM1_BDTRInitStructure.TIM1_Break=TIM1_Break_Enable;
TIM1_BDTRInitStructure.TIM1_BreakPolarity = TIM1_BreakPolarity_High;
TIM1_BDTRInitStructure.TIM1_AutomaticOutput=TIM1_AutomaticOutput_Enable;
TIM1_BDTRConfig(&TIM1_BDTRInitStructure);
TIM1_BDTRConfig(&TIM1_BDTRInitStructure);
[8]在转换到IDLE状态时(MOS下降到0),死区被激活。
*同时设置CCxE和CCxNE位将插入死区。
*如存在刹车电路,则至少需要MOE位。
*每一个通道都有一个10位的死区发生器。
*比如一个信号可以产生2路输出的OCx和OCxN。如果为高电平有效:
OCx输出信号与原信号相同,只是它的上升沿相对原信号的上升沿有延迟;
OCxN输出信号与原信号相同,只是它的上升沿相对原信号的上升沿有延迟;
*当然了,若延迟大于当前有效的输出宽度(OCx或者OCxN
),则不会产生相应脉冲。