完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
本文是机甲大师机器人控制的系列博客之一。在软件架构设计的基础上,本文设计每个模块中的控制算法。
1 开发阶段 软件单元阶段在软件架构设计阶段之后,同时会参照功能分析阶段中的策略,在Simulink模型的子系统中搭建控制模型。 另外说明一下,由于博主不是专业做控制策略的工程师,所以简化了该阶段的建模过程。在汽车软件开发中,闭环控制、滤波、诊断等威廉希尔官方网站 都非常重要,但是都没有在这个DIY项目中体现出来。如果有做控制策略的同行,非常希望能够多多交流。 2 软件单元设计 本章会根据软件架构设计的内容,在每个子系统中进行细节上的建模,以实现功能分析阶段中提出的4个功能。 2.1 按键锁定模块 按键锁定模块是为了实现功能分析阶段中提出的第1条按键锁定功能,对应的子系统是顶层的使能子系统。该子系统在软件架构设计阶段就已经建立完成。 如上图所示,VeINPR_uint8_PS2MODE变量控制这个子系统的使能。双击进入使能子系统后,其中的每个输出Port需要特别注意。 1)对于4个直流电机调速的参数VeOUTR_int32_XXWheel,Initial Output定义为0,Output when disabled选择为reset,如下图所示。 Initial Output定义为1500,表示初始时刻4个电机转速为0。Output when disabled选择为reset,表示使能子系统失能的时候,输出的电机调速参数会重置(reset)为0,无论怎么动摇杆,电机都保持停止转动。 2)对于2个舵机位置的PWM参数VeOUTR_uint16_SrvXPWM,Initial Output定义为1500,Output when disabled选择为held,如下图所示。 Initial Output定义为1500,表示初始时刻舵机处于中间位置(1500是500和2500的平均值)。Output when disabled选择为held,表示当子系统失能的时候,舵机位置仍然保持不变(held)。 3)对于继电器控制信号,沿用了舵机的PWM参数VeOUTR_uint16_Srv2PWM,Initial Output定义为500,Output when disabled选择为reset,如下图所示。 Initial Output定义为500,表示初始时刻继电器的信号端输入低电平(500对应的电压大概是0.1V)。Output when disabled选择为reset,表示当子系统失能的时候,继电器的信号端输入重置(reset)为低电平。 2.2 电机控制模块 电机控制模块是为了实现功能分析阶段中提出的第2条底盘平面运动功能,对应的子系统是第二层的电机控制子系统。该子系统在软件架构设计阶段就已经建立完成。 如上图所示,子系统的输入是4个摇杆通道对应的信号,输出是4个电机接口函数传入的参数。 双击进入电机控制子系统Motor_Ctrl,其中包含两大块内容,分别是摇杆信号解析(左)和电机参数计算(右),如下图。后面会按照信号流的过程,来解释一下从输入到输出中间做了些什么。 2.2.1 摇杆信号解析 1)4个通道的摇杆信号首先会经过同样的子系统Rocker_Solve,计算出它的比例(Rocker_Ratio)和激活标志(Rocker_Flag),如下图所示。 摇杆比例(Rocker_Ratio)的范围是-1~1的浮点数,包含了摇杆运动的正负方向和相对于极限值的比例;激活标志(Rocker_Flag)的范围是0或1的正整数,表示是否被激活。内部逻辑其实很简单,就是简单地把输入做了个除法和判断。 由于4路通道都要进行这个计算,所以博主把这个模块做成了一个库(Lib),并配置成原子子系统,以便生成代码的时候可以重复调用一个函数。 2)对于输出的摇杆比例(Rocker_Ratio),会根据该通道的来计算出这个比例所对应的四轮参数值。计算方法是根据功能分析阶段中的运动规律图得出。 进入Wheel_Solve子系统,可以看到通过Gain模块,对方向做了一个转换。 这里进行一个说明。左前轮(FL_Wheel)、右后轮(BR_Wheel)与PS2LX_Ratio符号一致,右前轮(FR_Wheel)、左后轮(BL_Wheel)与PS2LX_Ratio符号相反。和运动关系图中的右平移运动相吻合。左平移和右平移相反,但是摇杆符号也是负号,所以也是适用于Wheel_Solve的计算方法。 3)将4个通道解析出来的激活标志(Rocker_Flag)相加,得出当前周期内,总共有多少通道被激活(Rocker_Num)。 2.2.2 电机参数计算 在功能分析阶段中将底盘平面运动分成基本运动和合成运动。由于基本运动是合成运动的一种特殊情况,所以在电机参数计算的时候,直接按照合成运动来计算。电机参数计算后会输出四个电机接口的参数。 如上图所示是对左前轮(FLWheel)的计算过程,分了三步。首先,将四路摇杆通道算出来的对应的左前轮的值相加。接着将计算的和除以被激活的摇杆数量值(Rocker_Num)。最后乘以一个系数CeMTSR_single_PWMratio,来限值PWM的最大值。 这里有两点解释一下。1)相加后再除以数量表示对最终参数影响的平均效果;2)乘以系数是为了限制输出的最大电压,这个系数在数据字典中定义。 2.3 舵机控制模块 电机控制模块是为了实现功能分析阶段中提出的第3条舵机云台二自由度运动功能,对应的子系统是第二层的舵机控制子系统。该子系统在软件架构设计阶段就已经建立完成。 如上图所示,子系统的输入是4个按键对应的信号,输出是2个舵机接口函数传入的第2个参数参数,也就是位置参数。 双击进入Servo_Ctrl子系统,控制逻辑如下图。 if模块先通过两个按键输入,判断舵机应该正转还是反转;接着UnitDelay的结果作为if-Action子系统的输入,if-Action子系统中加上或者减去一个数值,然后输出该周期时舵机应该处于什么位置;最后用Saturation模块对位置信号做限值,1000~2000表示舵机位置从45度到135度。舵机控制模块总体还是很简单的。 2.4 继电器控制模块 继电器控制模块是为了实现功能分析阶段中提出的第4条发射器控制功能,对应的子系统是第二层的水弹枪控制子系统。该子系统在软件架构设计阶段就已经建立完成。 如上图所示,子系统的输入是R1按键对应的信号,输出是第3个舵机接口函数传入的第2个参数参数,因为在软件架构设计阶段中采用舵机接口来控制继电器。 双击进入Gun_Ctrl子系统,控制逻辑如下图。 这个子系统应该是最简单的(虽然其他的也很简单),只用了一个if-else判断输入信号,然后决定输出信号是高电平(19500)还是低电平(500)。 3 总结 博主在本章中简单的介绍了一下自己控制机甲大师的软件单元。事实上,机甲大师的内部控制算法可以有非常多值得研究的威廉希尔官方网站 点。但是本系列博客的重点在于<基于模型设计>这套方法流程,最终走通了这套流程以后,可以回来修改模型并加以验证,不断优化其中的算法。 >>返回个人博客总目录 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1561 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1501 浏览 1 评论
933 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
665 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1555 浏览 2 评论
1850浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
615浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
506浏览 3评论
510浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
491浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-10 23:46 , Processed in 0.483007 second(s), Total 45, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号