智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2027|回复: 2
打印 上一主题 下一主题

我写的PID跪求解决

[复制链接]

7

主题

14

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
467
威望
308
贡献
85
兑换币
8
注册时间
2012-3-17
在线时间
37 小时
毕业学校
重庆机电学院
跳转到指定楼层
1#
发表于 2012-6-22 11:23:11 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
我写的PID控制不起,跪求高手解决???、小弟感激不尽
int speed=0;
int s=0;
int s1=0;
void init_PACA()
{
   PACTL=0x50;//PAEN=1为PAC3 PAC2级联/PAMOD=0 PEDGE=0上升沿计数/
   TIOS_IOS7=0;//通道7作输入捕捉
    PACNT=0x00;//寄存数据
}
void TIM_Init(void)
{
    TSCR1=0x00;   //禁止
    TIOS=0x04;      //外部输入捕捉0,1通道,通道2输出比较
    TCTL4=0x09;      //通道0 上升沿触发,通道1下降沿触发
   
    TSCR2=0x07;      //128分频后为625KHZ  50ms  
    TC2=0xF424;       //31250   
    TIE=0x07;          //通道 0,1,2 中断使能      
    TSCR1=0x80;   //使能
}
int pid(int Kp,int Kd,int s)
{
  // s   当前值
  //  s1  上次值
     DDRE=0xff;//点亮单片机上面2个灯
    PORTE=~PORTE;
    s=(s/Kp)+(s1-s)/Kd;     
    return s;
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt 10 void TIM(void)
{      
      
    speed=pid(5,5,PACNT);       // s   当前值
     s1=speed;                        //  s1  上次值
     if(speed>25){Dianji_data=12;}
     if(speed<-15){Dianji_data=-10;}     
     Dianji_data=10+speed;   
         
    PACNT=0;     //寄存数据      
    TFLG1_C2F=1;  //请中断标志位
    TC2=TCNT+0xF424;
   
}

5

主题

123

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3288
QQ
威望
1642
贡献
1068
兑换币
562
注册时间
2012-3-22
在线时间
289 小时
3#
发表于 2012-6-22 16:33:19 | 只看该作者
回复 支持 反对

使用道具 举报

16

主题

228

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1700
威望
950
贡献
394
兑换币
60
注册时间
2012-2-5
在线时间
178 小时
毕业学校
重庆大学
2#
发表于 2012-6-22 11:49:31 | 只看该作者
用PE的看到你们这样写的程序就真心难受!/*------------------------
功能说明:电机舵机PID模块
-----------------------*/
#include"PID.h"
#include "Cpu.h"
#include "Events.h"
#include "KONGZHIMOKUAI.h"

#define KP 0.5   //0.6
#define KI 0.06  //0.08
#define KD 0.04  //0.02

word idea_speed=500;   //单位为cm/s
word real_speed=0;        //单位为cm/s
int uk=0;                          //u[k]
static int number=0;
int ek=0;          //偏差e[k]
static int ek1=0;          //偏差e[k-1]
static int ek2=0;          //偏差e[k-2]
static int uk1=0;          //对uk四舍五入
static int deltauk;
char flag1;
/*----------------------------------
测速模块初始化:cesuchushihua()
----------------------------------*/
void cesuchushihua(void)
{
        setReg(TMRA2_CTRL,0);
        setReg(TMRA2_SCR,0x00);
        setReg(TMRA2_CNTR,0);
        setReg(TMRA2_LOAD,0);
        setRegBitGroup(TMRA2_CTRL,CM,0x01);
}


/*----------------------------------
测速模块:cesumokuai()
----------------------------------*/
void cesumokuai(void)
{
        number=getReg(TMRA2_CNTR);
        setReg(TMRA2_CNTR,0);  
        real_speed=(word)(0.94737*number);     
}

/*----------------------------------
PID模块:dianjiPID()
----------------------------------*/
void dianjiPID(void)
{
                deltauk=KP*(ek-ek1)+KI*(ek)+KD*(ek-2*ek1+ek2);
                ek2=ek1;
                ek1=ek;       
                uk=uk1+deltauk;       
                if(uk<-99)
                        uk=-99;
                if(uk>99)
                        uk=99;
                uk1=uk;
                if(sc_flag==0)
                {
                        if(uk<0)
                        {
                                uk=99+uk;
                                DIANJI_DIRECTION_IO1_SetVal();
                                DIANJI_PWM_SetDutyUS(uk);
                        }
                        else
                        {
                                DIANJI_DIRECTION_IO1_ClrVal();
                                DIANJI_PWM_SetDutyUS(uk);       
                        }
                }
                else
                {
                        sc_flag=sc_flag-1;
                        DIANJI_DIRECTION_IO1_SetVal();
                        DIANJI_PWM_SetDutyUS(60);
                }               
                if(uk1<-95)
                        flag1++;
                else
                        flag1=0;
                if(flag1>4)
                {
                        DIANJI_ENABLE_IO2_ClrVal();
                }               
}
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-30 06:20 , Processed in 0.041101 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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