高级控制定时器(TIM1 和 和 TIM8 )
5.1 TIM1 和 和 TIM8 简介
高级控制定时器(TIM1 和 TIM8)主要用于以下场合:对输入信号进行计数、测量输入信号的脉冲宽度和产生输出波形等。高级定时器具有互补输出功能、死区插入和刹车功能。适用于电机控制。
5.2 TIM1 和 和 TIM8 主要特性
16 位自动装载计数器。(可实现向上计数、向下计数、向上/下计数)
16 位可编程预分频器。(分频系数可配置为 1 到 65536 之间的任意值)
可编程重复计数器
TIM1 最多 6 个通道,TIM8 最多 6 个通道
4 个捕获/比较通道,工作模式为:PWM输出、输出比较、单脉冲模式输出、输入捕获
如下事件发生时产生中断/DMA:
更新事件
触发事件
输入捕获
输出比较
刹车信号输入
死区时间可编程的互补输出
对于 TIM1、TIM8,通道 1、2、3 支持此功能
可通过外部信号控制定时器
多个定时器内部连接在一起,以实现定时器的同步或链接
TIM1_CC5 和 TIM8_CC5 用于比较器消隐
TIM1_CC6 用于 OPAMP1 和 OPAMP2 的输入通道切换
增量(正交)编码器接口:用于追踪运行轨迹和解析旋转方位
霍尔传感器接口:用于三相电机控制
![](https://img-blog.csdnimg.cn/b08d48880df54305be99f378e7cfc665.png)
高级定时器PWM输出程序配置
//使用 TIM1 的CH3(PA5)
void TIM1_PWM_Init(u32 arr,u32 psc)
{
GPIO_InitType GPIO_InitStructure;
TIM_TimeBaseInitType TIM_TimeBaseStructure;
OCInitType TIM_OCInitStructure;
/* TIM3 clock enable */
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_TIM1, ENABLE);
/* GPIOA and GPIOB clock enable */
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOA |
RCC_APB2_PERIPH_AFIO,ENABLE);
GPIO_InitStruct(&GPIO_InitStructure);
/* GPIOA Configuration:TIM3 Channel1, 2, 3 and 4 as alternate function push-pull */
GPIO_InitStructure.Pin = GPIO_PIN_5;
GPIO_InitStructure.GPIO_Mode = GPIO_MODE_AF_PP;
GPIO_InitStructure.GPIO_Current = GPIO_DC_LOW;
GPIO_InitStructure.GPIO_Alternate = GPIO_AF3_TIM1;
GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);
/* Time base configuration */
TIM_TimeBaseStructure.Period = arr;
TIM_TimeBaseStructure.Prescaler = psc;
TIM_TimeBaseStructure.ClkDiv = 0;
TIM_TimeBaseStructure.CntMode = TIM_CNT_MODE_UP;
TIM_InitTimeBase(TIM1, &TIM_TimeBaseStructure);
//pwm通道配置
TIM_OCInitStructure.OcMode = TIM_OCMODE_PWM2;//使用pwm2模式
TIM_OCInitStructure.OutputState = TIM_OUTPUT_STATE_ENABLE;//pwm 输出使能--内部通过这个直接控制了pwm输出,
TIM_OCInitStructure.OutputNState = TIM_OUTPUT_NSTATE_ENABLE;//互补输出使能
// TIM_OCInitStructure.Pulse = Channel1Pulse;
TIM_OCInitStructure.OcPolarity = TIM_OC_POLARITY_LOW;//有效电平
TIM_OCInitStructure.OcNPolarity = TIM_OCN_POLARITY_LOW;//有效空闲电平
TIM_OCInitStructure.OcIdleState = TIM_OC_IDLE_STATE_SET;//空闲电平
TIM_OCInitStructure.OcNIdleState = TIM_OC_IDLE_STATE_RESET;//互补空闲电平
TIM_InitOc3(TIM1, &TIM_OCInitStructure);
TIM_ConfigOc3Preload(TIM1, TIM_OC_PRE_LOAD_ENABLE);
TIM_ConfigArPreload(TIM1, ENABLE);
/* TIM3 enable counter */
TIM_Enable(TIM1, ENABLE);
/* TIM1 Main Output Enable */
TIM_EnableCtrlPwmOutputs(TIM1, ENABLE);//高级定时器需要开启
}
int main(void)
{
vAllOutputPinInit();
TIM1_PWM_Init(1200-1,800-1);//50HZ
while (1)
{
DC12V_WS_EN(1);
TIM_SetCmp3(TIM1,900);//%75占空比
}
}
编译程序下载到芯片用逻辑分析仪可以查看波形---- 输出波形符合程序设计波形
PA5
![](https://img-blog.csdnimg.cn/3debf0e2290443e18f806d13dd8ebd22.png)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)