智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1248|回复: 1
打印 上一主题 下一主题

电机控制求指导

[复制链接]

10

主题

28

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2091
威望
979
贡献
534
兑换币
438
注册时间
2012-4-21
在线时间
289 小时
跳转到指定楼层
1#
发表于 2013-7-8 22:01:32 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 (]forever`_Y 于 2013-7-8 22:14 编辑

怎么才能让加减速更线性点 现在加减速老一冲一冲的 很影响车子行驶时的稳定 不知道程序有没问题
int IncPIDCalc(int NextPoint)
{
   int iError, iIncpid; //当前误差

   yy= NextPoint;
   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;
    xx=iError;


    return(iIncpid);                          //返回增量值
}

#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt  66  PIT0Interrupt(void)//测速的中断程序  

{

     DDRB=0XFF;
    n++;
    if(n>10)
    {
       n=0;
       PORTB_PB4=~PORTB_PB4;
    }

    Pulse_Count=PACNT;
    mapan=Pulse_Count;//车速度值  
    PITTF_PTF0=1; //定时器 0 标志位清零  
    PACNT=0X0000;  

    sptr->SetPoint =Dianji_data;
     //目标是Dianji_data
    Ideal_Speed+=IncPIDCalc(Pulse_Count);   

      nn=Ideal_Speed;
  if(Ideal_Speed>0&&Ideal_Speed<75)
     Ideal_Speed=75;

    if(Ideal_Speed>170)  

        Ideal_Speed=170;  

     if(Ideal_Speed<=0)  

        Ideal_Speed=0;     

     ;

        PWMdian_Duty(Ideal_Speed);                  

       PITTF_PTF0=1;
                    //定时器 1 标志位清零   



}

7

主题

128

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2004

优秀会员奖章活跃会员奖章

威望
995
贡献
645
兑换币
471
注册时间
2012-9-24
在线时间
182 小时
2#
发表于 2013-7-9 09:51:37 | 只看该作者
同求
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-10-7 17:25 , Processed in 0.059620 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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