查看: 5545|回复: 2

ATIM高级定时器输出PWM

[复制链接]

4

主题

8

帖子

54

积分

中级工程师

Rank: 2

积分
54
发表于 2021-5-18 10:26:47 | 显示全部楼层 |阅读模式
1、如果不要刹车功能的PWM输出,是不是刹车功能初始化函数“MF_ATIM_BDTRMode_Init();”可以去掉
2、按例程的方法配置得到的PWM频率是fpwm=8M/(1+1)/(0x999+1)=2458HZ?,分辨率是0-0x999U?
void MF_Config_Init(void)
{
    /*FUNCTION CALL*/
     MF_ATIM_TimerBase_Init();
     MF_ATIM_BDTRMode_Init();
     MF_ATIM_Channel1_Init();
}
void MF_ATIM_TimerBase_Init(void)
{
    /*IO CONFIG*/
    FL_ATIM_InitTypeDef    TimerBaseInitStruct;
    TimerBaseInitStruct.clockSource = FL_RCC_ATIM_CLK_SOURCE_APB2CLK;
    TimerBaseInitStruct.prescaler = (uint16_t)1;
    TimerBaseInitStruct.counterMode = FL_ATIM_COUNTER_DIR_UP;
    TimerBaseInitStruct.autoReload = 0x999U;
    TimerBaseInitStruct.autoReloadState = FL_DISABLE;
    TimerBaseInitStruct.clockDivision = FL_ATIM_CLK_DIVISION_DIV1;
    TimerBaseInitStruct.repetitionCounter = 0;
    FL_ATIM_Init(ATIM,&TimerBaseInitStruct );
}
void MF_ATIM_BDTRMode_Init(void)
{


    FL_GPIO_InitTypeDef    GPIO_InitStruct;
    FL_ATIM_BDTR_InitTypeDef    BDTRModeInitStruct;


    GPIO_InitStruct.pin = FL_GPIO_PIN_6;
    GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
    GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
    GPIO_InitStruct.pull = FL_DISABLE;
    GPIO_InitStruct.remapPin = FL_DISABLE;
    FL_GPIO_Init( GPIOD, &GPIO_InitStruct );


    GPIO_InitStruct.pin = FL_GPIO_PIN_11;
    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( GPIOD, &GPIO_InitStruct );


    BDTRModeInitStruct.OSSRState = FL_ATIM_OSSR_DISABLE;
    BDTRModeInitStruct.OSSIState = FL_ATIM_OSSI_DISABLE;
    BDTRModeInitStruct.lockLevel = FL_ATIM_LOCK_LEVEL_OFF;
    BDTRModeInitStruct.deadTime = 0x64;
    BDTRModeInitStruct.breakState = FL_DISABLE;
    BDTRModeInitStruct.breakFilter = FL_ATIM_BREAK_FILTER_DIV1;
    BDTRModeInitStruct.breakPolarity = FL_ATIM_BREAK_POLARITY_HIGH;
    BDTRModeInitStruct.automaticOutput = FL_DISABLE;
    BDTRModeInitStruct.gatedBrakeSignal_1 = FL_ATIM_BREAK1_GATE_AUTO;
    BDTRModeInitStruct.gatedBrakeSignal_2 = FL_ATIM_BREAK2_GATE_AUTO;
    BDTRModeInitStruct.brakeSignalCombined = FL_ATIM_BREAK_COMBINATION_OR;
    FL_ATIM_BDTR_Init(ATIM,&BDTRModeInitStruct );
}

void MF_ATIM_Channel1_Init(void)
{


    FL_GPIO_InitTypeDef    GPIO_InitStruct;
    FL_ATIM_OC_InitTypeDef    defaultInitStruct;
    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_DISABLE;


    FL_GPIO_Init( GPIOB, &GPIO_InitStruct );


    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 );


    defaultInitStruct.OCMode = FL_ATIM_OC_MODE_PWM1;
    defaultInitStruct.OCNState = FL_ENABLE;
    defaultInitStruct.OCPolarity = FL_ATIM_OC_POLARITY_NORMAL;
    defaultInitStruct.OCNPolarity = FL_ATIM_OC_POLARITY_NORMAL;
    defaultInitStruct.OCFastMode = FL_DISABLE;
    defaultInitStruct.OCPreload = FL_DISABLE;
    defaultInitStruct.compareValue = 0x500U;
    defaultInitStruct.OCIdleState = FL_ATIM_OC_IDLE_STATE_HIGH;
    defaultInitStruct.OCETRFStatus = FL_DISABLE;
    defaultInitStruct.OCNIdleState = FL_ATIM_OCN_IDLE_STATE_HIGH;


    FL_ATIM_OC_Init(ATIM,FL_ATIM_CHANNEL_1,&defaultInitStruct );
}





回复

使用道具 举报

35

主题

109

帖子

1518

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1518
发表于 2021-5-19 10:38:46 | 显示全部楼层
1 刹车禁止后就不需要MF_ATIM_BDTRMode_Init()了
2 这个地方写的是有点怪,本意是传入999,ARR为1000,但是例程是通过魔方配置变成了0x999。后面例程会修改。
回复

使用道具 举报

4

主题

8

帖子

54

积分

中级工程师

Rank: 2

积分
54
 楼主| 发表于 2021-5-20 17:51:40 | 显示全部楼层
PWM的频率那样计算没错对吧
回复

使用道具 举报

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

本版积分规则

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