赞
踩
目录
主要介绍通用定时器输出比较功能,在GPIO口输出PWM来控制舵机旋转角度和直流电机的转速。调节PWM波,有三个参数:①PWM频率;②占空比;③分辨率。
PWM之前在51单片机中学习过,它相当于D/A转换器,把单片机输出的数字量通过调节PWM的占空比可以模拟出模拟量。常用于电机调速
输出比较模式:
模式 | 描述 |
冻结 | CNT=CCR时,REF保持为原状态 |
匹配时置有效电平 | CNT=CCR时,REF置有效电平 |
匹配时置无效电平 | CNT=CCR时,REF置无效电平 |
匹配时电平翻转 | CNT=CCR时,REF电平翻转 |
强制为无效电平 | CNT与CCR无效,REF强制为无效电平 |
强制为有效电平 | CNT与CCR无效,REF强制为有效电平 |
PWM模式1 | 向上计数:CNT<CCR时,REF置有效电平,CNT≥CCR时,REF置无效电平 向下计数:CNT>CCR时,REF置无效电平,CNT≤CCR时,REF置有效电平 |
PWM模式2 | 向上计数:CNT<CCR时,REF置无效电平,CNT≥CCR时,REF置有效电平 向下计数:CNT>CCR时,REF置有效电平,CNT≤CCR时,REF置无效电平 |
TB6612芯片的硬件电路:
- #include "stm32f10x.h" // Device header
- void PWM_Init(void)
- {
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
-
- //GPIO复用
- // TIM_InternalClockConfig(TIM2);
- // RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
- // GPIO_PinRemapConfig(GPIO_PartialRemap1_TIM2,ENABLE);
- // GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
-
- TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
- TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;
- TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;
- TIM_TimeBaseInitStruct.TIM_Period=100-1;
- TIM_TimeBaseInitStruct.TIM_Prescaler=36-1;
- TIM_TimeBaseInitStruct.TIM_RepetitionCounter=0;
- TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStruct);
-
- TIM_OCInitTypeDef TIM_OCInitStruct;
- TIM_OCStructInit(&TIM_OCInitStruct);
- TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1;
- TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_High;
- TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;
- TIM_OCInitStruct.TIM_Pulse=0;
- TIM_OC2Init(TIM2,&TIM_OCInitStruct);
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
- GPIO_InitTypeDef GPIO_InitStruct;
- GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出
- GPIO_InitStruct.GPIO_Pin=GPIO_Pin_1;
- GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
- GPIO_Init(GPIOA,&GPIO_InitStruct);
-
- TIM_Cmd(TIM2,ENABLE);
- }
- void TIM_SetCCR(uint16_t CCR)
- {
- TIM_SetCompare2(TIM2,CCR);
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。