[电机与驱动] 一个简单的PID

本文介绍了一种基于嵌入式系统的速度PID控制算法实现,详细展示了如何通过定义PID结构体来存储关键参数,并在主循环中进行PID计算,最终调整PWM输出以达到期望的速度控制效果。

 


              #include <hidef.h>      /* common defines and macros */
              #include "derivative.h"      /* derivative-specific definitions */
              #include <mc9s12xs128.h>
               //

              #define VV_MIN 0
              #define VV_DEADLINE 0X08   //
速度PID设置死区范围
             typedef struct PID       //
定义数法核心
数据
             {
                signed int vi_Ref;      //
速度PID,速度设定值
               signed int vi_FeedBack;  //
速度PID,速度反馈值


             signed long vi_PreError;  //


                unsigned int v_Kp;      //

速度PID

Ka = Kp
                unsigned int v_Ki;      //
速度PID
Kb = Kp * ( T / Ti )
                unsigned int v_Kd;      //
速度PID

   
s                igned long vl_PreU;    //

                                 //设置调节死区
            if((error< VV_DEADLINE ) && ( error > -VV_DEADLINE ) ); 
              

                     //速度PID计算
              pp->vl_PreU+=(signed long)(pp->v_Kp*d_error+pp->v_Ki*error+pp->v_Kd*dd_error);
  
             else if( pp->vl_PreU >= VV_MAX )   //
速度PID,防止调节最高溢出

                      pp->vl_PreU = VV_MAX;
  
             else if( pp->vl_PreU <= VV_MIN ) //
速度PID,防止调节最低溢出
                        pp->vl_PreU = VV_MIN;
              else
                        ;
                  return ( pp->vl_PreU  );  //
返回预调节占空比


                  }
                      void main(void) {
                             /* put your own code here */
  
                             InitMCu();
                             IncPIDInit();
                             int g_CurrentVelocity=0;   //
全局变量也初始化
                             int g_Flag=0;              //
全局变量也初始化

                              EnableInterrupts;
                              While(1)
                           {     
                             if (g_Flag&&vi_FeedBack)
                                {
                                
PWMOUT+=  v_PIDCalc( PID *pp );
                                g_Flag&=~ vi_FeedBack;
                                             }
                                          }
                                     }
                                 for(;;) {
                                    _FEED_COP(); /* feeds the dog */
                                      } /* loop forever */
                                 /* please make sure that you never leave main */
                                        }

速度PID,前一次,速度误差,,vi_Ref - vi_FeedBack
             signed long vi_PreDerror; //
速度PID,前一次,速度误差之差,
d_error-PreDerror;
电机控制输出
  
                                   }PID;
                   PID  sPID;                //  PID Control Structure

                  void PIDInit(void)
                    {
                     sPID.vi_Ref = 0 ;        //
速度设定值
                     sPID.vi_FeedBack = 0 ;  //
速度反馈值
  
                     sPID.vi_PreError = 0 ;   //
前一次,速度误差,,vi_Ref - vi_FeedBack
                     sPID.vi_PreDerror = 0 ;   //
前一次,速度误差之差,
d_error-PreDerror;

                      sPID.v_Kp = VV_KPVALUE;
                       sPID.v_Ki = VV_KIVALUE;
                       sPID.v_Kd = VV_KDVALUE;
  
                       sPID.vl_PreU = 0 ;      //
电机控制输出值

                                            }                                   
                   unsigned int v_PIDCalc( PID *pp )
                    {
                      signed long  error,d_error,dd_error; 
                      error = (signed long)(pp->vi_Ref - pp->vi_FeedBack); //
偏差计算   
                      d_error = error - pp->vi_PreError;
                      dd_error = d_error - pp->vi_PreDerror;
                       pp->vi_PreError = error; //
存储当前偏差

                       pp->vi_PreDerror = d_error;
定义PID参数
              #define VV_KPVALUE 3       //
比例
              #define VV_KIVALUE 40     //
积分
              #define VV_KDVALUE 3     //
微分
              #define VV_MAX 10000       //
返回的最大值,pwm的周期值

 

 

内容概要:本文系统研究了基于CNN-SVM的卷积神经网络支持向量机融合的数据分类预测方法,聚焦其在工业故障识别中的应用,提供了完整的Matlab代码实现。通过CNN提取输入数据的深层空间特征,再由SVM进行高精度分类,充分发挥两者优势,有效提升了故障识别的准确性、鲁棒性泛化能力。该方法特别适用于处理电力系统、机械设备等领域的高维、非线性、强噪声监测数据,在变压器故障诊断、轴承缺陷识别等场景中具有重要应用价值。文档还整合了机器学习、深度学习、图像处理、路径规划、电力系统优化等多个前沿科研方向的技术资源,配套大量Matlab/Simulink仿真案例Python代码,全面支持科研复现工程实践。; 适合人群:具备一定编程基础,熟练掌握Matlab或Python语言,从事电气工程、自动化、人工智能、机械故障诊断等相关领域研究的研发人员及高校研究生; 使用场景及目标:① 实现工业设备的状态监测多类别故障分类;② 深入理解CNNSVM融合模型的设计原理工程实现细节;③ 借助所提供的丰富算法案例开展科研复现、模型优化系统仿真验证; 阅读建议:建议按照文档目录结构系统化学习,结合百度网盘提供的完整代码资源进行动手实践,重点关注CNN特征提取层SVM分类器之间的数据接口设计参数调优策略,同时可延伸学习文中涉及的其他智能算法及其在电力系统、信号处理等领域的交叉应用,全面提升科研创新能力。
内容概要:本文围绕“考虑电动汽车灵活性的微网多时间尺度协调调度”展开研究,提出了一种基于Matlab代码实现的优化调度模型。该模型深入挖掘电动汽车作为灵活可控负荷分布式储能单元的双重潜力,通过构建日前、日内及实时等多时间尺度的协调调度机制,有效应对光伏发电的间歇性波动性,实现微电网内部功率的动态平衡。研究综合集成了电动汽车集群的有序充放电管理、储能系统协同优化多种需求响应策略,建立了以系统运行成本最小化、可再生能源消纳最大化及供电可靠性最优化为目标的综合数学模型,并采用Matlab进行仿真求解。结果表明,所提方法能显著平抑功率波动,优化源-荷-储资源的时空配置,提升微电网运行的经济性稳定性。; 适合人群:电气工程、能源动力工程、控制科学工程、电力系统及其自动化等专业的研究生、高校科研人员,以及从事智能电网、微电网规划、电动汽车电网互动(V2G)技术研发的工程技术人员。; 使用场景及目标:①研究高比例可再生能源接入背景下,含大规模电动汽车的微电网协同优化运行策略;②掌握多时间尺度滚动优化的建模思想Matlab/Simulink仿真技术;③探索电动汽车聚合商参电力市场辅助服务的可行路径效益评估方法; 阅读建议:建议读者结合提供的Matlab代码进行复现调试,深入理解目标函数构建、约束条件处理及求解器调用等关键技术环节,可尝试引入电池老化模型、用户出行行为不确定性等更贴近实际的因素,以深化研究的实用性前瞻性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值