版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
巡检无人机的软件控制系统设计案例分析目录TOC\o"1-3"\h\u12380巡检无人机的软件控制系统设计案例分析 143791.1软件开发环境简介 1262691.2无人机运动控制程序 290351.3避障系统的程序设计 321281.4无人机的姿态传感器程序设计 4204781.1.1MPU6050驱动程序 4319851.2.2AK8975驱动程序 6290771.2.3MS5611驱动程序 8191651.4无线图像传输控制程序 9236411.1.1OV2640驱动程序 9182031.1.24G模块传输程序 109361.6python上位机软件编写 121.1软件开发环境简介STM32单片机的开发环境通常使用MDK,该开发环境支持多种处理器,开发简单界面简介明了。并且配合可移植的freertos操作系统,对巡检无人机进行编程。下图1.1为KEILMDK启动初始化界面:图1.1MDK启动初始化界面下载器使用的是J-link,使用常用的USB端口与电脑进行连接,通常用来对程序进行仿真或者下载,能很好地支持STM32的仿真和下载。1.2无人机运动控制程序在本课题研究中,遥控器使用的是成品商用遥控器,遥控器主要功能是采集两个摇杆的电阻值,这一电阻是随摇杆位置变化而线性输出的。一个摇杆具有亮度电位器,控制电位计的偏转值,使用单片机的模数转换功能进行ADC转换[38],换算成无人机的控制量,再将所有数据打包,通过空中透传发送给巡检无人机,巡检无人机通过解析PWM/PPM信号,完成相应的姿态变化。图1.2为遥控器模拟图、左摇杆负责控制巡检无人机的前进后退、左右转向动作,右摇杆负责控制无人机的起飞降落、左移右移动作,警报器用来提示附近的障碍物或者进行低压报警,功能按键可以扩展别的功能或者手动打开灯光。图1.2遥控器示意图因为所使用的为成品商用遥控器,故运动控制程序主要围绕遥控信号解析来进行。在本课题的研究中,使用的是PPM信号解析[39]。PWM信号只有单纯的高低电平,无法传输多重信号,控制互不干扰的设备时没问题,但是PWM信号传输缺点也愈发明显,引脚占用数量多,单片机资源消耗严重。PPM信号示意如图1.3,每帧的数据时间总长固定为20毫秒,绿色部分的引导或结束脉冲长度固定不变,低电平脉宽始终在0.5毫秒,通道脉冲(粉红色)宽度最小0.5毫秒,最大1.5毫秒。接收机在接收到信号之后,就会按帧不停发送数据。图1.3PPM信号示意图在程序中使用单片机的中断功能来获得高电平的持续时间,通过定时器获取任意一段时刻的高电平时间,在PPM信号解析中,使用到捕获高电平时间,上升沿触发,下降沿触发。图1.4给出了通用输入定时器捕获输入的软件流程图,在此使用STM32的定时器5,先设置抓取上升沿,在检测到上升沿后,归零当前的计数状态,重新开始计数,再进行抓取下降沿,在抓取到下降沿后,停止计数,计数器的值就是所需值。图1.4定时器输入捕获示意图1.3避障系统的程序设计声波超过20KHz就称为超声波[40],超声波在各个行业得到了广泛的应用。US100超声波模块搜狐县发送一段高频声波,在一段时间后,检测反射波形,计算时间差,在程序中设定声速值,来计算实际距离。图1.5为模块的时序图,从图中得到结果,发射端口发出高频脉宽信号,在经过一段时间的等待至之后,所有的脉冲信号在碰到障碍物后发生反射,通过接收器件进行检测。然后模块通过获得到温度数据,使用软件对数据进行补偿,ECHO输出响应信息,计算发射与接受的时间差。STM32通过使能定时器获得这个偏差值,设定一个偏差值T,声速为V,D为距离,可以得到以下公式:D=其中,声速V取340m/s,T的单位为s。通过上面的公式,可以在程序中计算出当前距离,并且在程序中设定一个变量为安全距离,当无人机距离小于安全距离,无人机巡厅并且报警,安全距离过小,无人机则原理障碍物。图5.5超声波测距时序图1.4无人机的姿态传感器程序设计1.1.1MPU6050驱动程序MPU6050采用IIC通信接口,从传感器中直接读取六轴数据,读取陀螺仪数据需要进行IIC初始化,重置陀螺仪,设置好其他参数。(1)复位寄存器由电源管理寄存器控制,表1.1为电源管理寄存器的详细参数。表1.1电源管理寄存器Register(Hex)Register(Decimal)Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit06B107DEVICE_RESETSLEEPCYCLE-TEMP_DISCLKSEL[2:0]DEVlCE_RGSE=1,重置MPU6050,重置完成后,数据清楚。SLEEP寄存器用来选择是否进入睡眠模式,CIKSET用于选择系统时钟源,如下表1.2所示:表1.2CLKSEL寄存器CLKSEL[2:0]时钟源000使用内部晶振源001PLL,将X轴作为参考010PLL,将Y轴作为参考011PLL,将Z轴作为参考100PLL,外界晶振作为参考101PLL,外接晶振作为参考110保留111将时钟复位,准备下一个状态(2)设置两个传感器的区间由以下寄存器进行配置。陀螺仪的配置寄存器表如下表1.3所示表1.3陀螺仪配置寄存器Register(Hex)Register(Decimal)Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit01B27XG_STYG_STZG_STFS_SEL[1:0]这个寄存器关注FS_SEL[1:0]这两个位了,可以通过这个寄存器设置陀螺仪的量程范围:加速度传感器寄存器如表1.4所示:表1.4加速度传感器寄存器Register(Hex)Register(Decimal)Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit01C28XA_STYA_STZA_STAFS_SEL[1:0]这个寄存器关注AFS_SEL[1:0]两位,用来配置满量程范围:我们一般设置为0,即±2g。(3)其他参数如中断、FIFO、分频寄存器配置,再次不做过多赘述,其中分频寄存器负责陀螺仪的采样频率:采样频率=(4)加速度输出寄存器(0X3B~0X40),具体如表1.5:表1.5加速度寄存器Register(Hex)Register(Decimal)Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit03B59ACCEL_XOUT[15:8]3C60ACCEL_XOUT[7:0]3D61ACCEL_YOUT[15:8]3E62ACCEL_YOUT[7:0]3F63ACCEL_ZOUT[15:8]4064ACCEL_ZOUT[7:0]MPU6050航向角,俯仰角,横滚角三个轴的加速度值,高字节在前,低字节在后,主要存在与在寄存器(0X43~0X48)中,如下表1.6所示:表1.6陀螺仪输出寄存器Register(Hex)Register(Decimal)Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit04367GYRO_XOUT[15:8]4468GYRO_XOUT[7:0]4569GYRO_YOUT[15:8]4670GYRO_YOUT[7:0]4771GYRO_ZOUT[15:8]4872GYRO_ZOUT[7:0]了解到上述所有寄存器,就可以使用主控MCU对姿态数据进行读取,主要使用到下表1.7几个函数:表1.7MPU6050常用函数类型函数名说明MPU6050IIC接口代码MPU_Init()MPU初始化函数MPU_Get_Gyroscope()MPU获取加速度函数MPU_Get_Accelerometer()MPU获取角速度函数DMP移植相关代码MPU_dmp_init()DMP初始化函数mpu_dmp_get_data()DMP数据获取函数1.2.2AK8975驱动程序AK8957磁力计可以采用AD信号读取、SPI协议、IIC协议,鉴于本课题的需求,选用IIC对磁力计进行信号读取,下图1.6为逻辑分析仪抓取的IIC时钟信号与数据线信号。图5.6AK8975逻辑分析仪信号首先是起始操作,SCL信号置为低电平时,IIC协议开始转换,紧接着是设备地址数据,总共九个时钟,在下来时读写标致位,最终是该芯片的应答标志。在图中可以看出前面七个数为0001100,HEX下就是0x0c。如果芯片没有应答信号,那么第九位会显示1。接下来就是STM32发送读取AK8975的芯片寄存器地址,总共九个时钟,前面八个依次是00000000,表示0x00,第九个是0,是由芯片驱动的,表示芯片应答了这个信号。上一步STM32发送了芯片设备地址0x0c,寄存器地址0x00后,接下来MCU传输起始信号,根据上图看到下一个起始信号,然后MCU继续发送AK9875的地址,但是在第八位数据变化为1,表示要开始进行数据读操作,第九位为0表明芯片应答了这个地址,接下来总线上出现了九个时钟,前面八个数据对应的是01001000,转换为16进制代表的是0x48,刚好对应的是AK8975的芯片ID,最后一个时钟信号数为1,是通信协议中的终止信号。至此,已经完成了MCU通过总线向AK8975读取芯片ID,通过修改读取的寄存器地址,就可以完成对所有数据的读取,表1.8为本课题所用到的所有寄存器地址。表1.8AK8975寄存器地址名称地址说明位数WIA00H设备ID号8INFO01H设备信息8ST102H数据位8HXL03HX磁场数据8HXH04H8HYL05HY磁场数据8HYH06H8HZL07HZ磁场数据8HZH08H8ST209H数据位8了解到上述寄存器,通过STM32就可以实现对X、Y、Z轴三轴磁场数据的读写,使用到的主要库函数如表1.9所示:表1.9AK8975所用库函数函数名说明AK8975_Init()AK8975芯片初始化AK8975_Get_Axis()AK8975获取三轴磁场1.2.3MS5611驱动程序MS5611气压计依然使用IIC通信协议读取,通过前面对芯片的介绍可以得知,每个MS5611气压计都会进行出厂校准,并且将校准系数存放在只读寄存器(READPROM)中。在进行一轮数据读取时,首先要重启芯片,也就是在初始化的时候reset一下,这样才能够同步时钟,正确读取校准系数,读取不可修改的内存中的数据,该内存储存了八个HEX数据,第一个为芯片编号数据,后面紧接着为补偿数据。最后一位为CRC校验数据。因为传感器获得的气压数据,温度数据为模拟量,需要进行模数转换,0xd1、0xd2寄存器位分别代表气压与温度的模数转换精度。支持256到4096的转换精度,转换精度越高,转换时间越长具体对应关系如下表所示:表1.10精度与转换时长关系表精度最小值典型值最大值单位40967.48.229.04毫秒20481.722.132.5410241.882.082.285120.951.061.172560.480.540.60由上可知,每次AD转换都需要时间,所以在读取时进行模数转换后,需要延长一段转换时间后在发送读取指令。读取温度时,首先要传输转换指令,等待一段间隔时间后,再获得三个字节的数据。随后还需要进行补偿温度数据根据手册可以得知TEMP=20℃+dT∗TEMPSENSOFF=OFSENS=SENP=D1∗SENS−OFF其中dT为两次温度的差,TEMP为转换得到的实际温度,OFF为实际温度补偿系数,SENS为实际温度灵敏度,P为MCU处理后的实际压强。如果温度过高,还应引入其他参数的计算,在此不做过多讨论。MS5611的数据采集流程图如下图1.7所示:图1.7气压计数据采集流程1.4无线图像传输控制程序1.1.1OV2640驱动程序OV2640摄像头模组共有17个有效引脚,其中3个引脚最为重要,即PCLK、VSYNC、HREF。YSVNC是垂直同步信号;HREF为行同步信号。OV2640首先输出一行的图像数据,再依次输出其他行的图像数据,缓存在主控MCU中,便是一张完整的图片,OV2640模块的图像数据过程如下图1.8所示图1.8OV2640模块图像数据过程在STM32初始化该摄像头模块时,应当先进行DCMI初始化,紧接着需要进行DMA初始化。流程如下所示,连续模式,根据输出时序图1.9设置:DCMI数据通常数据量较大,直接用CPU读取到内存占用时间,所以我们一般采用DMA来搬运,重新设置DMA后,就可以启动捕获图像了。图1.9OV2640时序图OV2640驱动函数与DCMI驱动函数代码如表1.11所示:表1.11摄像头模块驱读取函数函数名称说明SCCB_Init()初始化SCCB接口OV2640_Init()OV系列摄像头模块初始化OV2640_JPEG_Mode()JPEG模式OV2640_RGB565_Mode()RGB565模式OV2640_ImageWin_Set()图像开窗大小设置OV2640_OutSize_Set()图像输出大小设置My_DCMI_Init()DCMI接口初始化DCMI_DMA_Init()DCMIDMA初始化DCMI_Start()DCMI传输启动DCMI_Stop()DCMI传输停止DCMI_IRQHandler()DCMI中断处理1.1.24G模块传输程序SIM900A模块采用串口(UART)方式控制,因此程序中需要首先初始化主控MCU的一路串口。STM32F407共有两路USART,工作方式为全双工异步串行通信,本应用串口一为上位机的通信串口,将串口二作为与SIM900A的通信串口。使用前首先在程序中进行串口的初始化,将串口设置为8位数据模式,一次发送一BYTE的数据,波特率设置为57600,波特率是判断串口通信的速度的标准,含义是一个单位时间内发送的数据量。最后打开串口中断,使能中断,串口就可以正常进行收发数据。串口中断完成后,可以利用AT指令给ESP8266发送数据进行操作,AT指令集在当代通信中有着广泛的应用,命令简单易懂效率高,通过简单的串口进行通信,大大降低了工作量与工作难度。SIM900A的AT指令丰富,可以完成很多功能,在这里我们最主要的使用该模块的GPRS业务,所以主要用到以下几条指令:“AT”指令。“AT”指令应当以“AT”或“at”开头,以回车为结尾。模块应当立即进行相应,当主控MCU对模块发送“AT”后,若返回“OK”,则代表模块处于正常待机模式,否则代表模块异常。“AT+CGDCONT=1,”IP”,”GMNAT””指令设置PDP上下文标志为一,采用TCP/IP协议,接入点为“GMNAT”。如果模块需要接入运营商地址为“10.11.09.08”,则MCU发送“AT+CGDCONT=1,”IP”,”10.11.09.08””。“AT+CLPORT=”TCP”,”PORT””指令用来设定我方通信端口,单片机发送“AT+CLPORT=”TCP”,”1234””代表建立连接连接时,本地端口号为1234。“AT+CIPSTART=”TCP”,”IP”,”PORT””指令可以设定服务器的IP地址与端口,主控MCU发送“AT+CIPSTART=”TCP”,”121.232.341.456”,”8888””代表连接到IP地址为121.232.341.456的服务器8888端口。成功连接后会返回OK。“AT+CIPSEND”指令用来传输信息,在单片机发送这条数据之后,模块返回相应标志,紧接着键入需要发送的信息,最大可以发送1000字节数据,发送完成后,发送十六进制1A即
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026四川长虹民生物流股份有限公司招聘战略采购岗位2人笔试备考试题及答案详解
- 2026江苏常州机电职业技术学院招聘劳务派遣人员3人考试备考题库及答案详解
- 新干县2026年公开选调县城学校及县城周边学校教师【59人】笔试备考题库及答案详解
- 2026新疆喀什大学第二批招聘事业单位人员23人笔试备考题库及答案详解
- 2026四川绵阳市盐亭县川省属公费师范毕业生直接考核招聘8人考试备考试题及答案详解
- 2026江西鹰潭市余江区卫健委招聘40人笔试备考题库及答案详解
- 2026湖北襄阳市保康民安医院招聘2人考试备考题库及答案详解
- 2026中国农业科学院农业质量标准与检测技术研究所质标所招聘编制外人员14人笔试参考题库及答案详解
- 2026秋季福建泉州市洛江区万安第三中心幼儿园招聘教师笔试备考试题及答案详解
- 2026年鹤岗市向阳区法检系统书记员招聘笔试备考试题及答案详解
- 信息系统运维项目投标方案模板
- 2026年《关于用好乡镇(街道)履行职责事项清单的具体措施》宣导课件
- 2026中国功能性食品原料科学认证与消费者认知调研
- 燃气工程档案管理方案
- 成都香城中学高一数学分班考试真题含答案
- 2025年小学诗词大会题库(含答案)
- 急救车司机课件
- 电气自动化专业面试常见问题及应对策略
- 2025年河北省员额检察官遴选考试真题及答案
- 污废水处理工考试试题及答案
- 玻璃钢船舶结构检验规范汇编
评论
0/150
提交评论