赞
踩
亲测可用的例程
链接:https://pan.baidu.com/s/1MwcWBU15Z7YJ3Dz0mA15ew
提取码:1234
stm32f103c8t6,
好盈X-Rotor 40A,
一个淘宝大疆电机
怎么用stm32初始化电调
实验设备:好盈X-Rotor 40A电调
实验思路:模拟遥控器的动作去初始化电调,遥控器初始化电调的方法如下图
实验方法:
1.用stm32模拟遥控器的最高油门(输出脉宽为2ms的pwm波)(此时电调不上电)。
2.给电调上电(等待电机发出哔-哔-两声后)
3.再用stm32模拟遥控器的最低油门(输出脉宽为1ms的pwm波)。(此时电调长哔——
一声)
这样电调初始化(电调解锁,电调行程校准)就完成了。
实验操作:使用按键控制pwm的脉宽,来模拟遥控器的油门推杆
1>按下key0,使pwm的脉宽为2ms。
2>给电调上电(等待电机发出哔-哔-两声后)
3>按下key1,使pwm的脉宽为1ms。(此时电调长哔—— 一声)
这样电调初始化(电调解锁,电调行程校准)就完成了。
参考代码如下(仅供参考,不可直接copy)
例一(pwm初始化时,选择pwm2模式+高电平有效)
unsigned char key; delay_init(); //延时函数初始化 LED_Init(); //LED端口初始化 TIM3_PWM_Init(19999,71); //50hz, 19999,71 TIM3_PWM_Init(arr,psc); //arr:自动重装载寄存器的值,psc:预分频系数 KEY_Init(); delay_ms(100); while(1) { key=KEY_Scan(0); //得到键值 if(key) { switch(key) { case KEY1: TIM_SetCompare2(TIM3,18997); //1000us,18997 //TIM_SetCompare2(TIMx,ccr); //ccr:捕获比较寄存器的值 //当19999-18997=1002,即arr-ccr=1002时,脉宽为1ms GPIO_ResetBits(GPIOC,GPIO_Pin_13); //小灯快闪两次,标志key1按下 delay_ms(100); GPIO_SetBits(GPIOC,GPIO_Pin_13); delay_ms(100); GPIO_ResetBits(GPIOC,GPIO_Pin_13); delay_ms(100); GPIO_SetBits(GPIOC,GPIO_Pin_13); break; case KEY0: TIM_SetCompare2(TIM3,17997); //2000us,17997 //当19999-18997=2002,即arr-ccr=2002时,脉宽为2ms GPIO_ResetBits(GPIOC,GPIO_Pin_13); //小灯常量 ,key0按下 break; } }
例二(pwm初始化时,选择pwm1模式+高电平有效)
unsigned char key; delay_init(); //延时函数初始化 LED_Init(); //LED端口初始化 TIM3_PWM_Init(19999,71); //50hz, 19999,71 TIM3_PWM_Init(arr,psc); //arr:自动重装载寄存器的值,psc:预分频系数 KEY_Init(); delay_ms(100); while(1) { key=KEY_Scan(0); //得到键值 if(key) { switch(key) { case KEY1: TIM_SetCompare2(TIM3,1003); //1000us //TIM_SetCompare2(TIMx,ccr); //ccr:捕获比较寄存器的值 GPIO_ResetBits(GPIOC,GPIO_Pin_13); //小灯快闪两次,标志key1按下 delay_ms(100); GPIO_SetBits(GPIOC,GPIO_Pin_13); delay_ms(100); GPIO_ResetBits(GPIOC,GPIO_Pin_13); delay_ms(100); GPIO_SetBits(GPIOC,GPIO_Pin_13); break; case KEY0: TIM_SetCompare2(TIM3,2003); //2000us GPIO_ResetBits(GPIOC,GPIO_Pin_13); //小灯常量 ,key0按下 break; } }
以上两组代码的区别仅仅在于**函数TIM_SetCompare2(TIMx,ccr)**中 ccr(捕获比较寄存器的值不同)
在WM初始化函数中可定义:
PWM1模式:当CNT计数器的值<捕获比较寄存器的值时,PWM输出有效电平。
高电平有效:有效电平为高电平。
PWM2模式:当CNT计数器的值>捕获比较寄存器的值时,PWM输出有效电平。
低电平有效:有效电平为低电平。
以下时在下学习pwm初始化时常看的几张图:
上图中TIM_Pulse=ccr捕获比较寄存器的值
先说TIM_ARRPreloadConfig设置为DISABLE 和ENABLE的问题,他的作用只是允许或禁止在定时器工作时向ARR的缓冲器中写入新值,以便在更新事件发生时载入覆盖以前的值。在开始初始化的时候你已经把" TIM_TimeBaseStructure.TIM_Period=2000; //ARR的值 ",后来也一直是这个值,原因是你没有编写中断服务函数或者你在中断服务函数中根本就没有给ARR缓冲器重新写入新值,所以设置为DISABLE 和ENABLE都没有影响。
那么如果后来也一直是这个值,不写入新值的话,这句话是不是就可以不用写了,我觉得可以不用写。
原文链接:https://blog.csdn.net/jpaekeo/article/details/64906477
仓促结束,如有问题,欢迎留言。如果对你有帮助,给咱个赞好吗,老师儿~~~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。