日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

pid算法通俗解释,平衡车,倒立摆,适合不理解PID算法的人来看!

發布時間:2025/3/15 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pid算法通俗解释,平衡车,倒立摆,适合不理解PID算法的人来看! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

    ? ? ? ? ? ? ? ? ? ? 先插句廣告,本人QQ522414928,不熟悉PID算法的可以一起交流學習,隨時在線

                    http://liuxinyu520zhuanshu.qzone.qq.com ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

  在正式進入正文前,補充一下本人學習PID算法的背景,先自我介紹一下:本人一名大三電子專業的學生,到現在可以說我已經研究了快兩年的PID,這期間做過帆板角度控制系統,做過平衡車,做過倒立擺,做過板球控制系統,做過openmv小球追蹤系統,還做過四旋翼等……,可以說現在已經很熟悉PID算法,包括單級的PID算法和多級的PID算法。到現在感覺其實這個PID算法還是很經典,很有用的,那么簡簡單單的幾行代碼,就能實現自動追蹤,自動跟隨,平衡等操作,用途廣泛。如果你不會PID算法,大多數控制其實你是實現不了的,如果這個經典而又簡單的算法你不會,別的控制類的算法估計你也不會。可能讓你做一件產品或是參加某些控制類比賽,顯然,不會PID這些算法,你只能做簡單的邏輯控制,而邏輯控制又太簡單,幾個if()語句判斷顯然是不滿足控制類設計的需要的。另外,很多不需要PID算法的設計其實也是可以加入PID算法的,這能讓你的設計更有穩定性,有些必須需要PID算法的設計,沒有PID不能形成閉環控制,是根本不能完成的。

?

  扯淡的不多說,本人就喜歡簡單粗暴,喜歡把復雜的東西簡單化,很多的電子教程雖然把PID算法介紹的很全面,但是寫的復雜的不得了,今天本人就用通俗易懂的語言把復雜的問題簡單化:

?

  先解釋一下傳統的位式算法,也就是簡單的邏輯算法:位式算法的輸出要么是0,要么是1,也就是在一定條件下是全速運行,不滿足這個條件就完全停止或反向全速運行。

  ①先拿恒溫燒水系統來說,假如說你要把水燒到80度,簡單的邏輯做法是在水里加一個溫度傳感器和電熱燒水器,然后用單片機測溫,如果if(溫度<80度),那你就給電熱燒水器加熱燒水,如果if(溫度>80度),那我就停止加熱。思考一下,最后你得到的水溫一定會是80(可以上下有微小差別)度嗎?答案肯定是否定的。(這里說明一下,不要教條,不要問你為什么會把水燒到80度這是為什么?我來解釋一下,當傳感器測到溫度達到80度時,單片機控制加熱器停止加熱,雖然加熱器斷電了,但是加熱器的余溫還是比水的溫度要高,所以加熱器不會立即停止加熱,而是繼續給水加熱一會兒直到和水的溫度一樣,此時水的溫度會高于80度,可能電熱器的余溫就把水加熱到了90度,對吧!然后水和加熱器又一起降溫,一般情況下加熱器降溫的速度會更快,所以當水的溫度下降到80度時,加熱器的溫度又低于80度,這時傳感器檢測到水溫低于80度,單片機又控制加熱器加熱,而此時加熱器溫度不夠低于80度,所以需要預熱一下再給水加熱,在預熱的這段時間里水的溫度可能又降到了75度才開始加熱。所以,水的溫度不能保持在80度上下輕微浮動的范圍內,水溫一直都是在75度到90度之間浮動的!

  ②再拿平衡車系統來說,你需要一個陀螺儀傳感器,比如(mpu6050),先說下平衡車的原理,避免有些人不懂,平衡車為什么兩個輪子能站著不到,大家一定都軍訓過,站過軍姿,站軍姿的時候教官讓你身體前傾,但是只能輕微的前傾,如果你能前傾45度,那你一定控制不住身體平衡,需要往前邁步才能達到平衡。平衡車跟這個原理是一樣的,如果車要往前倒,那我讓車輪前轉來維持平衡,如果車往后倒,那我讓車輪后傳來維持平衡,原理都應該明白了吧!(如果這個原理還不明白建議不要學了,更不要搞控制方向了,避免學了半天還得轉行浪費時間)繼續,假設車上的陀螺儀角度0度時車是平衡的,如果角度大于0度我就讓車輪前轉,如果角度小于0度我就讓車輪后轉,顯然這樣做,車是平衡不了的,由于車的慣性作用,一下可能就過調了,直接倒了。原理跟燒水差不多,不多說了。

?      再來解釋下PID算法:

1.剛才介紹了半天位式算法,位式算法的輸出就是簡單的邏輯輸出,不是0就是1,比如燒水,小于80度就接通燒水器的繼電器,功率直接達到最大,當水溫大于80度時,繼電器就直接斷開,功率直接降到最低。在平衡車上用位式算法解讀就是,車的傾角<0度,電機控制器給-1,電機反向全速運轉,車的傾角>0度時,電機控制器給+1,電機正向全速運轉,位式算法的特點就是要不就全速運行,要不就直接停止。

2.PID算法就不一樣了,PID算法通常輸出的都是可以調節輸出功率大小的,比如輸出的PWM或直接輸出電壓值大小DAC(PWM即脈寬調速占空比),假設PWM的周期是255,當高電平占空比為255(100%)時相當位式算法輸出的1,即全速運行,當高電平占空比為128(50%)時,輸出的功率理論上為全速的一般。說到這大家就應該明白了,PID的輸出是可以控制方向以及大小的。

  下面開始說PID算法:

?

  先說PID三個參數,P是比例,I是積分,D是微分;很多人都知道這三個參數,只是不了解其背后代表的含義,為啥用比例積分微分。不著急聽我慢慢給你介紹,只要我介紹完,你一下就懂了。

  首先介紹一下P,P代表比例,光用一個比例算法其結構是這樣的:

    err(誤差)=setpoint(設定值)-actual_value(傳感器測量的實際值) ? ?(誤差這個概念大家應該都明白)

    output(輸出值比如PWM)=p(比例系數)*err(誤差)

    比例反應的是現在的狀態。

    這個比例系數P,需要你大概估測一下值是多少,比如平衡車,光一個比例控制就能讓平衡車站半天了。比如設置平衡點為0度,此時實際的值為8度,此時誤差就為-8度,輸出的PWM值就等于(-8)*P。PWM=(-8)*P,這個P的具體值就需要你根據周期和占空比來估計決定,比如此時的PWM值應該是64才能讓平衡車具有恢復平衡的能力,那么P的值就應該為8.0。這下大家應該明白了P這個參數該如何來設定。

   (時隔這個長時間,今天繼續,當時說明天繼續著,忙著考研拖了一個月了)

…………………………繼續,以上是一個月之前寫的,今天繼續………………………………

在介紹一下積分I,積分分為好幾種,這里先介紹兩種:

1.普通的

    一般滴,沒有單獨用一個I控制的模型,所以這里用PI控制:

    err(當前誤差)=setpoint(設定值)-actual_value(傳感器測量的實際值)

    err_integral(誤差的積分值)=err_integral(誤差的積分值)+err(當前誤差)

    output(輸出值比如PWM)=p(比例系數)*err(誤差)+I(積分系數)*err_integral(誤差的積分值)

    這里介紹一下積分的作用,

    積分反應的是過去的狀態。

    積分的意義:積分的作用就在于對誤差的累加,我就根據實際情況來解釋,比如說,我光用一個比例P來控制一個模型的運轉,在誤差較大的時候這個比例的作用起的很大,還是說平衡車,當角度誤差值為8時,假定預測P=8.0,PWM=角度誤差*P,此時PWM值為64,這時候電機可以按一定的速度轉動起來,當偏差為0.5時,PWM的值就為4,當PWM為4的時候,根據電機的特性,可能因為這個4太小,電機根本連轉的力氣都沒有,這時候本來平衡點應該是0,可到了0.5電機因為pwm值太小而不起作用,這樣就始終達不到平衡點。那我現在加上積分,積分的作用就是把一個個的誤差加起來,因為誤差有正也有負,所以積分不會只朝著一個方向增大(正或負),比如誤差在0.5時比例就失去了調節能力,那么此時積分就起作用了,積分會把這個0.5累加直到PWM值能夠給電機充足的能量去達到0這個平衡點。一般積分I這個系數的值設為P*1/200.

2.積分分離算法

    普通的PI算法積分,積分會一直起作用,不管誤差有多大,而當誤差太大的時候,積分的一直累加運行會讓系統產生過沖,一個普通的PID算法做的平衡車一上電時因為手持擺放的位置離平衡點太遠會引起過沖,讓平衡車一上電電機就猛地往一邊沖,過一會兒才能好。

    為了解決這個問題可以用積分分離的方式,誤差太大時,積分就不起作用,當誤差小的時候,積分再起作用。能有效避免過沖。

    

    err(當前誤差)=setpoint(設定值)-actual_value(傳感器測量的實際值)

    if(err(當前誤差)<某個值時)

?

    {err_integral(誤差的積分值)=err_integral(誤差的積分值)+err(誤差)}

    else

    {err_integral(誤差的積分值)=0}

?

    output(輸出值比如PWM)=p(比例系數)*err(當前誤差)+I(積分系數)*err_integral(誤差的積分值)

?

?最后咱們說微分D

微分反應的是誤差的變化率

微分預測將來的狀態。

    err(當前誤差)=setpoint(設定值)-actual_value(傳感器測量的實際值)

    if(err(當前誤差)<某個值時)

    {err_integral(誤差的積分值)=err_integral(誤差的積分值)+err(誤差)}

    else

    {err_integral(誤差的積分值)=0}

    differential(微分)=err(當前誤差)-last_err(上一次誤差)

    執行完這句后

    last_err(上一次誤差)=err(當前誤差)

    output(輸出值比如PWM)=p(比例系數)*err(當前誤差)+I(積分系數)*err_integral(誤差的積分值)+D(微分系數)*differential(微分)

?

總結,PID的算法基本含義就是,要觀測當前的誤差并進行調整,還要總結過去的誤差來擺脫現狀,還需預測未來的誤差趨勢加快調整。

轉載于:https://www.cnblogs.com/LiuXinyu12378/p/8878582.html

總結

以上是生活随笔為你收集整理的pid算法通俗解释,平衡车,倒立摆,适合不理解PID算法的人来看!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: sm捆绑调教视频 | 美女被啪啪 | 牲欲强的熟妇农村老妇女视频 | 国产精品高潮视频 | 中国女人一级一次看片 | 成人av免费看 | 欧美又粗又长又爽做受 | 日本簧片在线观看 | 免费观看av的网站 | 四色成人av永久网址 | 另类小说色综合 | 亚洲一道本| 日本在线观看免费 | 国产原创在线播放 | hs视频在线观看 | 后入内射欧美99二区视频 | 亚洲网色 | 福利片第一页 | 成人黄色激情小说 | 一级 黄 色 片69 | 日韩无| 成人欧美一区二区三区小说 | 人妻无码中文久久久久专区 | 国产一区二区三区视频免费观看 | 黄色三级片毛片 | 久久免费看少妇高潮 | 男男h黄动漫啪啪无遮挡软件 | 亚洲人做受 | 禁果av一区二区三区 | 日韩视频免费观看高清 | 国产内射老熟女aaaa∵ | 骚虎av| 天天天天干 | 性视频播放免费视频 | 亚洲AV综合色区国产精品天天 | 欧洲性开放大片 | 国产视频www | 丁香花高清在线观看完整动漫 | 131美女爱做视频 | 理伦毛片 | 黄色录像一级大片 | 色哟哟一区二区三区四区 | 使劲插视频 | 日本做爰全过程免费看 | 国产伦精品一区二区三区妓女下载 | 亚洲一区欧洲二区 | 国产激情一区二区三区在线观看 | 日本少妇作爱视频 | 国产良妇出轨视频在线观看 | 日本美女久久 | 91九色国产在线 | 一区二区三区av夏目彩春 | 人人射人人 | 久久首页| 欧美大片91 | 亚洲在线影院 | 成人免费毛片男人用品 | 国产免费av网址 | 在线美女av | av日日夜夜 | 1024手机看片日韩 | 久久爱综合网 | 欧美日韩免费高清一区色橹橹 | 成人视品 | 国产一级18片视频 | 久久国产视频网 | 国产碰碰| 日本高清不卡一区 | 免费在线观看黄色av | 永久毛片 | 久久久精品视频一区 | 亚洲成人网av | 小箩莉末发育娇小性色xxxx | 四虎三级 | 欧美成人a∨高清免费观看 国产精品999视频 | se综合 | 花房姑娘免费观看全集 | 懂色av蜜臀av粉嫩av分 | 成人午夜在线免费观看 | 亚洲中文字幕无码一区二区三区 | 在线小视频 | 成人动漫在线播放 | 姐姐你真棒插曲快来救救我电影 | 黄色一级片免费看 | 91一区二区国产 | 91丨porny丨首页 | 国产成人精品亚洲男人的天堂 | 国产黄色片视频 | 国产精品高潮呻吟久久久久久 | 婷婷五月在线视频 | 欧洲成人午夜精品无码区久久 | 国产婷婷精品 | 欧美在线黄色 | 亚洲中文无码久久 | 在线理论视频 | 超碰黄色 | 国产欧美日韩视频在线观看 | 欧美精品一区二区三区在线 | 日本视频免费观看 |