首先我们要知道互补输出以及死区是什么意思:
互补输出是指,在比较/捕获输出部分,有OCx和OCNx两条通道,两条通道可以输出互补的信号;
死区:当OCx的电平已经从0跳变为1时,OCNx的电平还未发生跳变,会产生一段时间的延迟后再进行跳变,这段延迟的时间我们称为死区时间,主要是为了克服电路中由于元器件产生的时间延迟,比如在H桥控制的正反转电机中。
同时在这个实验中,还使用了刹车/断路功能
使用断路功能时,根据其它控制位(TIMx_BDTR 寄存器中的 MOE、OSSI 和 OSSR 位 以 及 TIMx_CR2 寄存器中的 OISx 和 OISxN 位)修改输出使能信号和无效电平。任何情况下, OCx 和 OCxN 输出都不能同时置为有效电平。即当刹车(断路)功能介入时,OCx和OCNx电平直接变成初始化所设定的高电平或者低电平。
一些寄存器的主要功能
atim.h
tim_ctrldie_ocxn_init();
HAL_TIM_PWM_Init():TIM1定时器的基础初始化
HAL_TIM_PWM_ConfigChannel():配置PWM模式、比较值、输出值
HAL_TIMEx_ConfigBreakDeadTime() :配置刹车功能
Msp函数:配置时钟,NVIC,GPIO
tim_deadtime_cp_pwm_set():设置死区时间和输出比较值
main.c
其中死区时间的计算如下
依据我们给的参数,arr=1000-1,psc=90-1,因此是以1khz为频率计数,并且死区计数为100,比较值为700-1,由此我们算出DT = 2.22us
最后由示波器观察波形
大约是4us/2=2us
当刹车功能接入是,两个信号都变成低电平状态,可惜忘记拍图了。