历史上的今天

今天是:2024年08月27日(星期二)

正在发生

2021年08月27日 | 飞思卡尔智能车 电机PID

发布者:科技创客 来源: eefocus关键字:飞思卡尔  智能车 手机看文章 扫描二维码
随时随地手机看文章

提到小车的控制必然想到的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先不说过桥了,你直道就不敢加速,不然过弯肯定死定,当然这个还要配合反转制动,这个也是要写的,不急,应该快了。

关键字:飞思卡尔  智能车 引用地址:飞思卡尔智能车 电机PID

上一篇:飞思卡尔XS128系列(三) PIT
下一篇:飞思卡尔XS128系列(一) PLL锁相环

推荐阅读

根据公安部交管局公布的数据显示:截止2017年底,中国机动车保有量达3.10亿辆,其中汽车占2.17亿辆,随着汽车数量的增加,停车位缺口已超过5000万个。以车主一年3000元的停车花费测算,停车收费的静态市场空间已达到约6510亿元。从该数据可以看出,泊位不足引发的城市停车缺口问题并未影响城市停车行业的市场发展空间。  随着我国经济的发展,人民生活质...
第4章 STM32H7工程模板建立(MDK5)本章教程为大家介绍如何创建MDK5工程,配置方法以及经常用到的一些配置项。4.1 初学者重要提示4.2 第1步,创建工程文件夹4.3 第2步,创建新工程4.4 第3步,设置工程名和工程分组名4.5 第4步,添加工程文件4.6 第5步,Target Options配置4.7 第6步,最后一步验证是否创建成功4.8 MDK的字体,多核并行编译,语...
DMA的基本介绍什么是DMA (DMA的基本定义)DMA,全称Direct Memory Access,即直接存储器访问。DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。我们知道CPU有转移数据、计算、控制程序转移等很多功能,系统运作的核心就是CPU,CPU无时不刻的在处理着大量的事务,但有些事情却没有那么重...
调试芯片:STM32F103C8T6外部晶振:8MHz功能介绍:使用Timer3实现两路(可四路)PWM波形的输出代码如下:初始化:系统时钟初始化,GPIO端口初始化,Timer初始化系统时钟初始化:/* 配置系统时钟为72M */ SystemInit(); GPIO端口初始化:/**************************************************************** * 函数名:void GPIO_Config(void) * 描述...

史海拾趣

问答坊 | AI 解惑

急问各位专家,关于2440接128m内存的问题

我在论坛上搜索了很多关于2440接128m内存运行wince的帖子,然后动手做,结果遇到了一个很困惑的问题。我现在也是用2片MT48LC32M16A2,然后地址接25,26,然后boot 中的部分都各位贴出来的方式做了修改,结果发现,如果把b6_scan设为10bit的话,内存 ...…

查看全部问答∨

菜鸟有个关于ADS建立工程的问题,高手指点啊!

以前使用ADS1.2时都是在原有的工程上添加自己的程序,这次自己建了一个工程,发现ARM竟然不会动,程序和以前的程序一样。可能是建工程的时候设置的问题导致不能运行。 哪个好心的大哥能否建立一个工程,每设置一步剪一个图片下来,并加以说明!急 ...…

查看全部问答∨

嵌入式人才的发展方向,给从事嵌入式开发的同学指路(转)

     嵌入式系统无疑是当前最热门最有发展前途的IT应用领域之一。嵌入式系统用在一些特定专用设备上,通常这些设备的硬件资源(如处理器、存储器等)非常有限,并且对成本很敏感,有时对实时响应要求很高等。特别是随着消费家 ...…

查看全部问答∨

WinCE5.0下使用,.net下开发类似WindowXP中rasdial一样功能程序

请高手指教,做一个这样的东西要多少时间?…

查看全部问答∨

IMTI英泰移动通信学院(哈尔滨)招聘IT职业培训师

IMTI哈尔滨招聘 下述培训师均须具备: 1、具有良好的沟通能力,学习态度,团队合作精神 2,具有优秀的口头及书面表达能力,能够进行宣讲 一、J2EE方向培训师 职位描述: 1、计算机等相关专业专科以上学历,3年以上软件开发经验; 2、精通 ...…

查看全部问答∨

请问电话线接法??

请问二蕊的电话线如何接?线序怎样?四蕊的电话线如何接?线序怎样? 电话线头分哪些,最好有图片, 谢谢。 …

查看全部问答∨

LM3S2110的板子怎样烧程序啊? 菜鸟先谢过各路大神!!T T

跟8962一起的ek套件, 10针can和20针debug 但没有usb借口 怎么办?…

查看全部问答∨

对功放比较熟的朋友看下这个图··

能解析一下这个图吗,画圈部分的管子的作用我不是很明白···问了很多人了都无法完美解释…

查看全部问答∨

"聆听"无人驾驶前奏曲,TI汽车智能处理器全新课程

    无人驾驶不是一蹴而就的,需要多年的逐步更新换代,    你想设计汽车上的酷炫高科技电子产品吗?快来看看最新的TI汽车智能处理器课程 ,TI一直致力于推动汽车电子的革新,在这方面很有经验,集汽车电子所需的稳定性、高性 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved