|
STM32資源使用說明:
1、串口:usart1用于串口調(diào)試。 相關(guān)引腳:PA9、PA10.
usart3用于藍(lán)牙通信。 相關(guān)引腳:PB10、PB11.
2、定時(shí)器:timer1用于進(jìn)中斷控制(采集數(shù)據(jù)、PID參數(shù)調(diào)節(jié))。相關(guān)引腳:
timer2用于編碼模式測(cè)量左電機(jī)速度。相關(guān)引腳:PA0、PA1.
timer3用于產(chǎn)生兩路PWM波驅(qū)動(dòng)電機(jī)。相關(guān)引腳:PB0、PB1.
timer4用于編碼模式測(cè)量右電機(jī)速度。相關(guān)引腳:PB6、PB7.
3、模擬IIC: 用于陀螺儀和單片機(jī)之間的數(shù)據(jù)通信。相關(guān)引腳:PB8、PB9.
4、模擬SPI:用于oled和單片機(jī)之間的數(shù)據(jù)通信。相關(guān)引腳:PB12、PB13、PB14、PB15、PA8.
引腳連接說明:
1、5個(gè)VCC,5個(gè)GND。
2、PB0、PB1分別接TB6612上的PWMA、PWMB。
3、PA2、PA3分別接TB6612上的BIN1、BIN2。
PA6、PA5分別接TB6612上的AIN1、AIN2。
PA4接在TB6612上的STBY。
4、PB4、PB3、PA15、PA12、PA11分別接在5個(gè)循跡模塊的D0口。
5、PB12、PB13、PB14、PB15、PA8分別接在oled模塊上的D0、D1、RES、DC、CS。
單片機(jī)源程序如下:
- #include "stdio.h"
- #include "stm32f10x.h"
- #include "delay.h"
- /**************************用戶頭文件區(qū)******************************/
- #include "bsp_usart1.h"
- #include "bsp_usart3.h"
- #include "bsp_timer1_irq.h"
- #include "bsp_timer2_encoder.h"
- #include "bsp_timer3_pwm_ch1234.h"
- #include "bsp_timer4_encoder.h"
- #include "bsp_timer6_irq.h"
- #include "bsp_IIC.h"
- #include "bsp_NVIC.h"
- #include "filter.h"
- #include "mpu6050.h"
- #include "led.h"
- #include "tb6612.h"
- #include "line_finding.h"
- #include "control.h"
- #include "oled_small.h"
- /*********************************變量區(qū)***************************/
- //extern int Encoder_Left,Encoder_Right;
- /*****************************函數(shù)區(qū)******************************/
- int main(void)
- {
- SystemInit(); //配置系統(tǒng)時(shí)鐘(72M)
- delay_init();
- bsp_usart1_config(115200); //串口一用作調(diào)試 115200 與模擬IIC配合,只能用115200
- // bsp_usart3_config(9600); //串口三用作藍(lán)牙通信 (與藍(lán)牙匹配 9600)
- #if 0
- /********************循跡部分**********************/
- TIM3_pwm_init(7199,0); //其中兩路通道分別產(chǎn)生兩路PWM波用以驅(qū)動(dòng)兩個(gè)電機(jī)
- pid_init(); //PID相關(guān)參數(shù)初始化
- TIM6_irq_Init(49,7199); //5ms進(jìn)一次中斷服務(wù)進(jìn)行參數(shù)采集與控制( T= ( (7199+1)/72M * (99+1) ) )
- LED_Init();
- TB6612_Init(); //電機(jī)驅(qū)動(dòng)模塊初始化
- line_finding_Init(); //各循跡模塊初始化
-
- #endif
-
- /*******************添加平衡功能********************/
- #if 1
-
- IIC_Init(); //模擬IIC實(shí)現(xiàn)MPU6050與單片機(jī)之間的數(shù)據(jù)通信
- MPU6050_initialize(); //MPU6050角度傳感器資源初始化
- DMP_Init(); //MPU6050內(nèi)置DMP資源初始化
- TB6612_Init(); //電機(jī)驅(qū)動(dòng)模塊初始化
- pid_init(); //PID相關(guān)參數(shù)初始化
- target_init(); //控制對(duì)象的目標(biāo)賦初值
- TIM1_irq_Init(49,7199); //5ms進(jìn)一次中斷服務(wù)進(jìn)行參數(shù)采集與控制( T= ( (7199+1)/72M * (99+1) ) )
- TIM3_pwm_init(1999,71); //其中兩路通道分別產(chǎn)生兩路PWM ch3\ch4 波用以驅(qū)動(dòng)兩個(gè)電機(jī)
- TIM2_Encoder_Init(); //用于編碼測(cè)速
- TIM4_Encoder_Init();
- line_finding_Init(); //各循跡模塊初始化
- OLED_Init(); //oled顯示屏初始化
-
- printf("\r\n初始化配置配置完成\r\n");
-
- #endif
- /***************************PWM波賦初值***************************/
- TIM_SetCompare3(TIM3,initail_pwm); //占空比為:x/7200
- TIM_SetCompare4(TIM3,initail_pwm);
- go_straight();
- while(1)
- {
- line_finding_start(); //循跡
- my_oled_show();
- }
-
- }
復(fù)制代碼
所有資料51hei提供下載:
平衡小車(succed).7z
(256.84 KB, 下載次數(shù): 85)
2019-1-14 03:42 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|