zhuhongzhous 发表于 2021-7-24 16:24:22

【高级定时器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。
但是使能之后,直接关断了,也不对,想问一下这边是配置有问题吗?

复旦微刘浏 发表于 2021-7-26 09:45:24

BK1和BK2输入或以后做为刹车输入
在刹车禁止时,BK1和BK2的输入不影响ATIM输出
使能后控制了BK1,但检查下BK2的状态
假如只需要BK1来控制刹车,需要把BK2门控
InitStructer3.gatedBrakeSignal_2= FL_ATIM_BREAK2_GATE_LOW;

zhuhongzhous 发表于 2021-7-26 18:18:33

复旦微刘浏 发表于 2021-7-26 09:45
BK1和BK2输入或以后做为刹车输入
在刹车禁止时,BK1和BK2的输入不影响ATIM输出
使能后控制了BK1,但检查下BK ...

多谢,问题已解决,不过貌似芯片手册未写明该部分的配置。

sigerio 发表于 2022-9-23 10:07:04

复旦微刘浏 发表于 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();

顾博文 发表于 2022-9-27 10:14:18

sigerio 发表于 2022-9-23 10:07
在高级定时器初始化的时候直接禁用刹车,然后不配置刹车功能,那么会不会对ATIM的PWM输出功能造成影响啊
...

pwm 没必要用这么复杂的定时器做啊。换个简单点的,有例程的就好了。
页: [1]
查看完整版本: 【高级定时器ATIM】高级定时器的刹车功能咨询