找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 7332|回復(fù): 1
收起左側(cè)

直流電機(jī)角度控制電路與單片機(jī)源程序

[復(fù)制鏈接]
ID:142127 發(fā)表于 2017-12-11 21:27 | 顯示全部樓層 |閱讀模式
《自控系統(tǒng)實(shí)驗(yàn)指導(dǎo)書》2017
實(shí)驗(yàn)二、直流電機(jī)角度控制
一、實(shí)驗(yàn)?zāi)康?/strong>
  • 掌握直流電機(jī)角度控制電路的組成。
  • 學(xué)習(xí)直流電機(jī)角度控制系統(tǒng)的設(shè)計(jì)。

二、實(shí)驗(yàn)要求
    在Proteus軟件平臺(tái)上,設(shè)計(jì)模擬控制電路實(shí)現(xiàn)對(duì)直流伺服電機(jī)(MOTOR-SERVO)的角度控制,角度控制在-100到+100度之間階躍,設(shè)計(jì)PID控制器,并調(diào)試參數(shù)使控制性能達(dá)到:階躍響應(yīng)超調(diào)≤5%。

三、控制對(duì)象
直流伺服電機(jī)(MOTOR-SERVO)及其線性功率放大電路如下,其中伺服電機(jī)含有角度檢測(cè)電位器,在反饋電位器加5V電源后,它就可以將角度轉(zhuǎn)換為0~5V電壓信號(hào),H橋驅(qū)動(dòng)電機(jī)進(jìn)行轉(zhuǎn)動(dòng),伺服電機(jī)的角度范圍應(yīng)修改為±179度,電機(jī)轉(zhuǎn)速分別設(shè)置為60、120、180轉(zhuǎn)/分,其他參數(shù)不能改。
四、設(shè)計(jì)提示
用示波器觀察反饋電壓、控制電壓和給定電壓波形,來測(cè)定控制系統(tǒng)的性能指標(biāo)。

  • 實(shí)驗(yàn)結(jié)果

實(shí)驗(yàn)小結(jié)
通過本次試驗(yàn),我學(xué)習(xí)到了直流電機(jī)角度控制電路的組成。以及如何設(shè)計(jì)直流電機(jī)角度控制系統(tǒng),本次實(shí)驗(yàn)較難,經(jīng)過課后努力基本解決了問題。

單片機(jī)源程序如下:
  1. #include <reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char  
  4. #define tim2 (-50000)
  5. #define LCD_COM              0  // Command
  6. #define LCD_DAT  1  // Data
  7. #define LCD1602_DATA P0                                            

  8. sbit LcdRS=P2^0;
  9. sbit LcdRW=P2^1;
  10. sbit LcdEN=P2^2;

  11. sbit DAT = P3^2;
  12. sbit CLK = P3^3;
  13. sbit CS = P3^4;
  14. sbit SW1 = P3^0;
  15. sbit SW2 = P3^1;
  16. sbit LED = P3^7;
  17. sbit IN1 = P1^7;
  18. sbit IN2 = P1^6;
  19. sbit ENA = P1^5;
  20. bit PWM;
  21. uint PWMA,PWMB;
  22. int pos,set,e0,er;
  23. long speed=0;

  24. void DELAY(unsigned int t)
  25. {
  26.   unsigned int i,j ;
  27.   for(i=0;i<t;i++)
  28.               for(j=0;j<50;j++);
  29. }

  30. void LCD_WRITE(unsigned char x,bit WS)
  31. {
  32.   LCD1602_DATA=x;
  33.   LcdRW=0;
  34.   LcdRS=WS;
  35.   LcdEN=1;
  36.   DELAY(1);
  37.   LcdEN=0;
  38. }

  39. void LCD_Initial()
  40. {
  41.   LCD_WRITE(0x38,LCD_COM);   DELAY(5);
  42.   LCD_WRITE(0x38,LCD_COM);   DELAY(5);
  43.   LCD_WRITE(0x01,LCD_COM);   DELAY(5);
  44.   LCD_WRITE(0x06,LCD_COM);   DELAY(5);
  45.   LCD_WRITE(0x0c,LCD_COM);   DELAY(5);
  46. }

  47. void GotoXY(unsigned char x,unsigned char y)
  48. {
  49.   unsigned char code table[4]={0x00,0x40,0x10,0x50};
  50.   LCD_WRITE(0x80+table[x]+y, LCD_COM);
  51. }

  52. void PutCh(char m)
  53. {
  54.   LCD_WRITE(m,LCD_DAT);
  55. }

  56. void Print(unsigned char *str)
  57. {
  58.               while(*str!='\0')
  59.               {
  60.                             PutCh(*str);
  61.                             str++;
  62.               }
  63. }



  64. void Timer2() interrupt 5
  65. {
  66.   static uchar ms;
  67.   TF2=0;
  68.   if(++ms>2)
  69.   {
  70.               er=set-pos;
  71.     speed+=er*15+(er-e0)*2;
  72.     e0=er; ms=0;
  73.               if(speed>833) speed=833;
  74.               if(speed<-833) speed=-833;
  75.   }
  76. }



  77. void Timer0() interrupt 1
  78. {
  79.   ENA=PWM;
  80.   if(PWM)
  81. {TH0=PWMA>>8; TL0=PWMA&0XFF;}
  82.   else
  83.     {TH0=PWMB>>8; TL0=PWMB&0XFF;}
  84.   PWM=!PWM;
  85. }


  86. uint LTC1292(void)
  87. {
  88.               uint i,x;
  89.               CLK=0;DAT=1;CS=0;
  90.               for(i=0;i<14;i++)
  91.               {
  92.                             CLK=1;
  93.                             x<<=1;
  94.                             if(DAT==1) x++;
  95.                             CLK=0;
  96.               }
  97.               CS=1;
  98.               return(x&0xfff);
  99. }

  100.   if(speed>0) {IN1=1; IN2=0;}
  101.   else if(speed<0) {IN1=0; IN2=1;}
  102.   else {IN1=0; IN2=0;}
  103.   if(s<0) s=-s;
  104.   if(s>50000) s=50000;
  105.   PWMA=-s; PWMB=-(50010-s);
  106. }

  107. void main()
  108. {
  109.   int w;
  110.   LCD_Initial();
  111.   GotoXY(1,0); Print("Angle=0000");
  112.   GotoXY(0,0); Print("Set=0000");
  113.   IE=0x87; IT0=1; IT1=1;
  114.   TMOD=0X21; TR0=1;            
  115.   RCAP2H=tim2>>8; RCAP2L=tim2&0xff;
  116.   TH2=tim2>>8; TL2=tim2&0xff;     
  117.   ET2=1;  TR2=1;
  118.   IN2=0;  IN1=0;            
  119.   while(1)
  120.   {            
  121.               if(SW1==1)
  122.                             set=100;
  123.               if(SW2==1)
  124.                             set=-100;
  125.               w=(int)(-(double)LTC1292()*0.088+180);
  126.               pos=w;
  127.     SetPwm(speed);
  128.                 if(set>=0)
  129.      {
  130.                 GotoXY(0,4);
  131.                 PutCh('+');
  132.                    PutCh(set/100+'0');
  133.                 PutCh((set/10)%10+'0');
  134.                 PutCh(set%10+'0');
  135.               }
  136.               else
  137.               {
  138.                 GotoXY(0,4);
  139.                 PutCh('-');
  140.                    PutCh(-set/100+'0');
  141.                 PutCh((-set/10)%10+'0');
  142.                 PutCh(-set%10+'0');
  143. ……………………

  144. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
0.png
所有資料51hei提供下載:
《自控系統(tǒng)實(shí)驗(yàn)指導(dǎo)書》2017.rar (80.58 KB, 下載次數(shù): 97)



回復(fù)

使用道具 舉報(bào)

ID:326699 發(fā)表于 2018-5-16 10:43 | 顯示全部樓層
樓主你的,電路附件可以發(fā)一分完整的嗎,壓縮包里不全
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表