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

標(biāo)題: 單片機水位控制雙位+PID源程序+電路圖 [打印本頁]

作者: luxuana    時間: 2019-7-12 16:09
標(biāo)題: 單片機水位控制雙位+PID源程序+電路圖
電路原理圖如下:



1  整機設(shè)計
1.1 設(shè)計要求
1.1.1設(shè)計任務(wù)
以實驗室的過程對象為控制對象,設(shè)計控制系統(tǒng),完成單容液位的定值控制。要求能夠顯示當(dāng)前液位。
1.1.2性能指標(biāo)要求
(1)設(shè)計制作系統(tǒng)硬件電路                                                                          
(2)實現(xiàn)控制、信號檢測(顯示)及調(diào)節(jié)器控制規(guī)律;                                 
(3)參數(shù)整定,使系統(tǒng)能夠快速克服擾動作用;                                            
(4)其他功能。                     
1.2 整機實現(xiàn)的基本原理及框圖
1.2.1基本原理
測量變送器為壓力式液位變送器,輸出信號為0~10V電壓,執(zhí)行器采用電動調(diào)節(jié)閥,接收0~10V信號。設(shè)計調(diào)節(jié)器(模擬或數(shù)字式),能夠根據(jù)用戶設(shè)定,將液位控制在要求值(采用雙位控制,PID或PI控制規(guī)律)。

具體請下載觀看吧,有說明。

單片機源程序如下:
  1. #include "stc15.h"
  2. #include<TM1638.h>
  3. #include<delay.h>
  4. #include<KeyPro.h>
  5. #include<STC15_AD.h>
  6. #include<STC15_pca_pwm.h>

  7. //定時器初始化
  8. void T0_init(void)                  
  9. {
  10.         TMOD=0x01;
  11.         TH0=(0-1000)/256;
  12.         TL0=(0-1000)%256;
  13.         TR0=1;
  14.         ET0=1;
  15.         EA=1;
  16. }
  17. unsigned char u;
  18. unsigned char BI_POSCTR(void)  //雙位控制
  19. {
  20.         if(Para_V[1]<Para_V[2]-2) //當(dāng)前值<設(shè)定值-2
  21.           {
  22.            u = 200;                 //開200,最大可到255
  23.           }
  24.         else if(Para_V[1]>Para_V[2]+2)
  25.           {
  26.            u = 0;
  27.           }
  28.          else
  29.                  u=100;                        //保持開度為100
  30.          return u;
  31. }

  32. float kp,ki,kd;
  33. int ek,ek_1,ek_2;
  34. int uk,uk_1;
  35. unsigned char PID(void)
  36. {
  37.    kp=(float)Para_V[3]/10;
  38.    ki=(float)Para_V[4]/10;
  39.    kd=(float)Para_V[5]/10;
  40.    ek_2=ek_1;
  41.    ek_1=ek;
  42.    ek=(int)Para_V[2]-(int)Para_V[1];
  43.    uk_1=uk;
  44.    uk=uk_1+kp*(ek-ek_1)+ki*ek+kd*(ek-2*ek_1-ek_2);        //增量型PID公式
  45.         if(uk>255) uk=255;        //限制溢出
  46.         if(uk<0) uk=0;
  47.    return (unsigned char)uk;
  48. }

  49. unsigned int OneusCNT=0;
  50. unsigned int Ones=0;
  51. unsigned char x=1;
  52. unsigned char s=1;
  53. unsigned char key_value;
  54. float H=0;
  55. float num=0;
  56. void main()
  57. {       
  58.         P2M0=0;
  59.         P2M1=0;       
  60.         PWM_Init();
  61.         InitADC();
  62.         T0_init();
  63.         delay_ms(10);
  64.         delay(10);
  65.    while(1)
  66.    {
  67.         key_value=Read_key();
  68.         if(key_value!=0)
  69.         {
  70.         KeyPro(key_value-1);
  71.         Cur_V[0]=Para_V[2];                 //顯示區(qū)域讀取設(shè)定值
  72.         while(key_value==Read_key()); //按一次限制只執(zhí)行一次
  73.         }

  74.            if(Para_V[0]==0&&x)          //對象為0且采樣時間到,運行
  75.         {
  76.           SetPWM0(0);
  77.           x=0;           //初始化時間
  78.       Para_V[1]=Cur_V[2]=GetADCResult(0);//讀取adc

  79.           switch(Para_V[6])                //控制方式選擇
  80.           {
  81.                   case 0:
  82.                           SetPWM1(Para_V[7]);
  83.                          break;
  84.                 case 1:
  85.                          BI_POSCTR();
  86.                          SetPWM1(u);
  87.                          break;                                  
  88.                 case 2:
  89.                         PID();
  90.                         SetPWM1(uk);
  91.                         break;

  92.                 default:  break;
  93.           }
  94.         }
  95.         if(Para_V[0]==1&&s)         //同上
  96.         {
  97.           SetPWM1(0);
  98.           s=0;
  99.           num=(float)GetADCResult(6);//獲取adc
  100.                 H=1314*num-428; //轉(zhuǎn)化成測量值,
  101.       Para_V[1]=Cur_V[1]=(unsigned int)(H*10);
  102.           switch(Para_V[6])
  103.           {
  104.                   case 0:
  105.                           SetPWM0((unsigned char)Para_V[7]);
  106.                          break;
  107.                 case 1:
  108.                          BI_POSCTR();
  109.                          SetPWM0(u);
  110.                          break;                                  
  111.                 case 2:
  112.                         PID();
  113.                         SetPWM0(uk);
  114.                         break;
  115.           }
  116.         }
  117.         if(Setting)           //顯示
  118.                 Display(ptPra,Para_V[ptPra],11,SetV);
  119.         else
  120.                 Display(ptPra,Para_V[ptPra],ptCur,Cur_V[ptCur]);
  121.    }
  122. }

  123. void T0_IRQ() interrupt 1//采樣時間
  124. {
  125.         TH0=(0-1000)/256;
  126.         TL0=(0-1000)%256;
  127.         OneusCNT++;
  128.         Ones++;

  129.         if(OneusCNT>=50)
  130.         {
  131.          x=1;
  132.          OneusCNT=0;       
  133.         }
  134.         if(Ones>=300)
  135.         {
  136.          s=1;
  137.          Ones=0;       
  138.         }
  139. }
復(fù)制代碼

所有資料51hei提供下載:
水位控制雙位+PID.7z (1.17 MB, 下載次數(shù): 67)


作者: 制裁    時間: 2021-1-20 12:39
請問一下前輩,有整套PCB嗎




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 精品久久99 | 久久久成人网 | 久久亚洲国产精品 | 在线欧美一区 | 亚洲精品日本 | 成人免费视频观看 | 久久久久国产精品免费免费搜索 | 久久免费精品视频 | 天天干国产 | 亚洲精品乱码久久久久久蜜桃 | 97久久精品午夜一区二区 | 久久免费精品视频 | 欧美日韩综合 | 欧美一二三四成人免费视频 | 成人精品国产一区二区4080 | 国产精品国产三级国产aⅴ原创 | 69xxx免费| 欧美videosex性极品hd | 国产一级视屏 | 在线一区观看 | 欧美aⅴ | 欧美成人精品一区二区男人看 | 一级毛片在线播放 | 亚洲精品一区二区三区蜜桃久 | 精品国产伦一区二区三区观看体验 | 日韩av大片免费看 | 中文字幕国产 | 妖精视频一区二区三区 | www.xxxx欧美| 午夜三级在线观看 | 国产精品a久久久久 | 日韩欧美久久精品 | 亚洲精品片 | 黄色免费av| 国产精品二区三区在线观看 | 亚洲午夜在线 | 福利二区 | 免费国产黄 | 亚洲欧美视频 | 51ⅴ精品国产91久久久久久 | 欧美成人免费在线视频 |