四、程序开发-->2、PWM输出
此次我们主要关注定时器输出PWM波形,首先对IO口进行配置
void GPIO_Configuration(void)
{
//PWM
CW_GPIOA->ANALOG &= ~GPIOx_ANALOG_PIN6_Msk;
CW_GPIOA->AFRL_f.AFR6=6;
CW_GPIOA->DIR &= ~GPIOx_DIR_PIN6_Msk;
}
随后根据参考手册对通用定时器GTIM1进行配置
图1 PWM功能配置
void GTIM1_Configuration(void)
{
GTIM_InitTypeDef GTIM_InitStruct = {0};
// APB1_CLK = 16MHz
GTIM_InitStruct.Mode = GTIM_MODE_TIME;
GTIM_InitStruct.OneShotMode = GTIM_COUNT_CONTINUE;
GTIM_InitStruct.Prescaler = GTIM_PRESCALER_DIV1;
GTIM_InitStruct.ReloadValue = 7;
GTIM_InitStruct.ToggleOutState = DISABLE;
GTIM_TimeBaseInit(CW_GTIM1, >IM_InitStruct);
GTIM_OCInit(CW_GTIM1, GTIM_CHANNEL1, GTIM_OC_OUTPUT_PWM_LOW);
GTIM_SetCompare1(CW_GTIM1, (GTIM_InitStruct.ReloadValue + 1) * 0.1);
GTIM_Cmd(CW_GTIM1, ENABLE);
}
根据经典的分频公式
F=f÷((pcs+1)*(add+1))
在PA05引脚获得如下频率以及不同占空比的PWM方波
图2 PWM:20kHz,50%
图3 PWM:20kHz,90%
图4 PWM:20kHz,20%
图5 PWM:40kHz,50%
图6 PWM:50kHz,50%
图7 PWM:1MHz,50%
图8 PWM:2MHz,50%
图9 PWM:2MHz,10%
经过测定,通过评估板GTIM1设置的PWM输出波形正常,MHz以下时上升下降沿均约在50ns左右,MHz以上上升下降沿约为80ns左右(鉴于受布线影响,实际输出质量应 > 本实验数据)
本帖最后由 皓月光兮非自明 于 2023-8-14 21:17 编辑秦天qintian0303 发表于 2023-8-16 14:04 上升时间还是挺短的,这个和IO口的速度是不是有关
这个跟IO口的硬件设计和软件定义的关系不大,PWM产生机制是由定时器Timer模块内的脉冲宽度调制器操作的,跟IO的设计不相关,是属于Timers的,定时器组只是借用了IO的输出窗口而已,并没有进入IO驱动部分的相关电路,(下面红色是IO内部电路结构,紫色是PWM输出路径,您可以看到PWM输出路径是独立于IO驱动电路之外的)。它这个上升下降时间完全是在于PWM调制器里头的输出比较器起主要作用,所以输出方波的上升/下降时间 = 比较器的输出上升/下降时间 + 线路寄生电容的充放电时间 大概是这么一个关系
本帖最后由 皓月光兮非自明 于 2023-8-18 09:10 编辑