精华内容
下载资源
问答
  • 飞思卡尔智能车 电机PID

    千次阅读 2010-08-16 11:28:00
    提到小车的控制必然想到的PID控制,这也是各技术报告都不会漏掉的名词,在飞思卡尔XS128系列(二)PWM模块中已经提到了一些电机控制方面的东西,主要讲了用PID和BANG-BANG控制相结合的方式来控制电机,就是由BANG-...

          提到小车的控制必然想到的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的整定值即减少了震荡的作用,而且增强了系统的稳定性。

     

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

     

     

     

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

     

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

     

       

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

     

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

    pang123hui的博客:

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

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

     

      

    展开全文
  • 位置式 PID 算法、恩智浦杯智能车电机PID

    千次阅读 多人点赞 2018-08-23 00:51:40
    由于计算机控制是一种采样控制, 它只能根据采样时刻的偏差计算控制量,而不能像模拟控制那样连续输出控制量量... 表示的控制算法式直接给出的 PID 控制规律定义进行计算的,所以它给出了全部控制量的大小,因此被称...

            由于计算机控制是一种采样控制, 它只能根据采样时刻的偏差计算控制量,而不能像模拟控制那样连续输出控制量量, 进行连续控制。 由于这一特点,积分项和微分项不能直接使用,必须进行离散化处理。如果采样周期足够小,则可以获得足够精确的结果,离散控制过程与连续过程十分接近。 

            表示的控制算法式直接给出的 PID 控制规律定义进行计算的,所以它给出了全部控制量的大小,因此被称为全量式或位置式 PID 控制算法。

            这种算法的缺点是: 由于全量输出, 所以每次输出均与过去状态有关, 计算时要对 ek 进行累加,工作量大; 并且,因为计算机输出的 对应的是执行机构的实际位置, 如果计算机出现故障,输出将大幅度变化,会引起执行机构的大幅度变化,有可能因此造成严重的生产事故,这在实生产际中是不允许的。增量式 PID 控制算法可以避免着重现象发生。
     

    话不多说,直接上代码:

    int SpeedPID(s32 GoalSpeed)                    //目标速度  速度PID调节,增量式
    {
    	s32 ActualSpeed;                           //实际参数
    	double IncrementSpeed;                     //增加的速度
            
        Count=FTM_QUAD_get(FTM1);                  //获取脉冲数
    	Speed = Count*144586/10000;                //获取速度
    	//【Counter/512*0.419*6.283*0.02812*1000=(毫米/单位采样时间)】
    	//【脉冲数÷一圈脉冲数×齿轮比×2π×轮胎半径(m)×1000倍放大】
    	ActualSpeed = Speed;                       //获取实际速度
            
    	err = GoalSpeed-ActualSpeed;               //目标值和实际数值的差
    	IncrementSpeed = SpeedKP*(err-err_last)+SpeedKI*err+SpeedKD*(err-2*err_last+err_lastbefore);                    //需要增加的速度
    	SpeedPWM += IncrementSpeed;                //目前给的速度=现在的速度+增加的速度
    	err_lastbefore = err_last;                 //前前偏差值=前偏差值
    	err_last = err;                            //前偏差值=偏差值
    	
    	if(SpeedPWM>240)                           //设置最大值
    	{SpeedPWM = 240;}
    	else if(SpeedPWM<-240)                     //设置最小值
    	{SpeedPWM = -240;}
            
    	PWM = (int)SpeedPWM;                       //更改pwm
    	return PWM;
    }

     

    展开全文
  • 对初学者PID算法的理解大有帮助 原作者:pang123hui的博客: 请尊重原作者的劳动,转载请注明出处
  • 恩智浦(飞思卡尔)智能车舵机和电机PID控制

    万次阅读 多人点赞 2018-09-01 16:44:54
    电机PID的时候,首先要理解电机控制与舵机控制的区别。比如都是单纯的P(比例)控制,假设target(设定值)不变,measure(实际值)小于target的情况下,舵机的P输出会使得err逐渐减小,并随之时间的推移趋近于0,...

    这篇文章主要是基于B车模这种单电机四轮车模来写的,内容是讲两者PID之间的差异,以及两者各自的主要控制参数,并不讲它们的完整的PID程序要如何写。
    写PID的时候,首先要理解电机控制与舵机控制的区别。很多人有一个误区就是把电机和舵机当成同一个系统来控制,在调车的时候也是用同样的方法来进行调车。我们首先来看两个公式:
    1、err = target - measure(偏差 = 设定值 - 实际值);
    2、out(控制量) = P * err + I*err的累积 +D * (err - pre_err);
    在舵机中,err就是摄像头计算的中线与中线的偏差值,控制量则是舵机引脚的电压值,也就是舵机打角角度大小。
    在电机中,err是电机的设定速度与实际速度的差值,而我们的控制量则是电机输入电压的大小
    比如都是单纯的P(比例)控制,假设target(设定值)不变,measure(实际值)小于target的情况下,舵机的P输出会使得err逐渐减小,并随之时间的推移趋近于0,其实理论上单纯的P控制是不会达到target的,但是现实中的系统是个连续的,而我们在程序上控制是一个差分系统,舵机就会在保持上一个时间的状态直到下一个状态的输出,假设小车一开始是直线行驶,但中线在小车右侧,那么P输出会让舵机向右打角,越接近中线,舵机打角越小直到达到中心线,但我们会认为小车还是直线行驶吗?是不是越接近中线小车转弯角度越小呢?实际恰恰相反,单纯的P控制会让小车在达到中线时转弯角度最大,因为小车的转弯角度是由之前舵机打角一直积累下来的, 在这段时间内,舵机就会保持转弯的状态导致超过target,所以舵机的P控制会导致超调现象
    而在电机中,情况则不同。在理想状态下,不考虑电机死区的问题,电机的转速是与电机的输入功率接近线性关系,在单纯的P控制的情况下,假设target(设定值)不变,measure(实际值)小于target的情况下,电机的P输出会导致怎样的变化呢?结果应该是一开始的err值是最大的,所以out值最大,电机转速加快,导致err值变小,out值相应变小,电机转速减慢,err值又变大,out值相应变大,电机转速加快,电机一直这两个过程中来回变化,如果在变化不大的情况下,在我们眼中看来,电机是基本没有变化的,但measure值与target值相差甚远,所以如果不是特别极端的情况下,电机的P控制是不会导致超调现象的
    那在调车的过程中,我们要怎样去调节参数呢?其实在上面的内容中,我们能知道舵机的P控制能够去达到我们的设定值了,也就是说单纯的P控制理论上是可以控制小车的运动了,即P是舵机最主要的参数,我们可以单纯通过调节P来控制小车的转弯了,但单纯的P控制是不完美的,因为它会使得measure会在target上下浮动,要经过很长的时间才能达到target,这时候就引入了I值和D值了,D值比较容易理解,就是抑制误差剧烈变化,能够使得measure会比较平缓地接近target。而I值则是通过误差的累积来控制输出角度的大小。但赛道不仅仅是直道,有直角弯,也有小弯,还有S弯之类的,这些都是要通过情况分类和慢慢调参数才能得到一个最合适的值。所以一般调舵机的参数的时候一般都是先把I值和D值设为0,再通过调P值慢慢地使得小车能够比较好地转弯后,再引入I值和D值。
    在调节电机的过程中,我当时对它的理解是电机的转速主要是与误差的累积是相关的,当电机没有达到target时,控制量会持续增大,直到转速等于target为止,即I是电机最主要的参数。即我们可以单纯控制I值来让电机达到我们的target,在电机控制中,P值由于与err值相关联,当measure一定时,当err逐渐变小时,P值的输出量也会变小,也就是说,P值除了一开始促进电机的转速外,其他时候都是抑制电机的转速变化。所以一般我们在调电机的参数时,是先把P值和D值设为0,然后慢慢调I值直到找到一个合适的值,再引入P值和D值。

    展开全文
  • 本驱动采用大功率驱动芯片BTS7960组成的全H桥电机驱动模块,具有过热过流保护功能。双BTS7960 H桥驱动电路,具有强劲的驱动和刹车效果,有效隔离单片机与电机驱动!...电赛智能车驱动BTS7960电路板附件下载:
  • 飞思卡尔电机pid控制

    2015-07-09 15:46:08
    飞思卡尔智能车电机pid增量式控制C代码
  • 智能车PID

    千次阅读 多人点赞 2020-01-22 10:43:38
    放假前答应学长写一篇关于pid控制电机的文章,耽搁了几天着手开始写。首先感谢学长带我走上飞思卡尔智能车比赛的路,万分感谢。 我们要了解pid是什么,就得知道pid是干什么的。因为没有通过专业的学过pid的用法,...

    放假前答应学长写一篇关于pid控制电机的文章,耽搁了几天着手开始写。首先感谢学长带我走上飞思卡尔智能车比赛的路,万分感谢。
    我们要了解pid是什么,就得知道pid是干什么的。因为没有通过专业的学过pid的用法,一切都是新鲜的,我只能用我的理解简略的介绍一下pid的用处。我们在做智能车比赛,做车干什么的,让他跑啊,不光得会跑,还得跑的快,不光跑的快,还得跑的稳。这个pid就是让我们的小车跑的又快又稳的利器,当然调的好是利器,调不好····· 我们希望我们的车子以一个恒定的速度去跑,但是我们的车子总归会过弯,上坡,也会遇到种种问题,我们给车子一个目标速度,当车子低于这个目标速度的时候,我们就让车子加速,目标速度与实际速度的差值越大,车子的加速度就会越大,反之越小。这就是简单的pid控制的应用,我们也可以使用pid控制舵机,让两个电机产生差值即让两个后轮子产生差速,辅助舵机过弯。
    我们再系统的讲一下pid什么,下面的原理是从网络上找的的,也可以查看这几篇文章形象解释pidpid算法详解
    强烈推荐看一下这几个文章,而且也要多在网上找一些文章自己琢磨,这是不可缺少的一步
    首先我们知道PID是一个控制系统,pid的应用有很多,当然这里我们只是对与pid对于电机的控制。比例、积分和微分的线性组合,构成控制量u(t),称为:比例(Proportional)、积分(Integrating)和微分(Differentiation)控制,简称PID控制。比例作用P只与偏差成正比,积分作用I是偏差对时间的累积,而微分作用D是偏差的变化率。用一句形象的比喻,比例P代表着现在,积分I代表着过去,而微分D则代表着未来。
    pid的数学模型
    我们来看pid的控制系统图
    pid控制系统
    关于P、I、D三个环节的选择,一般只会用到PI控制或者PD控制,例如速度控制要求稳态无误差,那么就需要积分环节,所以使用PI控制;而使用方向控制的时候,由于不需要无稳态误差,所以使用PD控制即可,D的作用是消除P环节所带来震荡,比如舵机的控制就可以使用pd控制。
    我们接触过pid的人就知道pid控制存在增量式和位置式,对于两者的区别一直搞不清楚,可以阅读pid算法中位置型和增量型有什么区别,分析两者优缺点查阅。

    typedef struct PID
    {
    intSetPoint; //设定目标 DesiredValue
    longSumError; //误差累计
    doubleProportion; //比例常数Proportional Const
    doubleIntegral; //积分常数 IntegralConst
    doubleDerivative; //微分常数Derivative Const
    intLastError; //Error[-1]
    intPrevError; //Error[-2]
    } PID;
    static PID sPID;
    static PID *sptr = &sPID;
    /
    *=============================================================
    =======
    InitializePID Structure PID 参数初始化
    =============================================================
    ======*/
    void IncPIDInit(void)
    {
    sptr->SumError= 0;
    sptr->LastError= 0; //Error[-1]
    sptr->PrevError= 0; //Error[-2]
    sptr->Proportion= 0; //比例常数Proportional Const
    sptr->Integral= 0; //积分常数IntegralConst
    sptr->Derivative= 0; //微分常数Derivative Const
    sptr->SetPoint= 0;
    }
    
    /
    *=============================================================
    ======= 增量式PID 计算部分
    =============================================================
    =======*/
    int IncPIDCalc(int NextPoint)
    {
    registerint iError, iIncpid; //当前误差
    iError= sptr->SetPoint - NextPoint; //增量计算
    iIncpid= sptr->Proportion * iError //E[k]项
            -sptr->Integral * sptr->LastError //E[k-1]项                     
            +sptr->Derivative * sptr->PrevError; //E[k-2]项
    
    //存储误差,用于下次计算
    sptr->PrevError= sptr->LastError;
    sptr->LastError= iError;
    //返回增量值
    return(iIncpid);
    }
    
    
    int16 RightDuty = 0,LeftDuty = 0;						//占空比承载参量
    int error_0_r=0,d_error_r=0,dd_error_r=0;              	//电机误差过渡参量
    int vi_e_r=0,vi_d_r=0; 
    int error_0_l=0,d_error_l=0,dd_error_l=0;              
    int vi_e_l=0,vi_d_l=0;
    
    float SpeedKp=30;                                      	//电机PID参数35
    float SpeedKi=0; //                                    	//10
    float SpeedKd=250;
    ** 函数名称: void MotorControl(void)
    ** 功能描述: 电机速度控制函数
    ** 输    入:
    ** 输    出: 
    ** 说明:正交解码获取编码器读数后 pid进行调节
    ***************************************************/
    void MotorControl(void)
    {
    	volatile int16 right_pulseval = 0,left_pulseval = 0;
    	
        right_pulseval = FTM_QUAD_get(FTM2);                    	//获取FTM 正交解码 的脉冲数(负数表示反方向)
    	FTM_QUAD_clean(FTM2);                              			//清空正交解码计数寄存器
    	
        left_pulseval = lptmr_pulse_get();          				//获取脉冲计数值	
    	lptmr_pulse_clean();                   						//清空脉冲计数器计算值
    	
    	
    	if(right_pulseval < 0)										//脉冲计数这一路依靠另一路的正交解码获取方向
    	{
    		left_pulseval = -left_pulseval;
    	} 
    	if(STOP_flag||Endline_flag)                         		//遥控器或者终点线停车
    	{
    		R_prespeed_speed=0;  
    		L_prespeed_speed=0;
    	}	
    	
        error_0_r = R_prespeed_speed - right_pulseval ;             //期望脉冲数-实际脉冲数
        d_error_r = error_0_r - vi_e_r;                           	//本次误差-上次误差
        dd_error_r = d_error_r - vi_d_r;                          	//本次误差-上次误差-(上次本次误差-上次上次误差)
        vi_e_r = error_0_r;                                     	//保存上次误差的值
        vi_d_r = d_error_r;                                     	//保存上次本次误差-上次误差的值
    	
        error_0_l = L_prespeed_speed - left_pulseval ;              //期望脉冲数-实际脉冲数
        d_error_l = error_0_l - vi_e_l;                           	//本次误差-上次误差
        dd_error_l = d_error_l - vi_d_l;                          	//本次误差-上次误差-(上次本次误差-上次上次误差)
        vi_e_l = error_0_l;                                     	//保存上次误差的值
        vi_d_l = d_error_l;                                     	//保存上次本次误差-上次误差的值
    	
        RightDuty += (int)(SpeedKp*error_0_r
    					   + SpeedKi*d_error_r
    						   + SpeedKd*dd_error_r);//增量式pid  
    	
    	LeftDuty  += (int)(SpeedKp*error_0_l 
    					   + SpeedKi*d_error_l 
    						   + SpeedKd*dd_error_l);
    	
    	if(R_prespeed_speed == 0)  //&& L_prespeed_speed == 0                               	//制动轮胎抱死 正反转交替
    	{
    		if(RightDuty < 0)
            {  
                if(RightDuty<-4000)
                {
                    RightDuty = -4000;
                }
                FTM_PWM_Duty(FTM0 ,FTM_CH0 ,-RightDuty);
                FTM_PWM_Duty(FTM0 ,FTM_CH1 , 0);
            }
            else 
            {
                if(RightDuty>9000)
                {
                    RightDuty = 9000;
                }
                
                FTM_PWM_Duty(FTM0 ,FTM_CH0 ,0);
                FTM_PWM_Duty(FTM0 ,FTM_CH1 ,RightDuty);
            }
    		
    		if(LeftDuty < 0)
            {  
                if(LeftDuty<-4000)
                {
                    LeftDuty = -4000;
                }
                FTM_PWM_Duty(FTM0 ,FTM_CH3 ,-LeftDuty);
                FTM_PWM_Duty(FTM0 ,FTM_CH2 , 0);
            }
            else 
            {
                if(LeftDuty>9000)
                {
                    LeftDuty = 9000;
                }
    			
                FTM_PWM_Duty(FTM0 ,FTM_CH3 ,0);
                FTM_PWM_Duty(FTM0 ,FTM_CH2 ,LeftDuty);
                
            }
    	}
    	else
    	{
    		if( error_0_r < -10)                                 	//实际脉冲数远大于期望脉冲时电机反转减速
    		{     
    			FTM_PWM_Duty(FTM0,FTM_CH0,500);                 		//反转
    			FTM_PWM_Duty(FTM0,FTM_CH1,0);
    		}
    		else
    		{ 
    			if(RightDuty > 9000)                               	//电机占空比限幅
    			{
    				RightDuty = 9000;
    			}     
    			else if(RightDuty < 0)
    			{
    				RightDuty = 0;
    			}
    			FTM_PWM_Duty(FTM0,FTM_CH0,0);             	//电机正转
    			FTM_PWM_Duty(FTM0,FTM_CH1,RightDuty);
    		}
    		
    		if( error_0_l < -10)                                 	//实际脉冲数远大于期望脉冲时电机反转减速
    		{     
    			FTM_PWM_Duty(FTM0,FTM_CH3,500);                 		//反转
    			FTM_PWM_Duty(FTM0,FTM_CH2,0);
    		}
    		else
    		{ 
    			if(LeftDuty > 9000)                               	//电机占空比限幅
    			{
    				LeftDuty = 9000;
    			}     
    			else if(LeftDuty < 0)
    			{
    				LeftDuty = 0;
    			}
    			FTM_PWM_Duty(FTM0,FTM_CH3,0);             	//电机正转
    			FTM_PWM_Duty(FTM0,FTM_CH2,LeftDuty);
    		}
    	}
    
    

    上边是位置式和增量式的实例代码,仅以作为借鉴,其实pid最难的不是把算法写出来,最难的是调参。调参数这个事情只能是一点一点试出来的,这里有个口诀。

    参数整定找最佳, 从小到大顺序查。
    ​ 先是比例后积分, 最后再把微分加。
    ​ 曲线振荡很频繁, 比例度盘要放大。
    ​ 曲线漂浮绕大弯, 比例度盘往小扳。
    ​ 曲线偏离回复慢, 积分时间往下降。
    ​ 曲线波动周期长, 积分时间再加长。
    ​ 曲线振荡频率快, 先把微分降下来。
    ​ 动差大来波动慢, 微分时间应加长。
    ​ 理想曲线两个波, 前高后低四比一。
    ​ 一看二调多分析, 调节质量不会低。

    至于是怎么看的,我也看不懂,还得一点一点摸索。

    有关于pid的优化调整

    我写这篇文章主要是关于pid的优化调整的一些经验。前面提过pid不难写,难在调参,难在优化上。其实增量式和位置式我拿到数学模型后不到半小时就写出来了,但是调参调了一个多星期还是存在问题,还存在pid不够精细的问题。
    由于我做的车是f车型,用的是位置式pid,所以就以位置式为例。

    为了直观的显示pid的控制情况,我们用python进行一下图像化显示。主要是放假回家没有把车子带回来。
    在这里插入图片描述
    来自这篇文章
    有关于python做的pid的图像化展示看我这篇文章

    我用的一开始使用的是增量式,由于一开始没写好程序,小车在走的时候产生咔哧咔哧的声音,一开始猜测是中断函数给的间断时间太长导致的。但其实并不是,后来发现是误差值由本来的 期望-时间 写成 实际-期望 了。
    在学长的建议下我使用了位置式pid,这次很成功。但是在调节差速过弯时,存在一些问题,也就是现在遇到的问题。F车型没有舵机,只能使用差速过弯,而且F车有得天独厚的优势,就是车速快,而且过弯时无需减速,这样对于pid的要求更加高了。
    现在就对于我这个实际情况进行研究。
    1)中断函数的时间
    原来的中断函数的时间是20ms,现在改成了5ms,我们借助我们写的python的pid进行展示结果。下面这张图显示的事时间更长的pid效果,上边那个是时间间隔稍微短一些的效果图。
    在这里插入图片描述
    与上面的那个图片展示的对比,可以看到时间越精细,pid控制的效果越好。
    2)在这里插入图片描述
    我们再来看一下这个数学模型。Kp是比例系数,e(t)是误差值,和Ki,Kd一样,kp是一个给定的参数,但是e(t)是一个动态的量。如果我们把这个动态的量乘以三次方,使这个量变大,会不会让整个pid算法变得更敏感一些。(这里不能乘以偶数次方,因为这个差值可能是一个负数,若是一个偶数次方,负数变正数,模拟数据发生突变,整个pid就会产生大的误差)我们也是使用写好的python程序看一下。
    在这里插入图片描述
    这个现象就非常有意思了,在底端刚开始的时候产生了波动,但是在接近目标值的时候曲线趋于平滑且波动较少,因为没有实体车子试一试,只能这样借助一个模拟的情况来看一下,具体还是以实际测试为准。但是放大误差值的方法的结果超出了我预想的情况,还需要继续分析,但是又情况来看,这种方法也能稍稍提高pid的稳定性。
    3)我猜测可能还与设定的范围有关,也就是设置的windup_gurad。我们的pid设置的精细一点是为了让我们的车子能够丝滑的过弯。差速的区间一定设置好,这也是个模糊的值,得一点一点的试出来,我的车子从组装好到过弯用了接近一个月的时间,速度仅在不到1.5,确实跑的很慢。当然第一次做车我也欣然接受了,但是我想让他跑的再快点,过弯就得再精细点车速才能上去。经过很多次的测试,两个轮子的差值与设置的挡风板也就是区间有很大的关系。类比的推理,pid是否与设定的范围有关系?当然,我们设定的时间间隔是其一,输出的pwm还有pid各个位置的调控的占比是不是应该有个范围。等到回校后会一点一点的测试的,现在只是一个推理。
    4)与硬件有关。
    这一点应该是一定会遇到的问题,比如有一次我在调车,跑着跑着突然失灵,捣鼓半天才发现是电池没电了。轮胎与地面的摩擦力也应该算入其中。轮子齿轮的咬合程度,不能太紧也不能太松。

    就这么多了,毕竟在家里也没把车子带回来,做的这些都是口头空谈。写着一篇文章仅仅是做个学习笔记,里面有不对的多多包涵,也希望看到有错误的地方能帮我指出来,小弟不胜感激。
    希望实验室里的各位大佬都能取得很好的成绩,也祝各位新年快乐,万事胜意。

    展开全文
  • 双BTS7960 H桥驱动电路,具有强劲的驱动和刹车效果,有效隔离单片机与电机驱动!大电流43A! 电机驱动模块BTS7960实物展示: 特点: 1、双BTS7960大电流(43A)驱动; 2、与单片机5V隔离,有效保护单片机; 3、能够实现...
  • 今天我代表历届参加大赛的网友,给大家分享一些有关PID的学习代码、pid算法和研究、PID智能车黑线识别算法及控制策略研究、PID电机调速等等。需要参加智能车大赛的朋友,赶紧充电学习下 PID算法吧。 智能车大赛PID...
  • 自动寻迹智能车涉及到当前高技术领域内的许多先进技术,...本课题是以飞思卡尔智能车竞赛为背景,以单片机作为核心控制单元,以摄像头作为路径识别传感器,以直流电机作为小车的驱动装置,以舵机控制小车转向来设计的。
  • 一条PID黑/白线跟随,基于STC15W4K32S4 MCU的伺服转向智能车。 硬件组件: STC15W4K32S4 MCU× 1 5A DC-DC可调电源模块× 2 TB6612FNG双通道电机驱动器× 1 直流电机(通用)280减速电机。× 2 MG996R数字伺服(通用...
  • 其中包括IBT-2原理图,模块使用说明书,PID源码(STM32\keil),该模块是电机驱动模块,使用BTS7960搭建,可以大电流驱动,最大可达43A
  • 智能车PID控制学习笔记

    千次阅读 多人点赞 2020-05-30 15:29:14
    智能车中还有方向PID控制(舵机调整方向),不过考虑到舵机相当于简化版的伺服电机,还是调节速度收益更大。 为什么要用PID 在理想情况下,小车的速度调节成线性,即当PWM=60%时,小车速度是2M/S;把PWM提高到90%...
  • (3)对智能车直流电机进行数学建模。用增量式 PID,改进PID, 模糊PID,BP神经网络分别对直流电机进行控制并完成相关的算法 设计。 (4)通过MATLAB/Simulink对上述4 种算法进行仿真并对比结 果,得出最适合...
  • 作者:Sumjess ... --- 电机初始化: 直接调用山外的库函数,该函数内部并无修改。  ftm_pwm_init(MOTOR_FTM, MOTOR1_PWM,MOTOR_HZ,0); //初始化 电机 PWM  ftm_pwm_init(MOTOR_FTM, MOTO...
  • 智能小车的电机控制系统为模型,采用自适应模糊PID控制策略进行控制设计,它克服了简单模糊控制和传统PID控制的一些缺点;利用MATLAB7.0软件中的工具箱进行系统的辅助设计与仿真。仿真结果表明,该系统的动态性能、...
  • 智能车制作——速度环PID

    千次阅读 2020-08-26 21:14:29
      做了智能车写这个做个记录,各位大佬勿喷。 PID控制器   PID 控制器(比例-...  在智能车控制中开环意味着电机的PWM是我们自己随便给的一个固定值:而闭环系统的电机PWM是PID控制器的输出。 PID组成   PID
  • 智能车采用PID控制算法,使用CCD线型摄像头作为黑色引导线的检测设备,经LM393比较后供单片机进行数据采集,图像识别,从而可以进行路径识别。电机驱动采用的是PC33886,使用直射型光电传感器来测量速度,并将相关...
  • 两轮智能车PID控制如何实现

    千次阅读 2020-01-03 15:52:39
    PID算法在很多方面都有重要应用,比如电机的速度控制,恒温槽的温度控制,四轴飞行器的平衡控制等等,作为闭环控制系统中的一种重要算法,PID算法是有比例,积分,微分三部分组成。关于PID通俗易懂的一篇文章介绍,...
  • PID智能车中的简单使用

    万次阅读 多人点赞 2018-03-10 15:35:22
    智能车是根据摄像头或者电磁信号来判断车子位置和中线位置的偏差来用舵机校准,而四旋翼的平衡是根据MPU6050和HMC5883共同采集到俯仰角、横滚角和航偏角,然后将他们和设定角度比较,最后用四个电机不同速度进行校准...
  • 针对采用无刷直流电机智能车差速转向问题,提出了一种基于灰色PID控制器的智能车差速转向控制系统。建立了差速转弯模型和动力学分析,在灰色系统理论之上,将无刷直流电机的数学模型区别成不确定部分和确定部分两...
  • 算法(一):智能小车速度控制(PID模糊控制)

    千次阅读 多人点赞 2020-03-22 10:42:36
    概览一、前言二、基于PID 的速度控制1.PID控制器2.PID速度控制二、基于模糊控制的速度控制1....在实现智能小车速度的闭环控制时首选简单有效的PID控制算法。 二、基于PID 的速度控制 1.PID控制器 PID(Proportion I...
  • 本文提出了一种基于积分环节改进的数字PID 智能车舵机控制算法以及间接PID 驱动电机控制算法,阐述了以上两种算法的主要思想和原理,并且对上述两种算法的软件实现方法作具体介绍。智能车车模以HCS12 的16 位单片机...
  • 直流电机PID调节——P

    万次阅读 多人点赞 2018-09-16 10:51:33
    其实要用PID调节的话,最好是使用带有编码器的比较高端一点的直流减速电机,但是因为它价格有点贵,所以我们一般做智能小车就会选用普通的直流电机,但是普通的直流电机也是可以使用PID调节的,虽然它的效果没有带...
  • 飞思卡尔智能车的速度控制模块,PID电机控制,由参考程序哇。
  • 在对无人机,平衡车,智能车,倒立摆的学习过程中,我们可以常常听到一个比较常见的词-PID,那么PID到底是什么呢,到底它有什么作用呢?在这篇文章中我制作了一个基本的电机控制器,来探究PID...
  • 在一个控制系统中,需要闭环控制就势必会有...在这个校准的过程中,就要用到PID了,不同的是,智能车的方向校准是单级PID,四旋翼的角度校准是串级PID。 在以上的控制中,一般我会采用PIT中断来模拟确切的采样周...
  • 我写了一篇总的博客,分享了我参加了十五届智能车竞赛的经历哦~ 2020第十五届全国大学生智能汽车竞赛——基础四轮组入门看这一篇就够了! 我采用的电感摆放方式是这样的,5个电感均采用横电感的摆放方式 代码讲解 ...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 143
精华内容 57
关键字:

智能车电机pid