找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

手机号码,快捷登录

Flux电机有限元分析教程西莫团购入口 | 奖励入口当当网购物入口 | 奖励入口欢迎使用!西莫论坛App开放下载Motor-CAD电机多物理域设计教材购买入口 | 奖励入口
★新会员论坛须知★《西莫电机技术》第39期发售火热进行中Flux电机电磁阀有限元分析教程团购入口 | 奖励入口论坛微信公众平台欢迎入驻
西莫电机及相关产品供需交流群开放邀请★ 论坛VIP会员申请 ★Motor-CAD.MANATEE电磁热振动噪声教程 | 奖励入口西莫团队欢迎您的加盟!
宣传推广合作请联系QQ:25941174西莫电机论坛微信群正式开放Flux变压器与电抗器有限元分析团购入口 | 奖励入口西莫电机论坛技术版区QQ群汇总
查看: 800|回复: 0

[求助] 单相交流电机PID控制问题

[复制链接]

该用户从未签到

发表于 2015-3-17 13:11 | 显示全部楼层 |阅读模式 来自: 中国浙江宁波

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
现在在做一个50HZ,1500转的单相交流电机的调速器(闭环,测速通过测速发电机),遇到一些问题:
1、空载时,有轻微的震荡。
2、假负载后,电机时快,时慢,稳定不下来;
采用的是模糊算法,仅有积分和微分相。
这里面是模糊算法程序,请高人指点
void ChangePwm(uint n)
{
                uint i;
                static uchar accint=0,t=0;

                if(++accint>10)                        //100ms
                {
                        accint =0;
                        if((setSpeed+2)>conSpeed)
                        {                                
                                i= conSpeed + myReg[REG_ACCT];
                                if(i>setSpeed)  i=setSpeed;
                                conSpeed = i;       
                        }
                        else if(setSpeed<(conSpeed-2))
                        {
                                i= conSpeed - myReg[REG_ACCT];
                                if((i< setSpeed)||(i>0x8000))  i=setSpeed;                 //&#198;úí&#251;&#203;ù&#182;èμ&#196;&#214;μ
                                conSpeed = i;
                        }
                }               
//éè&#182;¨&#203;ù&#182;è ó&#235; êμ&#188;ê&#203;ù&#182;è±è&#189;&#207;
                                pwm_cal = conSpeed/5;
                                diff = conSpeed-n;
                                if(diff>200)
                                {
                                        pwm_cal = pwm_cal + 80;
                                }
                                else if(diff<(-200))
                                {       
                                        pwm_cal = pwm_cal - 80;
                                }
                                else
                                {
                                                        if(conSpeed> n)                                                              //PIDμ÷&#189;ú                ′&#203;′|ê1ó&#195;μ&#196;ê&#199;&#196;£&#196;aPID                2&#206;êyí¨1yê±&#188;&#228;μ÷&#189;ú
                                                        {   
                                                       
                                                                if(diff> 100)  {  pwm_cal = pwm_cal + diff/2;  }
                                                                else if(diff> 50)  {  pwm_cal = pwm_cal + diff/4;  }
                                                                else  if(diff >20) {        pwm_cal =pwm_cal + 4;        }
                                                                else if(diff> 4)
                                                                        pwm_cal = pwm_cal +1;
                                                        }   
                                                        else if(conSpeed<n)
                                                        {                          
                                                                if(diff< -100)  {  pwm_cal = pwm_cal+diff/2 ;  }
                                                                else if(diff< -50)  {  pwm_cal = pwm_cal +diff/4;  }
                                                                else if(diff< -20)        {         pwm_cal =pwm_cal - 4;        }
                                                                else if(diff< -4)
                                                                        pwm_cal = pwm_cal -1;
                                                        }
                                //±&#190;′&#206;êμ&#188;ê&#203;ù&#182;è ó&#235; é&#207;′&#206;êμ&#188;ê&#203;ù&#182;è±è&#189;&#207;          diff
                                        if(t>2)
                                        {
                                                t = 0;
                                                if((diff<50)&&(diff>-50))
                                                        pwm_cal = pwm_cal;
                                                else if((diff<100)&&(diff>-100))
                                                        pwm_cal = pwm_cal + (diff-last_diff)*3;
                                                else
                                                        pwm_cal = pwm_cal + (diff-last_diff)*8;
                                        }
                                        else
                                                t++;
                                }
                                         
                last_diff =diff;
                if(pwm_cal< 0)  pwm_cal= 0;         
                if(pwm_cal> 5000) pwm_cal= 5000;
       
                out_pwm = (pwm_cal+last_pwm[0]+last_pwm[1]+last_pwm[2])/4;          //′&#230;&#214;ü&#214;&#174;&#199;°μ&#196;&#188;&#184;′&#206;PWM&#213;&#188;&#191;&#213;±è&#214;μ
           last_pwm[0] = last_pwm[1];
                last_pwm[1]        = last_pwm[2];       
                last_pwm[2]= pwm_cal;
}
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

西莫电机论坛微信公众平台欢迎您的关注!

QQ|Archiver|手机版|小黑屋|西莫电机圈 ( 浙ICP备10025899号-3|浙公网安备:33028202000436号 )

GMT+8, 2024-12-26 00:00 , Processed in 0.262642 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表