查看: 6261|回復: 26
打印 上一主題 下一主題

[教程] 全過程展示:PWM自定義、測速、PID調速、PID自整定

[復制鏈接]

該用戶從未簽到

跳轉到指定樓層
樓主
發表于 2018-12-13 15:39 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 電控小白 于 2019-9-6 15:02 編輯

有一天,電控小白在某寶上買來了一塊Arduino Mega2560、一款直流電機。小白想:“這款電機怎么用呢?”于是他去某寶的該電機的網頁上查,查到如圖1的關鍵信息。


圖1

原來,這款電機有5根線,紅色接電源正極、黑色接電源負極(不能接反,否則電機會損壞)、白色線可以不用(當白色線與黑色線一起接電源負極的時候,電機轉向會相反)、黃色線是霍爾編碼器的信號輸出線(用于后續的測速)、藍色線是PWM信號接收線(用于驅動電機轉)。另外,這款電機內置了驅動板,因此,驅動板也不用買了最后,為了能使Arduino輸出的PWM信號能起作用,需要將Arduino的GND端口接到電源負極而且!!!PWM信號的頻率需為10KHz

現在,電控小白想利用這塊Arduino Mega2560和這款直流電機來實現以下四個功能:

(1) 用頻率為10KHz的PWM信號來驅動這款直流電機。
          困難:Arduino的analogWrite函數輸出的PWM的默認頻率沒那么高,而且難以自定義,這可怎么辦?
          解決:用某位大神寫得PWM庫,該庫的使用說明見http://arduino.cc/forum/index.php?topic=117425.0
                     該庫的下載 PWM.zip (14.53 KB, 下載次數: 315)
                     這個庫里面有實例,可以好好看看是怎么用的。

(2) 對電機的實際轉速進行測量,為后續的速度控制打下基礎。
          解決:結合Arduino自帶的外部中斷功能,以及網上大神寫好的定時中斷庫(基于定時器、計數器2,即timer2)
                     該庫的名稱:MsTimer2,用Arduino IDE 就可以在線安裝。
         
(3) 用PID控制,使得電機轉速可以最終穩定在需要的值上。
          困難:編程能力差,不會寫PID控制器。
          解決:用某位大神寫得PID庫,該庫的使用說明見http://playground.arduino.cc/Code/PIDLibrary
                     該庫的下載 Arduino-PID-Library-master.zip (10.16 KB, 下載次數: 335)

         
(4) 用PID自整定,使得電機轉速盡可能快得達到穩定值。
          困難:編程能力差,不會寫PID自整定。
          解決:用某位大神寫得PID庫,該庫的使用說明見https://playground.arduino.cc/Code/PIDAutotuneLibrary。該庫還不成熟,它自帶的例子也看不懂。幸好有另外一位大神按照這個庫的介紹自己重新寫了一下,具體網址https://blog.csdn.net/yanggg1997/article/details/76674986。但是他沒有寫成庫,而是只給了部分代碼,所以依舊需要咱們自己依樣畫葫蘆去寫代碼。

經過將近4天的折騰,電控小白達到了自己想要的目的。先給出結果圖吧:

圖2 PID自整定前,kp = 2, ki =15, kd = 1    橫坐標單位是:秒



圖3 PID自整定后,kp = 11.46, ki =98.22, kd = 0.3     橫坐標單位是:秒

電控小白希望這個電機穩定運轉在6rad/s,上面兩張圖中的轉速的單位是 rpm,大家要注意了。(這是因為在畫圖的時候,希望轉速的量綱和占空比的量綱不要差太多)


下面放出全套代碼,該代碼在Arduino IDE中運行,里面包含了詳細的注釋。另外再補充下:PWM的輸出口用的是12口(不是隨便亂選的,這在程序里有說明),編碼器信號線接在2口(不是隨便亂選的,這在程序里有說明)。

好了,全套代碼如下,注意,是全套,沒有缺胳膊斷腿。不過,運行前該裝的庫請先裝好哈。有什么問題請在評論區留言,我會盡力解答:

PID_control_of_speed_of_single_motor.rar (4.18 KB, 下載次數: 80)


另外,關于圖2、圖3是怎么畫的??  這個呢,是把串口監視器的數據復制下來,存入txt,然后用MATLAB繪制的。(只能繪制簡單的單列數據。若你想獲取這樣的簡單數據,那么在程序運行之前,需要將Use_MATLAB_to_Draw_or_not的值改為非零值)。MATLAB 的繪圖程序在這里下載 MATLAB繪圖.rar (3.31 KB, 下載次數: 92) 。主程序是:main_plot_serial_Arduino.m
  • TA的每日心情
    慵懶
    2019-1-29 12:49
  • 簽到天數: 26 天

    [LV.4]偶爾看看III

    沙發
    發表于 2018-12-14 00:22 | 只看該作者
    謝謝分享!收藏慢慢學習。
  • TA的每日心情
    奮斗
    2019-11-15 17:51
  • 簽到天數: 1674 天

    [LV.Master]伴壇終老

    板凳
    發表于 2018-12-14 17:55 | 只看該作者
    很好的文章,謝謝分享!
  • TA的每日心情
    無聊
    2019-2-28 11:33
  • 簽到天數: 3 天

    [LV.2]偶爾看看I

    地板
    發表于 2019-2-27 10:45 | 只看該作者
    謝謝分享!收藏慢慢學習。
  • TA的每日心情
    開心
    2019-2-28 09:21
  • 簽到天數: 1 天

    [LV.1]初來乍到

    5#
    發表于 2019-3-4 17:29 | 只看該作者
    雖然沒太看懂,但是還是有收獲,謝謝

    該用戶從未簽到

    6#
    發表于 2019-4-22 22:40 | 只看該作者
    謝謝分享!收藏慢慢學習。

    該用戶從未簽到

    8#
    發表于 2019-4-27 15:33 | 只看該作者
    哥 我有個和你這個類似的設計 有沒有興趣幫我做一下 PWM PID 水溫控制 有償 價格好商量
  • TA的每日心情
    擦汗
    2019-10-13 10:10
  • 簽到天數: 7 天

    [LV.3]偶爾看看II

    10#
    發表于 2019-5-2 10:16 | 只看該作者
    電機的圖發個就好了
    您需要登錄后才可以回帖 登錄 | 立即注冊  

    本版積分規則

    熱門推薦

    為拍月亮而生的便攜望遠鏡系統。
    為拍月亮而生的便攜望遠鏡
    參賽項目: 便攜望遠鏡系統 參賽組員: 1人 布丁:嵌入式軟件、上位機軟件、電路、結
    基于機器視覺的智能分揀機械臂
    基于機器視覺的智能分揀機
    本作品是一個基于機器視覺的智能機械臂操作平臺,其采用atmega32單片機作為主控制系統
    小白求助
    小白求助
    也許我這個問題也許看起來有些幼稚。。。 還在入門的路上打滾,在看《愛上Arduino》這
    SpiderRobot 蜘蛛
    SpiderRobot 蜘蛛
    關于SpiderRobot 項目實行方案 之前有人推薦我做這個項目,于是乎就有了這個 h
    沒有合適的模塊,想到自己焊接芯片
    沒有合適的模塊,想到自己
    有些模塊沒有加工過的模塊銷售,想著自己要是能把芯片焊在一起也是一樣的。只是這個尺
    Copyright   ©2015-2016  Arduino中文社區  Powered by©Discuz!   
    快速回復 返回頂部 返回列表
    北京快乐8论坛