欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
stm32f103rc單片機超聲波控制舵機旋轉代碼
[打印本頁]
作者:
GLP800
時間:
2021-4-27 17:50
標題:
stm32f103rc單片機超聲波控制舵機旋轉代碼
之前在學習stm32的時候接觸到一個簡單的項目--智能垃圾桶。通過研究它的原理發現其實是超聲波模塊HCSR04發射超聲波接觸到物體會返回并啟動舵機的旋轉。
單片機源程序如下:
void PWM_Init()
{
GPIO_InitTypeDef GPIO_InitStructure; //聲明一個結構體變量,用來初始化GPIO
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;//聲明一個結構體變量,用來初始化定時器
TIM_OCInitTypeDef TIM_OCInitStructure;//根據TIM_OCInitStruct中指定的參數初始化外設TIMx
/* 開啟時鐘 */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
/* 配置GPIO的模式和IO口 */
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;// PA1
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//復用推挽輸出
GPIO_Init(GPIOA,&GPIO_InitStructure);
//TIM3定時器初始化
TIM_TimeBaseInitStructure.TIM_Period = 1999; //PWM 頻率=72000/(1999+1)=36Khz//設置自動重裝載寄存器周期的值
TIM_TimeBaseInitStructure.TIM_Prescaler = 719;//設置用來作為TIMx時鐘頻率預分頻值
TIM_TimeBaseInitStructure.TIM_ClockDivision = 0;//設置時鐘分割:TDTS = Tck_tim
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上計數模式
TIM_TimeBaseInit(TIM2, & TIM_TimeBaseInitStructure);
// GPIO_PinRemapConfig(GPIO_FullRemap_TIM2,ENABLE);//改變指定管腳的映射 //pC6
//PWM初始化 //根據TIM_OCInitStruct中指定的參數初始化外設TIMx
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2;
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//PWM輸出使能
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;
TIM_OC1Init(TIM2,&TIM_OCInitStructure);
//注意此處初始化時TIM_OC1Init而不是TIM_OCInit,否則會出錯。因為固件庫的版本不一樣。
TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);//使能或者失能TIMx在CCR1上的預裝載寄存器
TIM_Cmd(TIM2,ENABLE);//使能或者失能TIMx外設
}
void pwm(void)
{
delay_ms(500);
TIM_SetCompare1(TIM2, 50);//0度
delay_ms(1000);
TIM_SetCompare1(TIM2, 100);//45度
delay_ms(1000);
TIM_SetCompare1(TIM2,150);//90度
delay_ms(1000);
TIM_SetCompare1(TIM2, 200);//135度
delay_ms(1000);
TIM_SetCompare1(TIM2, 250);//180度
delay_ms(100);
}
復制代碼
這個是pwm舵機函數(sg90)
#include "HCSR04.h"
#include "sys.h"
#include "delay.h"
/*
* 函數名:UltrasonicWave_Configuration
* 描述 :超聲波模塊的初始化
* 輸入 :無
* 輸出 :無
*/
void UltrasonicWave_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; //PC8接TRIG
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //設為推挽輸出模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化外設GPIO
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //PC9接ECH0
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //設為輸入
GPIO_Init(GPIOB,&GPIO_InitStructure);
}
/*
* 函數名:UltrasonicWave_StartMeasure
* 描述 :開始測距,發送一個>10us的脈沖,然后測量返回的高電平時間
* 輸入 :無
* 輸出 :無
*/
void UltrasonicWave_StartMeasure(void)
{
Trig = 1;
delay_us(15); //延時20US
Trig = 0;
}
復制代碼
這個是超聲波模塊函數
剩下的代碼大家可以根據情況自行下載
注:我在整個超聲波控制舵機代碼運行時發現一個問題,就是在執行到舵機部分的時候就一直卡在那里,從硬件上看就是led0不會跳回到led1,但是有時可以有時又不可以,這個問題我也不知道怎么回事,遇到同樣問題的大家可以一起解決。
全部程序51hei下載地址:
超聲波控制舵機.7z
(187.93 KB, 下載次數: 39)
2021-4-27 19:37 上傳
點擊文件名下載附件
作者:
冷情戒愛
時間:
2021-5-24 07:51
有原理圖嗎,請問?
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1