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

news/2024/6/3 18:12:02 标签: stm32, 单片机, 嵌入式硬件

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

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

总体思路

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

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

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

1. 电调说明注意事项

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

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
这个图是在进行油门校准和正常工作的过程通过提示音判断每个过程是否成功,在实际使用的时候具有很好的提示作用。

注意以下问题:

  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波形。

在这里插入图片描述
校准大占空比,即大油门波形。
在这里插入图片描述
设定小占空比,即小油门波形。

最后连接上电调,既可以工作,可以看到校准完油门之后,根据程序转速在逐渐变化。


http://www.niftyadmin.cn/n/297449.html

相关文章

Spring中使用注解注入Bean的常用方法

在Spring框架中,有多种方式可以将Bean注入到应用程序中。其中最常用的方式之一是使用注解。使用注解注入Bean可以使代码更加简洁,同时也可以提高代码的可读性和可维护性。本文将介绍Spring中使用注解注入Bean的方法,并提供一些代码实例。 注…

第二章--第二节--自然语言处理(NLP)

一、引言 自然语言处理(NLP)是人工智能领域的重要分支,旨在让计算机能够理解、分析、生成人类语言。随着大数据和深度学习技术的快速发展,NLP在文本分类、情感分析、机器翻译等方面取得了巨大进展。本文将介绍NLP的基本任务、技术和应用,并探讨NLP在ChatGPT等智能对话系统…

校园网自动登陆(河南科技学院)

1. 介绍 河南科技学院校园网自动登陆(新乡的很多系统相似,可能也可以用?),java版。可以实现电脑,路由器,软路由的自动认证wifi,后续会上传docker版本的。 源码地址 github:https://…

Misc小总结

Misc分类 个人认为Misc中的题目可分为七大类,图片隐写,音视频隐写,其它隐写(PPT、word文档等隐写),压缩包破解,流量分析,取证,编码或密码。这里面涉及的知识点当然是很多的,有很多你…

Python 爬虫学习路线

Python 爬虫是一种利用编程技术自动获取互联网上的数据的方法。它在信息采集、数据分析、网站监测等方面具有重要的应用价值。下面是一个关于 Python 爬虫的学习路线,以帮助初学者逐步掌握相关知识和技能。 Python 基础知识:首先,你需要熟悉…

【WebGIS初学到入职】第二阶段的小结

一、前言 2021年12月,我进行了【WebGIS初学到入职】第一阶段的小结,如今,一年半过去了。我完成了毕业设计,平缓得通过了岗位的试用期,而且作为我所在部门唯一的前端开发,参与了越来越多的工作项目。 同时…

MySQL【存储过程与存储函数】

#第15章_存储过程与存储函数 #0.准备工作 CREATE DATABASE dbtest15; USE dbtest15; CREATE TABLE employees AS SELECT * FROM atguigudb.employees; CREATE TABLE departments AS SELECT * FROM atguigudb.departments; SELECT * FROM employees; SELECT * FROM depar…

密码学:公钥密码.(非对称密码)

密码学:公钥密码. 公钥密码 (Public Key Cryptography),又称为非对称密码,其最大特征是加密和解密不再使用相同的密钥,而使用不同的密钥。使用者会将一个密钥公开,而将另一个密钥私人持有,这时这两个密钥被…