标题:
stm32f103小车寻迹原理图+源码 大学生工程训练能力大赛资料
[打印本页]
作者:
周周zycsss
时间:
2018-11-7 15:52
标题:
stm32f103小车寻迹原理图+源码 大学生工程训练能力大赛资料
断断续续自学了一个月,在学长给的模板下简单写了一个小车寻迹
花了一个星期写的
附件里有源码、原理图等
原创
电路原理图如下:
0.png
(222.09 KB, 下载次数: 52)
下载附件
2018-11-8 02:45 上传
单片机源程序如下:
#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)
{
//系统时钟初始化
SystemInit();
delay_init();
//光电传感器引脚初始化
LED_Init();
TIM3_Int_Init(); //定时检测光电传感器的状态
//电机初始化
Motor_Init();
MotorDriver_L_Turn_Forward();
MotorDriver_R_Turn_Forward();
TIM_SetCompare3(TIM4,0); //控制右电机速度
TIM_SetCompare4(TIM4,0); //控制左电机速度
//蜂鸣器停止鸣叫 表示初始化完成
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;
//右转
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;
//左转
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); //控制右电机速度
TIM_SetCompare4(TIM4,MOTOR_L_SPEED); //控制左电机速度
}
}
复制代码
#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:时钟预分频数
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外设时钟使能
//设置该引脚为复用输出功能,输出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; //复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
TIM_TimeBaseStructure.TIM_Period = 10000; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 80K
TIM_TimeBaseStructure.TIM_Prescaler =72; //设置用来作为TIMx时钟频率除数的预分频值 不分频
TIM_TimeBaseStructure.TIM_ClockDivision =0; //设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式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; //设置待装入捕获比较寄存器的脉冲值
TIM_OC4Init(TIM4, &TIM_OCInitStructure); //输出极性:TIM输出比较极性高
TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable); //根据TIM_OCInitStruct中指定的参数初始化外设TIMx
TIM_CtrlPWMOutputs(TIM4,ENABLE); //MOE 主输出使能
TIM_ARRPreloadConfig(TIM4, ENABLE); //使能TIMx在ARR上的预装载寄存器
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 左轮电机正转
* @param none
* @retval none
*/
void MotorDriver_L_Turn_Forward(void)
{
MOTOR_L_IN1_LOW;
MOTOR_L_IN2_HIGH;
}
/**
* @brief 左轮电机反转
* @param none
* @retval none
*/
void MotorDriver_L_Turn_Reverse(void)
{
MOTOR_L_IN1_HIGH;
MOTOR_L_IN2_LOW;
}
/**
* @brief 右轮电机正转
* @param none
* @retval none
*/
void MotorDriver_R_Turn_Forward(void)
{
MOTOR_R_IN1_HIGH;
MOTOR_R_IN2_LOW;
}
/**
* @brief 右轮电机反转
* @param none
* @retval none
*/
void MotorDriver_R_Turn_Reverse(void)
{
MOTOR_R_IN1_LOW;
MOTOR_R_IN2_HIGH;
}
复制代码
所有资料51hei提供下载:
寻迹.rar
(286.68 KB, 下载次数: 133)
2018-11-8 02:44 上传
点击文件名下载附件
下载积分: 黑币 -5
全功能主控板原理图(Tank).pdf
(142.22 KB, 下载次数: 82)
2018-11-7 15:46 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
stc52双片机
时间:
2018-11-23 17:08
用的是什么循迹呢老铁
作者:
272993740
时间:
2019-5-23 15:13
用的红外对管是么
作者:
qxqy080602
时间:
2019-5-23 20:30
这个是你们准备比赛用的?
作者:
123654abc
时间:
2020-9-24 16:46
这个有原理图吗
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1