欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: [原創(chuàng)]開源51單片機(jī)PID電機(jī)調(diào)速Proteus仿真與源碼 [打印本頁(yè)]

作者: psuxaog    時(shí)間: 2018-10-10 12:32
標(biāo)題: [原創(chuàng)]開源51單片機(jī)PID電機(jī)調(diào)速Proteus仿真與源碼
本代碼采用Proteus仿真,采用51單片機(jī)模擬PWM,用定時(shí)器獲取電機(jī)轉(zhuǎn)速信息,用PID算法控制轉(zhuǎn)速,轉(zhuǎn)速、PID都可以用按鈕設(shè)置,LCD顯示屏顯示出電機(jī)的轉(zhuǎn)速、差值、設(shè)定值、PID,并可以粗調(diào)跟微調(diào),還有閃爍提示,用來指示當(dāng)前的設(shè)置項(xiàng)目。

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)

不按設(shè)定鍵直接調(diào)整的是設(shè)定速度值因?yàn)樗俣戎凳且灾芷谛问秸{(diào)整,所以速度值越小,轉(zhuǎn)速越高,2秒鐘無操作退出設(shè)置模式,非設(shè)置模式調(diào)節(jié)轉(zhuǎn)速

單片機(jī)源程序如下:
  1. //************************項(xiàng)目信息**************************
  2. //項(xiàng)目名稱:
  3. //客戶名稱:
  4. //************************文件信息**************************
  5. //文件名稱:pi.c
  6. //作    者:Lebo
  7. //文件版本:
  8. //校 驗(yàn) 和:
  9. //************************硬件信息**************************
  10. //目標(biāo)器件:
  11. //源 時(shí) 鐘:
  12. //UCBA型號(hào):
  13. //************************平臺(tái)信息**************************
  14. //開發(fā)環(huán)境:
  15. //燒錄環(huán)境:
  16. //配置內(nèi)容:
  17. //************************功能信息**************************
  18. //程序功能:
  19. //函數(shù)列表:
  20. //************************修改記錄**************************
  21. // <author>  <time>   <version> <desc>
  22. //1.Lebo    15/01/11    V1.0    build this moudle
  23. //2.
  24. //**********************************************************



  25. //**********************************************************
  26. //程序名稱:頭文件
  27. //程序說明:
  28. //**********************************************************

  29. #include "pid.h"
  30. //**********************************************************
  31. //程序名稱:增量式PID初始化 函數(shù)
  32. //入口參數(shù):*ptrPID
  33. //出口參數(shù):e0, e1, e2, ka, kb, kc, kz, max_adjust, max_out, min_out
  34. //返回參數(shù):
  35. //調(diào)用函數(shù):
  36. //程序說明:
  37. //**********************************************************

  38. void PID_IncInit(PID_TypeDef *ptrPID){
  39.         (* ptrPID).e0 = 0;
  40.         (* ptrPID).e1 = 0;
  41.         (* ptrPID).e2 = 0;
  42.         
  43.         (* ptrPID).ka = 0;
  44.         (* ptrPID).kb = 0;
  45.         (* ptrPID).kc = 0;
  46.         (* ptrPID).kz = 0;
  47.         
  48.         (* ptrPID).maxAdjust = 0;
  49.         (* ptrPID).maxOut = 0;
  50.         (* ptrPID).minOut = 0;
  51. }
  52. //**********************************************************
  53. //程序名稱:增量式PID系數(shù)設(shè)置 函數(shù)
  54. //入口參數(shù):kp, ki, kd, z, *pid_ptr
  55. //出口參數(shù):ka, kb, kc, kz
  56. //返回參數(shù):
  57. //調(diào)用函數(shù):
  58. //程序說明:
  59. /*
  60.     T--------采樣周期
  61.     Ti-------積分時(shí)間
  62.     Td-------微分時(shí)間

  63.     Kp = Kp
  64.     Ki = Kp*T/Ti
  65.     Kd = Kp*Td/T

  66.     A = Kp+Ki+Kd = Kp*(1 + T/Ti + Td/T)
  67.     B = Kp+2*Kd = Kp*(1 + 2Td/T)
  68.     C = Kd = Kp*Td/T
  69. *///120,11,0,10
  70. //**********************************************************
  71. void PID_IncSetRatio(u8 kp, u8 ki, u8 kd, u8 kz, PID_TypeDef *ptrPID){
  72.         (* ptrPID).ka = kp + ki + kd;
  73.         (* ptrPID).kb = kp + (2 * kd);
  74.         (* ptrPID).kc = kd;
  75.         (* ptrPID).kz = kz;
  76. }

  77. //**********************************************************
  78. //程序名稱:PID系數(shù)極限設(shè)置 函數(shù)
  79. //入口參數(shù):max_ajst, max_outval, min_outval, *pid_ptr
  80. //出口參數(shù):max_adjust, max_out, min_out
  81. //返回參數(shù):
  82. //調(diào)用函數(shù):
  83. //程序說明:
  84. //**********************************************************
  85. void PID_IncSetRatioLimit(s8 maxAdjust, u8 maxOut, u8 minOut, PID_TypeDef *ptrPID){
  86.         (* ptrPID).maxAdjust = maxAdjust;
  87.         (* ptrPID).maxOut = maxOut;
  88.         (* ptrPID).minOut = minOut;
  89. }

  90. //**********************************************************
  91. //程序名稱:增量式PID 函數(shù)
  92. //入口參數(shù):nonce_error, pid_ptr, out_ptr
  93. //出口參數(shù):*out_ptr
  94. //返回參數(shù):
  95. //調(diào)用函數(shù):
  96. //程序說明:
  97. /*
  98. ////位置式PID控制算式
  99. ////    離散的PID表達(dá)式:
  100. ////    U(n) = Kp*{e(n) + (T/Ti)*Sum[e(0)+e(1)...+e(n)] + (Td/T)*[e(n)-e(n-1)]}
  101. ////    U(n) = Kp*e(n) + Ki*Sum[e(0)~e(n)] + Kd*[e(n)-e(n-1)]
  102. ////    說明:
  103. ////    n--------采樣序號(hào),n=0,1,2,…… 。
  104. ////    U(n)-----第n次采樣時(shí)刻的計(jì)算輸出量
  105. ////    e(n)-----第n次采樣時(shí)刻輸入的偏差值
  106. ////    e(n-1)---第n-1次采樣時(shí)刻輸入的偏差值
  107. ////    T--------采樣周期
  108. ////    Ti-------積分時(shí)間
  109. ////    Td-------微分時(shí)間
  110. ////    Kp-------比例系數(shù)
  111. ////    Ki-------積分系數(shù),Ki = Kp*T/Ti
  112. ////    Kd-------微分系數(shù),Kd = Kp*Td/T

  113. 增量式PID控制算式(廣泛應(yīng)用)
  114.     增量式PID控制算法公式:
  115.     dU(n) = U(n)-U(n-1)
  116.     dU(n) = Kp*[e(n)-e(n-1)] + Ki*e(n) + Kd*[e(n)-2*e(n-1)+e(n-2)]
  117.     dU(n) = (Kp+Ki+Kd)*e(n) - (Kp+2*Kd)*e(n-1) + e(n-2)*Kd
  118.     dU(n) = A*e(n) - B*e(n-1) + C*e(n-2)
  119.     說明:
  120.     T--------采樣周期
  121.     Ti-------積分時(shí)間
  122.     Td-------微分時(shí)間

  123.     Kp = Kp
  124.     Ki = Kp*T/Ti
  125.     Kd = Kp*Td/T

  126.     A = Kp+Ki+Kd = Kp*(1 + T/Ti + Td/T)
  127.     B = Kp+2*Kd = Kp*(1 + 2Td/T)
  128.     C = Kd = Kp*Td/T

  129. 由于單片機(jī)的處理速度和ram 資源的限制,一般不采用浮點(diǎn)數(shù)運(yùn)算,而將所有參數(shù)全部用整
  130. 數(shù),運(yùn)算到最后再除以一個(gè)2的N次方數(shù)據(jù)(相當(dāng)于移位),作類似定點(diǎn)數(shù)運(yùn)算,可大大提高
  131. 運(yùn)算速度,根據(jù)控制精度的不同要求,當(dāng)精度要求很高時(shí),注意保留移位引起的“余數(shù)”,做
  132. 好余數(shù)補(bǔ)償。
  133. */
  134. //**********************************************************

  135. void PID_IncCompute(s16 offset, u8 *ptrOut, PID_TypeDef *ptrPID){
  136.         s16 outResult = (s16)(* ptrOut);
  137.         s32 median;
  138.         s8 adjust;
  139.         (* ptrPID).e2 = (* ptrPID).e1;
  140.         (* ptrPID).e1 = (* ptrPID).e0;
  141.         (* ptrPID).e0 = offset;
  142.         median = (s32)(* ptrPID).ka * (* ptrPID).e0 -\
  143.                                          (s32)(* ptrPID).kb * (* ptrPID).e1 +\
  144.                                          (s32)(* ptrPID).kc * (* ptrPID).e2;
  145.         median = median >> (* ptrPID).kz;
  146.         if(median < -(* ptrPID).maxAdjust)
  147.                 adjust = -(* ptrPID).maxAdjust;
  148.         else if(median > (* ptrPID).maxAdjust)
  149.                 adjust = (* ptrPID).maxAdjust;
  150.         else
  151.                 adjust = (s8)median;

  152.         outResult += adjust;
  153.         if(outResult > (* ptrPID).maxOut)
  154.                 outResult = (* ptrPID).maxOut;
  155.         else if(outResult < (* ptrPID).minOut)
  156.                 outResult = (* ptrPID).minOut;
  157.         *ptrOut = (u8)outResult;
  158. }        
復(fù)制代碼



所有資料51hei提供下載:
PID Proteus.rar (172.39 KB, 下載次數(shù): 392)



作者: 子夜滔天    時(shí)間: 2018-10-17 11:51
原理圖文件和源程序文件都打不開,能不能從發(fā)一份
作者: linnyshow    時(shí)間: 2018-10-17 15:26
正是需要的材料。
作者: sdwxysc    時(shí)間: 2018-10-28 09:14
Proteus仿真圖沒有單片機(jī),仿真不起來。
作者: 仗義    時(shí)間: 2018-10-29 13:56
樓主好厲害
作者: malonglong33    時(shí)間: 2019-6-22 14:01
sdwxysc 發(fā)表于 2018-10-28 09:14
Proteus仿真圖沒有單片機(jī),仿真不起來。

樓主仿真文件是多層圖紙的需要切換在加載仿真程序
作者: 余溫123    時(shí)間: 2019-12-15 18:14
樓主,可以發(fā)一份hex 文件嗎,急需,謝謝啦
作者: 世界很安靜    時(shí)間: 2019-12-23 20:33
malonglong33 發(fā)表于 2019-6-22 14:01
樓主仿真文件是多層圖紙的需要切換在加載仿真程序

您好,這個(gè)多層圖紙?jiān)趺辞袚Q?

作者: hj08102    時(shí)間: 2020-3-9 10:48
學(xué)習(xí)下,這個(gè)站長(zhǎng)給了這么高的黑比,必須學(xué)習(xí)
作者: lhl51311    時(shí)間: 2020-3-17 15:47
世界很安靜 發(fā)表于 2019-12-23 20:33
您好,這個(gè)多層圖紙?jiān)趺辞袚Q?

proteus界面Desig->下拉列表中會(huì)出現(xiàn)Rootsheet1和Rootsheet2,這兩個(gè)就是來回切換圖紙的。
作者: AKA123    時(shí)間: 2021-6-25 17:43
z是什么參數(shù)?duty怎么看想用示波器看一下
作者: aking991    時(shí)間: 2021-6-26 08:13
謝謝分享,跟高手學(xué)習(xí)是一件讓人長(zhǎng)進(jìn)的事
作者: mick32    時(shí)間: 2023-8-11 22:58
MotorControl.hex file included for Proteus simulation
in Proteus go to Design /go to next sheet(page-down) click on CPU/ properties and select
MotorControl.hex




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1