找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6185|回復(fù): 5
收起左側(cè)

stm32F407控制舵機(jī)源程序+示意圖

[復(fù)制鏈接]
ID:418578 發(fā)表于 2020-6-2 11:27 | 顯示全部樓層 |閱讀模式
正點(diǎn)原子stm32f407開發(fā)板
1.gif 2.jpg
對于一般的舵機(jī)來說,所對應(yīng)的PWM波的周期為**200ms**,即舵機(jī)接收的PWM信號頻率為**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)先級分組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);        //修改比較值,修改占空比對應(yīng)180度
               
                delay_ms(1000);         
                TIM_SetCompare1(TIM2,180);        //修改比較值,修改占空比對應(yīng)180度
               
                delay_ms(1000);         
                TIM_SetCompare1(TIM2,185);        //修改比較值,修改占空比對應(yīng)180度
               
                delay_ms(1000);         
                TIM_SetCompare1(TIM2,190);        //修改比較值,修改占空比對應(yīng)180度
                delay_ms(1000);         
                TIM_SetCompare1(TIM2,195);        //修改比較值,修改占空比對應(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                                                                                 
}  


**頭文件自己寫**

**完成!!**

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評分

回復(fù)

使用道具 舉報(bào)

ID:553941 發(fā)表于 2020-7-31 15:08 | 顯示全部樓層
描述有點(diǎn)問題吧,舵機(jī)的信號周期是20ms
回復(fù)

使用道具 舉報(bào)

ID:418578 發(fā)表于 2020-10-5 13:11 | 顯示全部樓層
13303022280 發(fā)表于 2020-7-31 15:08
描述有點(diǎn)問題吧,舵機(jī)的信號周期是20ms

“對應(yīng)的PWM波的周期為**200ms**”這里寫錯(cuò)了,我改下
回復(fù)

使用道具 舉報(bào)

ID:808155 發(fā)表于 2020-10-11 18:12 | 顯示全部樓層
真心不知道怎么看這代碼,對小白太不友好了
回復(fù)

使用道具 舉報(bào)

ID:525089 發(fā)表于 2020-12-9 10:30 | 顯示全部樓層
有參考價(jià)值
回復(fù)

使用道具 舉報(bào)

ID:860278 發(fā)表于 2020-12-15 08:10 | 顯示全部樓層
謝謝,希望以后能用上
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表