车模速度控制:  

车模速度控制采用了典型的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;
    }//判断两轮子脉冲的差异,进行校正;

两轮小车相关记录(重点)相关推荐

  1. ROS学习笔记-cmd_vel转换成两轮小车速度

    double v = cmd_vel.linear.x; // 线速度double w = cmd_vel.angular.z; // 角速度double l = 0.588; // m 两轮间距do ...

  2. arduino两轮小车 四红外传感模块 循迹代码 供大家参考交流,如有更好的方法希望不吝赐教

    参加学校举办的循迹小车比赛,由于是新手,写的程序不免有些冗杂,但结果还是不错的,所以写在这里供大家参考交流. 如有更简单的方法,请不吝赐教

  3. 基于stm32的两轮自平衡小车4(软件调试篇)

    本篇是软件调试篇,接上一篇硬件篇:基于stm32的两轮自平衡小车3(硬件篇),本篇内容是对硬件部分的软件实现,具体模块详见目录.这里先上效果:转B站 目录 定时器PWM驱动程序 定时器编码器模式驱动程 ...

  4. 基于PID调节的两轮自平衡小车的循迹控制

    基于PID调节的两轮自平衡小车的循迹控制   硬件电路篇 小车主控芯片使用飞思卡尔公司产的K60. 电源模块 车体电路使用两种电压,分别为3.3v和5v供电.车体使用7.2V的锂电池供电,为提供电路所 ...

  5. 基于stm32的两轮自平衡小车3(硬件篇)

    此篇为硬件篇,接上一篇"基于stm32的两轮自平衡小车2(原理篇)".包含自行设计电路板原理图与PCB电路图的过程.详见目录. 目录 stm32管脚分配 硬件原理图 PCB电路图 ...

  6. 平衡小车c语言程序,【全部开源】两轮平衡小车(原理图、PCB、程序源码、BOM等)...

    同网上一般网友制作的平衡小车不一样,这个平衡小车最大的特点就是它的整体很小,PCB面积只有2.5cm*5.0cm,这个可能还没有网友制作的平衡小车的一个电机驱动板大,但是却已经实现了相同的功能.我在器 ...

  7. 【STM32】两轮自平衡小车学习笔记1

    文章目录 前言 一.安装环境 二.使用步骤 1.STM32CubeMX新建工程 2.根据需求改STM32CubeMX配置 3.按键消抖代码编写 4.烧录代码 三.遇到的问题 四.编程环境配置 代码自动 ...

  8. 两轮差速小车循线控制原理分析

    硬件资料设定:小车驱动来自于两个相同的电机,转向依靠两轮差速实现,小车前后左右安装超声波传感器,前后各一个,左右各两个: 功能目标:假设小车左侧有墙壁,通过超声波测距实现按指定距离沿墙行驶 参数设定: ...

  9. ps2摇杆模块控制小车_八个超赞的两轮平衡小车设计,小白最爱

    智能车种类众多,其中两轮平衡车特别受到了工程师的喜爱,整理了8个两轮平衡车的资料,一起看看这个小可爱吧. 1.基于ARM-STM32的两轮自平衡小车 小车直立和方向控制任务都是直接通过控制小车两个电机 ...

最新文章

  1. C语言求3x3数组对角线元素之和
  2. 桌面倒计时2.0 涉及知识点详解及源码分享
  3. python sklearn.datasets.fetch_mldata MNIST手写数字数据集无法获取, 报错 Function fetch_mldata is deprecated 的解决办法
  4. c语言3级菜单_大一新生作品:利用 C 语言实现quot;通讯录管理系统quot;,直言太简单...
  5. 51CTO博客移动化意味着什么?IT博主可以搞事情了!
  6. java中int转成String位数不足前面补零
  7. HDU-4902-Nice boat
  8. 【原创】Team Foundation Server 域环境迁移
  9. 第十四节:Asp.Net Core WebApi生成在线文档-第十九节
  10. 拥有触觉分析能力,上交MIT获IROS 2020最佳论文奖
  11. Egret入门学习日记 --- 第十九篇(书中 8.8~8.10 节 内容)
  12. Python Window10 环境安装流程
  13. 抖音多闪数次声明被打脸 法院正式裁定抖音违规
  14. SHOWWINDOW最小化不好用
  15. 如何写linux软件专利,Linux之父:软件专利和方法专利都挺扯淡
  16. EAX、ECX、EDX、EBX、ESI、EDI、ESP、EBP寄存器
  17. 计算机输入输出接口形式,输入输出接口-微计算机原理-电子发烧友网站
  18. 计算机表格基础知识训练,计算机基础知识综合练习与答案
  19. 目前福岛高水平辐射量可能由2号反应堆释放
  20. 如何创建用户和组?怎样添加用户呢?windows dos命令

热门文章

  1. 总结windows下堆溢出的三种利用方式
  2. linux Redhat6.5 中 编译安装apache
  3. Python_字符串
  4. Mysql大量插入随机数据方法--存储过程
  5. Java 异常丢失及finally子句
  6. python生成随机密码串
  7. 安装Sql Server 2005 失败一例
  8. markDown用这一招实现图片并排显示
  9. L2-012. 关于堆的判断-PAT甲级真题(堆的建立,向上调整)
  10. L1-019. 谁先倒-PAT团体程序设计天梯赛GPLT