【高级定时器ATIM】高级定时器的刹车功能咨询
void ATIM_PWM_Init(void){
FL_ATIM_InitTypeDef InitStructer1;
FL_ATIM_OC_InitTypeDef InitStructer2;
FL_ATIM_BDTR_InitTypeDef InitStructer3;
FL_GPIO_InitTypeDef GPIO_InitStruct = {0};
/*----------------------------------GPIO结构体初始化-------------------------------------*/
GPIO_InitStruct.pin = FL_GPIO_PIN_4;
GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
GPIO_InitStruct.pull = FL_DISABLE;
GPIO_InitStruct.remapPin = FL_ENABLE;
FL_GPIO_Init(GPIOB, &GPIO_InitStruct); //CH1
GPIO_InitStruct.pin = FL_GPIO_PIN_2;
GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
GPIO_InitStruct.pull = FL_DISABLE;
GPIO_InitStruct.remapPin = FL_ENABLE;
FL_GPIO_Init(GPIOB, &GPIO_InitStruct); //CH1N
GPIO_InitStruct.pin = FL_GPIO_PIN_11;
GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_OPENDRAIN;
GPIO_InitStruct.remapPin = FL_ENABLE;
FL_GPIO_Init(GPIOD, &GPIO_InitStruct); //BRK1
/*----------------------------------时基结构体初始化------------------------------------*/
InitStructer1.clockSource = FL_CMU_ATIM_CLK_SOURCE_APBCLK;//时钟源选择APB2
InitStructer1.prescaler = 5; //分频系数8000
InitStructer1.counterMode = FL_ATIM_COUNTER_DIR_UP; //向上计数
InitStructer1.autoReload = 999; //自动重装载值1000
InitStructer1.clockDivision = FL_ATIM_CLK_DIVISION_DIV1; //死区和滤波分频
InitStructer1.repetitionCounter = 0; //重复计数
InitStructer1.autoReloadState = FL_ENABLE; //预装载preload使能
FL_ATIM_Init(ATIM, &InitStructer1);
/*------------------------------输出比较结构体初始化------------------------------------*/
InitStructer2.OCMode = FL_ATIM_OC_MODE_PWM1; //输出比较模式PWM1
InitStructer2.OCETRFStatus = FL_DISABLE; //OC1REF不受ETR影响
InitStructer2.OCFastMode = FL_DISABLE; //关闭快速使能
InitStructer2.compareValue = 500; //比较值500
InitStructer2.OCPolarity = FL_ATIM_OC_POLARITY_NORMAL; //OC 高电平有效
InitStructer2.OCPreload = FL_DISABLE; //OC preload 无效
InitStructer2.OCIdleState= FL_ATIM_OC_IDLE_STATE_HIGH; //OC IDLE时为高电平
InitStructer2.OCNIdleState = FL_ATIM_OCN_IDLE_STATE_HIGH; //OCN IDLE时为高电平
InitStructer2.OCNPolarity= FL_ATIM_OCN_POLARITY_NORMAL; //OCN 高电平有效
InitStructer2.OCNState = FL_ENABLE; //使能互补输出通道
InitStructer2.OCState = FL_ENABLE; //使能正向输出通道
FL_ATIM_OC_Init(ATIM, FL_ATIM_CHANNEL_1, &InitStructer2);
/*------------------------------刹车死区结构体初始化-----------------------------------*/
InitStructer3.deadTime = 100; //死区时间配置
InitStructer3.lockLevel = FL_ATIM_LOCK_LEVEL_OFF; //寄存器写保护关闭
InitStructer3.OSSRState = FL_ATIM_OSSR_DISABLE; //OSSR=0
InitStructer3.OSSIState = FL_ATIM_OSSI_DISABLE; //OSSI=0
InitStructer3.breakFilter = FL_ATIM_BREAK_FILTER_DIV1; //刹车信号滤波配置
InitStructer3.breakPolarity = FL_ATIM_BREAK_POLARITY_HIGH; //刹车信号高电平有效
InitStructer3.automaticOutput = FL_DISABLE; //MOE由软件置位
InitStructer3.gatedBrakeSignal_1= FL_ATIM_BREAK1_GATE_AUTO; //刹车信号1不门控
InitStructer3.gatedBrakeSignal_2= FL_ATIM_BREAK2_GATE_AUTO; //刹车信号2不门控
InitStructer3.brakeSignalCombined = FL_ATIM_BREAK_COMBINATION_OR; //刹车信号1和2或
InitStructer3.breakState = FL_DISABLE; //刹车信号禁止
FL_ATIM_BDTR_Init(ATIM, &InitStructer3);
FL_ATIM_Enable(ATIM); //使能定时器
FL_ATIM_EnableALLOutput(ATIM);//主控输出使能
}
该部分程序的刹车输入是指什么呢,禁止刹车信号,BRK1给高和给低都不会关断带死区的互补PWM。
但是使能之后,直接关断了,也不对,想问一下这边是配置有问题吗?
BK1和BK2输入或以后做为刹车输入
在刹车禁止时,BK1和BK2的输入不影响ATIM输出
使能后控制了BK1,但检查下BK2的状态
假如只需要BK1来控制刹车,需要把BK2门控
InitStructer3.gatedBrakeSignal_2= FL_ATIM_BREAK2_GATE_LOW; 复旦微刘浏 发表于 2021-7-26 09:45
BK1和BK2输入或以后做为刹车输入
在刹车禁止时,BK1和BK2的输入不影响ATIM输出
使能后控制了BK1,但检查下BK ...
多谢,问题已解决,不过貌似芯片手册未写明该部分的配置。 复旦微刘浏 发表于 2021-7-26 09:45
BK1和BK2输入或以后做为刹车输入
在刹车禁止时,BK1和BK2的输入不影响ATIM输出
使能后控制了BK1,但检查下BK ...
在高级定时器初始化的时候直接禁用刹车,然后不配置刹车功能,那么会不会对ATIM的PWM输出功能造成影响啊
ATIMConfig();
FL_ATIM_DisableBreak(ATIM);
// ATIM_BDTRMode_Init();
ATIM_PWM_Channel1(); sigerio 发表于 2022-9-23 10:07
在高级定时器初始化的时候直接禁用刹车,然后不配置刹车功能,那么会不会对ATIM的PWM输出功能造成影响啊
...
pwm 没必要用这么复杂的定时器做啊。换个简单点的,有例程的就好了。
页:
[1]