舵機
舵機是一種位置伺服的驅(qū)動器,主要是由外殼、電路板、無核心馬達、齒輪與位置檢測器所構(gòu)成。其工作原理是由接收機或者單片機發(fā)出信號給舵機,其內(nèi)部有一個基準(zhǔn)電路,產(chǎn)生周期為 20ms,寬度為 1.5ms 的基準(zhǔn)信號,將獲得的直流偏置電壓與電位器的電壓比較,獲得電壓差輸出。經(jīng)由電路板上的 IC 判斷轉(zhuǎn)動方向,再驅(qū)動無核心馬達開始轉(zhuǎn)動,透過減速齒輪將動力傳至擺臂,同時由位置檢測器送回信號,判斷是否已經(jīng)到達定位。適用于那些需要角度不斷變化并可以保持的控制系統(tǒng)。當(dāng)電機轉(zhuǎn)速一定時,通過級聯(lián)減速齒輪帶動電位器旋轉(zhuǎn),使得電壓差為 0,電機停止轉(zhuǎn)動。一般舵機旋轉(zhuǎn)的角度范圍是 0 度到 180 度
控制原理
通過向舵機的信號信號線發(fā)送PWM信號來控制舵機的輸出量;
一般來說,PWM的周期以及占空比,我們是可控的,所以PWM脈沖的占空比直接決定了輸出軸的位置。
下面舉個例子;
當(dāng)我們向舵機發(fā)送脈沖寬度為1.5毫秒(ms)的信號時,舵機的輸出軸將移至中間位置(90度);
脈沖寬度為1ms時,舵機的輸出軸將移至最小的位置(0度);
脈沖寬度為2ms時,舵機的輸出軸將移至最小的位置(180度);
注意:不同類型和品牌的伺服電機之間最大位置和最小位置的角度可能會不同。許多伺服器僅旋轉(zhuǎn)約170度(或者只有90度),但寬度為1.5 ms的伺服脈沖通常會將伺服設(shè)置為中間位置(通常是指定全范圍的一半);
這里有張形象的說明
PWM介紹
PWM,英文名Pulse Width Modulation,是脈沖寬度調(diào)制縮寫,它是通過對一系列脈沖的寬度進行調(diào)制,等效出所需要的波形(包含形狀以及幅值),對模擬信號電平進行數(shù)字編碼,也就是說通過調(diào)節(jié)占空比的變化來調(diào)節(jié)信號、能量等的變化,占空比就是指在一個周期內(nèi),信號處于高電平的時間占據(jù)整個信號周期的百分比,例如方波的占空比就是50%.STM32 的定時器除了 TIM6 和 7。其他的定時器都可以用來產(chǎn)生 PWM 輸出。其中高級定時器 TIM1 和 TIM8 可以同時產(chǎn)生多達 7 路的 PWM 輸出。而通用定時器也能同時產(chǎn)生多達 4路的 PWM 輸出,這樣, STM32 最多可以同時產(chǎn)生 30 路 PWM 輸出!其實我們僅僅需要一個定時器的一個通道即可完成1路 PWM 輸出。
占空比說明
占空比:
是一個脈沖周期內(nèi),高電平的時間與整個周期時間的比例
單位: % (0%-100%)
表示方式:20%
周期: 一個脈沖信號的時間 1s內(nèi)測周期次數(shù)等于頻率
脈寬時間: 高電平時間
上圖中 脈寬時間占總周期時間的比例,就是占空比
比方說周期的時間是10ms,脈寬時間是8ms 那么低電平時間就是2ms 總的占空比 8/(8+2)= 80%
這就是占空比為80%的脈沖信號
舉例說明
控制總結(jié)
通過MCU輸出一個占空比可以調(diào)節(jié)的PWM波信號,這個信號的頻率是50Hz也就是說一個周期內(nèi)的時間是20ms
在這一個周期內(nèi),有0.5ms的高電平時間 舵機就是-90°,有1ms的高電平時間就是-45°,本質(zhì)上是在調(diào)節(jié)方波的占空比,占空比越大角度也越大,占空比最大是2.5/20*100%
舵機的控制就是通過一個固定的頻率,給其不同的占空比的,來控制舵機不同的轉(zhuǎn)角
舵機的頻率一般為頻率為50HZ,也就是一個20ms左右的時基脈沖,而脈沖的高電平部分一般為0.5ms-2.5ms范圍。來控制舵機不同的轉(zhuǎn)角
?
500-2500us的PWM高電平部分對應(yīng)控制180度舵機的0-180度
以180度角度伺服為例,那么對應(yīng)的控制關(guān)系是這樣的:
0.5ms--------------0度;
1.0ms------------45度;
1.5ms------------90度;
2.0ms-----------135度;
2.5ms-----------180度;文章來源:http://www.zghlxwxcb.cn/news/detail-462084.html
參考代碼【基于STM32F1】
void TIM3_PWM_Init(u32 arr,u16 psc)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能定時器3時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); //使能GPIO外設(shè)和AFIO復(fù)用功能模塊時鐘
GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); //Timer3部分重映射 TIM3_CH2->PB5
//設(shè)置該引腳為復(fù)用輸出功能,輸出TIM3 CH2的PWM脈沖波形 GPIOB.5
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //TIM_CH2
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //復(fù)用推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO
//初始化TIM3
TIM_TimeBaseStructure.TIM_Period = arr; //設(shè)置在下一個更新事件裝入活動的自動重裝載寄存器周期的值
TIM_TimeBaseStructure.TIM_Prescaler =psc; //設(shè)置用來作為TIMx時鐘頻率除數(shù)的預(yù)分頻值
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設(shè)置時鐘分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上計數(shù)模式
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根據(jù)TIM_TimeBaseInitStruct中指定的參數(shù)初始化TIMx的時間基數(shù)單位
//初始化TIM3 Channel2 PWM模式
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //選擇定時器模式:TIM脈沖寬度調(diào)制模式2
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //輸出極性:TIM輸出比較極性高
TIM_OC2Init(TIM3, &TIM_OCInitStructure); //根據(jù)T指定的參數(shù)初始化外設(shè)TIM3 OC2
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIM3在CCR2上的預(yù)裝載寄存器
TIM_Cmd(TIM3, ENABLE); //使能TIM3
}
代碼說明
頻率: Fpwm = 72M / ((arr+1)*(psc+1))(單位:Hz)
占空比: duty circle = TIM3->CCR1 / arr(單位:%)文章來源地址http://www.zghlxwxcb.cn/news/detail-462084.html
到了這里,關(guān)于畢設(shè)常用模塊之舵機介紹以及使用方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!