查看: 5461|回复: 4

【高级定时器ATIM】高级定时器的刹车功能咨询

[复制链接]

2

主题

4

帖子

90

积分

中级工程师

Rank: 2

积分
90
发表于 2021-7-24 16:24:22 | 显示全部楼层 |阅读模式
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。
但是使能之后,直接关断了,也不对,想问一下这边是配置有问题吗?

回复

使用道具 举报

34

主题

111

帖子

1542

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1542
发表于 2021-7-26 09:45:24 | 显示全部楼层
BK1和BK2输入或以后做为刹车输入
在刹车禁止时,BK1和BK2的输入不影响ATIM输出
使能后控制了BK1,但检查下BK2的状态
假如只需要BK1来控制刹车,需要把BK2门控
InitStructer3.gatedBrakeSignal_2  = FL_ATIM_BREAK2_GATE_LOW;
回复

使用道具 举报

2

主题

4

帖子

90

积分

中级工程师

Rank: 2

积分
90
 楼主| 发表于 2021-7-26 18:18:33 | 显示全部楼层
复旦微刘浏 发表于 2021-7-26 09:45
BK1和BK2输入或以后做为刹车输入
在刹车禁止时,BK1和BK2的输入不影响ATIM输出
使能后控制了BK1,但检查下BK ...

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

使用道具 举报

6

主题

25

帖子

210

积分

高级工程师

Rank: 3Rank: 3

积分
210
发表于 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();
回复

使用道具 举报

155

主题

847

帖子

4665

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4665
发表于 2022-9-27 10:14:18 | 显示全部楼层
sigerio 发表于 2022-9-23 10:07
在高级定时器初始化的时候直接禁用刹车,然后不配置刹车功能,那么会不会对ATIM的PWM输出功能造成影响啊
...

pwm 没必要用这么复杂的定时器做啊。换个简单点的,有例程的就好了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表