標(biāo)題:
stm32f103小車尋跡原理圖+源碼 大學(xué)生工程訓(xùn)練能力大賽資料
[打印本頁]
作者:
周周zycsss
時(shí)間:
2018-11-7 15:52
標(biāo)題:
stm32f103小車尋跡原理圖+源碼 大學(xué)生工程訓(xùn)練能力大賽資料
斷斷續(xù)續(xù)自學(xué)了一個(gè)月,在學(xué)長給的模板下簡單寫了一個(gè)小車尋跡
花了一個(gè)星期寫的
附件里有源碼、原理圖等
原創(chuàng)
電路原理圖如下:
0.png
(222.09 KB, 下載次數(shù): 52)
下載附件
2018-11-8 02:45 上傳
單片機(jī)源程序如下:
#include "stm32f10x.h"
#include "delay.h"
#include "key.h"
#include "motor.h"
#include "usart.h"
#include "timer.h"
#include "led.h"
extern u8 state;
u16 MOTOR_L_SPEED,MOTOR_R_SPEED;
int main(void)
{
//系統(tǒng)時(shí)鐘初始化
SystemInit();
delay_init();
//光電傳感器引腳初始化
LED_Init();
TIM3_Int_Init(); //定時(shí)檢測光電傳感器的狀態(tài)
//電機(jī)初始化
Motor_Init();
MotorDriver_L_Turn_Forward();
MotorDriver_R_Turn_Forward();
TIM_SetCompare3(TIM4,0); //控制右電機(jī)速度
TIM_SetCompare4(TIM4,0); //控制左電機(jī)速度
//蜂鳴器停止鳴叫 表示初始化完成
Beep_Led_Init();
Sys_OK_Sound();
while(1)
{
switch (state)
{
//直行 D1 D2 D3 D4
case 0: //0 0 0 0
case 6: //0 1 1 0
case 15: //1 1 1 1
MOTOR_R_SPEED=MOTOR_SPEED_BASE;
MOTOR_L_SPEED=MOTOR_SPEED_BASE;
break;
//右轉(zhuǎn)
case 2: //0 0 1 0
MOTOR_R_SPEED=MOTOR_SPEED_BASE;
MOTOR_L_SPEED=MOTOR_SPEED_BASE+MOTOR_SPEED_PLUS;
break;
case 3: //0 0 1 1
MOTOR_R_SPEED=MOTOR_SPEED_BASE-2*MOTOR_SPEED_PLUS;
MOTOR_L_SPEED=MOTOR_SPEED_BASE+MOTOR_SPEED_PLUS;
break;
case 1: //0 0 0 1
MOTOR_R_SPEED=MOTOR_SPEED_BASE-4*MOTOR_SPEED_PLUS;
MOTOR_L_SPEED=MOTOR_SPEED_BASE+2*MOTOR_SPEED_PLUS;
break;
//左轉(zhuǎn)
case 4: //0 1 0 0
MOTOR_R_SPEED=MOTOR_SPEED_BASE+MOTOR_SPEED_PLUS;
MOTOR_L_SPEED=MOTOR_SPEED_BASE;
break;
case 12: //1 1 0 0
MOTOR_R_SPEED=MOTOR_SPEED_BASE+MOTOR_SPEED_PLUS;
MOTOR_L_SPEED=MOTOR_SPEED_BASE-2*MOTOR_SPEED_PLUS;
break;
case 8: //1 0 0 0
MOTOR_R_SPEED=MOTOR_SPEED_BASE+2*MOTOR_SPEED_PLUS;
MOTOR_L_SPEED=MOTOR_SPEED_BASE-4*MOTOR_SPEED_PLUS;
break;
default: ;
}
TIM_SetCompare3(TIM4,MOTOR_R_SPEED); //控制右電機(jī)速度
TIM_SetCompare4(TIM4,MOTOR_L_SPEED); //控制左電機(jī)速度
}
}
復(fù)制代碼
#include "motor.h"
#define MOTOR_R_IN1_LOW (GPIO_ResetBits(GPIOC, GPIO_Pin_0))
#define MOTOR_R_IN1_HIGH (GPIO_SetBits(GPIOC, GPIO_Pin_0))
#define MOTOR_R_IN2_LOW (GPIO_ResetBits(GPIOC, GPIO_Pin_1))
#define MOTOR_R_IN2_HIGH (GPIO_SetBits(GPIOC, GPIO_Pin_1))
#define MOTOR_L_IN1_LOW (GPIO_ResetBits(GPIOC, GPIO_Pin_2))
#define MOTOR_L_IN1_HIGH (GPIO_SetBits(GPIOC, GPIO_Pin_2))
#define MOTOR_L_IN2_LOW (GPIO_ResetBits(GPIOC, GPIO_Pin_3))
#define MOTOR_L_IN2_HIGH (GPIO_SetBits(GPIOC, GPIO_Pin_3))
//PWM輸出初始化
//arr:自動重裝值
//psc:時(shí)鐘預(yù)分頻數(shù)
void Motor_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);//
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC, ENABLE); //使能GPIO外設(shè)時(shí)鐘使能
//設(shè)置該引腳為復(fù)用輸出功能,輸出TIM4 CH3/4的PWM脈沖波形
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9 ; //TIM4_CH3 TIM4_CH4
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //復(fù)用推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
TIM_TimeBaseStructure.TIM_Period = 10000; //設(shè)置在下一個(gè)更新事件裝入活動的自動重裝載寄存器周期的值 80K
TIM_TimeBaseStructure.TIM_Prescaler =72; //設(shè)置用來作為TIMx時(shí)鐘頻率除數(shù)的預(yù)分頻值 不分頻
TIM_TimeBaseStructure.TIM_ClockDivision =0; //設(shè)置時(shí)鐘分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上計(jì)數(shù)模式
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //根據(jù)TIM_TimeBaseInitStruct中指定的參數(shù)初始化TIMx的時(shí)間基數(shù)單位
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //選擇定時(shí)器模式:TIM脈沖寬度調(diào)制模式2
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = 0;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC3Init(TIM4, &TIM_OCInitStructure);
TIM_OCInitStructure.TIM_OutputState =TIM_OutputState_Enable; //比較輸出使能
TIM_OCInitStructure.TIM_Pulse = 0; //設(shè)置待裝入捕獲比較寄存器的脈沖值
TIM_OC4Init(TIM4, &TIM_OCInitStructure); //輸出極性:TIM輸出比較極性高
TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable); //根據(jù)TIM_OCInitStruct中指定的參數(shù)初始化外設(shè)TIMx
TIM_CtrlPWMOutputs(TIM4,ENABLE); //MOE 主輸出使能
TIM_ARRPreloadConfig(TIM4, ENABLE); //使能TIMx在ARR上的預(yù)裝載寄存器
TIM_Cmd(TIM4, ENABLE); //使能TIM4
/*初始化PC端口為Out_PP模式*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
/**
* @brief 左輪電機(jī)正轉(zhuǎn)
* @param none
* @retval none
*/
void MotorDriver_L_Turn_Forward(void)
{
MOTOR_L_IN1_LOW;
MOTOR_L_IN2_HIGH;
}
/**
* @brief 左輪電機(jī)反轉(zhuǎn)
* @param none
* @retval none
*/
void MotorDriver_L_Turn_Reverse(void)
{
MOTOR_L_IN1_HIGH;
MOTOR_L_IN2_LOW;
}
/**
* @brief 右輪電機(jī)正轉(zhuǎn)
* @param none
* @retval none
*/
void MotorDriver_R_Turn_Forward(void)
{
MOTOR_R_IN1_HIGH;
MOTOR_R_IN2_LOW;
}
/**
* @brief 右輪電機(jī)反轉(zhuǎn)
* @param none
* @retval none
*/
void MotorDriver_R_Turn_Reverse(void)
{
MOTOR_R_IN1_LOW;
MOTOR_R_IN2_HIGH;
}
復(fù)制代碼
所有資料51hei提供下載:
尋跡.rar
(286.68 KB, 下載次數(shù): 133)
2018-11-8 02:44 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
全功能主控板原理圖(Tank).pdf
(142.22 KB, 下載次數(shù): 82)
2018-11-7 15:46 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
stc52雙片機(jī)
時(shí)間:
2018-11-23 17:08
用的是什么循跡呢老鐵
作者:
272993740
時(shí)間:
2019-5-23 15:13
用的紅外對管是么
作者:
qxqy080602
時(shí)間:
2019-5-23 20:30
這個(gè)是你們準(zhǔn)備比賽用的?
作者:
123654abc
時(shí)間:
2020-9-24 16:46
這個(gè)有原理圖嗎
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1