新闻  |   论坛  |   博客  |   在线研讨会
用瑞萨R8C2L单片机实现带PID控制120度方波无刷直流马达BLDC
xcbxie | 2011-04-22 17:06:51    阅读:1903   发布文章

用瑞萨R8C2L单片机实现带PID控制120度方波无刷直流马达BLDC
                                                                            (立花商会深圳代表处--谢工0755-2519 5639)
最近,发现有很多客户有对(BLDC)无刷直流马达的需求,于是就想做个马达Demo板出来,供客户学习参考下。由于我们是瑞萨的一级代理商,近水楼台先得月,就从公司内部拿了R8C2L来实现带Hall的120度BLDC带PID控制。另外,现在电机马达这块,其实现在很多公司也都是用瑞萨的来做,有很多优势,当然这是题外话不说了。

功能如下:
1.LCD显示实际转速,显示非常稳定,误差个位数以内,基本<3以内
2.模拟电风扇分为3档:1档:1200R/Min, 2档:2000R/Min,3档:2700R/Min 
3.PID闭环控制,无论是负载还是电压变化,速度会自动修正到设定速度,反应速度快。
3.电机为直流无刷电机。DC24V,4000 RPM, MCU: R8C2L
先上图:

MCU设计分析:
1. 利用R8C2L内部有一个TRD的互补PWM输出来驱动马达,互补PWM有一个Dead Time死区时间设置,如果电机是采用上下桥双相调制,那就非常有用了。我这是采用双相调制,互补PWM驱动。

2.利用R8C2L内部还有个TRC捕捉中断,用来捕捉Hall的换相,Hall每变化一次,就会有一个中断进来,可以进来换相,同理还有内部计数用来读取实际速度,非常实用,这里赞一下。

原理图参考R8C25如下:

PID 控制
PI闭环控制:
开环:就是没有反馈,闭环就是有速度反馈信息。如下图 

一个基本闭环组成有:
1.反馈元素:Hall传感器及Timer RB反馈回速度信息
2.错误检测:AD-Pot设定速度及实际测量速度计算相差误差
3.增益放大:能通过增益Gate放大误差计算出电压及校正速度
总结:PI作用就是将速度误差转化为电流,能过调节PWM来控制马达电压及电流实现调速的目的。
Error = Wr * - Wr                                                                        //calculate the speed error
Current_Reference = P-Gain *Error;                                          //calculate our current reference
Current_Reference = Current_Reference + Current_Integral;   //add in the integral
Current_Integral = Current_Integral + (Error * I-Gain);               //accumulate the error as Integral

Voltage_PWM = Current_Reference * Motor_Impedance;          //Current to absolute motor voltage
Ratio = Voltage_PWM / Voltage_Bus;                                         //ratio of motor voltage to bus voltage
PWM_Counts = Ratio * PWM_MAX;                                            //finally actual PWM counts to load in timer 

我这里采用的是位置式PID,个人感觉位置式PID中若只用P调节反应快一点,增量式PID稳定点效果好一点,我取了前者,这个根据产品需要,需要自己多测试最佳点才行。
//=============================================================
// ----Function: LocPIDCalc()
// ------Syntax: unsigned int locPIDCalc(unsigned int NextPoint);
// -Description: Location Digital PID calculate
// -------Notes: Basic Location Digital PID
// --parameters: Next Point
// -----returns: Location controls parameter
//=============================================================
int LocPIDCalc(int NextPoint)
{
    register int  iError,dError;
 
 iError = sptr->SetPoint - NextPoint;       // 偏差

 sptr->SumError += iError;     // 积分
 dError = iError - sptr->LastError;    // 当前微分
 sptr->LastError = iError;
 return(sptr->Proportion * iError            // 比例项
           + sptr->Integral * sptr->SumError  // 积分项
           + sptr->Derivative * dError);
}

做到这里,几个主要点已经介绍完了,详情还望大家多多交流一下,一起进步。
再发实图
有项目合作或技术交流,多可以来电咨询,大家共同进步!

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客