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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2949|回復: 0
打印 上一主題 下一主題
收起左側

基于stm32mini版的PID液位控制器設計 附源程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:649697 發(fā)表于 2021-7-5 18:33 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
這是學完微型計算機控制要求制作的一個實驗,由幾個供學習用的STM32例程拼接而成,能實現(xiàn)簡單的液位控制,不足的地方很多,參數(shù)也還要根據(jù)自身情況調整,第一次發(fā)帖,大佬看到多指教。
首先簡單介紹一下用到的硬件:
液位傳感器:


  • 工作電壓:2.0V-5.0V
  • 輸出類型        :模擬量輸出
  • 檢測深度:48mm
  • 產品尺寸:19.0mm*63.0mm
  • 固定孔尺寸:2.0mm
  • 原理:該模塊主要是利用三極管的電流放大原理,當液位高度使三極管的基極與電源正極導通的時候,在三極管的基極和發(fā)射極之間就會產生一定大小的電流,此時在三極管的集電極和發(fā)射極之間就會產生一個一定放大倍數(shù)的電流,該電流經過發(fā)射極的電阻產生電壓供AD轉換器采集。 原理:該模塊主要是利用三極管的電流放大原理,當液位高度使三極管的基極與電源正極導通的時候,在三極管的基極和發(fā)射極之間就會產生一定大小的電流,此時在三極管的集電極和發(fā)射極之間就會產生一個一定放大倍數(shù)的電流,該電流經過發(fā)射極的電阻產生電壓供AD轉換器采集。

[backcolor=rgb(54, 165, 232) !important]接口說明
引腳號標識描述
1AOUT模擬量輸出
2GND電源地
3VCC電源正(3.3V-5.0V)



資料官網(wǎng):www點waveshare點net/wiki/Liquid_Level_Sensor

官網(wǎng)自帶的傳感器插入水深和輸出電壓的關系本人并沒有驗證過,輸出的電壓和采樣值的轉換關系是可以自己寫的,這里做了簡單的深度和采樣值轉換,不過后面感覺作用不大,實驗只要求能控制在不同水位即可,即改變一下采樣值。想要準確的控制在某一個高度,確定一下該高度和采樣值的對應關系就行!

大致如下:
float trans(float a)
{
        float b=a,c=0;
        if(b<=0.5)
                c=b*(1450.0/0.5);
        if(b>0.5&&b<=1)
                c=(b-0.5)*((1700.0-1450)/0.5)+1450.0;
        if(b>1&&b<=1.5)
                c=(b-1.0)*((2000.0-1700)/0.5)+1700.0;
        if(b>1.5&&b<=2.0)
                c=(b-1.5)*((2150.0-2000.0)/0.5)+2000.0;
        if(b>2.0&&b<=2.5)
                c=(b-2.0)*((2240.0-2150.0)/2.5)+2150.0;
        if(b>2.5&&b<=3.0)
                c=(b-2.5)*((2310.0-2240.0)/3.0)+2240.0;
        if(b>3.0&&b<=3.5)
                c=(b-3.0)*((2360.0-2310)/0.5)+2310;
        if(b>3.5&&b<=4.0)
                c=(b-3.5)*((2420.0-2360.0)/0.5)+2360.0;
        if(b>4.0&&b<=5)
                c=(b-4.0)*((2500.0-2420.0)/1.0)+2420.0;
        
        LCD_ShowxNum(156,150,b*10,4,16,0);//顯示一下目標深度,單位毫米
        
        return c;
        
}
本來想輸入深度然后到達目標深度的,但是發(fā)現(xiàn)采樣波動大,效果不是很好,這就是一個簡單的分段線性轉換,測的分段越多越準


傳感器官網(wǎng)中有教學,利用正點原子的ADC實驗例程也能夠查看采樣值和轉換電壓值,這為了方便直接移植,沒有改變它的采樣端口,用的還是PA1作為模擬輸入端口,電源接STM32的3V電源,

驅動模塊是L298N,簡單的資料如下,知道基本的驅動方法就能用,想知道更詳細的網(wǎng)上資料很容易找給多一張原理圖:

實物如下:
模塊參數(shù)

1.驅動芯片:L298N雙H橋直流電機驅動芯片

2.驅動部分端子供電范圍Vs:+5V~+35V ; 如需要板內取電,則供電范圍Vs:+7V~+35V

3.驅動部分峰值電流Io:2A

4.邏輯部分端子供電范圍Vss:+5V~+7V(可板內取電+5V)

5.邏輯部分工作電流范圍:0~36mA

6.控制信號輸入電壓范圍:
   低電平:-0.3V≤Vin≤1.5V
   高電平:2.3V≤Vin≤Vss
7.使能信號輸入電壓范圍:

   低電平:-0.3≤Vin≤1.5V(控制信號無效)
   高電平:2.3V≤Vin≤Vss(控制信號有效)
8.最大功耗:20W(溫度T=75℃時)

輸入邏輯圖如下:

抽水泵用到的是輸出A,由使能端口A控制,其正反轉由旁邊的兩個輸出的IN1和IN2電平高低決定,具體關系看表,要用到輸出B的話,原理類似

驅動電源用的是STM32模塊上的5V電源,一開始接的5V供電接口,但是電機最高速度有點慢,后面接到了12供電接口,馬上就猛起來了,真是讓人摸不著頭腦
使能端口即PWM輸出控制速度由pin8控制,電機的啟動則由pin11和pin12控制,想換的改一改就行

說一說這個PID的吧,經常用到的控制方法之一,大部分代碼都是用現(xiàn)成的,所以整個實驗做下來要寫的也就一個PID和梯度線性轉換
PID控制又稱偏差控制,當實際值與目標值有差異時,偏差控制就起作用,這里是使用增量型PID算法,由位置型推導而出
PID的分別基本含義找到一個比較好的解釋:

P - 比例部分

比例環(huán)節(jié)的作用是對偏差瞬間作出反應。偏差一旦產生控制器立即產生控制作用, 使控制量向減少偏差的方向變化。 控制作用的強弱取決于比例系數(shù)Kp, 比例系數(shù)Kp越大,控制作用越強, 則過渡過程越快, 控制過程的靜態(tài)偏差也就越小; 但是Kp越大,也越容易產生振蕩, 破壞系統(tǒng)的穩(wěn)定性。 故而, 比例系數(shù)Kp選擇必須恰當, 才能過渡時間少, 靜差小而又穩(wěn)定的效果。

I  - 積分部分

從積分部分的數(shù)學表達式可以知道, 只要存在偏差, 則它的控制作用就不斷的增加; 只有在偏差e(t)=0時, 它的積分才能是一個常數(shù),控制作用才是一個不會增加的常數(shù)。 可見,積分部分可以消除系統(tǒng)的偏差。

積分環(huán)節(jié)的調節(jié)作用雖然會消除靜態(tài)誤差,但也會降低系統(tǒng)的響應速度,增加系統(tǒng)的超調量。積分常數(shù)Ti越大,積分的積累作用越弱,這時系統(tǒng)在過渡時不會產生振蕩; 但是增大積分常數(shù)Ti會減慢靜態(tài)誤差的消除過程,消除偏差所需的時間也較長, 但可以減少超調量,提高系統(tǒng)的穩(wěn)定性。

當 Ti 較小時, 則積分的作用較強,這時系統(tǒng)過渡時間中有可能產生振蕩,不過消除偏差所需的時間較短。所以必須根據(jù)實際控制的具體要求來確定Ti

D - 微分部分

實際的控制系統(tǒng)除了希望消除靜態(tài)誤差外,還要求加快調節(jié)過程。在偏差出現(xiàn)的瞬間,或在偏差變化的瞬間, 不但要對偏差量做出立即響應(比例環(huán)節(jié)的作用), 而且要根據(jù)偏差的變化趨勢預先給出適當?shù)募m正。為了實現(xiàn)這一作用,可在 PI 控制器的基礎上加入微分環(huán)節(jié),形成 PID 控制器。

微分環(huán)節(jié)的作用使阻止偏差的變化。它是根據(jù)偏差的變化趨勢(變化速度)進行控制。偏差變化的越快,微分控制器的輸出就越大,并能在偏差值變大之前進行修正。微分作用的引入, 將有助于減小超調量, 克服振蕩, 使系統(tǒng)趨于穩(wěn)定, 特別對髙階系統(tǒng)非常有利, 它加快了系統(tǒng)的跟蹤速度。但微分的作用對輸入信號的噪聲很敏感,對那些噪聲較大的系統(tǒng)一般不用微分, 或在微分起作用之前先對輸入信號進行濾波。


這里利用  目標值-采樣值  得出一個反作用誤差
增量利用這個誤差進行計算
                                          
把增量疊加到速度控制的PWM輸出值上

代碼如下:
   void PIDcontrol(float a)
{
        float p=13;  
  float i=2;   
  float d=1;
  float adduk=0;
        float expvalue=trans(a);    //設置水深和采樣值的轉化

        e=expvalue-Adcvalue;      //偏差計算
        adduk=p*(e-e1)+i*e+d*(e-2*e1+e2);   //增量計算
        e2=e1;                            //刷新一下
        e1=e;

        vt+=adduk;                   //更新轉速
        if(vt>900) vt=900;         //防止越出
        if(vt<0)   vt=0;


        TIM_SetCompare1(TIM1,900-vt);

        LCD_ShowxNum(156,70,Adcvalue,4,16,0);//顯示采樣值
        LCD_ShowxNum(156,90,expvalue,4,16,0);//顯示目標值

        LCD_ShowxNum(156,170,vt,4,16,0);//顯示轉速情況

        LCD_ShowxNum(156,190,e,4,16,0);//誤差顯示


}
在PWM輸出中,分頻是7200,但是經過測試到了3千多電機就停止轉動了(pwm設置原因,數(shù)值越高越慢,這就是為什么要900-vt控制轉速 ),之所以設置最低900,是因為電機停止轉動后出水太快液位降得太快導致液面波動劇烈,調這個數(shù)值可以令最低速時液面下降慢點,視具體情況而定,
歸根結底算法細節(jié)沒處理好,比較粗糙,可以考慮PID放進定時器中、增加按鍵控制目標數(shù)值等,反復下載麻煩



這是開始時的一張圖片,目標水位是沒過傳感器13毫米,轉換成采樣值是1880,現(xiàn)在誤差是1880,轉速達到最快900,寫的時候實物不在手上。對應最后穩(wěn)定階段沒了,裝水的也沒拍,這樣另外一張的穩(wěn)定狀態(tài)



這個是一個達到穩(wěn)定的,10毫米對應采樣值1700,此時ADC采樣是1720,誤差因為延遲沒顯示出來,但是超過目標值電機轉速達到最慢0


想把手冊也上傳上來,結果超過20M,看來需要的自行下載吧
鏈接:https://pan.baidu.com/s/1O5qqnvEDdLQAIcO_-Yh3GA             提取碼:pk1x
關于STM32mini的更多資料例程等:www點openedv點com/docs/boards/stm32/zdyz_stm32f103_mini.html

寫著玩意原來還有些麻煩,和寫文檔似的= =,唉,看來自己著實沒耐心,感謝哪些寫出長篇大論的大佬給我?guī)磉^的幫助,自己寫的亂糟糟的

程序可從51hei下載附件: ADC實驗.7z (229.12 KB, 下載次數(shù): 39)

評分

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

查看全部評分

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品福利一区 | 亚洲草草视频 | 不卡av在线| 久久久噜噜噜久久中文字幕色伊伊 | 国产网站在线播放 | 国产亚洲精品综合一区 | 欧美久久久久久久 | 欧美一区成人 | 精品一区二区三区四区五区 | 日韩一区和二区 | 超碰精品在线观看 | 精品久久99| 免费视频一区 | 免费观看日韩精品 | 免费一区二区三区 | 久久男人 | 一区二区三区四区电影视频在线观看 | 精品国产一区二区三区性色av | 亚洲激情在线观看 | 国产一区二区三区 | 久久久久久久久99 | 国产在线精品一区二区三区 | 色妞av| 久久久久久国产精品久久 | 色婷婷综合久久久中字幕精品久久 | 四虎影院在线播放 | 在线播放国产一区二区三区 | 日韩在线一区二区 | 日一区二区 | 欧美成年视频 | 久久久久久久国产精品视频 | 欧美性大战久久久久久久蜜臀 | 91香蕉嫩草 | 国产精品一区二区视频 | 国产婷婷精品av在线 | 精品乱码一区二区三四区视频 | 中文字幕一级毛片 | 日韩国产中文字幕 | 久久网站免费视频 | 免费看爱爱视频 | 涩爱av一区二区三区 |