久久久国产精品视频袁燕,99re久久精品国产,亚洲欧美日韩国产综合v,天天躁夜夜躁狠狠久久,激情五月婷婷激情五月婷婷

  • 1
    回復(fù)
  • 收藏
  • 點贊
  • 分享
  • 發(fā)新帖

【你買套件我買單】stm32有刷直流電機PID開發(fā)板

1.開箱清點搭建環(huán)境

開箱時間到啦!我收到了一個神秘的快遞,打開一看,哇塞!這是一個裝有電機、STM32最小系統(tǒng)和TB6612驅(qū)動芯片的學(xué)習(xí)套件!首先,我們來看看這個電機。它是中小功率的伺服電機或馬達,可以用來做很多好玩的東西!然后,我們來認(rèn)識一下STM32最小系統(tǒng)。它是一塊功能強大、性價比高的微處理器開發(fā)板,可以幫助我們實現(xiàn)很多有趣的項目!接著,我們看看這個TB6612驅(qū)動芯片。它可以幫助我們控制電機的轉(zhuǎn)速和方向,讓我們的學(xué)習(xí)變得更有趣!最后,我告訴你一個小秘密,這個學(xué)習(xí)套件可以幫助我們構(gòu)建一個PID控制電機轉(zhuǎn)速的實驗,讓我們更深入地了解電機和控制系統(tǒng)!所以,現(xiàn)在,你已經(jīng)知道了這個學(xué)習(xí)套件都有什么內(nèi)容,接下來就是動手的時候啦!

哦哦哦,這個小家伙還配備了一個OLED液晶屏啊,分辨率128*64,使用iic接口的,快來修改一下你的項目,把這個香香脆脆的小屏幕加上吧!

2.直流電機速度控制原理

2.1電機等效電路測量

當(dāng)我們獲得一款電機時,通??梢圆捎玫刃P蛠頊y量它的性能。對于直流電機而言,其可以被等效為串聯(lián)電樞電阻Ra、電樞電感La和感應(yīng)電動勢電壓源Ea,如下圖所示:

我們可以使用萬用表來測量電機的電樞電阻Ra,同時需要多次轉(zhuǎn)動電機,并對測量結(jié)果取平均值以提高準(zhǔn)確性。電樞電感La則可以通過使用LCR儀器來測量,同樣也需要多次轉(zhuǎn)動電機并取平均值。請注意,由于LCR測量頻率對結(jié)果影響很大,所以我們默認(rèn)使用1kHz的頻率。

此外,一些電機的靜態(tài)特性,例如端電壓Va和轉(zhuǎn)速N的關(guān)系,需要通過實際加壓進行測量。電機轉(zhuǎn)速N和感應(yīng)電動勢Em之間的關(guān)系可以通過電動機帶動電機的方式來測量。

這是我總結(jié)的電機參數(shù)測量方法。如果各位壇友有其他方法,歡迎補充。

2.2控制器環(huán)境配置

要編寫一個帶有PID控制的電機程序,需要進行如下軟件環(huán)境的配置:

      1.Keil軟件:Keil是一款常用的嵌入式開發(fā)工具,可以用來編寫C/C++語言程序。首先,需要從Keil官網(wǎng)上下載并安裝Keil軟件。

      2.ST-Link驅(qū)動程序:ST-Link是ST公司推出的一種仿真器,可用于對STM32單片機進行仿真調(diào)試。需要在電腦上安裝ST-Link的驅(qū)動程序,并將ST-Link連接到電腦和開發(fā)板之間。

      3.串口驅(qū)動程序:串口是一種常用的通信接口,用于實現(xiàn)電腦與單片機之間的通信。需要在電腦上安裝串口驅(qū)動程序。在Keil軟件中,使用串口時需要配置串口的通信參數(shù),包括波特率、數(shù)據(jù)位、校驗位等。

      4.OLED模塊驅(qū)動程序:OLED模塊是一種顯示設(shè)備,常用于顯示程序的運行狀態(tài)。需要在Keil軟件中編寫相應(yīng)的OLED模塊驅(qū)動程序,并將其與程序進行鏈接。

      5.編碼器驅(qū)動程序:編碼器是一種用于測量位置和速度的設(shè)備,可以與電機一起使用。需要在Keil軟件中編寫相應(yīng)的編碼器驅(qū)動程序,并將其與程序進行鏈接。

打開套件提供的軟件包,觀察c文件目錄可以看到整個程序的組織架構(gòu)如下圖所示:

在配置軟件環(huán)境時,需要注意以下幾點:

      1.確認(rèn)開發(fā)板的型號和芯片型號,并選擇相應(yīng)的編譯選項。

      2.注意代碼的可移植性,盡可能使用標(biāo)準(zhǔn)的C/C++語法和庫函數(shù)。

      3.在編寫程序時,需要考慮程序的實時性和穩(wěn)定性,盡量避免死循環(huán)等編程錯誤。

      4.在Keil軟件中進行程序調(diào)試時,需要設(shè)置斷點和觀察變量,以便更好地了解程序的運行情況。

2.3電機驅(qū)動芯片選擇

驅(qū)動芯片模塊TB6612,這是一款功能強大的雙H橋驅(qū)動芯片,常用于控制直流電機、步進電機和伺服電機等電機類型。TB6612芯片內(nèi)部集成了兩組H橋電路,在控制電機方向和轉(zhuǎn)速時非常方便。它可以使用PWM控制電機的轉(zhuǎn)速,并支持雙向電流驅(qū)動,具有高效率、高可靠性和低功耗的特點。此外,TB6612還具有過熱保護、欠壓保護、過流保護等安全保護功能,讓用戶的電機驅(qū)動更加安全可靠。TB6612芯片的型號有很多種,例如L298N、L293D等。這些型號雖然并不完全相同,但是它們都屬于雙H橋驅(qū)動芯片,可以用于控制直流電機、步進電機等電機類型。因此,這些芯片都是可以,對驅(qū)動芯片沒有嚴(yán)格要求,下圖是TB6612的電路圖:

2.4 PID控制算法:正轉(zhuǎn)、反轉(zhuǎn)、定速、定位

PID控制算法可以實現(xiàn)正轉(zhuǎn)、反轉(zhuǎn)、定速、定位的功能。其具體實現(xiàn)方法如下:

      1.正轉(zhuǎn)功能:對于正轉(zhuǎn)功能,需要將目標(biāo)轉(zhuǎn)速設(shè)定為正數(shù),并使用PI或PID控制器控制電機的轉(zhuǎn)速。當(dāng)電機轉(zhuǎn)速達到設(shè)定值時,控制器會保持電機的轉(zhuǎn)速不變,從而實現(xiàn)正轉(zhuǎn)功能。

      2. 反轉(zhuǎn)功能:反轉(zhuǎn)功能與正轉(zhuǎn)功能類似,只需要將目標(biāo)轉(zhuǎn)速設(shè)定為負(fù)數(shù),控制器會控制電機反向轉(zhuǎn)動,從而實現(xiàn)反轉(zhuǎn)功能。

      3. 定速功能:定速功能即使在負(fù)載有變化的情況下,電機轉(zhuǎn)速也能夠穩(wěn)定地保持在設(shè)定值。這可以通過使用PID控制器來實現(xiàn),將速度誤差作為PID控制器的輸入,根據(jù)PID輸出調(diào)節(jié)電機的轉(zhuǎn)速,不斷調(diào)節(jié)以保持穩(wěn)定的轉(zhuǎn)速。

      4. 定位功能:定位功能通常需要使用閉環(huán)控制器,例如位置PID控制器。在定位過程中,將目標(biāo)位置設(shè)定為電機需要到達的位置,使用PID控制器計算出控制信號(通常是電機的轉(zhuǎn)速),并控制電機驅(qū)動器以實現(xiàn)電機的轉(zhuǎn)動,直到電機達到目標(biāo)位置為止。

電機控制的主程序代碼如下所示:

      這是一段嵌入式C語言主程序,包含了一個PI控制器和一些初始化函數(shù)。具體來說,程序通過調(diào)用get_encoder_val()函數(shù)獲取電機轉(zhuǎn)子的位置,然后使用Incremental_PI()函數(shù)計算出相應(yīng)的PWM信號,控制電機的轉(zhuǎn)速。另外,還包括了一些初始化函數(shù),例如motor_init、encoder_init、key_init、IIC_Init和OLED_Init等,用于初始化電機、編碼器、按鍵、I2C總線以及OLED顯示屏等外設(shè)。

      在程序的主函數(shù)中,首先初始化了一些外設(shè),并在OLED屏幕上顯示了目標(biāo)轉(zhuǎn)速(target_v)的數(shù)值。然后,在while循環(huán)中,通過調(diào)用Incremental_PI()函數(shù)計算出PWM信號,同時將該信號通過set_motor_pwm()函數(shù)輸出到電機驅(qū)動器中。另外,程序還通過UART方式接收外部設(shè)備的指令,并在回調(diào)函數(shù)中進行處理。

從主程序中可以看出,對實時性要求較高的PID算法部分未被放置在主程序中執(zhí)行,主程序只負(fù)責(zé)液晶屏的刷新工作。

      這里中斷函數(shù)的書寫方式和通常寫在NVIC.c文件中的處理方法不同,它是使用了回調(diào)的方式。

      進入被回調(diào)的函數(shù)timer3如下圖所示:

這個程序是一個中斷服務(wù)函數(shù),用于響應(yīng)TIM3定時器的定時中斷。在中斷服務(wù)函數(shù)內(nèi)部,程序首先通過TIM_GetITStatus函數(shù)判斷是否發(fā)生了TIM3的更新中斷。如果更新中斷發(fā)生,則執(zhí)行以下操作:

      1.調(diào)用get_encoder_val()函數(shù)獲取當(dāng)前編碼器值,并將其存儲在encoder_v變量中。

      2. 使用Incremental_PI()函數(shù)計算出對應(yīng)的PWM信號,并將其存儲在SPWM變量中。

      3. 對SPWM進行限幅操作,如果超過PWM_MAX則將其限制在PWM_MAX以內(nèi)。

      4. 調(diào)用set_motor_pwm()函數(shù)將PWM信號輸出到電機驅(qū)動器中。

      5. 在OLED屏幕上打印出encoder_v和target_v的值,并在key_deal()函數(shù)中處理按鍵事件。

      6. 最后,通過調(diào)用TIM_ClearITPendingBit()函數(shù)清除更新中斷的標(biāo)志位。

      總體來說,這個程序的功能是實現(xiàn)PID控制器對電機轉(zhuǎn)速的控制,定時讀取編碼器值并計算對應(yīng)的PWM信號,通過限幅和輸出函數(shù)控制電機的轉(zhuǎn)速,并在OLED屏幕上顯示當(dāng)前的編碼器值和目標(biāo)轉(zhuǎn)速。

2.5 套件的一些電機測試結(jié)果匯總展示

      上圖是賣家提供的上位機調(diào)試程序,可以用來設(shè)置PID參數(shù)以及最大最小轉(zhuǎn)速,需要用自己的串口線和模塊相連接。連接的時候在端口控制里面選擇串口號,并確認(rèn)。

      P表示控制力的比例放大,比例放大只能根據(jù)誤差產(chǎn)生呈比例的控制力,假如比例系數(shù)不夠電機永遠達不到設(shè)定的轉(zhuǎn)速。如下圖所示。

      由于采用的是增量式PID算法,所以即使堵轉(zhuǎn),控制力也不會突變,如下圖所示:

      I表示控制力根據(jù)誤差的累積進行放大,比如P設(shè)置為0,把I設(shè)置成10,再將電機堵轉(zhuǎn)一定時間后放開的圖如下:

      可見堵轉(zhuǎn)時間越長,誤差累積越大,控制力越強,電機的轉(zhuǎn)速也越高。高到大約90轉(zhuǎn)左右,由于PWM最大占空比限制就全速運行。

      綜合看來,直流電機的特性還是相對比較線性的,因此轉(zhuǎn)速控制的PI參數(shù)選取范圍較為寬松。

2.6 光柵編碼器電機控制嘗試

      光電編碼器和電機的連接如下圖所示:

      M+和M-端接電機的正負(fù)極(接反了也沒關(guān)系),藍色三條線的是光電對射管模塊,它用+3.3到+5V供電,我用熱熔膠棒將它固定在電機上。

      這個模塊通過發(fā)光二極管和接收三極管之間的光遮擋來探測物體是否存在于槽內(nèi),并輸出相應(yīng)的TTL開關(guān)信號。當(dāng)有物體遮擋住光線時,模塊會輸出高電平信號,否則輸出低電平信號。通過將模塊的D0輸出口與單片機IO口連接,可以實現(xiàn)簡單快速地檢測物體遮擋狀態(tài),結(jié)合電機碼盤還可以實現(xiàn)電機轉(zhuǎn)速檢測等應(yīng)用。這個模塊的原理非常簡單,使用方便。

      在測量速度的應(yīng)用中,光電測速碼盤的柵格越多,輪子每轉(zhuǎn)一周獲得的上升沿或下降沿會更多,當(dāng)然這樣精度更高,上圖的只有20格,精度一般。

      這里參考了一段小車測速的常用代碼:

      使用光電傳感器來檢測物體的遮擋狀態(tài),當(dāng)有物體遮擋時,傳感器會輸出高電平,否則輸出低電平。通過計數(shù)程序統(tǒng)計每秒鐘傳感器輸出低電平的次數(shù),每當(dāng)計數(shù)器累加到20時,就認(rèn)為輪子轉(zhuǎn)了一圈,將計數(shù)器的值除以20即可得到每秒鐘輪子轉(zhuǎn)的圈數(shù)。利用了1個定時器和1個外部中斷來實現(xiàn)。其中,一個定時器用于計時,外部中斷用于按鍵輸入來控制電機轉(zhuǎn)動。定時器定時1ms,每隔1秒計算一下累計的脈沖數(shù)并將轉(zhuǎn)速,使用串口輸出。

3.總結(jié)分享心得

      通過本次對PID電機套件的學(xué)習(xí),了解了有刷直流電機的控制方法,通過對PI參數(shù)的實際調(diào)試,對直流電機控制有了一定入門。我將有用的PID速度控制程序,電路原理圖,以及上位機程序打包在壓縮包中供各位參考學(xué)習(xí)。謝謝!

鏈接:https://pan.baidu.com/s/1I0pBx-zYs6g4R7cPDWccuA?pwd=1234 提取碼:1234

全部回復(fù)(1)
正序查看
倒序查看
王總666
LV.1
2
2023-05-11 19:37

6666666

1
回復(fù)
發(fā)