久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
STM32控制舵機源程序
[打印本頁]
作者:
趙杰趙杰
時間:
2021-6-7 08:52
標題:
STM32控制舵機源程序
最近在做超聲波模塊控制舵機轉向。利用這個的在我們生活中也比較常見,最常見的莫過于避障小車了 現在看一下源碼。
#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;
}
#include "pwm.h"
#include "delay.h"
#include "sys.h"
//舵機模塊的PWM初始化
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);
}
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "timer.h"
#include "HCSR04.h"
#include "led.h"
#include "pwm.h"
unsigned long S=0; //定義超聲數據
extern unsigned long Clock_time;
extern u8 TIM3CH1_CAPTURE_STA; //輸入捕獲狀態
extern u16 TIM3CH1_CAPTURE_VAL; //輸入捕獲值
void ceju()
{
Trig=1;
delay_us(20);
Trig=0; //啟動信號
S=0; //清零距離數據
Clock_time=0;
TIM_Cmd(TIM3, DISABLE); //關定時器,清零計時變量
while(!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)); //等待檢測到高電平
Clock_time=0;
TIM_Cmd(TIM3, ENABLE); //開定時器
while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)==1&&Clock_time<47058); //只要是高,一直算時間,如果時間計數超過 47058,所說有問題,直接跳過,47058不一定精確,是一個大概值,
S=((Clock_time*2)*340/10000)/2; //時間變量是2us加一,乘以速度,因為時間是us,換成秒是除以1000000,保留兩位小數,所以除以 10000,然后除以二得到單方面距離
TIM_Cmd(TIM3, DISABLE); //關定時器
Clock_time=0; //清零數據
GPIO_ResetBits(GPIOD,GPIO_Pin_2);//led 燈
GPIO_ResetBits(GPIOA,GPIO_Pin_8);//led 燈
}
int main(void)
{
delay_init(); //延時函數初始化
PWM_Init();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設置NVIC中斷分組2:2位搶占優先級,2位響應優先級
LED_Init(); //LED端口初始化
UltrasonicWave_Configuration(); //初始化超聲IO
TIM3_Cap_Init(1,72-1); //以1Mhz的頻率計數,第一個選項,最小只能是1
ceju();
while(1)
{
ceju();
if(S<20)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_8);
GPIO_SetBits(GPIOD,GPIO_Pin_2);
// pwm();
delay_ms(500);
pwm();
ceju();
}
else
{
GPIO_ResetBits(GPIOD,GPIO_Pin_2);
GPIO_SetBits(GPIOA,GPIO_Pin_8);
//pwm();
delay_ms(500);
ceju();
}
}
}
復制代碼
代碼下載:
超聲波控制舵機.7z
(189.64 KB, 下載次數: 25)
2021-6-7 14:20 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
国产成人亚洲精品自产在线
|
国产精品久久久久久久久借妻
|
在线观看av片
|
欧美 日韩 国产 成人 在线
|
五月婷婷av
|
日韩免费三级
|
欧美视频在线一区
|
国产一级一片免费播放放a 免费国产视频
|
一级片在线观看视频
|
亚洲在线免费
|
国产一区二区精品丝袜
|
中文字幕在线观看一区
|
欧美黄色一级
|
国内自拍偷拍
|
国产成人aⅴ
|
一区二区自拍
|
www视频在线观看
|
日日干视频
|
久草精品视频在线看网站免费
|
成人中文字幕在线观看
|
亚洲一区二区三区四区在线
|
亚洲天堂免费视频
|
操操操干干干
|
宅男噜噜噜66一区二区
|
国产乱国产乱300精品
|
伊人天堂网
|
日韩久久视频
|
欧美日韩精品一区二区
|
www.伊人网
|
欧美在线天堂
|
av资源在线
|
狠狠做深爱婷婷久久综合一区
|
色片在线
|
手机看片国产
|
欧美三根一起进三p
|
在线观看日韩av
|
精品免费
|
超碰人人艹
|
成av人片在线观看www
|
国产97视频
|
中文字字幕在线
|