stm32f4,pwm控制电机自己的疑惑
来源:互联网 发布:文件数据库 编辑:程序博客网 时间:2024/05/24 01:51
这是一个pwm的原理图,对于pwm其实就是一个定时器自我计数,并与我们自己设定的值比较,最终得出高低电平,从而产生有规律的波形
其中ARR是计数的最大值,CCRX是我们自己设定的比较值
定时器pwm有向上,向下计数,有pwm1,pwm2模式,有输出极性高低的选择
1.配置rcc
2.配置gpio复用为定时器
3.设置定时器pwm的模式并使能
(1)PWM模式1- 在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为有效电平,否则为无效电平;
在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为无效电平,否则为有效电平。
PWM模式2- 在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为无效电平,否则为有效电平;
在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为有效电平,否则为无效电平。
(2)有效电平是通过TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_x来设置的,x可以为high,也可以为low
我自己的疑惑是,我设定的TIM_SetCompare1(TIM14,3000); 很高,但是电机却转的很慢,当我尝试把TIM_SetCompare1(TIM14,200); 时
我电机就变快了,这就是因为pwm模式的设定出了问题
void TIM14_PWM_Init(u32 arr,u32 psc)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14,ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
GPIO_PinAFConfig(GPIOA,GPIO_PinSource7,GPIO_AF_TIM14);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOA,&GPIO_InitStructure);
TIM_TimeBaseStructure.TIM_Prescaler=psc;
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//我选择了向上计数
TIM_TimeBaseStructure.TIM_Period=arr;
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM14,&TIM_TimeBaseStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;//选择了pwm1模式
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;//输出极性是低电平
TIM_OC1Init(TIM14, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM14, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM14,ENABLE);
TIM_Cmd(TIM14, ENABLE);
}
//我选择了向上计数
//选择了pwm1模式
//输出极性是低电平
当我输出较大的设定值ccrx,那么以为是pwm1,向上计数,所以当cnt<ccrx时为有效电平,而且我选择的输出极性是低电平
所以,当cnt<ccrx输出有效,输出为低电平,低电平对我的电机驱动是无效的,我需要的是高电平驱动,那么我设置了较高的ccrx
就会是的低电平占的比例大,那么电机就转的慢了
- stm32f4,pwm控制电机自己的疑惑
- pwm对电机的控制,积累中。。。
- PWM控制电机
- PWM控制电机
- 浅谈PWM控制电机
- pwm 控制 步进电机 小车
- 电机控制PWM(MCPWM)
- 51单片机PWM控制电机
- Pixhawk控制电机命令pwm源码详解
- 树莓派pwm控制无刷电机
- PWM脉冲数控制步进电机
- 定时器3控制PWM的输出脉冲_步进电机的控制
- 8_陀螺仪MPU6050和PWM控制在STM32F4-Discovery开发板上的实现
- 基于51单片机实现的电机PWM控制及测速(Proteus仿真)
- arm9 mini2440 pwm 控制直流无刷电机
- STM32F0 TIM17配置生成PWM控制步进电机
- 步进电机的控制
- 电机的MCPWM控制
- Linux服务器提示No space left on device错误解决方法
- leetcode[Minimum Moves to Equal Array Elements]
- iOS 自定义相册
- php redis的应用
- div中的内容垂直居中的五种方法
- stm32f4,pwm控制电机自己的疑惑
- 机器视觉系统光源选型技巧及应用案例
- 任意长度的十进制数转为二进制、十六进制,和大数除法算法(只有小半份)
- 设计模式学习—责任链模式(Chain of Responsibility Design Pattern)
- Android源码大全
- 关于 nodejs 自定义事件
- springmvc之上传文件
- Erlang入门教程
- C语言正则表达式详解 regcomp() regexec() regfree()详解