久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6601|回復: 0
打印 上一主題 下一主題
收起左側

經典的電機的速度PID控制源程序(運用了TI的DMC)

[復制鏈接]
跳轉到指定樓層
樓主
這是使用了TI芯片的一個經典的電機控制PID程序,初學者可以看看學習一下電機控制的理論。大神也可以提出自己的意見和見解哦。


單片機源程序如下:
  1. #include "2407bit.h"
  2. #include "2407c.h"
  3. #include "2407e.h"
  4. #include "Pid_reg1.h"
  5. #include "display.h"
  6. #include "Speed_Reg.h"
  7. #include "Postion_reg.h"
  8. void IoInit(void);
  9. void KeyScan(void);
  10. unsigned int TimeFlag;
  11. unsigned int dispclk=0;
  12. unsigned int StopKeyCnt=0;
  13. unsigned int KeyFlag[5]={0,0,0,0,0};
  14. unsigned int KeyCnt[5]={0,0,0,0,0};
  15. enum KeyTable {SW,ADD,SUB,XIN1,XIN2};
  16. PIDREG1 pid0 = PIDREG1_DEFAULTS;
  17. SPEEDPID speed0={
  18.                         &pid0,                //Point to PID calc
  19.                                 0,                //Speed Freeback
  20.                                 0x01ff,        //Init speed
  21.                                 0x100,        //Speed
  22.                                 (void (*)(int))EVA_PWM1_Init,        //Function for init
  23.                                 (void (*)(int))EVA_PWM1_Updata        //Function for updata
  24.                         };

  25. POSTIONPID        postion0={
  26.                                          &speed0,                        //Speed Reg
  27.                                          0,                                        //Absolute postion
  28.                                          0xfffff,                        //Reference input
  29.                                          0,                                        //Free back        input
  30.                                          0,                                        //Postion Reg Output
  31.                                          0x10,                                //Speed
  32.                                          1023,                                //Max Speed
  33.                                          -1023,                                //Min Speed
  34.                                          0,                                        //E1
  35.                                          0,                                        //E2
  36.                                          130,                                //Kp
  37.                                          250,                                //Ki
  38.                                          0,                                        //Kd
  39.                                          (int (*)(int))PostionPid        //Updata Function
  40.                         };
  41. main()
  42. {
  43.         unsigned int Led;
  44.         asm(" SETC INTM");                //Disable all the interrupt
  45.         asm(" SETC SXM");                //Disable sign extend
  46.         asm(" CLRC OVM");                //Overflow normally
  47.         asm(" CLRC CNF");                //B0 served as data ram
  48.         *SCSR1=0x81FE;                        //CLKOUT is Dsp's Clk Clk=OscX4                                        
  49.         *WDCR=0x00E8;                        //Wacth dog disable
  50.         *IMR=0x0032;                        //Enable INT2 INT6 INT5
  51.         *IFR=0xFFFF;
  52.         IoInit();
  53.         DispInit();
  54.         speed0.init();
  55.         T3Init();
  56.        

  57.         asm(" CLRC SXM");
  58.         asm(" CLRC INTM");
  59.         while(KeyCnt[ADD]<5)
  60.         {
  61.           TimeFlag=0;
  62.           StopKeyCnt=0;
  63.           if(dispclk==25)
  64.           {
  65.           Led=(*PCDATDIR)&0x0001;        //Change Led
  66.           Led=Led^0x0001;
  67.           *PCDATDIR=(*PCDATDIR&0xfffe)|Led;       
  68.           //Display(postion0.PostionF);
  69.           Display(speed0.Qep_F);
  70.           dispclk=0;
  71.           }                     
  72.           //postion0.Updata(&postion0);
  73.           speed0.updata(&speed0);
  74.           KeyScan();
  75.           while(!TimeFlag);
  76.         }       
  77.        
  78.        
  79.         while(1)
  80.         {
  81.           StopKeyCnt=0;
  82.           TimeFlag=0;
  83.           if(dispclk==25)
  84.           {
  85.           Led=(*PCDATDIR)&0x0001;        //Change Led
  86.           Led=Led^0x0001;
  87.           *PCDATDIR=(*PCDATDIR&0xfffe)|Led;       
  88.           Display(postion0.PostionF);
  89.           //Display(speed0.Qep_F);
  90.           dispclk=0;
  91.           }                     
  92.           postion0.Updata(&postion0);
  93.           //speed0.updata(&speed0);
  94.           
  95.           KeyScan();
  96.           if(KeyCnt[XIN1]>4)
  97.                   {
  98.                    postion0.Speed=0;
  99.                    postion0.PostionR=postion0.PostionF;}
  100.           while(!TimeFlag);
  101.         }       
  102.        





  103. }
  104. void interrupt gisr2 (void)
  105. {
  106.         switch ((*PIVR))
  107.         {
  108.          case 0x002F  :
  109.                  {
  110.                          (*EVBIFRA)|=1<<T1PINT;                //Clear interrupt flag
  111.                          (*T3CNT)=0x0000;
  112.                        
  113.                          speed0.Qep_F=*T4CNT;
  114.                          postion0.PostionF+=(int)*T4CNT;
  115.                          //*T2CNT=0;
  116.                          *T4CNT=0;
  117.                          dispclk++;
  118.                          TimeFlag=1;
  119.                                                         
  120.                  }
  121.                  break;
  122.          }
  123.        
  124. }



  125. void interrupt gisr5(void)
  126. {
  127.         /*int temp;
  128.         temp=0;
  129.         switch(*PIVR)
  130.         {
  131.                 case 0x0006:                //RX中斷
  132.                         {
  133.                                 temp=*SCIRXBUF;
  134.                                 if(!((*SCICTL1)&0x04))
  135.                                 {
  136.                                         //rxd data
  137.                                         *(RxdBuf+RxdIndex)=temp;
  138.                                           RxdIndex++;
  139.                                         if(RxdIndex==RxdNum)
  140.                                          {
  141.                                                  RxdIndex=0;
  142.                                                  *SCICTL1=0x0037;       
  143.                                          }
  144.                                                 
  145.                                 }
  146.                                
  147.                                 else if(temp==TxdAdd)
  148.                                 {
  149.                                         //txd data
  150.                                         //txd enable
  151.                                         *SCICTL2=((*SCICTL2)|0x0001)&0xfffd;                //發送中斷使能
  152.                                         (*PFDATDIR)|=(1<<EN485);                                        //485 發送使能
  153.                                         *SCITXBUF=*(TxdBuf+TxdIndex);
  154.                                         TxdIndex++;
  155.                                 }
  156.                                 else if(temp==RxdAdd)
  157.                                          *SCICTL1=0x0033;
  158.                          }
  159.                          break;
  160.                  case 0x0007:                //TX中斷               
  161.                         {
  162.                         //txd data
  163.                                 if(TxdIndex<(TxdNum+1))
  164.                                 {
  165.                                         *SCITXBUF=*(TxdBuf+TxdIndex);
  166.                                         TxdIndex++;
  167.                                 }
  168.                                 else
  169.                                 {
  170.                                         TxdIndex=0;
  171.                                         *SCICTL2=(*SCICTL2&0x0fffe)|0x0002;        //接收中斷使能
  172.                                                                        
  173.                                         (*PFDATDIR)&=~(1<<EN485);                        //485 接收使能
  174.                                        
  175.                                 }       
  176.                         }
  177.                         break;
  178.                 default:break;
  179.                
  180.         }*/
  181. }

  182. void interrupt gisr6(void)
  183. {
  184. /*        int        i;
  185.         switch(*PIVR)
  186.         {
  187.                 case 0x0004:                                //AD中斷
  188.                         {
  189.                        
  190.                                 *EVBIFRA=1<<T1UFINT;                //Clear T1UFINT interrupt       
  191.                                 (*ADCTRL2)|=0x0002;                        //Clear AD interrupt
  192.                                 for(i=0;i<8;i++)
  193.                                  AdValue[i]=*(RESULT8+i)>>6;
  194.                          }
  195.                          break;
  196.         }*/                         
  197. }
  198. void IoInit(void)
  199. {
  200.         (*MCRA)&=~((1<<IN_DSP0)|(1<<IN_DSP1)|(1<<IN_DSP2)|(1<<IN_DSP3)|(1<<IN_DSP4)|(1<<IN_DSP5)|(1<<IN_DSP6)|(1<<IN_DSP7));
  201.         (*MCRB)&=~(1<<IOPC0);
  202.         (*MCRC)&=~((1<<OUT_DSP0)|(1<<OUT_DSP1)|(1<<OUT_DSP2)|(1<<OUT_DSP3)|(1<<OUT_DSP4)|(1<<OUT_DSP5)|(1<<OUT_DSP6)|(1<<OUT_DSP7));
  203.         (*PADATDIR)&=~(IN_DSP0+8);
  204. ……………………

  205. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
經典的電機的速度PID控制程序(運用了TI的DMC).rar (71.38 KB, 下載次數: 60)




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲在线免费观看 | 国产亚洲一区精品 | 黄网免费看 | 久久精品一区 | 91av视频在线播放 | 国产九九av| 成人免费在线观看 | 成人精品高清 | 综合国产第二页 | 国产日韩精品视频 | 日韩一区二区三区av | 色综合久久天天综合网 | 中文字幕第二区 | 国产精品美女一区二区三区 | 精品一区二区三区四区五区 | 久久综合香蕉 | 做a的各种视频 | 精品免费国产一区二区三区 | 久久国产传媒 | 成人h视频在线 | 欧美日韩综合视频 | a级黄色网| 国产乱码久久久久久 | 激情欧美日韩一区二区 | 国产影音先锋 | 成人精品国产免费网站 | 免费视频久久久久 | 日韩欧美在线免费观看视频 | 国产精品一区二区久久精品爱微奶 | 日韩成人免费视频 | 精品亚洲国产成av人片传媒 | 日韩激情在线 | 一二区成人影院电影网 | 欧美日韩成人 | 中文字幕一区在线 | 精品视频在线播放 | 波波电影院一区二区三区 | 日韩欧美一二三区 | 日韩亚洲欧美综合 | 国产精品99久久久久久久vr | 色综合一区二区 |