智能车制作

标题: 配合上位机的PID调整方案,含代码 [打印本页]

作者: 模拟cmos    时间: 2012-3-31 10:45
标题: 配合上位机的PID调整方案,含代码
简单来说,pid就是通过定时中断,每隔一个周期进行一次速度改变,最终达到理想速度
把自己的方案贴上来,抛砖引玉
首先,PIT定时中断初始化,此处以20ms为例
  1. /********************定时中断初始化 PIT 初始化*******************************/
  2. void INIT_PIT(void) {

  3.    PITCFLMT_PITE=0;     //PIT is disabled (40Mbus clock)
  4.    PITCE_PCE0=1;        //PIT chanel_0 定时器 0 (共四个定时器)enabled   
  5.    PITLD0=9999;         //1 毫秒 PIT Load Register
  6.    PITMTLD0=79;          //time-out period = (PITMTLD + 1) * (PITLD + 1) / fBUS
  7.    PITMUX=0x00;          //0 The corresponding 16-bit timer counts with micro time base 0
  8.    PITINTE_PINTE0=1;     //PIT Interrupt Enable Register
  9.    PITCFLMT_PITE=1;       //PIT is enabled
  10. }  
复制代码
在中断函数中写下中断内容
  1. /****************************定时中断进行 pid 计算******************************/  
  2.   
  3. #pragma CODE_SEG __NEAR_SEG NON_BANKED  
  4. void interrupt 66  PIT0Interrupt(void)//测速的中断程序  
  5. {
  6.     CarSpeed=PACNT;//车速度值  
  7.     PITTF_PTF0=1; //定时器 1 标志位清零  
  8.     PACNT=0X0000;  
  9.     Speed_Ctrl();                   //Speed_PID  
  10.     PWMDTY1=SpeedPWM;      

  11. PITTF_PTF0=1; //定时器 1 标志位清零   
  12. }     
  13. #pragma CODE_SEG DEFUALT /**/
复制代码
再根据自己小车的实际情况 提供速度选择方案
  1. /************************速度控制**************************************/  
  2. void Speed_Ctrl(void) {  
  3.   
  4. if(虚线)        
  5.        SpeedPWM=Speed_PID(Speed_Normal,CarSpeed);  
  6. else  
  7.        SpeedPWM=Speed_PID(Speed_Bend,CarSpeed);  
  8.   
  9. }  
复制代码
其中pid算法函数
  1. /****************************速度 PID*******************************/  
  2. unsigned char Speed_PID(unsigned int ideal_speed,unsigned int pulse_count) //连个参数分别为理想速度和 实际速度
  3. {  
  4.     float temp;  
  5.     error=ideal_speed-pulse_count;  
  6.     temp=error/10+50*(error-pre_error)/100;   
  7.     SpeedPWM=SpeedPWM+(int)(temp);  
  8.       pre_error=error;  
  9.       
  10.     if(SpeedPWM>200)  
  11.         SpeedPWM=200;  
  12.       if(SpeedPWM<=0)  
  13.         SpeedPWM=0;  
  14.       return SpeedPWM;  
  15. }
复制代码
然后配合上位机绘图功能 ,空载和负载情况下分别测试,直到出现pid经典波形
[attach]21713[/attach]
[attach]21714[/attach]
方案比较简单,欢迎提出各种改进
AD:如果你需要上位机,可以移步http://item.taobao.com/item.htm?id=14478455287


补充内容 (2012-3-31 16:41):
清明~~~小长假 大促销 全场6折!!!!!!!!!!!!!!!!!!!!!!!
店主一定会提供给你的最可靠的技术支持!

补充内容 (2012-3-31 18:09):
1
2
3
5
4
6
7
8
作者: 模拟cmos    时间: 2012-3-31 16:41

作者: 模拟cmos    时间: 2012-4-1 09:24

作者: 小鱼儿6783    时间: 2012-4-1 13:15

作者: xining_yang    时间: 2012-4-1 20:42

作者: zjl3369    时间: 2012-4-1 21:20
我想问下楼主,这是用什么编的?还有这个上位机可以用于这次的规则吗?
作者: 模拟cmos    时间: 2012-4-1 22:40
zjl3369 发表于 2012-4-1 21:20
我想问下楼主,这是用什么编的?还有这个上位机可以用于这次的规则吗?

当然可以,就是为这次比赛设计的

作者: IT天下    时间: 2012-4-9 17:11
楼主 ,上位机是用什么编写的啊,能给我们发一份看看嘛?942836117,我的扣扣
作者: 模拟cmos    时间: 2012-4-10 13:06
IT天下 发表于 2012-4-9 17:11
楼主 ,上位机是用什么编写的啊,能给我们发一份看看嘛?942836117,我的扣扣

上位机是用vc做的 你可以到这里看下  http://xiaohaizhu.taobao.com/

作者: 模拟cmos    时间: 2012-4-29 21:31

作者: zsk-    时间: 2012-5-28 07:29

作者: 模拟cmos    时间: 2012-6-12 21:54

作者: no1freedman    时间: 2012-6-17 23:08

作者: JokerJ    时间: 2012-6-18 18:18
增量式?
作者: lvminhu    时间: 2012-7-11 06:49
为什么我用5ms定时中断,最后结果就没有超调呢?并且我把p参数调大时,还是不出现,, ?我在场中断里面就可以,楼主遇到这个问题没??
作者: 沉思乐署1    时间: 2012-7-12 13:23
谢谢
作者: huayuc19    时间: 2012-10-27 23:26
天坑。。。。卖这么贵。
作者: qual9109    时间: 2012-12-8 00:05
这个不错
作者: 微电酱油    时间: 2013-1-2 11:14

作者: 割麦子    时间: 2013-2-16 20:06
好东西
作者: dlyt03    时间: 2013-2-17 15:04
好!!
作者: xuezihan    时间: 2013-2-18 02:43
{:soso_e100:}
作者: dlyt03    时间: 2013-2-24 09:27
参考下
作者: 酷酷羊    时间: 2013-3-7 18:36
原来是买东西的

作者: 我叫阿猫。    时间: 2013-3-7 23:27
好贵啊
作者: 释放    时间: 2015-1-29 11:24
:):)




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2