找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1230|回复: 1
打印 上一主题 下一主题
收起左侧

基于stm32的万向车源程序

[复制链接]
跳转到指定楼层
楼主
ID:410061 发表于 2019-8-2 10:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include "stm32f10x.h"   // 相当于51单片机中的  #include <reg51.h>
  2. #include "bsp_moto.h"
  3. #include "./key/bsp_key.h"  
  4. #include "bsp_SysTick.h"
  5. #include "exti.h"
  6. #include "filter.h"
  7. #include "MPU6050.h"
  8. #include "IOI2C.h"
  9. #include "bsp_usart.h"
  10. #include "delay.h"
  11. #include "bsp_servo.h"
  12. #include "bsp_dma.h"
  13. long int Target_A,Target_B,Target_C;     //电机目标值
  14. long int Motor_A,Motor_B,Motor_C;        //电机PWM变量
  15. int  Vx,Vy,Vz;     //车子三轮的速度
  16. float GYROA=0.004;
  17. float Pitch,Roll,Yaw,Move_X,Move_Y,Move_Z;   //三轴角度和XYZ轴目标速度  3200

  18. int time;  //小车转度数计时变量

  19. int control_flag=0;    //小车的行驶4个状态的控制量
  20. int mode_flag=1;         // 小车模式的控制量,1为自动,0为手动
  21. char position ='0';         //小车当前的状态。
  22.                             //小车忙不忙,如果小车在运动,上位机第四部分禁止发数据,只有小车空闲时,上位机第四部分才能给我发数据,
  23.                                                                                         //  用字符‘1’代表忙,字符‘0’代表空闲.


  24. char commend[11]={'\0'};  //接受手动命令的数组

  25. /*手动控制关闭,前进,后退,顺时针转90度,逆时针转90度,顺时针转,逆时针转*/
  26. int  off=0,forward=0,backward=0,clockwise_90=0,anticlockwise_90=0,clockwise=0,anticlockwise=0;

  27. char send_data[63]={'\0'};   //发送数据的数组
  28. double frequency_B,count_B,sum_B=0;
  29. //char wifi_flag=0;

  30. void  Start_to_A(void);
  31. void A_to_Start(void);
  32. void Start_A_B(void);
  33. void Start_A_B_C(void);


  34. int main(void)
  35. {
  36.         led_GPIO_Config();  //自动模式时,灯会亮;手动模式时,灯熄灭
  37.         led(0);
  38.         Key_GPIO_Config();
  39.         while(!Key_Scan());
  40.   wifi_Config();           //wifi初始化,配置中断优先级为0   
  41. //        USART1_Config();
  42.         Servo_Init();//舵机初始化
  43.        
  44.   Servo_heng();  //不管舵机现在是什么状态,一律变为水平状态
  45.        
  46.         moto_init();  //电机初始化,刚初始化电机完,电机不能转动,失能电机
  47.        
  48.   IIC_Init();     //=====IIC初始化,为MPU6050传输数据做准备

  49.   MPU6050_initialize();    //=====MPU6050初始化       

  50.   DMP_Init();                //=====初始化DMP  
  51.        
  52.         delay_ms(1000);           //=====延时等待DMP初始化稳定
  53. /************一上电为了后面数据的准确性,需要给出Z轴角速度的准确值,大概需要7-8秒*******/       
  54.         Read_DMP();               
  55.         delay_ms(5);
  56.         Read_DMP();               
  57.         delay_ms(5);
  58.         while(gyro[2]!=0)
  59.         {       
  60.                 Read_DMP();               
  61.                 delay_ms(5);
  62.         }
  63. /**************************************************************************************/       

  64.   GENERAL_TIM7_Init(); //以100ms的速度给上位机发送小车的运动参数,配置中断优先级为10   
  65.        
  66.         GENERAL_TIM4_Init();  //以5ms一次中断控制小车运动 ,初始化时不开启,配置中断优先级为15
  67.                               // 使能计数器TIM_Cmd(GENERAL_TIM4, ENABLE);
  68.    
  69.         GENERAL_TIM6_Init();//,配置中断优先级为5
  70.        
  71.         led(1);
  72.                

  73.        
  74.   //printf("init ok!!!\n");       
  75.         //wifi_flag=1;
  76.         wifi_NVIC_Configuration();     // wifi4中断优先级配置
  77.         USART_ITConfig(DEBUG_USART4, USART_IT_RXNE, ENABLE);        // wifi串口接收中断使能
  78.         while(1)
  79.         {
  80.                  switch(control_flag)
  81.                  {
  82.                          case 1 : Start_to_A();   break;
  83.                          case 2 : A_to_Start();   break;
  84.                          case 3 : Start_A_B();    break;
  85.                          case 4 : Start_A_B_C();  break;
  86.                          case 5 :        turn_angle(1);control_flag=0; break;//顺时针90度
  87.                          case 6 :        turn_angle(0);control_flag=0;        break;                 
  88.                          default:   ;             break;
  89.                  }
  90.         }
  91. }

  92. void  Start_to_A(void)
  93. {
  94.                
  95.                 delay_ms(1);
  96.                 position='1';  //小车忙
  97.                
  98.                 Servo_shu();  //顶货物 ,有延时
  99.           motoEN(1);//使能电机
  100.                 car_speed(0,600,0);  //小车速度
  101.                 TIM_Cmd(GENERAL_TIM4, ENABLE);  //使能计数器,让小车开始运动
  102.                 while(control_flag);  // 等待小车跑完
  103.                 delay_ms(500);
  104.                 Servo_heng();  //放货物   
  105.                 car_speed(0,-600,0);  //小车速度
  106.                 control_flag=1;
  107.                 TIM_Cmd(GENERAL_TIM4, ENABLE);  //使能计数器,让小车开始运动
  108.                 while(control_flag);  // 等待小车跑完
  109.                 motoEN(0);
  110.                 control_flag=0;
  111.                 position='0';//小车不忙
  112. }

  113. void A_to_Start(void)
  114. {
  115.                 motoEN(1);//使能电机
  116.                 delay_ms(1);
  117.                 position='1';  //小车忙
  118.          
  119.                 car_speed(0,600,0);  //小车速度
  120.                 TIM_Cmd(GENERAL_TIM4, ENABLE);  //使能计数器,让小车开始运动
  121.                 while(control_flag);  // 等待小车跑完
  122.                 delay_ms(500);
  123.                 Servo_shu();  
  124.                 car_speed(0,-600,0);  //小车速度
  125.                 control_flag=2;
  126.                 TIM_Cmd(GENERAL_TIM4, ENABLE);  //使能计数器,让小车开始运动
  127.                 while(control_flag);  // 等待小车跑完
  128.                 Servo_heng();
  129.                 motoEN(0);
  130.                 control_flag=0;
  131.                 position='0';//小车不忙
  132. }

  133. void Start_A_B(void)
  134. {
  135.                 motoEN(1);//使能电机
  136.                 delay_ms(1);
  137.                 position='1';  //小车忙
  138.          
  139.                 car_speed(0,600,0);  //小车速度
  140.                 TIM_Cmd(GENERAL_TIM4, ENABLE);  //使能计数器,让小车开始运动
  141.                 while(control_flag);  // 等待小车跑完
  142.                 delay_ms(500);
  143.           Servo_shu();
  144.                 turn_angle(1);//顺时针90度
  145.                 delay_ms(500);
  146.           control_flag=3;
  147.                 TIM_Cmd(GENERAL_TIM4, ENABLE);  //使能计数器,让小车开始运动
  148.                 while(control_flag);  // 等待小车跑完
  149.                 delay_ms(500);
  150.           Servo_heng();
  151.                
  152.                 car_speed(0,-600,0);  //小车速度
  153.                 control_flag=3;
  154.                 TIM_Cmd(GENERAL_TIM4, ENABLE);  //使能计数器,让小车开始运动
  155.                 while(control_flag);  // 等待小车跑完
  156.                 delay_ms(500);
  157.                 turn_angle(0);//逆时针90度       
  158.                 delay_ms(500);
  159.                 control_flag=3;
  160.                 TIM_Cmd(GENERAL_TIM4, ENABLE);  //使能计数器,让小车开始运动       
  161.                 while(control_flag);  // 等待小车跑完
  162.                 motoEN(0);
  163.                 control_flag=0;
  164.                 position='0';//小车不忙
  165. }

  166. void Start_A_B_C(void)
  167. {
  168.                 motoEN(1);//使能电机
  169.                 delay_ms(1);
  170.                 position='1';  //小车忙
  171.        
  172.                 car_speed(0,600,0);  //小车速度
  173.                 TIM_Cmd(GENERAL_TIM4, ENABLE);  //使能计数器,让小车开始运动
  174.                 while(control_flag);  // 等待小车跑完
  175.                 delay_ms(500);
  176.                 turn_angle(1);//顺时针90度               
  177.                 delay_ms(500);
  178.                 control_flag=4;
  179.                 TIM_Cmd(GENERAL_TIM4, ENABLE);  //使能计数器,让小车开始运动
  180.                 while(control_flag);  // 等待小车跑完
  181.                 delay_ms(500);
  182.                 Servo_shu();
  183.                 turn_angle(1);//顺时针90度
  184.                 delay_ms(500);
  185.                 control_flag=4;
  186.                 TIM_Cmd(GENERAL_TIM4, ENABLE);
  187.                 while(control_flag);  // 等待小车跑完
  188.                 delay_ms(500);
  189.                 turn_angle(1);//顺时针90度
  190.                 delay_ms(500);
  191.                 control_flag=4;
  192.                 TIM_Cmd(GENERAL_TIM4, ENABLE);
  193.                 while(control_flag);  // 等待小车跑完       
  194.                 delay_ms(500);
  195.                 turn_angle(1);//顺时针90度       
  196.           Servo_heng();
  197.                 motoEN(0);
  198.                 control_flag=0;
  199.                 position='0';//小车不忙
  200. }
复制代码

全部程序51hei下载地址:
万向车.7z (252.23 KB, 下载次数: 5)
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2019-8-2 17:01 | 只看该作者
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表