摘要:前言傳感器工作原理代碼部分電機初始化延遲初始化電機管腳初始化尋跡管腳初始化。電機管腳初始化函數定義管腳的結構體打開所要使用的時鐘將管腳特殊功能關掉配置管腳的參數,用于驅動電機。配置管腳的參數紅外傳感器。
前言:傳感器工作原理:
代碼部分:?
?
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);//電機PWM初始化 delay_init();//延遲初始化 motor_GPIO_init();//電機管腳初始化、尋跡管腳初始化。 //int right_2=0,right_1=0 ,left_2=0,left_1=0; while(1) { Car_fllow(); }}
motor.c
#include "motor.h"http://電機GPIO管腳初始化函數/**********************************************************************************/void motor_GPIO_init(void){ //定義管腳的結構體 GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitTypeDef GPIO_InitStruct_C,GPIO_InitStruct_B; //打開所要使用的時鐘 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //將管腳PB4特殊功能關掉 GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST,ENABLE); //配置PB4/5/8/9管腳的參數,用于驅動電機。 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管腳的參數,紅外傳感器。 GPIO_InitStruct_C.GPIO_Mode=GPIO_Mode_IN_FLOATING; GPIO_InitStruct_C.GPIO_Pin=GPIO_Pin_14|GPIO_Pin_15|GPIO_Pin_13; 配置PB12管腳的參數,紅外傳感器。 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管腳的參數,用于產生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的初始化函數/********************************************************************************************/void motor_pwm_TIME4_init(int presc,int arr){ //定義定時器的結構體 TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct; //定義定時器PWM輸出通道的結構體 TIM_OCInitTypeDef TIM_OCInitStruct; //打開TIME4的時鐘 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //配置TIME4結構體的參數 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通道結構體的參數 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的預存寄存器 TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable); //TIME4通道2初始化 TIM_OC2Init(TIM4, &TIM_OCInitStruct); //使能TIME4通道2的預存寄存器 TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable); //使能TIME4 TIM_Cmd(TIM4, ENABLE);}/*******************************************************************************************************/void Car_gostright(int speed)//直行函數 { 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)//后退{ speed_left(speed); speed_right(speed); GPIO_SetBits(GPIOB,GPIO_Pin_8);//左邊電機 GPIO_ResetBits(GPIOB,GPIO_Pin_9); GPIO_ResetBits(GPIOB,GPIO_Pin_4);//右邊電機 GPIO_SetBits(GPIOB,GPIO_Pin_5);}void Car_left(int speed_left,int speed_right)//小車左轉{ 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)//小車右轉{ 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);//左邊電機 GPIO_ResetBits(GPIOB,GPIO_Pin_9); GPIO_ResetBits(GPIOB,GPIO_Pin_4);//右邊電機 GPIO_ResetBits(GPIOB,GPIO_Pin_5);}void Cra_left_revolve(int speed_left2,int speed_right2)//小車左直角轉彎{ speed_left(speed_left2); speed_right(speed_right2); GPIO_ResetBits(GPIOB,GPIO_Pin_8);//右邊電機前進 8=0,9=1 GPIO_SetBits(GPIOB,GPIO_Pin_9); GPIO_ResetBits(GPIOB,GPIO_Pin_4);//左邊電機后退4=0,5=1 GPIO_SetBits(GPIOB,GPIO_Pin_5);} void Cra_right_revolve(int speed_left3,int speed_right3)//小車右直角轉彎{ speed_left(speed_left3); speed_right(speed_right3); GPIO_ResetBits(GPIOB,GPIO_Pin_8);//右邊電機前進 8=0,9=1 GPIO_SetBits(GPIOB,GPIO_Pin_9); GPIO_ResetBits(GPIOB,GPIO_Pin_4);//左邊電機后退4=0,5=1 GPIO_SetBits(GPIOB,GPIO_Pin_5);} //延遲一秒函數/****************************************************************************************************************/void delay_s(int s){ for(;s>0;s--) { delay_ms(1000); }}/****************************************************************************************************************/
motor.h
#ifndef __MOTOR_H__#define __MOTOR_H__//需要調用的庫#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);}//自定義的函數void motor_GPIO_init(void);void motor_pwm_TIME4_init(int presc,int arr);void Car_stop(void);void Car_gostright(int speed);//小車直走void Car_back(int speed);//小車后退void Car_left(int speed_left,int speed_right);//小車左轉void Car_right(int speed_left1,int speed_right1);//小車右轉void Cra_left_revolve(int speed_left2,int speed_right2);//小車原地左轉void Cra_right_revolve(int speed_left2,int speed_right2);//小車原地右轉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))//左轉 { Car_left(0,250); delay_ms(80); } else if((L1==1&&L2==1&&R1==0&&R2==1)||(L1==1))//右轉 { Car_right(250,0); delay_ms(80); } else if((L1==0&&L2==0&&R1==0&&R2==1)||(L2==0&&R2==1))//左直角轉彎 { Cra_left_revolve(250,250); delay_ms(80); } else if((L1==1&&L2==0&&R1==0&&R2==0)||(R2==0&&L2==1))//右直角轉彎 { Cra_right_revolve(250,250); delay_ms(80); } else if(L1==1&&L2==1&&R1==1&&R2==1)//左直角轉彎 { 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://讀取四個傳感器的值#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
寫在最后!??!一般邏輯沒問題,主要調試參數,不要一直修改程序邏輯, 調調傳感器靈敏度啊,或則改改速度啊。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/119236.html
基于STM32f103c8t6和L292N驅動設計避障小車(核心函數的建立為自己所寫) 一.項目感觸 完成這個項目自己一開始也是無法從本身上出發,看著這個最小系統板和這個電機驅動模塊上面想著怎樣實現讓這兩塊板子實現四個電機上面轉動呢,還要加入避障模塊,自己一開始一頭霧水,于是開始了漫長的借鑒之路,首先作為一個開發者,我覺得學習的地方首選是B站,所以我找了相關的做智能小車的視頻 首先是B站智能小車教...
摘要:灰度傳感器利用不同顏色的檢測面對光的反射程度不同的原理進行顏色深淺檢測。這就是我們用的數字量灰度傳感器。數字量的灰度傳感器如果加入的是單片機處理數據,那么可以把得到的原始數據加入濾波算法數據混合算法得到一個波動小適應環境強的數字傳感器。 文章目錄 引言 1.尋跡傳感器工作原理介紹 2.使用方...
摘要:文章目錄一原理二實現顯示中文滾動顯示顯示字符串讀取溫濕度顯示溫濕度三結果開機顯示歡迎信息循環讀取溫濕度以及滾動顯示我的四總結五參考六源碼一原理的定義就是串行外圍設備接口。 ...
摘要:帶中文字庫的是一種具有位位并行線或線串行多種接口方式,內部含有國標一級二級簡體中文字庫的點陣圖形液晶顯示模塊其顯示分辨率為。貼片按鍵模塊支持標準的協議,完整的協議棧。以最低成本提供最大實用性,為功能嵌入其他系統提供無限可能。 項目簡介 開發環境: Keil5.14,CubeMX6.0.1,主...
閱讀 2650·2021-11-25 09:43
閱讀 670·2021-11-12 10:36
閱讀 4615·2021-11-08 13:18
閱讀 2168·2021-09-06 15:00
閱讀 3106·2019-08-30 15:56
閱讀 923·2019-08-30 13:57
閱讀 1984·2019-08-30 13:48
閱讀 1412·2019-08-30 11:13