STM32:利用PWM波控制飞盈电调过程和注意事项

这篇具有很好参考价值的文章主要介绍了STM32:利用PWM波控制飞盈电调过程和注意事项。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

STM32:利用PWM波控制电调过程和注意事项

在进行模型控制的过程中,如四旋翼无人机等,需要用到电机,这些电机需要通过电调来控制电机的转速。在电调模块中带有的说明书一般都是利用遥控器进行控制,有些情况需要自己通过信号控制电调,而非遥控器,这个时候需要用到单片机生成PWM波。

总体思路

电调的型号和种类繁多,但是大部分的原理应该相同,这里面采用FLYCOLOR家的多旋翼无刷电子调速器进行实验,单片机选择的是正点原子的stm32 MINI 开发版,芯片信号为stm32f103rct6。

为了快速控制电调,首先需要一个生成PWM波形的程序,这里面采用的是正点原子中的例程。

例程中的程序是利用TIMER1 定时器生成PWM波来控制指示灯DS0的亮暗过程,首先下载程序可以看出指示灯在逐渐亮灭。因为采用的PA8作为IO口的输出,电调的控制信号可以接在此端口上。这样就有了一个可以生成PWM波形的程序。

1. 电调说明注意事项

看电调的说明书,说明书中会有参数和连接方式等介绍,这些需要注意一下,重点看的是工作过程提示音,

stm32控制电调,单片机&ARM,stm32,单片机,嵌入式硬件

stm32控制电调,单片机&ARM,stm32,单片机,嵌入式硬件
stm32控制电调,单片机&ARM,stm32,单片机,嵌入式硬件
这个图是在进行油门校准和正常工作的过程通过提示音判断每个过程是否成功,在实际使用的时候具有很好的提示作用。

注意以下问题:

  1. 在电调上电的过程中会有整成工作过的提示音。
  2. 在进行油门校准的过程中,如果输出上电的油门处于大油门,那么将会进行大油门的量程设定,然后在听到提示音过后,需要进行小油门的设定,最终听到油门校准成功的设定之后,就可以正常使用了。
  3. 如果上电开始时处于最小油门,则不需要设定,直接就能工作。

2. STM32生成PWM波注意事项

在了解了油门校准的过程后,那么如果对应成PWM波形的控制,注意以下几点:

  1. 在控制电调的过程中,PWM的频率50Hz,即20ms,占空比越高,转速越快,占空比的范围为0.8ms-2.2ms。
  2. 在进行校准的过程中,需要对占空比的波形进行延时,先校准大油门,再校准小油门,保证听到校准成功的提示音听到再进行下一步,在两个油门校准的过程中留好时间。

3. 程序代码

接下来是程序代码:
pwm.c文件

#include "pwm.h"
#include "led.h"
//	 

// PWM 输出初始化
// arr 自动重装值 psc 时钟预分频数
void TIM1_PWM_Init(u16 arr,u16 psc)
{  
	 GPIO_InitTypeDef GPIO_InitStructure;
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	TIM_OCInitTypeDef  TIM_OCInitStructure;

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);// 
 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);  //
	                                                                     	

   //引脚复用,PA8输出TIM1_CH1波形
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //TIM_CH1
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);

	
	TIM_TimeBaseStructure.TIM_Period = arr; //
	TIM_TimeBaseStructure.TIM_Prescaler =psc; //
	TIM_TimeBaseStructure.TIM_ClockDivision = 0; //Tck_tim
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
	TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //

 
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; // 这个模式需要选择PWM1 模式
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //
	TIM_OCInitStructure.TIM_Pulse = 0; //
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //
	TIM_OC1Init(TIM1, &TIM_OCInitStructure);  //

  TIM_CtrlPWMOutputs(TIM1,ENABLE);		

	TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);  //	 
	
	TIM_ARRPreloadConfig(TIM1, ENABLE); //
	
	TIM_Cmd(TIM1, ENABLE);  //
 
   
}

main.c

#include "led.h"
#include "delay.h"
#include "sys.h"
#include "pwm.h"
//ALIENTEK Mini STM32¿ª·¢°å·¶Àý´úÂë8
//PWMÊä³öʵÑé   
//¼¼ÊõÖ§³Ö£ºwww.openedv.com
//¹ãÖÝÊÐÐÇÒíµç×ӿƼ¼ÓÐÏÞ¹«Ë¾

 int main(void)
 {	
	u16 led0pwmval=2900;    
	u8 dir=1;	
	delay_init();	    	 //  
	//LED_Init();		  	//
	TIM1_PWM_Init(57599,25);//=72000/(57599+1)/25=50hz 50Hz
	TIM_SetCompare1(TIM1,5760);	 
	TIM_SetCompare1(TIM1,5760);	
	delay_ms(1500);   // 
	delay_ms(1500);
	 	delay_ms(1500);
	 	delay_ms(1500);
	 	delay_ms(1500);
	 	delay_ms(1500);
	 	delay_ms(1500);
	 	delay_ms(1500);
	 	delay_ms(1500);
	 TIM_SetCompare1(TIM1,2880);	 // 
	 TIM_SetCompare1(TIM1,2880);
	 delay_ms(1500);
	 delay_ms(1500);
	 delay_ms(1500);
	 delay_ms(1500);
	 delay_ms(1500);
	 delay_ms(1500);
	 delay_ms(1500);
	 delay_ms(1500);
	 delay_ms(1500);
	 delay_ms(1500);
	 delay_ms(1500);

	delay_ms(1500);
//	TIM_SetCompare1(TIM1,2900);
   	while(1)
	{
// 		delay_ms(1000);	 
		if(dir)led0pwmval++;
		else led0pwmval--;	 
 		if(led0pwmval>5760)
		{
			dir=0;
			led0pwmval = 2900;
		}
		if(led0pwmval==2900)dir=1;	   					 
		TIM_SetCompare1(TIM1,led0pwmval);	   
	} 
}

注意代码中的输出PWM1模式,然后占空比的大小为led0pwmval/57600,设定中间添加延时,先可以时间长一点,然后根据校准需要的时间进行调整。

4. 波形验证

按照上述惭怍,这样就可以产生所需要的PWM波形。

stm32控制电调,单片机&ARM,stm32,单片机,嵌入式硬件
校准大占空比,即大油门波形。
stm32控制电调,单片机&ARM,stm32,单片机,嵌入式硬件
设定小占空比,即小油门波形。

最后连接上电调,既可以工作,可以看到校准完油门之后,根据程序转速在逐渐变化。文章来源地址https://www.toymoban.com/news/detail-566325.html

到了这里,关于STM32:利用PWM波控制飞盈电调过程和注意事项的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于STM32利用PWM完成呼吸灯的实现

    1.高级控制定时器功能实现框图 其中分为6个板块:①时钟源②控制器 ③时基单元 ④输入捕获 ⑤输出比较 ⑥断路功能 2.pwm的定义 pwm是​​​​​​​一种模拟控制方式,根据相应载荷的变化来调制晶体管栅极或基极的偏置,来实现开关稳压电源输出晶体管或晶体管导通时间

    2024年02月03日
    浏览(43)
  • STM32PWM控制直流电机

    PWM介绍 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用 微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。简单一点,就是对脉冲宽 度的控制 PWM的原理: 假定定时器工作在向上计数 PWM 模式,且当 CNT=CCRx 时输出 1。那么就可以

    2024年02月08日
    浏览(49)
  • STM32输出PWM波控制180°舵机

    时间记录:2024/2/8 (1)脉冲宽度调制 (2)占空比:高电平时间占整个周期时间的比例 (3)STM32通过定时器实现PWM时具有两种模式 PWM1模式:向上计数模式下,CNT当前计数寄存器的值小于CCR比较寄存器的值时输出有效电平,大于时输出无效电平,向下计数模式下,CNT当前计数

    2024年02月21日
    浏览(51)
  • stm32按键控制改变pwm占空比

    每次按下按键改变TIM_Setcompare函数中占空比值即可。 相关io口,占空比调节级数,是否支持连按根据自己需要自行修改。 main.c #include \\\"delay.h\\\" #include \\\"sys.h\\\" #include \\\"pwm.h\\\" #include \\\"stm32f10x_tim.h\\\" #include \\\"key.h\\\" int t=50;//占空比 void key_function(void)  {  static u8 key = 0;  key = KEY_Scan(0); if(key

    2024年02月08日
    浏览(50)
  • 搭建stm32电机控制代码框架(五)——Stm32CubeMx配置PWM

    采样配置完成后,进行PWM的配置。PWM的生成依赖于STM32的TIM1定时器,其功能完备如下图所示,电机控制中主要应用其PWM生成功能。 我们当前阶段的目标是生成占空比为50%的三路PWM,其开关频率为10kHz。 那么开始CubeMx的配置,依据stm32f405数据手册中地址总线部分内容,TIM1是挂

    2024年02月16日
    浏览(58)
  • 学习stm32 pwm 多路舵机的控制(PWM 的频率的理解)

    接着上一节,pwm 的使用,控制多路舵机进行角度旋转和设置。 参考stm32f103x中文说明时钟树如下图 1.当HSI被用于作为PLL时钟的输入时,系统时钟能得到的最大频率是64MHz。 2.对于内部和外部时钟源的特性,请参考相应产品数据手册中“电气特性”章节。 用户可通过多个预分

    2024年02月13日
    浏览(35)
  • STM32第八课:PWM控制直流电机

            TB6612FNG是一款新型驱动器件,能独立双向控制2个直流电机,它具有很高的集成度,同时能提供足够的输出能力,运行性能和能耗方面也具有优势因此在集成化、小型化的电机控制系统中,它可以作为理想的电机驱动器件。                           

    2024年03月24日
    浏览(52)
  • 【STM32基础】第四篇、控制PWM占空比

    目录 第一部分、STM32定时器的基本知识 1、STM32定时器的分类(图片来自野火文档) 2、开发过程中定时器的常用基础功能 3、定时器挂在的总线  第二部分、能用的代码   1、定时器计时代码 2、定时器输出PWM代码 第三部分、总结 1、STM32定时器的分类(图片来自野火文档)  

    2024年02月07日
    浏览(46)
  • STM32第七课:PWM控制SG90舵机

            学习完上一课的PWM控制LED小灯实现呼吸灯的效果,我们就可以进一步学习PWM控制舵机的效果了。PWM控制舵机相信会是一个更有意思的小实验的。          舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。目前在高档

    2024年04月17日
    浏览(34)
  • 搭建stm32电机控制代码框架(四)——单路PWM生成

    STM32中单路PWM的生成一般是基于某一个通用定时器,本次小实验选取TIM2通用定时器,选择PA5作为PWM端口输出。配置步骤如下: 第一步:配置外部晶振与基本的时钟,如下图所示。 (1)选择外部晶振  (2)配置时钟树,如下图所示,TIM2的时钟总线挂在ABP1上,此时时钟源为

    2024年02月07日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包