欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

stm32藍(lán)牙控制舵機(jī)問(wèn)題:想知道如何實(shí)現(xiàn)藍(lán)牙控制舵機(jī)慢慢轉(zhuǎn)動(dòng)

[復(fù)制鏈接]
ID:922391 發(fā)表于 2021-7-19 16:26 | 顯示全部樓層 |閱讀模式
#include "stm32f10x.h"
#include "usart.h"
#include "timer.h"
#include "duoji.h"
#include "delay.h"
#include "math.h"
#include "sys.h"

void delay(u8 count)
{
        for(; count!=0 ; count--);
}

int main(void)
{
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2)
        usart_Init()
   TIM3_PWM_Init(199,7199)
//        TIM2_PWM_Init(199,719

        while(1)
        {
      
        }
}
void USART1_IRQHandler(void
{
        u8 res;
        res=USART_ReceiveData(USART1)
        switch(res)/

        {
                case'6':duoji1();
           TIM_SetCompare3(TIM3,180);
                break;      
      case'7':duoji2();
                TIM_SetCompare3(TIM3,175);         
                break;
               
  }
}


舵機(jī)

#include "duoji.h"
#include "stm32f10x.h"
#include "delay.h"

void TIM3_PWM_Init(u16 arr, u16 psc)  
{
        GPIO_InitTypeDef GPIO_InitTypeSture;
        TIM_TimeBaseInitTypeDef TIM_TimeBaseInitTypeSture;
        TIM_OCInitTypeDef TIM_OCInitTypeStrue;
      
        
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);  
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
      
        
        GPIO_InitTypeSture.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitTypeSture.GPIO_Pin =  GPIO_Pin_0;
        GPIO_InitTypeSture.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOB, &GPIO_InitTypeSture);
      
        
        TIM_TimeBaseInitTypeSture.TIM_Period = arr;
        TIM_TimeBaseInitTypeSture.TIM_Prescaler = psc;
        TIM_TimeBaseInitTypeSture.TIM_CounterMode = TIM_CounterMode_Up;
        TIM_TimeBaseInitTypeSture.TIM_ClockDivision = 0;
        TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitTypeSture);
      
        GPIO_PinRemapConfig(GPIO_FullRemap_TIM3,ENABLE);
      
        TIM_OCInitTypeStrue.TIM_OCMode = TIM_OCMode_PWM2;
        TIM_OCInitTypeStrue.TIM_OCPolarity = TIM_OCPolarity_High;
        TIM_OCInitTypeStrue.TIM_Pulse = 0;
        TIM_OCInitTypeStrue.TIM_OutputState = TIM_OutputState_Enable;
      
        TIM_OC1Init(TIM3, &TIM_OCInitTypeStrue);
        TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
      
        TIM_Cmd(TIM3, ENABLE);
}

void TIM2_PWM_Init(u16 arr, u16 psc)  
{
        GPIO_InitTypeDef GPIO_InitTypeSture;
        TIM_TimeBaseInitTypeDef TIM_TimeBaseInitTypeSture;
        TIM_OCInitTypeDef TIM_OCInitTypeStrue;
      
        
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);  
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
      
        
        GPIO_InitTypeSture.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitTypeSture.GPIO_Pin =  GPIO_Pin_3;
        GPIO_InitTypeSture.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitTypeSture);
      
        
        TIM_TimeBaseInitTypeSture.TIM_Period = arr;
        TIM_TimeBaseInitTypeSture.TIM_Prescaler = psc;
        TIM_TimeBaseInitTypeSture.TIM_CounterMode = TIM_CounterMode_Up;
        TIM_TimeBaseInitTypeSture.TIM_ClockDivision = 0;
        TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitTypeSture);
      
        GPIO_PinRemapConfig(GPIO_FullRemap_TIM2,ENABLE);
      
        TIM_OCInitTypeStrue.TIM_OCMode = TIM_OCMode_PWM2;
        TIM_OCInitTypeStrue.TIM_OCPolarity = TIM_OCPolarity_High;
        TIM_OCInitTypeStrue.TIM_Pulse = 0;
        TIM_OCInitTypeStrue.TIM_OutputState = TIM_OutputState_Enable;
      
        TIM_OC1Init(TIM2, &TIM_OCInitTypeStrue);
        TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);
      
        TIM_Cmd(TIM2, ENABLE);
}

void duoji1(void)
{
//        TIM_SetCompare1(TIM3,195);      
//        delay_ms(1000
//        TIM_SetCompare1(TIM3,190);      
//        delay_ms(1000
//        TIM_SetCompare1(TIM3,185);      
        delay_ms(1000);
        TIM_SetCompare3(TIM3,180);         
//        delay_ms(1000
//        TIM_SetCompare1(TIM3,175);      
//        delay_ms(1000

}

//void duoji12(void
/
//        TIM_SetCompare1(TIM3,175);      
//        delay_ms(1000
//        TIM_SetCompare1(TIM3,180);      
//        delay_ms(1000
//        TIM_SetCompare1(TIM3,185);      
//        delay_ms(1000
//        TIM_SetCompare1(TIM3,190);      
//        delay_ms(1000
//        TIM_SetCompare1(TIM3,195);      
//        delay_ms(1000

/


void duoji2(void)
{
//        TIM_SetCompare1(TIM2,195);      
//        delay_ms(1000
//        TIM_SetCompare1(TIM2,190);      
//        delay_ms(1000
//        TIM_SetCompare1(TIM2,185);      
//        delay_ms(1000
//        TIM_SetCompare1(TIM2,180);      
//        delay_ms(1000
        TIM_SetCompare3(TIM3,175);         
        delay_ms(1000);

}

//void duoji22
/
//        TIM_SetCompare1(TIM3,175);      
//        delay_ms(1000
//        TIM_SetCompare1(TIM3,180);      
//        delay_ms(1000
//        TIM_SetCompare1(TIM3,185);      
//        delay_ms(1000
//        TIM_SetCompare1(TIM3,190);      
//        delay_ms(1000
//        TIM_SetCompare1(TIM3,195);      
//        delay_ms(1000

/

回復(fù)

使用道具 舉報(bào)

ID:393699 發(fā)表于 2021-7-19 17:31 | 顯示全部樓層
TIM_SetCompare1  這個(gè)應(yīng)該是控制單片機(jī)PWM的函數(shù)吧,通過(guò)定時(shí)調(diào)整函數(shù)  可以調(diào)整PWM的輸出波形,舵機(jī)每個(gè)角度有對(duì)應(yīng)的PWM頻率和周期。藍(lán)牙一般都用的模塊吧,直接AT指令,串口發(fā)送和接收字符串就行。
回復(fù)

使用道具 舉報(bào)

ID:922391 發(fā)表于 2021-7-19 17:34 | 顯示全部樓層
1092648746 發(fā)表于 2021-7-19 17:31
TIM_SetCompare1  這個(gè)應(yīng)該是控制單片機(jī)PWM的函數(shù)吧,通過(guò)定時(shí)調(diào)整函數(shù)  可以調(diào)整PWM的輸出波形,舵機(jī)每個(gè) ...

如果想要讓舵機(jī)任意轉(zhuǎn)動(dòng)角度,經(jīng)過(guò)藍(lán)牙發(fā)送指令點(diǎn)一下舵機(jī)轉(zhuǎn)一下該怎么實(shí)現(xiàn)呢?
回復(fù)

使用道具 舉報(bào)

ID:871393 發(fā)表于 2021-7-20 10:10 | 顯示全部樓層
新建一個(gè)變量, 用你的藍(lán)牙操作去修改那個(gè)變量, 再由變量去修改舵機(jī)的角度.
類(lèi)似這種
u8 degree = 90;
set_pwm(degree);
回復(fù)

使用道具 舉報(bào)

ID:922391 發(fā)表于 2021-7-20 15:14 | 顯示全部樓層
可不可以用一個(gè)循環(huán)
TIM3_PWM_Init(199,7199);
TIM_SetCompare1(TIM3,i);  
然后對(duì)i進(jìn)行疊加,實(shí)現(xiàn)度數(shù)的微小變化

回復(fù)

使用道具 舉報(bào)

ID:954170 發(fā)表于 2021-7-20 15:38 | 顯示全部樓層
控制舵機(jī)旋轉(zhuǎn)方法:
1、控制信號(hào)(如圖H)是一種脈寬調(diào)制(PWM)信號(hào),凡是微控制器能輕松的產(chǎn)生這種信號(hào)。在此文中,我用的是常用的Arduino開(kāi)發(fā)環(huán)境下的微控制器。
2、 脈沖的高電平持續(xù)1到2毫秒(ms),也就是1000到2000微秒(μs)。在1000μs時(shí),舵機(jī)左滿舵。在2000μs時(shí),右滿舵。不過(guò)你可以通過(guò)調(diào)整脈寬來(lái)實(shí)現(xiàn)更大或者更小范圍內(nèi)的運(yùn)動(dòng)。
3、控制脈沖的低電平持續(xù)20毫秒。每經(jīng)過(guò)20毫秒(50次每秒),就要再次跳變?yōu)楦唠娖,否則舵機(jī)就可能罷工,難以保持穩(wěn)定。不過(guò)你要是想讓它一瘸一拐的跳舞,倒可以采取這種方法。

1、什么是舵機(jī):在機(jī)器人機(jī)電控制系統(tǒng)中,舵機(jī)控制效果是性能的重要影響因素。舵機(jī)可以在微機(jī)電系統(tǒng)和航模中作為基本的輸出執(zhí)行機(jī)構(gòu),其簡(jiǎn)單的控制和輸出使得單片機(jī)系統(tǒng)非常容易與之接口。舵機(jī)是一種位置(角度)伺服的驅(qū)動(dòng)器,適用于那些需要角度不斷變化并可以保持的控制系統(tǒng)。目前在高檔遙控玩具,如航模,包括飛機(jī)模型,潛艇模型;遙控機(jī)器人中已經(jīng)使用得比較普遍。舵機(jī)是一種俗稱(chēng),其實(shí)是一種伺服馬達(dá)。
2、工作原理:控制信號(hào)由接收機(jī)的通道進(jìn)入信號(hào)調(diào)制芯片,獲得直流偏置電壓。它內(nèi)部有一個(gè)基準(zhǔn)電路,產(chǎn)生周期為20ms,寬度為1.5ms的基準(zhǔn)信號(hào),將獲得的直流偏置電壓與電位器的電壓比較,獲得電壓差輸出。最后,電壓差的正負(fù)輸出到電機(jī)驅(qū)動(dòng)芯片決定電機(jī)的正反轉(zhuǎn)。當(dāng)電機(jī)轉(zhuǎn)速一定時(shí),通過(guò)級(jí)聯(lián)減速齒輪帶動(dòng)電位器旋轉(zhuǎn),使得電壓差為0,電機(jī)停止轉(zhuǎn)動(dòng)。當(dāng)然我們可以不用去了解它的具體工作原理,知道它的控制原理就夠了。就象我們使用晶體管一樣,知道可以拿它來(lái)做開(kāi)關(guān)管或放大管就行了,至于管內(nèi)的電子具體怎么流動(dòng)是可以完全不用去考慮的。
回復(fù)

使用道具 舉報(bào)

ID:280000 發(fā)表于 2021-8-4 15:04 | 顯示全部樓層
單片機(jī)輸出不同的PWM即可實(shí)現(xiàn)
回復(fù)

使用道具 舉報(bào)

ID:914689 發(fā)表于 2021-8-4 19:45 | 顯示全部樓層
加個(gè)PID可以很平緩控制
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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