背景與理論
這個項目的目的是創(chuàng)建一個系統(tǒng),給速度,加速度和運動的電機精確控制。雖然步進電機可以提供高扭矩,并且與輸入高度同步(因此控制它的微控制器可以跟蹤它們的當前位置),但它們在運行時效率不高,這將嚴重影響電池的使用時間。此外,如果由于某種原因,步進電機熄火了,控制器無法知道它沒有移動,但它會記錄下來,就好像它已經移動了,這將使整個系統(tǒng)陷入混亂(想象一下,一臺3D打印機因為卡住而跳過了一步,整個打印過程將從發(fā)生的事件開始變得混亂)。出于這個原因,我實現(xiàn)了一個系統(tǒng),可以用反饋控制直流電機,以跟蹤電機所做的事情,而不管PWM周期的數(shù)量,失速等。這要求電機具有正交編碼器(對于此模擬/電源板,電機必須為12V-24V), LM629精密電機控制器和用于設置LM629 ic的微控制器。例如,有了這個系統(tǒng),移動機器人就可以享受馬達的對稱速度。
LM629內部是如何工作的
LM629是一款微控制器外設,在單個設備中集成了采樣數(shù)據(jù)運動控制系統(tǒng)的所有功能。使用LM629使設計快速精確的運動控制系統(tǒng)的復雜任務變得更加容易。LM629實現(xiàn)了一個位置解碼器、一個求和結、一個數(shù)字PID環(huán)路補償濾波器和一個軌跡輪廓發(fā)生器。LM629提供一個7位PWM信號和一個符號位,提供一個符號幅度輸出端口。在運行時,主機微控制器將加速度、速度和目標位置值下載到軌跡生成器中。在每個樣本間隔,這些值被用來計算新的需求或“設定點”位置,這些位置被饋送到求和結。電機的實際位置由光增量編碼器的輸出信號確定。內部解碼器將實際位置發(fā)送到求和結的另一個輸入,并從“需求”位置中減去,形成控制回路補償器的誤差信號輸入,該補償器是一個PID濾波器。
由主微控制器發(fā)送到LM629的軌跡曲線以速度與時間的關系繪制。這些被認為是速度剖面的原因是每個樣本間隔都計算所需的位置。對于勻速,這些期望的位置增量將是相同的每個樣本間隔,對于加速和減速,期望的位置增量將分別增加和減少每個樣本間隔。目標位置是速度剖面的積分。
主微控制器通過并行通信與LM629通信。LM629有三個內部寄存器:狀態(tài)、高位和低位字節(jié)。這些由RD, WR和PS線(活動低)和使用狀態(tài)字節(jié)的忙位控制。通過將RD和PS調低來讀取狀態(tài)字節(jié),第0位是忙位。通過將WR和PS調低來編寫命令。PS高時,WR低,將數(shù)據(jù)寫入LM629, RD低,從LM629讀取數(shù)據(jù)。數(shù)據(jù)傳輸是一個按最高到最低有效字節(jié)順序寫入的雙字節(jié)操作。以上描述假設CS很低。
用戶命令類型:初始化、過濾控制命令、軌跡控制命令、中斷控制命令和數(shù)據(jù)報告命令。
LM629與其主機之間的通信流通過使用狀態(tài)字節(jié)中的忙位0位來控制。在發(fā)出命令和數(shù)據(jù)或讀取數(shù)據(jù)之前,主機必須檢查忙位是否為邏輯0。這包括具有多個數(shù)據(jù)字的命令的數(shù)據(jù)字節(jié)對之間。
準備
為了實現(xiàn)一個基于LM629電機控制器的系統(tǒng),我創(chuàng)建了兩個pcb。一個PCB容納數(shù)字元件,如PIC18F46K22和lm629。所有的數(shù)字和鉆文件都包括在內,以便通過JLCPCB訂購pcb。我還包括了材料清單和示意圖,可以用來把這些放在一起。數(shù)字端可以很容易地構建在面包板和前置板上,但模擬/電源板存在一些挑戰(zhàn),因為H-Bridge的封裝與前面提到的介質上的2.54mm間距不一致。此外,數(shù)字隔離器采用表面安裝形式。
如果您決定在沒有隔離器和不同的h橋的情況下重新創(chuàng)建此項目,則可以在前置板和面包板上進行一些修改。
該板上的微控制器分別向每個LM629發(fā)送命令,系數(shù)和軌跡。這里只顯示了兩個,因為目前使用它們的項目只包含兩個電機,可以再增加兩個來控制總共4個電機LM629。LM629發(fā)送PWM和信號通過h橋的2x10引腳連接器發(fā)送到模擬板(第二板)。通過相同的連接器,正交編碼器信號被lm629接收。
在模擬/功率電源板上,來自數(shù)字板的信號通過數(shù)字隔離器連接到h橋。使用數(shù)字隔離器可以實現(xiàn)兩個系統(tǒng)之間的通信,而不需要有一個共同點。電動機產生大量的電氣噪聲,這些電壓的下降和尖峰會導致數(shù)字元件(如微控制器、微處理器或其他具有低電氣噪聲閾值的數(shù)字系統(tǒng))發(fā)生故障,這就是為什么該電動機控制器方案設計使用數(shù)字隔離器。
模擬/電源板通過上面提到的2x10連接器接收信號幅度信號,以及5V和數(shù)字地為正交編碼器和隔離器的數(shù)字端供電。
為了實現(xiàn)完全隔離,必須使用兩種不同的電源,在我的項目中,我使用了兩個單獨的電池。
編譯微控制器的代碼
要為MCU編譯代碼,請遵循以下步驟:
?下載上面提到的存儲庫
?將ZIP文件的內容解壓縮到路徑名不包含太多字符的地方,例如C:驅動器的根目錄
?打開MPLABX(如果必須安裝,請確保也安裝了XC8編譯器)
?在工具欄上,單擊File-> Open Project
?導航到解壓zip文件內容的位置
?打開文件夾,點擊項目,點擊“打開項目”
?一旦項目打開,您可以瀏覽源代碼并根據(jù)您的需要修改它。
?在工具欄上轉到Production->Clean and Build Project
編譯器應該生成一個"。十六進制”文件??梢杂脕韺纹瑱C進行編程。
單片機編程
要對微控制器進行編程,請確保微控制器以5V通電,并且Pickit 3編程器連接到“編程器”頭引腳。
?在工具欄中,轉到生產->制作和程序設備
?將彈出一個MPLABX警告窗口,提醒您確保連接的芯片與項目中選擇的芯片相同,并且電壓為推薦的電壓。單擊OK。
結論
這個項目可以適應任何需要高精度電機控制的項目,步進電機不是一個選擇。它還使用現(xiàn)成的部件來完成此目的,因此已經完成了大部分測試和調試。如果解決方案是在另一個MCU的軟件中實現(xiàn)PID或在FPGA的硬件中實現(xiàn)PID,則仍然需要進行大量的測試和調試。
我編寫的庫很容易移植到其他體系結構中。
本文編譯自hackster.io





