成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

項(xiàng)目五:基于stm32f103的尋跡小車(chē)

kyanag / 2193人閱讀

摘要:前言傳感器工作原理代碼部分電機(jī)初始化延遲初始化電機(jī)管腳初始化尋跡管腳初始化。電機(jī)管腳初始化函數(shù)定義管腳的結(jié)構(gòu)體打開(kāi)所要使用的時(shí)鐘將管腳特殊功能關(guān)掉配置管腳的參數(shù),用于驅(qū)動(dòng)電機(jī)。配置管腳的參數(shù)紅外傳感器。

前言:傳感器工作原理:

代碼部分:?

?

main.c

#include "motor.h"#include #include "delay.h"#include "stm32f10x.h"#include "followline.h"#include "ultrasonic.h"u8 UART3_data,UART1_data;u8 UART3_rcv[20],UART3_rcv_count;u8 UART1_rcv[50],UART1_rcv_count,Uart1_finish;int main(void){	    motor_pwm_TIME4_init(71,999);//電機(jī)PWM初始化	    delay_init();//延遲初始化	    motor_GPIO_init();//電機(jī)管腳初始化、尋跡管腳初始化。	//int right_2=0,right_1=0 ,left_2=0,left_1=0;		while(1)	{		Car_fllow();    	}}  

motor.c

#include "motor.h"http://電機(jī)GPIO管腳初始化函數(shù)/**********************************************************************************/void motor_GPIO_init(void){		//定義管腳的結(jié)構(gòu)體	GPIO_InitTypeDef GPIO_InitStruct;	GPIO_InitTypeDef  GPIO_InitStruct_C,GPIO_InitStruct_B;		//打開(kāi)所要使用的時(shí)鐘	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE);  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);		//將管腳PB4特殊功能關(guān)掉	GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST,ENABLE);		//配置PB4/5/8/9管腳的參數(shù),用于驅(qū)動(dòng)電機(jī)。	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;	GPIO_InitStruct.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_8|GPIO_Pin_9;	GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;	//配置PC13/14/15管腳的參數(shù),紅外傳感器。	GPIO_InitStruct_C.GPIO_Mode=GPIO_Mode_IN_FLOATING;	GPIO_InitStruct_C.GPIO_Pin=GPIO_Pin_14|GPIO_Pin_15|GPIO_Pin_13;	配置PB12管腳的參數(shù),紅外傳感器。	GPIO_InitStruct_B.GPIO_Mode=GPIO_Mode_IN_FLOATING;	GPIO_InitStruct_B.GPIO_Pin=GPIO_Pin_12;		//初始化PB4/5/8/9的管腳	GPIO_Init(GPIOB, &GPIO_InitStruct);	GPIO_Init(GPIOC, &GPIO_InitStruct_C);	GPIO_Init(GPIOB, &GPIO_InitStruct_B);	//配置PB6/7管腳的參數(shù),用于產(chǎn)生PWM波	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;	//初始化PB6/7的管腳	GPIO_Init(GPIOB, &GPIO_InitStruct);	//管腳全部先置零	GPIO_ResetBits(GPIOB,GPIO_Pin_8);  GPIO_ResetBits(GPIOB,GPIO_Pin_9);	GPIO_ResetBits(GPIOB,GPIO_Pin_4);  GPIO_ResetBits(GPIOB,GPIO_Pin_5);	}/***************************************************************************************************************///TIME4的初始化函數(shù)/********************************************************************************************/void motor_pwm_TIME4_init(int presc,int arr){	 //定義定時(shí)器的結(jié)構(gòu)體	 TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;	 //定義定時(shí)器PWM輸出通道的結(jié)構(gòu)體	 TIM_OCInitTypeDef TIM_OCInitStruct;	 //打開(kāi)TIME4的時(shí)鐘	 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);	 //配置TIME4結(jié)構(gòu)體的參數(shù)	 TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1 ;	 TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;	 TIM_TimeBaseInitStruct.TIM_Prescaler = presc;	 TIM_TimeBaseInitStruct.TIM_Period =arr; 	 	 TIM_TimeBaseInit(TIM4, &TIM_TimeBaseInitStruct);	 //配置TIME4通道結(jié)構(gòu)體的參數(shù)	 TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;	 TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;	 TIM_OCInitStruct.TIM_OutputState =TIM_OutputState_Enable ;	 TIM_OCInitStruct.TIM_Pulse =0;	  //TIME4通道1初始化   TIM_OC1Init(TIM4, &TIM_OCInitStruct);	 //使能TIME4通道1的預(yù)存寄存器	 TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);   //TIME4通道2初始化   TIM_OC2Init(TIM4, &TIM_OCInitStruct);	 //使能TIME4通道2的預(yù)存寄存器   TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable);   //使能TIME4	 TIM_Cmd(TIM4, ENABLE);}/*******************************************************************************************************/void Car_gostright(int speed)//直行函數(shù)	{		speed_left(speed);		speed_right(speed);		GPIO_SetBits(GPIOB, GPIO_Pin_9);   GPIO_ResetBits(GPIOB,GPIO_Pin_8);	 GPIO_SetBits(GPIOB, GPIO_Pin_4);   GPIO_ResetBits(GPIOB,GPIO_Pin_5);	}void Car_back(int speed)//后退{(lán)		speed_left(speed);		speed_right(speed);		GPIO_SetBits(GPIOB,GPIO_Pin_8);//左邊電機(jī)		GPIO_ResetBits(GPIOB,GPIO_Pin_9);		GPIO_ResetBits(GPIOB,GPIO_Pin_4);//右邊電機(jī)		GPIO_SetBits(GPIOB,GPIO_Pin_5);}void Car_left(int speed_left,int speed_right)//小車(chē)左轉(zhuǎn){		speed_left(speed_left);	speed_right(speed_right);	GPIO_ResetBits(GPIOB, GPIO_Pin_9);  GPIO_ResetBits(GPIOB,GPIO_Pin_8);	GPIO_SetBits(GPIOB, GPIO_Pin_4);  GPIO_ResetBits(GPIOB,GPIO_Pin_5);}void Car_right(int speed_left1,int speed_right1)//小車(chē)右轉(zhuǎn){	speed_left(speed_left1);	speed_right(speed_right1);	GPIO_SetBits(GPIOB, GPIO_Pin_9);  GPIO_ResetBits(GPIOB,GPIO_Pin_8);	GPIO_ResetBits(GPIOB, GPIO_Pin_4);  GPIO_ResetBits(GPIOB,GPIO_Pin_5);}	void Car_stop(void){	GPIO_ResetBits(GPIOB,GPIO_Pin_8);//左邊電機(jī)	GPIO_ResetBits(GPIOB,GPIO_Pin_9);	GPIO_ResetBits(GPIOB,GPIO_Pin_4);//右邊電機(jī)	GPIO_ResetBits(GPIOB,GPIO_Pin_5);}void Cra_left_revolve(int speed_left2,int speed_right2)//小車(chē)左直角轉(zhuǎn)彎{	speed_left(speed_left2);	speed_right(speed_right2);	GPIO_ResetBits(GPIOB,GPIO_Pin_8);//右邊電機(jī)前進(jìn) 8=0,9=1	GPIO_SetBits(GPIOB,GPIO_Pin_9);	GPIO_ResetBits(GPIOB,GPIO_Pin_4);//左邊電機(jī)后退4=0,5=1	GPIO_SetBits(GPIOB,GPIO_Pin_5);}	void Cra_right_revolve(int speed_left3,int speed_right3)//小車(chē)右直角轉(zhuǎn)彎{	speed_left(speed_left3);	speed_right(speed_right3);	GPIO_ResetBits(GPIOB,GPIO_Pin_8);//右邊電機(jī)前進(jìn) 8=0,9=1	GPIO_SetBits(GPIOB,GPIO_Pin_9);	GPIO_ResetBits(GPIOB,GPIO_Pin_4);//左邊電機(jī)后退4=0,5=1	GPIO_SetBits(GPIOB,GPIO_Pin_5);}	//延遲一秒函數(shù)/****************************************************************************************************************/void delay_s(int s){	for(;s>0;s--)	{	delay_ms(1000);	}}/****************************************************************************************************************/

motor.h

#ifndef __MOTOR_H__#define __MOTOR_H__//需要調(diào)用的庫(kù)#include "stm32f10x_rcc.h"#include "stm32f10x_gpio.h"#include "stm32f10x_tim.h"#include "delay.h"http://宏定義#define PERIOD 10  //周期為10ms,頻率為1Khz#define speed_left(speed)  {TIM_SetCompare2(TIM4, speed);}#define speed_right(speed)  {TIM_SetCompare1(TIM4, speed);}//自定義的函數(shù)void motor_GPIO_init(void);void motor_pwm_TIME4_init(int presc,int arr);void Car_stop(void);void Car_gostright(int speed);//小車(chē)直走void Car_back(int speed);//小車(chē)后退void Car_left(int speed_left,int speed_right);//小車(chē)左轉(zhuǎn)void Car_right(int speed_left1,int speed_right1);//小車(chē)右轉(zhuǎn)void Cra_left_revolve(int speed_left2,int speed_right2);//小車(chē)原地左轉(zhuǎn)void Cra_right_revolve(int speed_left2,int speed_right2);//小車(chē)原地右轉(zhuǎn)void Car_fllow(void);void delay_s(int s);#endif

follow.c

#include "followline.h"#include "motor.h"void Car_fllow(void){	while(1)	{	int L1=1,L2=1,R1=1,R2=1;	L1=GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13);	L2=GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_14);	R1=GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_15);	R2=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12);	if(L1==1&&L2==0&&R1==0&&R2==1)//直行	{		Car_gostright(250);		delay_ms(80);	}	else if((L1==1&&R1==1 )||(R1==1))//左轉(zhuǎn)	{				Car_left(0,250);		delay_ms(80);	}	else if((L1==1&&L2==1&&R1==0&&R2==1)||(L1==1))//右轉(zhuǎn)	{		Car_right(250,0);		delay_ms(80);	}	else if((L1==0&&L2==0&&R1==0&&R2==1)||(L2==0&&R2==1))//左直角轉(zhuǎn)彎	{		Cra_left_revolve(250,250);		delay_ms(80);	}	else if((L1==1&&L2==0&&R1==0&&R2==0)||(R2==0&&L2==1))//右直角轉(zhuǎn)彎	{		Cra_right_revolve(250,250);		delay_ms(80);	}	else if(L1==1&&L2==1&&R1==1&&R2==1)//左直角轉(zhuǎn)彎	{	  Cra_right_revolve(250,250);		delay_ms(80);	}	else	{		Car_gostright(250);	  delay_ms(80);	}	}}

?follow.h

#ifndef __FOLLOWLINE_H__#define __FOLLOWLINE_H__#include "stm32f10x_gpio.h"http://讀取四個(gè)傳感器的值#define right_2  GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12)#define right_1  GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_15)#define left_2   GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_14)#define left_1   GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13)void followline_gpio_init(void);void Car_fllow(void);//void followline_function(int conut1,int count2); #endif

寫(xiě)在最后?。?!一般邏輯沒(méi)問(wèn)題,主要調(diào)試參數(shù),不要一直修改程序邏輯, 調(diào)調(diào)傳感器靈敏度啊,或則改改速度啊。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/119236.html

相關(guān)文章

  • 基于STM32f103c8t6和L292N驅(qū)動(dòng)設(shè)計(jì)避障小車(chē)(核心函數(shù)的建立為自己所寫(xiě))

    基于STM32f103c8t6和L292N驅(qū)動(dòng)設(shè)計(jì)避障小車(chē)(核心函數(shù)的建立為自己所寫(xiě)) 一.項(xiàng)目感觸 完成這個(gè)項(xiàng)目自己一開(kāi)始也是無(wú)法從本身上出發(fā),看著這個(gè)最小系統(tǒng)板和這個(gè)電機(jī)驅(qū)動(dòng)模塊上面想著怎樣實(shí)現(xiàn)讓這兩塊板子實(shí)現(xiàn)四個(gè)電機(jī)上面轉(zhuǎn)動(dòng)呢,還要加入避障模塊,自己一開(kāi)始一頭霧水,于是開(kāi)始了漫長(zhǎng)的借鑒之路,首先作為一個(gè)開(kāi)發(fā)者,我覺(jué)得學(xué)習(xí)的地方首選是B站,所以我找了相關(guān)的做智能小車(chē)的視頻 首先是B站智能小車(chē)教...

    CoffeX 評(píng)論0 收藏0
  • 工創(chuàng)賽基于stm32f103的HAL庫(kù)的全向麥輪的四個(gè)7路尋跡傳感器智能款采集程序

    摘要:灰度傳感器利用不同顏色的檢測(cè)面對(duì)光的反射程度不同的原理進(jìn)行顏色深淺檢測(cè)。這就是我們用的數(shù)字量灰度傳感器。數(shù)字量的灰度傳感器如果加入的是單片機(jī)處理數(shù)據(jù),那么可以把得到的原始數(shù)據(jù)加入濾波算法數(shù)據(jù)混合算法得到一個(gè)波動(dòng)小適應(yīng)環(huán)境強(qiáng)的數(shù)字傳感器。 文章目錄 引言 1.尋跡傳感器工作原理介紹 2.使用方...

    hersion 評(píng)論0 收藏0
  • STM32F103基于spi實(shí)現(xiàn)OLED顯示

    摘要:文章目錄一原理二實(shí)現(xiàn)顯示中文滾動(dòng)顯示顯示字符串讀取溫濕度顯示溫濕度三結(jié)果開(kāi)機(jī)顯示歡迎信息循環(huán)讀取溫濕度以及滾動(dòng)顯示我的四總結(jié)五參考六源碼一原理的定義就是串行外圍設(shè)備接口。 ...

    xfee 評(píng)論0 收藏0
  • 【平衡小車(chē)】前言

    摘要:一直以來(lái),都想自己一個(gè)平衡小車(chē),但是由于種種原因,擔(dān)心自己無(wú)法做好沒(méi)有時(shí)間去做等等,這件事也就一拖再拖。網(wǎng)上也有很多現(xiàn)成的套件,如果怕麻煩,可購(gòu)買(mǎi)整件。 一直以來(lái),...

    lovXin 評(píng)論0 收藏0
  • 基于STM32平臺(tái)的數(shù)字溫度顯示器系統(tǒng)設(shè)計(jì)

    摘要:帶中文字庫(kù)的是一種具有位位并行線(xiàn)或線(xiàn)串行多種接口方式,內(nèi)部含有國(guó)標(biāo)一級(jí)二級(jí)簡(jiǎn)體中文字庫(kù)的點(diǎn)陣圖形液晶顯示模塊其顯示分辨率為。貼片按鍵模塊支持標(biāo)準(zhǔn)的協(xié)議,完整的協(xié)議棧。以最低成本提供最大實(shí)用性,為功能嵌入其他系統(tǒng)提供無(wú)限可能。 項(xiàng)目簡(jiǎn)介 開(kāi)發(fā)環(huán)境: Keil5.14,CubeMX6.0.1,主...

    villainhr 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<