两轮小车相关记录(重点)
车模速度控制:
车模速度控制采用了典型的PI 控制算法,对于PI 调节算法中的参数整定可以参照一般PI 参数整定的方法进行。速度控制子程序是每隔一段时间(100ms)调用一次 ,程序并没有直接更新 g_nLeftMotorSpeedOut ,g_nRightMotorSpeedOut的数值,而是通过调用函数更新上面的数值CalculateMotorSpeedOut() ,而此函数是每5ms被调用一次,所以程序是将速度控制的变化量平均到20次进行更新。这样可以降低速度控制对于车模直立控制的影响。
该函数的输入为:g_nLeftMotorSpeedCount ,g_nRightMotorSpeedCount 。
计算得到:g_nLeftMotorSpeedOut ,g_nRightMotorSpeedOut 。
1 void MotorSpeedAdjustCal(void) { 2 int nLeftSpeed, nRightSpeed; 3 int nDeltaValue, nP, nI; 4 int nSpeed; 5 6 nLeftSpeed = (int)g_nLeftMotorSpeedCount; //左电机脉冲计数 7 nRightSpeed = (int)g_nRightMotorSpeedCount; //右电机脉冲计数 8 nSpeed = (nLeftSpeed + nRightSpeed) / 2; //平均脉冲 9 10 nDeltaValue = g_nMotorSpeedSet - nSpeed; //设置值 减平均值 11 nP = mult_r(nDeltaValue, MOTOR_SPEED_P_INT); // P 12 nI = mult_r(nDeltaValue, MOTOR_SPEED_I_INT); // I 13 14 g_nMotorOutSpeedOld = g_nMotorOutSpeedNew; 15 16 g_nMotorOutSpeedKeep -= nI; //减积分 17 g_nMotorOutSpeedNew = (g_nMotorOutSpeedKeep >> 3) - nP; //缩8 减比例(除8,主要是放置积分系数为小数) 18 if(g_nMotorOutSpeedKeep > MOTOR_OUT_MAX) 19 g_nMotorOutSpeedKeep = MOTOR_OUT_MAX; 20 if(g_nMotorOutSpeedKeep < MOTOR_OUT_MIN) 21 g_nMotorOutSpeedKeep = MOTOR_OUT_MIN; 22 23 } 24 void CalculateMotorOutSpeed(void) { 25 int nValue; 26 nValue = g_nMotorOutSpeedNew - g_nMotorOutSpeedOld; 27 nValue = nValue * (g_nCarMotionCount + 1) / 28 (CAR_MOTION_PERIOD - 1) + g_nMotorOutSpeedOld; //平均20次 29 g_nLeftMotorOutSpeed = g_nRightMotorOutSpeed = nValue; 30 }
车模直立控制
注意:由于现在还没有加入速度闭环,所以由于加速度传感器零偏的误差,会导致车模在直立的时候会往一个方向加速行驶。
void CarAngleAdjust(void) {int nLeft, nRight;int nSpeed;int nP, nD;nP = g_nCarAngle;nP = (int)mult_r(nP, CAR_AA_P_INT);nD = g_nCarGyroVal >> 5;nD = (int)mult_r(nD, CAR_AA_D_INT);nSpeed = nD + nP; (-1000~1000)if(nSpeed > MOTOR_SPEED_SET_MAX) nSpeed = MOTOR_SPEED_SET_MAX;else if(nSpeed < MOTOR_SPEED_SET_MIN) nSpeed = MOTOR_SPEED_SET_MIN;nLeft = nSpeed + g_nLeftMotorOutSpeed - g_nMotorLeftRightDiff;nRight = nSpeed + g_nRightMotorOutSpeed + g_nMotorLeftRightDiff;g_nLeftMotorOut = nLeft << 6;g_nRightMotorOut = nRight << 6;if(g_nLeftMotorOut > MOTOR_OUT_MAX)g_nLeftMotorOut = MOTOR_OUT_MAX;if(g_nLeftMotorOut < MOTOR_OUT_MIN) g_nLeftMotorOut = MOTOR_OUT_MIN;if(g_nRightMotorOut > MOTOR_OUT_MAX) g_nRightMotorOut = MOTOR_OUT_MAX;if(g_nRightMotorOut < MOTOR_OUT_MIN) g_nRightMotorOut = MOTOR_OUT_MIN;MotorSpeedOut(); }
if((L-R)>2)
{
temp_R=temp_R+1;
}else if((R-L)>2)
{
temp_L=temp_L+1;
}//判断两轮子脉冲的差异,进行校正;
两轮小车相关记录(重点)相关推荐
- ROS学习笔记-cmd_vel转换成两轮小车速度
double v = cmd_vel.linear.x; // 线速度double w = cmd_vel.angular.z; // 角速度double l = 0.588; // m 两轮间距do ...
- arduino两轮小车 四红外传感模块 循迹代码 供大家参考交流,如有更好的方法希望不吝赐教
参加学校举办的循迹小车比赛,由于是新手,写的程序不免有些冗杂,但结果还是不错的,所以写在这里供大家参考交流. 如有更简单的方法,请不吝赐教
- 基于stm32的两轮自平衡小车4(软件调试篇)
本篇是软件调试篇,接上一篇硬件篇:基于stm32的两轮自平衡小车3(硬件篇),本篇内容是对硬件部分的软件实现,具体模块详见目录.这里先上效果:转B站 目录 定时器PWM驱动程序 定时器编码器模式驱动程 ...
- 基于PID调节的两轮自平衡小车的循迹控制
基于PID调节的两轮自平衡小车的循迹控制 硬件电路篇 小车主控芯片使用飞思卡尔公司产的K60. 电源模块 车体电路使用两种电压,分别为3.3v和5v供电.车体使用7.2V的锂电池供电,为提供电路所 ...
- 基于stm32的两轮自平衡小车3(硬件篇)
此篇为硬件篇,接上一篇"基于stm32的两轮自平衡小车2(原理篇)".包含自行设计电路板原理图与PCB电路图的过程.详见目录. 目录 stm32管脚分配 硬件原理图 PCB电路图 ...
- 平衡小车c语言程序,【全部开源】两轮平衡小车(原理图、PCB、程序源码、BOM等)...
同网上一般网友制作的平衡小车不一样,这个平衡小车最大的特点就是它的整体很小,PCB面积只有2.5cm*5.0cm,这个可能还没有网友制作的平衡小车的一个电机驱动板大,但是却已经实现了相同的功能.我在器 ...
- 【STM32】两轮自平衡小车学习笔记1
文章目录 前言 一.安装环境 二.使用步骤 1.STM32CubeMX新建工程 2.根据需求改STM32CubeMX配置 3.按键消抖代码编写 4.烧录代码 三.遇到的问题 四.编程环境配置 代码自动 ...
- 两轮差速小车循线控制原理分析
硬件资料设定:小车驱动来自于两个相同的电机,转向依靠两轮差速实现,小车前后左右安装超声波传感器,前后各一个,左右各两个: 功能目标:假设小车左侧有墙壁,通过超声波测距实现按指定距离沿墙行驶 参数设定: ...
- ps2摇杆模块控制小车_八个超赞的两轮平衡小车设计,小白最爱
智能车种类众多,其中两轮平衡车特别受到了工程师的喜爱,整理了8个两轮平衡车的资料,一起看看这个小可爱吧. 1.基于ARM-STM32的两轮自平衡小车 小车直立和方向控制任务都是直接通过控制小车两个电机 ...
最新文章
- C语言求3x3数组对角线元素之和
- 桌面倒计时2.0 涉及知识点详解及源码分享
- python sklearn.datasets.fetch_mldata MNIST手写数字数据集无法获取, 报错 Function fetch_mldata is deprecated 的解决办法
- c语言3级菜单_大一新生作品:利用 C 语言实现quot;通讯录管理系统quot;,直言太简单...
- 51CTO博客移动化意味着什么?IT博主可以搞事情了!
- java中int转成String位数不足前面补零
- HDU-4902-Nice boat
- 【原创】Team Foundation Server 域环境迁移
- 第十四节:Asp.Net Core WebApi生成在线文档-第十九节
- 拥有触觉分析能力,上交MIT获IROS 2020最佳论文奖
- Egret入门学习日记 --- 第十九篇(书中 8.8~8.10 节 内容)
- Python Window10 环境安装流程
- 抖音多闪数次声明被打脸 法院正式裁定抖音违规
- SHOWWINDOW最小化不好用
- 如何写linux软件专利,Linux之父:软件专利和方法专利都挺扯淡
- EAX、ECX、EDX、EBX、ESI、EDI、ESP、EBP寄存器
- 计算机输入输出接口形式,输入输出接口-微计算机原理-电子发烧友网站
- 计算机表格基础知识训练,计算机基础知识综合练习与答案
- 目前福岛高水平辐射量可能由2号反应堆释放
- 如何创建用户和组?怎样添加用户呢?windows dos命令