完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
#include “stm32f10x.h”
#include “sys.h” #include “PWM.h” #include “delay.h” #include “usart.h” #include “mpu6050.h” #include “inv_mpu.h” #include “inv_mpu_dmp_motion_driver.h” #include “LED.h” #include “encode.h” #include “oled.h” #include “pid.h” #include “timer.h” #include “key.h” extern float Count; ///编码器故障,展示只有编码器2有用 extern float Count2; extern float countD_value; extern float Old_Count; extern float Old_Count2; extern float countD_value2; extern float count_AND; u16 Parameter = 1881; //输入编码器线数 //u8 t=0,report=1; //默认开启上报 u8 key; float pitch,roll,yaw; //欧拉角 short aacx,aacy,aacz; //加速度传感器原始数据 short gyrox,gyroy,gyroz; //陀螺仪原始数据 short temp; //温度 float PIDoutALL; void int_all(void); void Get_Data(void); int main(void) { int_all(); while(1) Get_Data(); } void int_all(void) { uart_init(115200); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 SystemInit(); delay_init(); NVIC_Cfg(); GPIO_Cfg(); TIM1_Init(); TIME2_INT(10,7199);//1ms TIM_Cfg(); TIM_Cmd(TIM3,ENABLE); TIM4_Init(); OLED_Init(); MPU_Init(); //初始化MPU6050 LED1_INT(); Angle_PID_init(); Speed_PID_init(); KEY_Init(); } void Get_Data(void) { // u8 t=0,report=1; //默认开启上报 // u8 key; // float pitch,roll,yaw; //欧拉角 // short aacx,aacy,aacz; //加速度传感器原始数据 // short gyrox,gyroy,gyroz; //陀螺仪原始数据 // short temp; //温度 // NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 // delay_init(); //延时初始化 // usmart_dev.init(72); //初始化USMART // LED_Init(); //初始化与LED连接的硬件接口 // KEY_Init(); //初始化按键 // LCD_Init(); //初始化LCD // MPU_Init(); //初始化MPU6050 LED1=1; LED2=1; OLED_ShowStr(16, 0,“Balance Car”,2); // OLED_ON(); // while(mpu_dmp_init()) // { LED2=0; OLED_ShowStr(0, 2,“Int MPU6050 。 ”,2); delay_ms(300); OLED_ShowStr(0, 2,“Int MPU6050 。.”,2); delay_ms(300); OLED_ShowStr(0, 2,“Int MPU6050 。..”,2); delay_ms(300); OLED_ShowStr(0, 2,“ ”,2); // } OLED_ShowStr(0, 2,“MPU6050 Check Ok”,2); // LCD_ShowString(30,130,200,16,16,“MPU6050 OK”); // LCD_ShowString(30,150,200,16,16,“KEY0:UPLOAD ON/OFF”); // POINT_COLOR=BLUE;//设置字体为蓝色 // LCD_ShowString(30,170,200,16,16,“UPLOAD ON ”); // LCD_ShowString(30,200,200,16,16,“ Temp: 。 C”); // LCD_ShowString(30,220,200,16,16,“Pitch: 。 C”); // LCD_ShowString(30,240,200,16,16,“ Roll: 。 C”); // LCD_ShowString(30,260,200,16,16,“ Yaw : 。 C”); while(1) { key=KEY_Scan(0); // if(key==KEY0_PRES) // { // report=!report; // if(report)LCD_ShowString(30,170,200,16,16,“UPLOAD ON ”); // else LCD_ShowString(30,170,200,16,16,“UPLOAD OFF”); // } LED1=1; if(mpu_dmp_get_data(&pitch,&roll,&yaw)==0) { temp=MPU_Get_Temperature(); //得到温度值 MPU_Get_Accelerometer(&aacx,&aacy,&aacz); //得到加速度传感器数据 MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz); //得到陀螺仪数据 // if(report)mpu6050_send_data(aacx,aacy,aacz,gyrox,gyroy,gyroz);//用自定义帧发送加速度和陀螺仪原始数据 // if(report)usart1_report_imu(aacx,aacy,aacz,gyrox,gyroy,gyroz,(int)(roll*100),(int)(pitch*100),(int)(yaw*10)); // if((t%10)==0) // { pid.Pv=pitch; //角度PID输入 pid2.Pv2=count_AND; //速度PID输入 Angle_PID_Calc(); //角度PID计算 Speed_PID_Calc(); //速度PID计算 PIDoutALL=pid2.OUT2+pid.OUT; //双环PID合成 if(PIDoutALL《0) ALL_right(-PIDoutALL+13); if(PIDoutALL》0) ALL_left(PIDoutALL+13); // if(temp《0) // { LCD_ShowChar(30+48,200,‘-’,16,0); //显示负号 // temp=-temp; //转为正数 }else LCD_ShowChar(30+48,200,‘ ’,16,0); //去掉负号 LCD_ShowNum(30+48+8,200,temp/100,3,16); //显示整数部分 LCD_ShowNum(30+48+40,200,temp%10,1,16); //显示小数部分 // temp=pitch*10; // // // if(temp《0) // { LCD_ShowChar(30+48,220,‘-’,16,0); //显示负号 // temp=-temp; //转为正数 // }else LCD_ShowChar(30+48,220,‘ ’,16,0); //去掉负号 // LCD_ShowNum(30+48+8,220,temp/10,3,16); //显示整数部分 // LCD_ShowNum(30+48+40,220,temp%10,1,16); //显示小数部分 // temp=roll*10; // // // if(temp《0) // { // LCD_ShowChar(30+48,240,‘-’,16,0); //显示负号 // temp=-temp; //转为正数 // }else LCD_ShowChar(30+48,240,‘ ’,16,0); //去掉负号 // LCD_ShowNum(30+48+8,240,temp/10,3,16); //显示整数部分 // LCD_ShowNum(30+48+40,240,temp%10,1,16); //显示小数部分 // temp=yaw*10; // // // // if(temp《0) // { // LCD_ShowChar(30+48,260,‘-’,16,0); //显示负号 // temp=-temp; //转为正数 // }else LCD_ShowChar(30+48,260,‘ ’,16,0); //去掉负号 // LCD_ShowNum(30+48+8,260,temp/10,3,16); //显示整数部分 // LCD_ShowNum(30+48+40,260,temp%10,1,16); //显示小数部分 // t=0; LED0=!LED0;//LED闪烁 // } } // t++; if(Old_Count != Count) //如果先前的计数值与当前计数值不相等,说明编码器已转动打印当前数值 { LED1=0; OLED_ShowStr(0, 0,“AUTO Parking Station”,1); } // } } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1801 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1629 浏览 1 评论
1096 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
735 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1684 浏览 2 评论
1944浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
745浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
580浏览 3评论
602浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
565浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-27 17:24 , Processed in 0.986161 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号