提到小车的控制必然想到的PID控制,这也是各技术报告都不会漏掉的名词,在飞思卡尔XS128系列(二)PWM模块中已经提到了一些电机控制方面的东西,主要讲了用PID和BANG-BANG控制相结合的方式来控制电机,就是由BANG-BANG来控制力度,用PID来控制精度,下面就具体来讲讲。

  先说控制,所谓控制首先由闭环控制和开环控制之分,就是所谓的有反馈和无反馈,当然PID显然是有反馈的控制。所谓的闭环控制就是要根据被控制量的实际情况参与运算来决定操作量的大小或者方向。因为在单回路控制系统中,由于扰动的作用使被控参数偏离给定值,从而产生偏差,而自动控制系统的调节单元将来自变送器的测量值与给定值相比较后产生的偏差进行比例、积分和微分运算,并输出统一标准信号,去控制执行机构的动作,以实现对温度、压力、流量和速度等的自动控制。

  然而牵扯到高级PID,像有自适应控制、模糊控制、预测控制、神经网络控制、专家智能控制等等,里面也就模糊控制搞过一定时间,其它我也不懂,就不瞎扯了。

比例、积分和微分的线性组合,构成控制量u(t),称为:比例(Proportional)、积分(Integrating)和微分(Differentiation)控制,简称PID控制。比例作用P只与偏差成正比,积分作用I是偏差对时间的累积,而微分作用D是偏差的变化率。

  用一句形象的比喻,比例P代表着现在,积分I代表着过去,而微分D则代表着未来。

公式如图:

  具体于比例、积分和微分,网上有很多这方面的资料,我就不多说了。

  下面是关于参数的调整,比例系数、积分系数和微分系数的合理调整时整个PID系统可以正常温度工作的关键。

  而最好的寻找PID参数的办法是从系统的数学模型出发,从想要的反应来计算参数。很多时候一个详细的数学描述是不存在的,这时候就需要从实际出发去调整PID参数了。

Ziegler——Nichols方法

  Ziegler——Nichols方法是基于系统稳定性分析的PID整定方法,在设计过程中无需要考虑任何特性要求,整定方法简单。

Tyreus——Luyben的整定值即减少了震荡的作用,而且增强了系统的稳定性。

理论上的就不多说了,我自己都懒得多看。

/**************************************************************** Code Warrior 5.0 Target : MC9S12XS128 Crystal: 16.000Mhz by:庞辉 芜湖联大飞思卡尔项目组 ******************************************************************/ sint16 ideal_speed; //车的理想速度 //拨码开关选择脉冲 const sint16 speed_arr1[253] = { 37,37,37,85,85,85,37,37,37 }; const sint16 speed_arr2[253] = { 38,38,38,90,90,90,38,38,38 }; const sint16 speed_arr3[253] = { 40,40,40,95,95,95,40,40,40 }; const sint16 speed_arr4[253] = { 45,45,45,95,95,95,45,45,45 }; const sint16 speed_arr5[253] = { 50,50,50,95,95,95,50,50,50 }; const sint16 speed_arr6[253] = { 37,37,37,100,100,100,37,37,37 }; const sint16 speed_arr7[10] = { 40,40,40,100,100,100,40,40,40 }; void Motor_Change(void) { if(PORTA_PA0 == 0) { ideal_speed = speed_arr1[pos_ + 4]; } else if(PORTA_PA1 == 0) { ideal_speed = speed_arr2[pos_ + 4]; } else if(PORTA_PA2 == 0) { ideal_speed = speed_arr3[pos_ + 4]; } else if(PORTA_PA3 == 0) { ideal_speed = speed_arr4[pos_ + 4]; } else if(PORTA_PA4 == 0) { ideal_speed = speed_arr5[pos_ + 4]; } else if(PORTA_PA5 == 0) { ideal_speed = speed_arr6[pos_ + 4]; } else if(PORTA_PA6 == 0) { ideal_speed = speed_arr7[pos_ + 4]; } else { ideal_speed = speed_arr1[pos_ + 4]; } //ideal_speed = speed_arr7[pos_ + 4]; speed_error = ideal_speed - pulse_count; if(speed_error >= 10) //情况1,全加速 { Set_PWM01(10000, 10000); } else if(speed_error > -10) //情况2,用PID减速 { pid(); } else { Set_PWM01(0,10000); } }

#define kp_motor 15 #define ki_motor 4//1 #define kd_motor 8//10 sint16 speed_error; //理想与实际速度偏差值 sint16 pre_error; //速度PID 前一次的速度误差值ideal_speed- pulse_count sint16 pre_d_error; //速度PID 前一次的速度误差之差d_error-pre_d_error sint16 pk; //速度PID值 void pid(void) { sint16 error,d_error,dd_error; error = ideal_speed - pulse_count; d_error = error - pre_error; dd_error = d_error - pre_d_error; pre_error = error; //存储当前偏差 pre_d_error = d_error; pk += kp_motor * d_error + ki_motor * error + kd_motor * dd_error; if(pk >= 10000) { pk = 10000; } else if(pk <= 0) { pk = 0; } Set_PWM01(pk,10000); }

这里用了光电车的代码,下个星期就要去杭州比赛了,郁闷的是从电磁转到光电了,先祝自己取得好成绩,嘿嘿。

  很多队伍过于畏惧PID了,其实PID参数如果真的不想调,或没时间调,看着其它队伍的随便写上3个数,都比开环要强,像上个月我去参加安徽赛区的比赛,确实看到不少没有PID的,没有PID先不说过桥了,你直道就不敢加速,不然过弯肯定死定,当然这个还要配合反转制动,这个也是要写的,不急,应该快了。

  

------------------------------------------------------------------------------------------------------

转载我博客文章郑重声明:技术性网站著名原创作者即可转载,商业性网站必须经过我的同意才能转载,否则追究责任——

pang123hui的博客:

博客园http://www.cnblogs.com/pang123hui/

CSDNhttp://blog.csdn.net/pang123hui/

飞思卡尔智能车 电机PID相关推荐

  1. ai电磁组属于什么组_飞思卡尔智能车电磁组分区算法介绍

    写在之前的话: 1.目前我是一名在校学生,这也是我第一次写博客,不周之处,请多谅解: 2.此算法并非原创,借鉴自山东德州学院第八届白杨队(PS:个人看法,对于一些人把别人的开源东西改头换面一下就说是自 ...

  2. 飞思卡尔智能车—无线充电电源(节能组)

    飞思卡尔智能车-无线充电电源(节能组) 详细参赛要求请以智能车官方为准,此文章仅分享本人参赛经验,开源硬件电路设计,供大家学习! 无线充电部分设计思路: 无线充电接收线圈,超级电容充电,启动电压5V, ...

  3. 第五届“飞思卡尔”智能车竞赛分赛区赛后总结

    两天紧张的比赛结束了,第五届"飞思卡尔"智能车竞赛安徽省分赛区的全部比赛也到此结束了.在黄山,我体验了黄山风景的美丽,也体会了各院校在"飞思卡尔"项目上的强大. ...

  4. 红外寻迹小车基于K128单片机的红外对管飞思卡尔智能车(5个对管)程序部分

    红外寻迹小车基于K128单片机的红外对管飞思卡尔智能车(5个对管)软件部分包括: 出库 直行模块 大,小弯道 环岛 s弯 停车 #include "headfile.h" #inc ...

  5. 飞思卡尔智能车摄像头上位机…

    原文地址:飞思卡尔智能车摄像头上位机采集程序 作者:玲声依旧美 基于飞思卡尔XS128单片机 摄像头采集测试程序     OV7620采集程序说明:摄像头数据口接PA0-PA7:行中断接PT0,场中断 ...

  6. 最小二乘法在飞思卡尔智能车路径搜索中的应用

    1.什么是最小二乘法 最小二乘法就是要使得观测点和估计点的距离的平方达到最小,我们可以使用一些已知的离散的点,拟合出一条与这些离散点最为接近的曲线,从而可以分析出这些离散点的走向趋势. 如图所示是一个 ...

  7. 飞思卡尔智能车之摄像头使用篇

    飞思卡尔智能车之摄像头使用    今天来给大家说说摄像头的使用,很显然摄像头对摄像头组的重要性是不言而喻的,因为摄像头是小车提取赛道信息最关键的传感器了,所以只有把摄像头使用好才能让你的小车快速稳定的 ...

  8. 飞思卡尔智能车—电磁循迹(节能组)

    飞思卡尔智能车-电磁循迹(节能组) 详细参赛要求请以智能车官方为准,此文章仅分享本人参赛经验,开源硬件电路设计,供大家学习! 电磁循迹部分设计思路: 电感采集电磁信号,放大,整流,滤波,AD采集 电磁 ...

  9. 回忆属于我的第五届“飞思卡尔”智能车竞赛

    飞思卡尔,一个原本陌生,而现在常常挂在嘴边的名字-- 09年高考的结束,注定了我只能来到芜湖职业技术学院这个专科,当时的心情很失落,其实无论拿哪次模拟考的成绩,我都是可以上个二本的,郁闷了-- 因为自 ...

最新文章

  1. SpringBoot 获取 application.properties 文件中的内容方法 【学习记录】
  2. CF1385E Directing Edges (拓扑排序判断环)
  3. 麒麟处理器是基于arm的吗_麒麟芯片是基于ARM构架,如果得不到授权华为还能活吗?...
  4. RequireJs入门(一)
  5. 安装上 Octotree 插件让你更加方便的阅读 gitHub 中的代码
  6. [省选联考 2020 A/B 卷] 冰火战士(树状数组上二分)
  7. [Leetcode16]最接近的三数之和
  8. linux配置本地yum(CentOS7)
  9. 流行-Manifold【0】-维基百科中文版本解释
  10. 30-40岁的程序员们,请把一些账算清楚,为过冬做准备(一)
  11. java命令行参数是什么_Java实验课:命令行参数是什么?
  12. python归并排序算法实现_排序算法之归并排序(附 Python 与 JS 实现)
  13. 操作系统的概念,功能
  14. python定义函数及调用函数
  15. 计算机computer英语划分音节,英语基础知识1.computer有___个音节,按划分音节的规则,应为____.A.1;computer B.2;com...
  16. 计算机主板上的纽扣电池型号是,主板上的纽扣电池是什么
  17. python理财基金数据分析可视化系统
  18. WordPress中用户头像不显示,如何解决
  19. 81192!请返航!
  20. 苹果6性能测试软件,5款iPhone升级iOS13.6性能测试:运行速度有所提升?

热门文章

  1. 虚拟机安装Ubuntu 22.4
  2. java eclipse sbt_无法安装sbt-eclipse插件
  3. 【SE】Week2 : 个人博客作业
  4. ACPR'11 Accepted
  5. 《Web安全之深度学习实战》笔记:第十三章 DGA域名识别
  6. 数据库编程加入transaction
  7. [转]谨慎使用Encoding.Default
  8. 007 人工智能摄像头之二哈识图转接板模块
  9. java配置文件properties_关于Java配置文件properties的学习
  10. 如何挽回前男友!看懂你也可以成功!(万字攻略)