说到这个智能小车这估计是大二以前以来最很有价值的一次代码的学习了,好像这是大二第一学期末玩的吧........
感觉还是挺有意义的做完以后,还有这整个过程的走过来.......
今天主要的是分享下,也给自己留点什么....
记得刚开始的时候和队友拿着传感器,然后我们就用示波器到处在测我们那个它那个引脚(见下图),一直蒙逼的看着那个数据也不知道是啥,总之就是一种无奈
经验分享
苦逼的我们只好还是只能静下心来继续学习,后来车搭起来了
车也跑了起来,可是后来发现车这样是不行结果我们就把它拆了
最后剩下的只是一堆骨头,当然不可能就这样子了,后来把它优化的更好了,
哈哈.........成了我最后的作品......
数据优化对比
与之继续优化的参数(这是用蓝牙示波器看的参数)
没优化前:
优化后的:
大体思路
我觉得这基本上也就这么一个思路吧,见下图
部分代码
1 #include "common.h" 2 #include "include.h" 3 #include "com.h" 4 5 /*------------------------变量定义区域-----------------------------------*/ 6 /*----------------------------------------------------------------------*/ 7 //extern int LDC_val,LDC_val1; 8 extern uint8 proximtyData[2]; 9 extern void PIT0_IRQHandler(void); 10 unsigned short int ctrl = 0; 11 unsigned short int ctrl1 = 0; 12 unsigned short int duty =7200; 13 void ysz_delay(unsigned int ms); 14 void ysz_delay_us(int ms)//为防止time_delay_ms();与lpt冲突编写的延时 15 { 16 int j1,k_1;int i1; 17 i1=ms; 18 for(j1=0;j1<i1;j1++) 19 for(k_1=0;k_1<8;k_1++); 20 } 21 22 void ysz_delay_ms(uint16 ms)//为防止time_delay_ms();与lpt冲突编写的延时 23 { 24 uint16 j1,k_1;uint32 i1; 25 i1=ms; 26 for(j1=0;j1<i1;j1++) 27 for(k_1=0;k_1<14120;k_1++); 28 } 29 /*************************************************************/ 30 /*------------------------系统初始化-----------------------------------*/ 31 /*----------------------------------------------------------------------*/ 32 void SysInit(void) 33 { 34 LCD_Init(); //液晶显示初始化 35 uart_init (UART4, 9600); //蓝牙初始化 36 LCD_Fill(0x00); //初始清屏 37 LED_P6x8Str(65 ,0,"1.1 1"); 38 LED_P6x8Str(0 ,2,"CH1:"); 39 LED_P6x8Str(0 ,3,"CH2:"); 40 //LED_P6x8Str(60 ,3,"CH3:"); 41 LED_P6x8Str(0 ,6,"Servor_PWM:"); 42 LED_P6x8Str(0 ,7,"Freq_final3"); 43 */ 44 FTM_PWM_init(FTM1, FTM_CH0,50,755); 45 LDC_init();//传感器初始化 46 LDC_init1();//传感器初始化 47 Key_Init();//按键初始化 48 //OLED显示中文字符 49 QD_Init();//编码器初始化 50 gpio_init (PTA17, GPO,0); 51 gpio_init (PTE26, GPO,0); 52 FTM_PWM_Init();//电机初始化 53 DisableInterrupts; //用于关闭总中断为了使系统初始化成功 54 pit_init_ms(PIT0,2); //10us 7400 //定时器 55 set_vector_handler(PIT0_VECTORn ,PIT0_IRQHandler); //设置PIT0的中断复位函数为 PIT0_IRQHandler 56 enable_irq(PIT0_IRQn); //开中断 使能 57 } 58 /**********************************************/ 59 // main函数 60 // 61 // 62 /*********************************************/ 63 void main(void) 64 { 65 EnableInterrupts; //用于开启总中断 66 SysInit(); //系统初始化 67 EnableInterrupts; 68 //用于开启总中 69 while(1) 70 {Key();//按键操作 71 gpio_init (PTD15, GPO,0); //程序成功开启指示灯 72 OutPut_Data();//蓝牙数据输出 73 Streer_Control();//采样滤波 74 Freq_final2=Servor_P*10; 75 gpio_set (PTA17, ctrl );//0亮 停车指示灯 76 gpio_set (PTE26, ctrl1 );//0亮 停车标志位指示 77 78 } 79 } 80 /**********************中断服务程序*******************/ 81 void PIT0_IRQHandler(void) 82 {gpio_init (PTC0, GPO,0); //程序进入中断总函数指示灯 83 DisableInterrupts;//关闭总中断 84 Car_control(); // 总控制 方向控制部分 85 if(Stop_flag1==0) 86 {if(key_check(KEY_START) == KEY_DOWN) //干簧管标志位 87 {Stop_flag1=1; 88 ctrl1=1; 89 pit_time_start (PIT1); //开始计时 90 } 91 } 92 if(Stop_flag1==1) 93 {if(key_check(KEY_STOP) == KEY_DOWN) //干簧管停车 94 {Stop_flag1=2; 95 ctrl=1; 96 timevar = pit_time_get_ms (PIT1); //获取计时时间 97 98 }} 99 100 PIT_Flag_Clear(PIT0); //清中断标志位 101 102 EnableInterrupts; //开启总中断 103 104 }