基于STC89C52單片機(jī)的體操機(jī)器人系統(tǒng)設(shè)計(jì)
3 體操機(jī)器人的機(jī)械結(jié)構(gòu)設(shè)計(jì)
體操機(jī)器人的機(jī)械結(jié)構(gòu)設(shè)計(jì)主要考慮機(jī)器人完成各種體操動(dòng)作的可行性,例如:完成雙手俯臥撐、單手俯臥撐、側(cè)滾翻、前滾翻等動(dòng)作。由于本機(jī)器人不做行走動(dòng)作,因此在腿部的設(shè)計(jì)中沒有增加更多自由度。在本體操機(jī)器人的結(jié)構(gòu)設(shè)計(jì)中采用Siemens公司的UG結(jié)構(gòu)模型設(shè)計(jì)軟件,設(shè)計(jì)了機(jī)器人的全部結(jié)構(gòu)零件。如圖3所示:
仿人型機(jī)器人制作完畢后的實(shí)物圖如圖4所示:
4 仿人型機(jī)器人的控制程序設(shè)計(jì)
4.1 脈寬差控制算法
多路舵機(jī)控制的基本方法是順序輸出各路脈沖給不同舵機(jī),利用單片機(jī)高速的處理速度來實(shí)現(xiàn)多路控制。但是這一類控制算法對于控制舵機(jī)的數(shù)目有限制,因?yàn)榭刂贫鏅C(jī)所需的PWM波的典型周期是20ms,而每一路舵機(jī)所需的最大正脈寬長度為2.5ms,因此最多只能控制8路舵機(jī)。本系統(tǒng)中需要控制的舵機(jī)有10個(gè),所以選擇了改進(jìn)的控制算法——脈寬差法。
脈寬差法控制分為以下幾個(gè)步驟:
(1) 分組排序。將多路舵機(jī)控制數(shù)據(jù)每8路分為一組,對于每一組數(shù)據(jù)(控制脈沖長短),按照從小到大的順序排序。
(2) 計(jì)算差值。計(jì)算舵機(jī)控制數(shù)據(jù)的差值并保存計(jì)算每組內(nèi)相鄰的兩個(gè)數(shù)據(jù)的差值(數(shù)值大的數(shù)與數(shù)值小的數(shù)的差)并保存于差值數(shù)組中。該差值數(shù)組共有8 個(gè)存儲單元,第一個(gè)單元存放的是該組舵機(jī)控制數(shù)據(jù)的最小值,從第二個(gè)單元開始存放舵機(jī)控制數(shù)據(jù)的差值。
(3) 數(shù)據(jù)轉(zhuǎn)換。把差值數(shù)組中的數(shù)據(jù)轉(zhuǎn)換為定時(shí)時(shí)間(即控制脈沖寬度差值),再繼續(xù)轉(zhuǎn)換為定時(shí)初值并保存于脈寬差數(shù)組中。
(4) 舵機(jī)控制??刂颇骋唤M舵機(jī)時(shí),先向該組內(nèi)所有舵機(jī)置高電平(啟動(dòng)舵機(jī)),然后把脈寬差數(shù)組中的第一個(gè)數(shù)據(jù)賦值給定時(shí)寄存器。定時(shí)中斷發(fā)生時(shí),先關(guān)斷脈寬差數(shù)組中第一個(gè)數(shù)據(jù)所對應(yīng)的舵機(jī),再向定時(shí)寄存器中填入脈寬差數(shù)組中的第二個(gè)數(shù)據(jù)。依此類推,就可以完成該組所有舵機(jī)的控制。在一個(gè)控制周期(20ms)內(nèi),依次用定時(shí)器定時(shí)輸出脈沖控制每組舵機(jī)。在第三組舵機(jī)控制畢后,繼續(xù)定時(shí)用低電平補(bǔ)足其余時(shí)間以完成20ms。脈寬差法原理如圖5所示。
4.2 脈寬差法的程序?qū)崿F(xiàn)
這里介紹的實(shí)現(xiàn)方法是基于STC89C52單片機(jī)的C語言編寫的。
評論