|
正點(diǎn)原子stm32f407開發(fā)板
1.gif (184.18 KB, 下載次數(shù): 67)
下載附件
2020-6-2 17:39 上傳
2.jpg (38.21 KB, 下載次數(shù): 53)
下載附件
2020-6-2 17:39 上傳
對(duì)于一般的舵機(jī)來說,所對(duì)應(yīng)的PWM波的周期為**200ms**,即舵機(jī)接收的PWM信號(hào)頻率為**50HZ**。
其空占比與轉(zhuǎn)動(dòng)角度的關(guān)系。普通舵機(jī)的舵量是0~180°。**脈沖寬度范圍 0.5ms ~ 2.5ms**
0.5ms/200ms = 0 度
1.0ms/200ms = 45 度
1.5ms/200ms = 90 度
2.0ms/200ms = 135 度
2.5ms/200ms = 180 度本文代碼參考正點(diǎn)原子stm32f4 pwm輸出教程代碼而修改得來。
**修改的地方:**
使用了PA0復(fù)用定時(shí)器TIM2
**主函數(shù)**
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設(shè)置系統(tǒng)中斷優(yōu)先級(jí)分組2
delay_init(168); //初始化延時(shí)函數(shù)
TIM2_PWM_Init(200-1,8400-1); //84M/8400/200=50hz. 此處的200就是計(jì)數(shù)器的比較值 e.g.175/200*20ms=17.5ms 得脈沖寬度:20ms-17.5ms=2.5ms
while(1)
{
delay_ms(1000);
TIM_SetCompare1(TIM2,175); //修改比較值,修改占空比對(duì)應(yīng)180度
delay_ms(1000);
TIM_SetCompare1(TIM2,180); //修改比較值,修改占空比對(duì)應(yīng)180度
delay_ms(1000);
TIM_SetCompare1(TIM2,185); //修改比較值,修改占空比對(duì)應(yīng)180度
delay_ms(1000);
TIM_SetCompare1(TIM2,190); //修改比較值,修改占空比對(duì)應(yīng)180度
delay_ms(1000);
TIM_SetCompare1(TIM2,195); //修改比較值,修改占空比對(duì)應(yīng)180度
}
}
pwm.c文件
//TIM2 PWM部分初始化
//PWM輸出初始化
//arr:自動(dòng)重裝值
//psc:時(shí)鐘預(yù)分頻數(shù)
void TIM2_PWM_Init(u32 arr,u32 psc)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); //TIM2時(shí)鐘使能
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); //使能PORTA時(shí)鐘
GPIO_PinAFConfig(GPIOA,GPIO_PinSource0,GPIO_AF_TIM2); //GPIOA0復(fù)用為定時(shí)器2
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //GPIOA0
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //復(fù)用
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //速度100MHz
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽復(fù)用輸出
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化PA0
TIM_TimeBaseStructure.TIM_Prescaler=psc; //定時(shí)器分頻
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上計(jì)數(shù)模式
TIM_TimeBaseStructure.TIM_Period=arr; //自動(dòng)重裝載值
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);//初始化定時(shí)器2
//初始化TIM2 Channel PWM模式
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //選擇定時(shí)器模式:TIM脈沖寬度調(diào)制模式1
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較使能輸出
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //輸出極性:TIM輸出比較極性低
TIM_OCInitStructure.TIM_Pulse = 0;//比較初始值
TIM_OC1Init(TIM2, &TIM_OCInitStructure); //根據(jù)T指定的參數(shù)初始化外設(shè)TIM2 OC1
TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable); //使能TIM2在CCR1是的預(yù)裝載寄存器
TIM_ARRPreloadConfig(TIM2,ENABLE);//ARPE使能
TIM_Cmd(TIM2, ENABLE); //使能TIM2
}
**頭文件自己寫**
**完成!!!**
|
評(píng)分
-
查看全部評(píng)分
|