基于STM32的自由度云台运动姿态控制系统

目录
设计报告撰写内容 2
一、设计要求 2
1、掌握 MEMS 传感器 MPU6050 的应用方法; 2
3、二自由度云台运动姿态控制系统设计。 2
二、设计方案(要求给出详细的设计思路及其必要的论证) 2
1、硬件设计 3
1)电源系统 3
2)数字控制器 4
3)角度测量传感器 4
4)执行机构 5
5)系统原理总体框图 5
2、软件设计 7
1)主函数 8
2)姿态角数据采集与处理 8
3)角度控制算法 9
三、设计内容(包括具体的原理和电路,相关的硬件设计和软件程序等,可以结合图、表等形式说明,分析) 9
1、硬件实现 9
1 )STM32 最小系统 9
2)电源系统设计 10
3)光电隔离 11
4)系统电气连接图 11
2、软件实现 12
1)PWM 信号输出配置程序 12
2)角度数据包的解算算法 13
3)数字 PID 控制算法 16
1 )  u ( 16
4)中断服务程序 20
四、调试结果分析及结论 21
1)程控姿态控制系统 21
2)恒值姿态控制系统 23
3)作品实物图 25
五、指导教师评语及学生成绩 26
设计报告撰写内容
一、设计要求
1、掌握 MEMS 传感器 MPU6050 的应用方法;
2、掌握 STM32 系统应用,脉冲宽度调制(PWM)信号控制舵机的方法;
3、二自由度云台运动姿态控制系统设计。
二、设计方案(要求给出详细的设计思路及其必要的论证)
按照控制系统中输入量的变化规律,二自由度云台运动姿态控制系统可设计为程控姿态控制系统和恒值运动姿态控制系统。其中程控姿态控制系统的输入量是按预定规律,随时间变化的函数,该种系统可用于飞行器姿态角的控制,对其设计要求系统的响应迅速,准确度高。而恒值姿态控制系统的输入量是一个固定常值,即运动姿态不受外界载体运动的干扰而维持恒定角度,该种系统可应用在航拍无人机上的自稳云台上,对其的设计要求系统的抗干扰能力强。因此,该设计题目中对两种系统分别进行设计研究。
控制系统的设计包括硬件设计和软件设计两大部分,程控姿态控制系统和恒值姿态控制系统的区别主要体现在输入量的变化规律不同,需采用不同的参数进行调试,因此两者的硬件基础和软件基本框架大致相似,均可统一设计。
1、硬件设计
硬件系统主要包括电源系统、数字控制器系统、角度测量传感器、执行机构等部分,通过对各部分进行合理的器件选型和方案制定,从而组成整个系统。
1)电源系统
电源部分主要功能是为系统中的其他部分提供合适的供电电压,工程中常用的供电方案有如下两种。
方案一:使用 220V 交流电作为系统总的电源输入,通过 AC-DC 转换模块得到需要的较高电压的直流电源,再通过 DC-DC 稳压模块分别得到其他任意值的直流电压。该种供电方式适用于固定的设备,输出电流大,负载能力强,不足之处是体积较大,不灵活。
方案二:使用可充电电池供电。根据系统所需的动力电压和系统功耗分别选取相应的电池电压和电池容量。通过 DC-DC 稳压模块分别得到其他任意值的直流电压。该种供电方式体积小重量轻,方便灵活,适用于需要移动的系统。缺点是电池成本较高,且使用寿命有限。
由于该姿态角控制系统仅用于原理验证说明,功耗低,体积小,故以上两种方案均可使用, 考虑成本和使用范围等方面因素,决定使用方案一,即用开关电源将 220V 交流电转化为 12V 直流电为系统供电。
2)数字控制器
数字控制器是系统的关键组成部分,通过对其编程可以实现复杂的控制算法,控制执行机构动作,进而实现系统功能,因此控制器的选取在一定程度上决定系统的性能。控制器的选取一般应考虑其运行速度,外设资源,开发的难易程度等方面。目前较常用的数字控制器有以下几种:
方案一:51 单片机。STC89C51 单片机价格便宜,但运算速度较慢,内部资源较少,功能单一,逐渐被市场淘汰。而增强型的 51 单片机 STC12C5A,较 STC89C51 在性能方面有很大改善,
16 位字长,运行频率 35MHz,同时内部自带 60K FLASHROM,而且 STC 系列单片机支持串口程序烧写,对开发设备的要求很低,开发时间也大大缩短,对于有一定编程基础的人较容易使用。
方案二:STM32 单片机。STM32F103 系列单片机基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的 ARM Cortex-M3 内核,32 位字长,时钟频率达到 72MHz,同时功耗较低。内部自带 12 位 ADC 单元,6 通道 DMA,多达 8 个定时器,以及强大灵活的特定控制接口。控制和计算功能十分强大,是同类产品中性价比较高的产品,但系统开发需要有较强的编程能力和微机硬件基础。
方案三:Arduino Uno 控制器。Arduino 是一款便捷灵活、方便上手的开源电子平台,包含硬件(各种型号的 Arduino 板)和软件(Arduino IDE)。硬件部分是可以用来做电路连接的 Arduino 电路板;软件是 Arduino IDE,即在计算机中的程序开发环境。只要在 IDE 中通过简单的语言编写程序代码,将程序上传到 Arduino 电路板后,电路板便执行相关的操作。该控制器几乎不需要任何编程基础,适用于简单的机电控制系统。
综上所述,为了达到更好的控制效果,选用 STM32F103 单片机作为控制器,通过软件编程实现控制算法,达到姿态角控制的目的。
本文转载自:http://www.biyezuopin.vip/onews.asp?id=16522

#include "H_define.h"

#if __DELAY

static u8  fac_us=0;//us延时倍乘数			   
static u16 fac_ms=0;//ms延时倍乘数,在ucos下,代表每个节拍的ms数

//初始化延迟函数
//当使用ucos的时候,此函数会初始化ucos的时钟节拍
//SYSTICK的时钟固定为HCLK时钟的1/8
//SYSCLK:系统时钟
void delay_init(u8 SYSCLK)
{

 	SysTick->CTRL&=~(1<<2);	//SYSTICK使用外部时钟源	 
	fac_us=SYSCLK/8;		//不论是否使用ucos,fac_us都需要使用
	    

	fac_ms=(u16)fac_us*1000;//非ucos下,代表每个ms需要的systick时钟数   
}								    
//延时nus
//nus为要延时的us数.		    								   
void delay_us(u32 nus)
{		
	u32 temp;	    	 
	SysTick->LOAD=nus*fac_us; //时间加载	  		 
	SysTick->VAL=0x00;        //清空计数器
	SysTick->CTRL=0x01 ;      //开始倒数 	 
	do
	{
		temp=SysTick->CTRL;
	}
	while((temp&0x01)&&!(temp&(1<<16)));//等待时间到达   
	SysTick->CTRL=0x00;       //关闭计数器
	SysTick->VAL =0X00;       //清空计数器	 
}
//延时nms
//注意nms的范围
//SysTick->LOAD为24位寄存器,所以,最大延时为:
//nms<=0xffffff*8*1000/SYSCLK
//SYSCLK单位为Hz,nms单位为ms
//对72M条件下,nms<=1864 
void delay_ms(u16 nms)
{	 		  	  
	u32 temp;		   
	SysTick->LOAD=(u32)nms*fac_ms;//时间加载(SysTick->LOAD为24bit)
	SysTick->VAL =0x00;           //清空计数器
	SysTick->CTRL=0x01 ;          //开始倒数  
	do
	{
		temp=SysTick->CTRL;
	}
	while((temp&0x01)&&!(temp&(1<<16)));//等待时间到达   
	SysTick->CTRL=0x00;       //关闭计数器
	SysTick->VAL =0X00;       //清空计数器	  	    
} 
			 


#endif













物联沃分享整理
物联沃-IOTWORD物联网 » 基于STM32的自由度云台运动姿态控制系统

发表评论