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

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

QQ登錄

只需一步,快速開始

搜索
查看: 1116|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)直流電機(jī)脈寬調(diào)制調(diào)速程序 閉環(huán)控制原理

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
一、實(shí)驗(yàn)?zāi)康?br /> *掌握脈寬調(diào)制調(diào)速的原理與方法,學(xué)習(xí)頻率/周期測(cè)量的方法;
*掌握使用ST7920控制器在液晶顯示屏上進(jìn)行圖形顯示的方法;
*了解閉環(huán)控制的原理。
二、實(shí)驗(yàn)設(shè)備
*單片機(jī)實(shí)驗(yàn)箱
    *直流電機(jī)模塊
    *液晶顯示屏模塊
*Keil開發(fā)系統(tǒng)
三、實(shí)驗(yàn)原理
1、直流電機(jī)原理
直流電機(jī)具有良好的啟動(dòng)制動(dòng)性能,可以在寬范圍內(nèi)平滑調(diào)速,應(yīng)用范圍廣泛。影響直流電機(jī)轉(zhuǎn)速的主要參數(shù)有電樞的供電電壓和電機(jī)的勵(lì)磁電流,可以通過調(diào)節(jié)這兩個(gè)參數(shù)來達(dá)到調(diào)速的目的。小型直流電機(jī)沒有勵(lì)磁電流,使用調(diào)壓的方式來控制,由電壓決定了電機(jī)轉(zhuǎn)速。這種控制方式需要模擬量輸出,一般要采用D/A器件完成。
2、脈寬調(diào)制原理
脈寬調(diào)制(Pulse Width Modulation,PWM) 是一種能夠通過開關(guān)量輸出達(dá)到模擬量輸出效果的方法。
PWM的基本原理是:通過輸出一個(gè)高頻率的0/1信號(hào),其中有效信號(hào)的比例為d(也叫做占空比),在外圍積分元件的作用下,使得總的效果相當(dāng)于輸出d×A(A為高電壓)的電壓。通過改變占空比就可以調(diào)整輸出電壓,從而使用1根線就可以達(dá)到模擬量輸出的效果。
編程實(shí)現(xiàn)PWM,最簡(jiǎn)單的辦法就是以某個(gè)時(shí)間單位(如0.1ms)為基準(zhǔn),在前N段輸出1,后M-N段輸出0,總體的占空比就是N/M。這種方法由于0和1分布不均勻,所以要求基準(zhǔn)頻率要足夠高,否則會(huì)出現(xiàn)顛簸現(xiàn)象。累加進(jìn)位法可以達(dá)到更穩(wěn)定的效果。思路是將總的周期內(nèi)的0和1均勻分散開。設(shè)置一個(gè)累加變量X,每次加N,若結(jié)果大于M,則輸出1,并減去M;否則輸出0。整體來看,占空比將是N/M。
3、電機(jī)測(cè)速原理
在電機(jī)的同軸轉(zhuǎn)盤上,安裝有磁塊,在轉(zhuǎn)盤下面由對(duì)磁體敏感的霍爾傳感器,隨著轉(zhuǎn)盤轉(zhuǎn)動(dòng),當(dāng)磁體正對(duì)傳感器時(shí),傳感器會(huì)輸出一個(gè)低電平。單片機(jī)利用此電平變化觸發(fā)中斷,統(tǒng)計(jì)在固定時(shí)間(如1秒)內(nèi)中斷發(fā)生的次數(shù),即得到電機(jī)的轉(zhuǎn)速。
4、電機(jī)驅(qū)動(dòng)原理
按照脈寬調(diào)制的原理,使用一個(gè)快速的定時(shí)中斷(0.1ms左右),動(dòng)態(tài)改變輸出0/1,使得總體占空比d=N/M,d就是控制量。
注意實(shí)驗(yàn)箱的電機(jī),低電平旋轉(zhuǎn),因此前述的0/1在使用時(shí)均要取反。
隨著控制量d增大,電機(jī)轉(zhuǎn)速就應(yīng)該提高,但它們之間不是簡(jiǎn)單的對(duì)應(yīng)關(guān)系,因此必須根據(jù)測(cè)量出來的實(shí)際轉(zhuǎn)速進(jìn)行閉環(huán)反饋調(diào)整。
5、閉環(huán)控制原理
閉環(huán)控制系統(tǒng)是控制系統(tǒng)的一種類型,又稱反饋控制系統(tǒng)。把控制系統(tǒng)輸出量,通過一定方法和裝置反送回系統(tǒng)的輸入端,然后將反饋信息與預(yù)定的輸入目標(biāo)量進(jìn)行比較,再根據(jù)比較的結(jié)果對(duì)系統(tǒng)進(jìn)行控制,避免系統(tǒng)偏離預(yù)定目標(biāo)。
6、電機(jī)調(diào)速原理
使用閉環(huán)控制方法,如想將電機(jī)轉(zhuǎn)速控制在預(yù)定值附近,在測(cè)量出當(dāng)前轉(zhuǎn)速之后,將其與目標(biāo)值相對(duì)比,通過控制算法調(diào)整控制量,使當(dāng)前值與目標(biāo)值差距不斷減少。
最簡(jiǎn)單的控制算法可以是加1減1法,即如當(dāng)前轉(zhuǎn)速小于目標(biāo)轉(zhuǎn)速,則增加d(N++),否則減少d(N--),也可以使用更加復(fù)雜的算法。
四、實(shí)驗(yàn)內(nèi)容
使用脈寬調(diào)制調(diào)速方式驅(qū)動(dòng)直流電機(jī)的轉(zhuǎn)動(dòng),測(cè)量轉(zhuǎn)速并根據(jù)目標(biāo)轉(zhuǎn)速進(jìn)行控制,并將運(yùn)行狀態(tài)顯示到液晶顯示屏上。
實(shí)驗(yàn)具體內(nèi)容
1、使用計(jì)數(shù)法測(cè)量直流電機(jī)每秒鐘轉(zhuǎn)動(dòng)圈數(shù);
2、使用脈寬調(diào)制調(diào)速方法,驅(qū)動(dòng)電機(jī)旋轉(zhuǎn);
3、根據(jù)設(shè)定的目標(biāo)轉(zhuǎn)速,動(dòng)態(tài)調(diào)整占空比,使電機(jī)轉(zhuǎn)速能夠穩(wěn)定在目標(biāo)轉(zhuǎn)速附近;
4、通過輸入開關(guān)改變目標(biāo)轉(zhuǎn)速,隨后電機(jī)轉(zhuǎn)速能夠自動(dòng)調(diào)整,穩(wěn)定在目標(biāo)轉(zhuǎn)速附近。
5、在液晶顯示屏上顯示出系統(tǒng)狀態(tài),包括:當(dāng)前轉(zhuǎn)速、目標(biāo)轉(zhuǎn)速、占空比等;
6、同時(shí)在液晶顯示屏上使用圖形模式,顯示一些提示和裝飾信息。
五、實(shí)驗(yàn)步驟
設(shè)計(jì)電路連接方案,進(jìn)行設(shè)備連線
參考連線:
液晶顯示屏模塊:RS連IO1(P0^0),WR連IO2(P0^1),DE連IO3(P0^2)。
直流電機(jī)模塊:DRV連IO5(P0^4),SPEED連INT0(P3^2)。
輸入模塊:將8個(gè)開關(guān)連接至P2,最左側(cè)開關(guān)接P2.7,最右側(cè)開關(guān)接P2.0,可以表示0-255范圍的無符號(hào)整數(shù),用來輸入目標(biāo)轉(zhuǎn)速。


建議按以下步驟依次編程和調(diào)試
1. 將模擬量輸出線接到直流電機(jī)的DRV端,調(diào)節(jié)滑動(dòng)變阻器,可以驅(qū)動(dòng)電機(jī)轉(zhuǎn)動(dòng),連接測(cè)速線,編寫程序測(cè)量電機(jī)轉(zhuǎn)速并顯示;
2. 編寫PWM驅(qū)動(dòng)部分,將輸出信號(hào)連到電機(jī)的DRV端,給一個(gè)固定占空比,測(cè)試該部分功能;
3. 編寫閉環(huán)反饋的控制邏輯進(jìn)行調(diào)速;
4. 對(duì)輸出界面進(jìn)行美觀優(yōu)化。
參考單片機(jī)代碼
  1. //lcd12864.h
  2. #ifndef   _LCD12864_H_
  3. #define   _LCD12864_H_
  4. /**************************************************************
  5.                iO口宏定義區(qū)
  6. ***************************************************************/
  7. sbit CS =P0^0;//對(duì)應(yīng)實(shí)驗(yàn)箱上IO1 RS
  8. sbit SID=P0^1;//對(duì)應(yīng)實(shí)驗(yàn)箱上IO2 RW
  9. sbit SCK=P0^2;//對(duì)應(yīng)實(shí)驗(yàn)箱上IO3 E

  10. void write_command( unsigned char Cbyte );   //寫入指令函數(shù)
  11. void write_data( unsigned char Dbyte );  //寫入指令數(shù)據(jù)
  12. void lcd_init( void );   //顯示屏初始化
  13. void lcd_clear_txt( void );  //顯示屏清屏
  14. void location_xy_12864(unsigned char x,unsigned char y);
  15. void put_str(unsigned char row,unsigned char col,unsigned char *puts);
  16. void put_char(unsigned char row,unsigned char col,unsigned char put);
  17. void lcd_display_picture(unsigned char p[][16]);
  18. #endif
復(fù)制代碼
  1. //lcd12864.c
  2. #include <reg51.h>
  3. #include <intrins.h>
  4. #include "lcd12864.h"
  5. /**************************************************************


  6.       //串行方式控制
  7. /*******************************************************************
  8.               常量聲明區(qū)
  9. ********************************************************************/      
  10. unsigned char code AC_TABLE[]={                   //坐標(biāo)編碼
  11. 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,
  12. 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,
  13. 0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,
  14. 0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,
  15. };
  16. /****************************************************************                        
  17.               發(fā)送一個(gè)字節(jié)
  18. *****************************************************************/
  19. void send_byte(unsigned char dbyte)
  20. {
  21.   unsigned char i;
  22.   for(i=0;i<8;i++)
  23.   {
  24.     SCK = 0;
  25.     dbyte=dbyte<<1;
  26.     SID = CY;
  27.     SCK = 1;
  28.     SCK = 0;
  29.   }
  30. }
  31. /**********************************************************
  32.               接收一個(gè)字節(jié)
  33. ***********************************************************/

  34. unsigned char receive_byte(void)
  35. {
  36.   unsigned char i,temp1,temp2;
  37.   temp1=temp2=0;
  38.   for(i=0;i<8;i++)
  39.   {
  40.     temp1=temp1<<1;
  41.     SCK = 0;
  42.     SCK = 1;               
  43.     SCK = 0;
  44.     if(SID) temp1++;
  45.   }
  46.   for(i=0;i<8;i++)
  47.   {
  48.     temp2=temp2<<1;
  49.     SCK = 0;
  50.     SCK = 1;
  51.     SCK = 0;
  52.     if(SID) temp2++;
  53.   }
  54.   return ((0xf0&temp1)+(0x0f&temp2));
  55. }
  56. /****************************************************************
  57.                       檢查忙狀態(tài)
  58. ******************************************************************/
  59. void check_busy( void )
  60. {
  61.   do send_byte(0xfc);     //11111,RW(1),RS(0),0
  62.   while(0x80&receive_byte());
  63. }

  64. /******************************************************************
  65.            寫一個(gè)字節(jié)的指令
  66. *******************************************************************/
  67. void write_command( unsigned char Cbyte )
  68. {
  69.   CS = 1;
  70.   check_busy();
  71.   send_byte(0xf8);          //11111,RW(0),RS(0),0
  72.   send_byte(0xf0&Cbyte);
  73.   send_byte(0xf0&Cbyte<<4);
  74.   CS = 0;
  75. }
  76. /*************************************************************
  77.                  寫一個(gè)字節(jié)的數(shù)據(jù)
  78. **************************************************************/
  79. void write_data( unsigned char dbyte )
  80. {
  81.   CS = 1;
  82.   check_busy();
  83.   send_byte(0xfa);          //11111,RW(0),RS(1),0
  84.   send_byte(0xf0&dbyte);
  85.   send_byte(0xf0&dbyte<<4);
  86.   CS = 0;
  87. }

  88. /******************************************************************
  89.                          lcd初始化函數(shù)
  90. *******************************************************************/
  91. void lcd_init( void )
  92. {
  93.      write_command(0x30);
  94.      write_command(0x03);
  95.      write_command(0x0c);
  96.      write_command(0x01);
  97.      write_command(0x06);
  98. }

  99. /*******************************************************************************************************
  100.                                  設(shè)定光標(biāo)函數(shù)
  101. ********************************************************************************************************/
  102. void location_xy_12864(unsigned char x,unsigned char y)
  103. {
  104.   switch(x)
  105.   {
  106.     case 0:
  107.       x=0x80;break;
  108.     case 1:
  109.       x=0x90;break;
  110.     case 2:
  111.       x=0x88;break;
  112.     case 3:
  113.       x=0x98;break;
  114.     default:
  115.       x=0x80;
  116.   }
  117.   y=y&0x07;
  118.   write_command(0x30);
  119.   write_command(y+x);
  120.   write_command(y+x);

  121. }
  122. /***********************************************************************************
  123.                   清除文本
  124. ************************************************************************************/
  125. void lcd_clear_txt( void )
  126. {
  127.   unsigned char i;
  128.   write_command(0x30);
  129.   write_command(0x80);
  130.   for(i=0;i<64;i++)
  131.   write_data(0x20);
  132.   location_xy_12864(0,0);      
  133. }
  134. /****************************************************************************************
  135.                       顯示字符串
  136. *****************************************************************************************/
  137. void put_str(unsigned char row,unsigned char col,unsigned char *puts)
  138. {   
  139.   write_command(0x30);
  140.   write_command(AC_TABLE[8*row+col]);
  141.   while(*puts != '\0')
  142.   {
  143.     if(col==8)
  144.     {
  145.       col=0;
  146.       row++;
  147.     }
  148.     if(row==4) row=0;
  149.     write_command(AC_TABLE[8*row+col]);
  150.     write_data(*puts);
  151.     puts++;
  152.     if(*puts != '\0')
  153.     {
  154.       write_data(*puts);
  155.       puts++;
  156.       col++;
  157.     }  
  158.   }
  159. }

  160. /****************************************************************************************
  161.                       顯示字符
  162. *****************************************************************************************/
  163. void put_char(unsigned char row,unsigned char col,unsigned char put)
  164. {   
  165.   write_command(0x30);
  166.   write_command(AC_TABLE[8*row+col]);
  167.   write_data(put);
  168. }

  169. /****************************************************************************************
  170.                       顯示圖片
  171. *****************************************************************************************/
  172. void lcd_display_picture(unsigned char p[][16])
  173. {
  174.     unsigned char x,y,a,b,c;
  175.     write_command(0x34);   
  176.     x = 0x80;
  177.     y = 0x80;
  178.     for(c=0;c<2;c++)//先畫上半屏,再畫下半屏
  179.     {
  180.          for(a=0;a<32;a++)
  181.         {
  182.             write_command(y+a);
  183.             write_command(x);
  184.             for(b=0;b<16;b++)
  185.                 write_data(p[a+c*32][b]);
  186.         }
  187.         x=0x88;
  188.     }
  189.     write_command(0x36);   
  190.     write_command(0x30);   
  191. }
復(fù)制代碼
  1. //main.c
  2. #include <reg51.h>
  3. #include "lcd12864.h"
  4. sbit DRV = P0^4;//對(duì)應(yīng)實(shí)驗(yàn)箱IO5
  5. unsigned char circle=0,current_speed_val=0,target_speed_val=30,flag_1s=0,counter=0,pwm_val=50;   //counter計(jì)數(shù),0-100。pwm_val指的是占空比(脈沖寬度調(diào)整)pwm_val 最大值為100。總份數(shù)在本程序中亦為100
  6. char current_speed[4];
  7. char target_speed[4];
  8. char pwm[4];

  9. unsigned char code img[][16] = {
  10. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  11. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  12. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  13. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  14. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  15. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  16. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  17. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  18. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  19. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  20. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  21. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  22. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  23. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  24. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  25. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  26. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  27. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  28. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  29. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  30. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  31. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  32. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  33. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  34. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  35. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  36. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  37. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  38. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  39. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  40. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  41. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  42. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  43. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  44. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  45. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  46. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  47. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  48. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  49. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  50. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  51. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  52. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  53. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  54. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  55. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  56. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  57. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  58. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  59. 0x00,0x00,0x04,0x02,0x55,0x90,0x00,0x00,0x00,0x00,0x00,0x00,0x3B,0xB4,0x00,0x00,
  60. 0x00,0x00,0x04,0x0B,0xEA,0x6E,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x00,0xAA,0xA8,
  61. 0x00,0x00,0x12,0x24,0x29,0xA3,0x00,0x00,0x00,0x00,0x0A,0x00,0x2C,0x00,0x10,0x04,
  62. 0x00,0x01,0x55,0x37,0x84,0x3B,0x00,0x00,0x00,0x00,0x42,0x20,0x26,0x80,0x0A,0x42,
  63. 0x00,0x02,0x00,0x80,0x04,0x4A,0x80,0x00,0x00,0x0A,0x99,0x10,0x01,0x78,0x00,0x10,
  64. 0x00,0x28,0xAF,0xDA,0x08,0x32,0x00,0x02,0x00,0x2D,0x62,0xC0,0x00,0xD7,0x80,0x08,
  65. 0x2C,0x95,0xB0,0xC0,0x05,0x6E,0x00,0x03,0x40,0xA2,0xBD,0x74,0x00,0x12,0x80,0x00,
  66. 0x02,0x41,0x54,0x14,0x84,0x26,0x00,0x01,0x2E,0xBA,0xAD,0x2E,0x80,0x5A,0xC0,0x00,
  67. 0x00,0x24,0xC0,0x0A,0x41,0x33,0xD0,0x00,0x13,0x46,0x95,0xB3,0x6D,0x56,0x80,0x00,
  68. 0x00,0x1B,0x00,0x00,0x52,0x9C,0x6A,0x00,0x4D,0x58,0x01,0x6C,0xAA,0xE9,0x00,0x00,
  69. 0x0A,0x80,0x00,0x00,0x29,0x4B,0x2D,0x56,0xA5,0x70,0x00,0x0A,0xAD,0x2A,0x00,0x00,
  70. 0x50,0x00,0x00,0x00,0x00,0x29,0xAA,0xAA,0xA5,0x00,0x00,0x60,0x00,0x00,0x00,0x00,
  71. 0x00,0x00,0x00,0x00,0x00,0x84,0xDD,0x55,0x58,0x01,0x55,0x80,0x00,0x00,0x00,0x00,
  72. 0x00,0x00,0x00,0x00,0x00,0x28,0x01,0x4A,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,
  73. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  74. };



  75. void main(void){
  76.         IE=0x81;//EA 空 空 ES ET1 EX1 ET0 EX0
  77.         TCON=0x01;//TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0(IT0=1表示外部中斷0位邊沿觸發(fā))
  78.     TMOD=0x11;//計(jì)時(shí)器0和計(jì)時(shí)器1均為方式1
  79.         TL1 = 0xA4;                //單片機(jī)CPU主頻11.0892MHz,1/12是0.9241M
  80.     TH1 = 0xFF;                //(65536-初值)/(0.9241M)=0.1ms,得到初值是65444=0xFFA4
  81.     TH0=0x4b;
  82.         TL0=0x83;//   (65536-19331)/(0.9241M)=0.05s,19331=0x4b83 ,20次中斷為1秒
  83.         lcd_init();
  84.         lcd_clear_txt();
  85.         lcd_display_picture(img);
  86.         while(1){
  87.           target_speed_val=P2;//將8個(gè)開關(guān)連接至P2,最左側(cè)開關(guān)接P2.7,最右側(cè)開關(guān)接P2.0,可以表示0-255范圍的數(shù)
  88.           target_speed[2]='0'+target_speed_val%10;
  89.           target_speed[1]='0'+(target_speed_val/10)%10;
  90.           target_speed[0]='0'+(target_speed_val/100)%10;
  91.           target_speed[3]='\0';

  92.           put_str(0,0,"占空比");
  93.           put_str(0,6,pwm);
  94.       put_str(1,0,"目標(biāo)轉(zhuǎn)速");
  95.       put_str(1,6,target_speed);
  96.           put_str(2,0,"當(dāng)前轉(zhuǎn)速");
  97.           put_str(2,6,current_speed);

  98.       ET0=1;
  99.           TR0=1;
  100.           ET1=1;
  101.              TR1=1;
  102.         }
  103. }



  104. /****************************************************************
  105. 定時(shí)器T1實(shí)現(xiàn)pwm
  106. ****************************************************************/
  107. void timer1_interrupt() interrupt 3   //每隔100us進(jìn)來一次
  108. {
  109.         TL1 = 0xA4;                //單片機(jī)CPU主頻11.0892MHz,1/12是0.9241M
  110.     TH1 = 0xFF;                //(65536-初值)/(0.9241M)=0.1ms,得到初值是65444=0xFFA4
  111.     counter=(counter+1)%100;
  112.         if(counter<pwm_val)
  113.         {
  114.                 DRV=0;//實(shí)驗(yàn)箱的電機(jī)低電平運(yùn)行
  115.         }
  116.         else
  117.         {
  118.                 DRV=1;
  119.         }
  120.         ET1=1;
  121.     TR1=1;
  122. }

  123. /****************************************************************
  124. 定時(shí)器T0實(shí)現(xiàn)每秒更新轉(zhuǎn)速,并根據(jù)當(dāng)前轉(zhuǎn)速調(diào)整pwm
  125. ****************************************************************/
  126. void timer0_interrupt() interrupt 1{

  127.         EA=0;
  128.         TH0=0x4b;
  129.         TL0=0x83;
  130.         flag_1s++;
  131.     if(flag_1s==20){
  132.           current_speed_val=circle;
  133.           current_speed[2]='0'+current_speed_val%10;
  134.           current_speed[1]='0'+(current_speed_val/10)%10;
  135.       current_speed[0]='0'+(current_speed_val/100)%10;
  136.           current_speed[3]='\0';
  137.       circle=0;

  138.       //根據(jù)當(dāng)前轉(zhuǎn)速和目標(biāo)轉(zhuǎn)速調(diào)整占空比
  139.       if(current_speed_val>target_speed_val){
  140.         if(pwm_val>0)pwm_val--;
  141.       }else{
  142.         if(pwm_val<99)pwm_val++;
  143.       }
  144.       pwm[1]='0'+pwm_val%10;
  145.           pwm[0]='0'+(pwm_val/10)%10;
  146.           pwm[2]='\0';

  147.       flag_1s=0;
  148.         }

  149.     ET0=1;
  150.     TR0=1;
  151.         EA=1;
  152. }

  153. /****************************************************************
  154. 外部中斷0,脈沖技術(shù)記錄電機(jī)的轉(zhuǎn)速,電機(jī)轉(zhuǎn)一圈circle加一
  155. ****************************************************************/
  156. void int0_interrupt() interrupt 0{
  157.      circle++;
  158.          IE0=0;
  159. }
復(fù)制代碼

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产一区二区三区视频 | 久久精品国产一区二区电影 | 国产在线视频一区二区 | 国产精品乱码一区二区三区 | 日韩成人精品视频 | 日日日日日日bbbbb视频 | 天天操天天射综合网 | 亚洲国产专区 | 99精品视频在线观看免费播放 | 国产高清精品在线 | 欧美自拍日韩 | a毛片| 99精品国产成人一区二区 | 一级片免费观看 | 久久男人 | 国产成人免费一区二区60岁 | 成人片网址 | 做a的各种视频 | 成人做爰www免费看视频网站 | 草久在线| 欧美精品1区 | 国产视频二区在线观看 | 69视频在线播放 | 在线小视频 | 国产视频久久 | 综合久久av | 成人欧美一区二区三区在线播放 | 日韩精品久久久 | 99视频精品 | 在线观看亚洲专区 | 亚洲国产偷 | 国产有码| 欧美一区二区大片 | 国产丝袜一区二区三区免费视频 | 欧美一级在线观看 | 国产亚洲欧美在线 | 免费成人高清在线视频 | 激情在线视频网站 | 成人一区二区三区在线观看 | 欧美一区二区三区在线观看视频 | 日本一区二区高清视频 |