完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
本文是机甲大师机器人控制的系列博客之一。在软件单元测试阶段完成后,进行集成测试。本文内容与功能分析阶段相对应。另外,阅读本文的内容需要一些STM32调试经验。
1 开发阶段 集成测试阶段是开发的最终阶段,会逐个验证功能分析阶段中提出的每一条功能需求。 集成测试阶段会暴露出前几个步骤中带来的问题,因此会反复地回到前面的阶段去修改。 集成测试阶段分两步走。首先是代码集成过程,会将软件单元测试阶段初步验证过的模型生成代码,放到STM32工程中和其他的手写代码、寄存器配置代码一起编译成可执行文件。然后是实物测试过程,会将可执行文件刷到STM32驱动板中,然后通过手柄遥控,测试机甲大师机器人是否按照预期的方式行动。 2 代码集成 2.1 生成代码 Simulink模型是没有办法被编译器编译的,所以首先要从模型生成代码。博主在《Simulink代码生成》专栏里已经写了很多关于代码生成的配置方式,本文就不会细说这些配置,但是仍然有以下部分需要注意。 1)注意输入、输出接口信号的数据字典。本项目中,博主定义输入信号是由外部文件定义的,所以StorageClass要定义为ImportFromFile,同时要填好外部的头文件Manual_Code.h。 输出信号在自身的源文件中定义,所以StorageClass选择为ExportedGlobal。 2)选择正确的tlc文件和硬件。在配置窗口中,要选择Embedded Coder的tlc文件,也就是生成通用的嵌入式C代码。在工作中如果是基于Autosar标准的软件开发,这里就是autosar.tlc。 然后需要注意选择正确的硬件,不然数据类型的字长就对应不上。 3)配置好了以后就可以Ctrl + B生成代码。这里要注意,一定不能手动修改生成的代码,也不要阅读源文件中的step函数(虽然博主在以前的博客中经常这么做,但是对于实际项目生成的代码,就不要去阅读了)。如果需要确认一下接口变量和函数,只要读一下头文件即可。 2.2 STM32工程 一个完整的STM32工程的代码比较复杂,包括了寄存器配置和接口函数等等,已经超出了MBD技术的范围。因此,博主重点讲一下怎样将模型生成的代码嵌入到STM32的工程中,并且可以正确地编译、链接。 2.2.1 将模型代码导入STM32工程 1)在2.1节中,会生成一个C源文件和若干个头文件。不同地Matlab版本,或是不同的Simulink配置项,可能导致生成的头文件数量和博主的不一致,不过这个问题影响不大。 2)在STM32工程中新建一个Group,命名为Embedded_Coder。将生成的MTSR_MotionSolve.c文件添加到这个组中。 3)将模型生成的头文件所在的路径加入到STM32工程配置中。 这样的话,就完成了手动添加代码和头文件。 2.2.2 STM32工程的main文件 STM32工程中的main.c文件代码如下。 #include "BoardLib.h"#include "OLED_I2C.h"#include "Manual_Code.h"#include "MTSR_MotionSolve.h" // 模型生成的头文件int main (void){ PS2_Init(); // 初始化PS2用到的寄存器 Manual_Code_initialize(); // 初始化手写代码 MTSR_MotionSolve_initialize(); // 模型生成的初始化函数 MotA_Interface(VeOUTR_int32_BLWheel); // 初始化电机A转速为0 MotB_Interface(VeOUTR_int32_FLWheel); // 初始化电机B转速为0 MotC_Interface(VeOUTR_int32_BRWheel); // 初始化电机C转速为0 MotD_Interface(VeOUTR_int32_FRWheel); // 初始化电机D转速为0 SSenvo(0,VeOUTR_uint16_Srv0PWM); // 初始化舵机0位置为1500 SSenvo(1,VeOUTR_uint16_Srv1PWM); // 初始化舵机1位置为1500 SSenvo(2,VeOUTR_uint16_Srv2PWM); // 初始化继电器电平为低电平while(1){ if( WaitTrue(0,20) ) //20ms运行一次 { PS2_Interface(); //获取当前周期的PS2信号 MTSR_MotionSolve_step(); //执行模型的step函数,算出输出参数 //Mot_Interface MotA_Interface(VeOUTR_int32_BLWheel); //更新该循环内电机A的转速 MotB_Interface(VeOUTR_int32_FLWheel); //更新该循环内电机B的转速 MotC_Interface(VeOUTR_int32_BRWheel); //更新该循环内电机C的转速 MotD_Interface(VeOUTR_int32_FRWheel); //更新该循环内电机D的转速 //Senvo_Interface SSenvo(0,VeOUTR_uint16_Srv0PWM); //更新该循环内舵机0的位置 SSenvo(1,VeOUTR_uint16_Srv1PWM); //更新该循环内舵机1的位置 SSenvo(2,VeOUTR_uint16_Srv2PWM); //更新该循环内继电器电平信号状态 }}} main.c文件的整体内容比较简单,通过裸机实现任务调度,也就是一个while(1)无限循环。整个main文件包含三部分: 1)头文件
在while(1)循环之前,需要对PS2、模型、电机和舵机进行初始化。
while循环每隔20ms周期运行一次,是控制策略实现的关键。
2.3 编译与下载 熟悉Keil和STM32的博友肯定非常了解编译和下载按钮在哪儿,如下图所示。采用不同的下载器,例如Jlink或者ST-Link,需要进行不同的配置。 这里博主想说明一下,编译是整个DIY过程中的第一道障碍,经常会调试很久才能编译通过。博主在做的过程中就经常遇到错误,比方说漏掉了头文件、或者变量名没匹配正确等。这部分需要比较有耐心,才能解决掉所有的问题。 3 实物测试 实物测试是整个控制开发的最后一步。在这个过程中,可以直观地检测出之前的设计是否成功。本章节中,博主会根据功能分析阶段中提出的4条功能需求,来逐一测试其效果。测试方法就是操作PS2手柄,观察机甲大师机器人是否按照预期的功能去运动。由于博客上传图片大小有限,无法上传动图,测试结果会以图片的方式呈现在后文中。 另外,为了直观地体会这一节的内容,博主将本文的测试过程录制了两端简单的视频。 机甲大师平面运动 机甲大师云台及发射器 3.1 按键锁定 按键锁定功能没法通过动图直观地展现出来,效果就是当PS2上的红绿指示灯同时亮起来的时候,PS2上的其余按键才有效。只有红灯亮起的时候是无效的。 3.2 底盘平面运动 3.2.1 基本运动 1)前后拨动左摇杆的Y通道,底盘实现前进后退运动。 2)左右拨动左摇杆的X通道,底盘实现左右平移运动。 3)前后拨动左摇杆的Y通道,底盘实现绕正前方左右摆尾运动。 4)左右拨动左摇杆的X通道,底盘实现顺时针、逆时针自转运动。 3.2.2 合成运动 合成运动就是PS2摇杆的多个通道生效的运动,博主这里只验证几个比较有用的合成运动。 1)向左上方拨动左摇杆,此时左摇杆的X、Y通道同时生效,底盘向左上方运动。 四种对角线运动(左前、左后、右前、右后)都可以通过左摇杆的XY通道组合来实现。 2)向前拨动左摇杆,同时向右拨动右摇杆,此时左摇杆的Y通道和右摇杆的X通道同时生效,底盘实现右转弯。 另外,左前转弯、左后转弯、右前转弯、右后转弯都可以通过此方法实现。 3.3 舵机云台二自由度运动 PS2右手的4个按键控制舵机云台的二自由度运动。双舵机的二自由度运动可以使水弹枪在一定范围内瞄准目标。 1)按下RL,RR按钮,舵机云台实现在水平平面内左右运动,扇形角度为180度。 2)按下RU,RD按钮,舵机云台实现在竖直平面内上下运动,扇形角度为180度。 3.4 发射器控制 按下手柄右手的R1按键可以使继电器闭合,从而控制水弹枪连续发射。 4 总结 本文是最后的集成测试阶段,在该阶段中会将模型生成代码、编译STM32工程,最后下载到控制器中进行测试。该阶段会暴露出很多问题,如果能够一一解决会有不小的收获。 >>返回个人博客总目录 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1767 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1619 浏览 1 评论
1069 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
724 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1673 浏览 2 评论
1935浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
728浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
567浏览 3评论
592浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
551浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 00:46 , Processed in 0.856877 second(s), Total 76, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号