歡迎您光臨本站 登入註冊首頁

多路伺服電機控制器

admin @ 2014-03-16 , reply:0

概述

利用單片機控制伺服電機,可以使用集成了帶有PWM功能定時/計數器。但這種方式有它固有的諸多缺點,在需要控制的伺服電機比較多,運動關係複雜的情況下,這種方式是不適用的。本系統利用了ATmega16單片機……

利用單片機控制伺服電機,可以使用集成了帶有PWM功能定時/計數器。但這種方式有它固有的諸多缺點,在需要控制的伺服電機比較多,運動關係複雜的情況下,這種方式是不適用的。本系統利用了ATmega16單片機內部集成的定時/計數器,以及非易失性存儲介質EEPROM和UART介面設計了多路伺服電機控制器。
控制器用串口與上位機電腦進行通信,通過電腦的串口調試軟體發出指令,選擇實時在線調試,批量發送動作指令並存儲在單片機的EEPROM中,或單片機按照指令自動控制各路伺服電機運動。
系統選用ATmega16單片機的一個8位計數器Timer0和一個16位計數器Timer1協調工作,利用單片機的I/O介面產生出可以控制單片機的PWM信號。各伺服電機可以協調地運動。這種控制方法使得單片機有多少空餘的I/0口,就能控制多少路伺服電機。控制電機的數量根據具體應用而定,其餘的I/O介面可以用來連接感測器等器件,利於功能擴展。
硬體設計
電路主要包括電源、單片機最小系統、伺服電機介面、RS-232介面電路、其他器件介面等幾個部分,見圖。

系統採用兩種電源模式:一種是伺服電機和單片機共用同一個電源。由於AVR系列單片機抗干擾能力強,功耗小,在伺服電機數量比較少的情況下,可以使用這種方式。另一種方式是伺服電機和單片機採用獨立電源,分別由各自的電源系統供電。兩種方式通過跳線選擇。系統輸入電壓為6V,單片機的電源採用LM1117低壓差穩壓器獲取5V電壓。
ATmega16單片機有一路串口可以與外界通信。系統採用MAX232晶元將單片機的TTL電平轉換為-10V~15V的RS-232電平。
最小系統包括單片機複位電路、時鐘電路,以及在系統編程(ISP)介面。系統使用8MHz石英晶體作為外部時鐘源。
軟體部分由主程序、定時/計數器和I/O介面控制部分以及串口通信部分組成。採用C語言編寫程序,流程圖見圖。程序在EEPROM中開闢一個30×16的二維數組,用來存放自動運行時,各伺服電機運動的相應值。各值存放在數組的第二維,可存放的動作序列有30組。

主程序主要完成單片機片上硬體的初始化以及應用控制程序部分。系統初始化內容包括:用於控制伺服電機的I/O介面設置為輸出,低電平;其他I/0口設為輸入。Timer0和Timer1使能,Timer0使用主系統時鐘8分頻,Tiner1使用主系統時鐘不分頻,定時器同I/O口不相連,溢出中斷。UART介面使能,接收中斷。
主程序還完成讀取串口的值,確定用戶需要實時調試還是批量輸入指令,還是自動運行,並執行相應程序。 TimerO和,Timer1交替使用,在使用一個計數器時關閉另一個計數器。由於TimerO的時鐘頻率高,計數值小,因此,Timer0首先溢出中斷。在中斷中關閉,Tiner1,把代表各電機位置的變數值與一個用於控制各I/O介面電平時間的變數比較。如果超過它,就將該口電平設為低電平,否則為高電平。然後將這一用於比較的變數自加1。重新設置Timer0計數初值。這樣Timer0就不斷地中斷,不斷把代表各電機位置的變數同用於比較的變數比較,使各控制埠高電平時間根據需要在0.5ms~2.5ms之間,直到所有介面高電平時間都結束,禁能Timer0,使能Tliner1。利用Timer1控制低電平時間,使得方波周期為18ms~20ms。
自動狀態下,系統按照EEPROM中存放的指令控制伺服電機運動。實時調試指令模式下,程序把串口讀到的16個數據分別賦給代表伺服電機位置的16個變數,定時器會自動產生相應的控制信號。如果需要存放指令,只需要把串口讀到的數據分別賦給在EEPROM中開闢二維數組的第二維。如果指令更多,可以採用外部擴展EEPROM的方法進行存儲空間擴展。
總結
通過測試,該系統性能可靠。系統採用單片機兩個定時器聯合工作的方法,利用中斷程序,產生了多路伺服電機控制信號。與一般所採用的直接使用定時器PWM功能的方法相比,本系統可控制電機路數多,控制簡單,通過設置各變數的值就可以控制伺服電機運動到相應位置。

[admin via 研發互助社區 ] 多路伺服電機控制器已經有2624次圍觀

http://cocdig.com/docs/show-post-14380.html