|
斷斷續(xù)續(xù)自學(xué)了一個月,在學(xué)長給的模板下簡單寫了一個小車尋跡
花了一個星期寫的
附件里有源碼、原理圖等
原創(chuàng)
電路原理圖如下:
0.png (222.09 KB, 下載次數(shù): 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)
- {
-
- //系統(tǒng)時鐘初始化
- SystemInit();
- delay_init();
-
- //光電傳感器引腳初始化
- LED_Init();
- TIM3_Int_Init(); //定時檢測光電傳感器的狀態(tài)
-
- //電機初始化
- 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;
-
- //右轉(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); //控制右電機速度
- TIM_SetCompare4(TIM4,MOTOR_L_SPEED); //控制左電機速度
- }
- }
復(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:時鐘預(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è)置該引腳為復(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è)置在下一個更新事件裝入活動的自動重裝載寄存器周期的值 80K
- TIM_TimeBaseStructure.TIM_Prescaler =72; //設(shè)置用來作為TIMx時鐘頻率除數(shù)的預(yù)分頻值 不分頻
- TIM_TimeBaseStructure.TIM_ClockDivision =0; //設(shè)置時鐘分割:TDTS = Tck_tim
- TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上計數(shù)模式
- TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //根據(jù)TIM_TimeBaseInitStruct中指定的參數(shù)初始化TIMx的時間基數(shù)單位
-
- TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //選擇定時器模式: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 左輪電機正轉(zhuǎn)
- * @param none
- * @retval none
- */
- void MotorDriver_L_Turn_Forward(void)
- {
- MOTOR_L_IN1_LOW;
- MOTOR_L_IN2_HIGH;
- }
- /**
- * @brief 左輪電機反轉(zhuǎn)
- * @param none
- * @retval none
- */
- void MotorDriver_L_Turn_Reverse(void)
- {
- MOTOR_L_IN1_HIGH;
- MOTOR_L_IN2_LOW;
- }
- /**
- * @brief 右輪電機正轉(zhuǎn)
- * @param none
- * @retval none
- */
- void MotorDriver_R_Turn_Forward(void)
- {
- MOTOR_R_IN1_HIGH;
- MOTOR_R_IN2_LOW;
- }
- /**
- * @brief 右輪電機反轉(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 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
全功能主控板原理圖(Tank).pdf
(142.22 KB, 下載次數(shù): 82)
2018-11-7 15:46 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|