找回密码
 立即注册

QQ登录

只需一步,快速开始

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

第七届工训赛物流组小车电控程序

[复制链接]
跳转到指定楼层
楼主
ID:882006 发表于 2021-8-6 12:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
第七届工训赛物流组资料(小车电控程序)
  1. #include "stm32f10x.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "led.h"
  5. #include "timer.h"
  6. #include "encoder.h"
  7. #include "motor.h"
  8. #include "dataprocess.h"
  9. #include "steer.h"
  10. #include "show.h"
  11. #include "oled.h"
  12. #include "exti.h"
  13. #include "DataScope_DP.h"
  14. #include "adc.h"
  15. #include "dma.h"
  16. #include "steercontrol.h"


  17. u8 Mode_All=1;                                                                                                        //总模式标志,0,控制电机,1,控制舵机
  18. u16 Time_Count=0;                                                                                        //时间计数变量
  19. u16 Distance_F,Distance_L;                                                //前方距离和左边距离

  20. u16 LocationInit_X,LocationInit_Y;                //初始坐标
  21. int Location_X,Location_Y;                                                //当前坐标
  22. float Yaw ;                                                                                                                //航向角

  23. int Encoder_Left,Encoder_Right;
  24. int Distance_Left=0,Distance_Right=0;        //用于更新坐标(单位时间内【50ms】左轮前进距离和右轮前进距离)
  25. u8 state=1;                                                                                                                //mode=0,停止;mode=1,直行;mode=2,右转90度;mode =3,左转90度;mode=4,左转180度
  26. u16 Voltage;                                                                                                        //电池电压
  27. u16 AD_Value[2];                                                                                        //电池电压ADC转换的结果

  28. u8 Turn_Flag;                                                                                                        //转向标志,如果某一次转向完成,则置1,反之,置0

  29. u8 Task=2;                                                                                                                //通过扫描二维码得到的任务

  30. unsigned char FSM_Status = 0;                                        //状态机的状态变量

  31. float Target1=750,Target2=750,Target3=750,Target4=750,Target5=835,Target6=750;     //电机目标值
  32. float TargetX=0.2,TargetY=0,Target_Beta=-10,Target_Alpha=0,Target_Gamma=-5;   //姿态目标值,Target_Beta 1号舵机旋转角度,Target_Alpha,云台角度,Target_Gamma,6号舵机角度
  33. u16 Angle1=90,Angle2=90,Angle3=90,Angle4=90,Angle5=90,Angle6=105;

  34. int main(void)
  35. {
  36.         u16 i;
  37.         delay_init();                                                                //延时函数初始化
  38.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  39.         LED_Init();                                                                        //LED初始化
  40.         OLED_Init();                                                                //OLED初始化
  41.         uart_init(128000);                                        //串口一初始化
  42. //        uart4_init(9600);                                                //测距串口初始化
  43. //        uart5_init(115200);                                        //openmv串口初始化
  44. //        AdcInit();                                                                        //电池电压采集
  45. //        MYDMA_Config();                                                        //DMA1采集ADC
  46. //        IIC_Init();                 //=====模拟IIC初始化
  47. //  MPU6050_initialize();       //=====MPU6050初始化
  48. //  DMP_Init();                 //=====初始化DMP
  49.         
  50.         Encoder_Init_TIM2();                                //编码器初始化        ,右轮,为正值
  51.         Encoder_Init_TIM3();                                //编码器初始化        ,左轮,为负值
  52.         Motor_Init();                                                                //电机控制IO口初始化
  53.         Motor_PWM_Init(7199,0);                        //电机pwm初始化,10KHz
  54.         TIM1_PWM_Init(9999,144);    //舵机PWM初始化,50Hz,T=20ms
  55.         TIM8_PWM_Init(9999,144);    //舵机PWM初始化,50Hz,T=20ms
  56. //        TIM6_Int_Init(499,7200);                //50ms定时中断
  57.         TIM7_Int_Init(99,7200);                //10ms定时中断
  58.         EXTIX_Init();                                                                //按键外部中断初始化
  59. //        EXTI_PC5_Init();                                                //mpu6050INT引脚中断初始化

  60. //        SetSteer(95,90,90,90,90,105);
  61. //        delay_ms(1000);
  62. //        delay_ms(1000);

  63. //        SetSteer_PID(95,155,90,180,90,130);

  64.         while(1)
  65.         {
  66.                 oled_show();               
  67.                 delay_ms(50);


  68.         }
  69.         while(1)
  70.         {
  71.                 state =1;//直行
  72.                 oled_show();
  73.                 if(Location_X == 0 && Location_Y >= 200)
  74.                 {
  75.                         state=0;//停
  76.                         break;
  77.                 }
  78.         }
  79.         for(i=0;i<20;i++)
  80.         {
  81.                 oled_show();
  82.                 delay_ms(50);
  83.         }
  84.         while(1)
  85.         {
  86.                 state = 2;        //右转90                90
  87.                 oled_show();
  88.                 if(Turn_Flag == 1)//转向完成
  89.                 {
  90.                         state = 0;        //停
  91.                         Turn_Flag =0;
  92.                         break;
  93.                 }
  94.         }
  95.         delay_ms(300);
  96.         while(1)
  97.         {
  98.                 state = 1;//直行
  99.                 oled_show();
  100.                 if(Location_Y >= 200 && Location_X >= 1800)
  101.                 {
  102.                         state =0;
  103.                         break;
  104.                 }
  105.         }
  106.         delay_ms(300);
  107.         while(1)
  108.         {
  109.                 state = 2;        //右转90                180
  110.                 oled_show();
  111.                 if(Turn_Flag == 1)//转向完成
  112.                 {
  113.                         state = 0;        //停
  114.                         Turn_Flag =0;
  115.                         break;
  116.                 }
  117.         }
  118.         delay_ms(300);
  119.         while(1)
  120.         {
  121.                 state = 2;        //右转90                        -90
  122.                 oled_show();
  123.                 if(Turn_Flag == 1)//转向完成
  124.                 {
  125.                         state = 0;        //停
  126.                         Turn_Flag =0;
  127.                         break;
  128.                 }
  129.         }
  130.         delay_ms(300);
  131.         while(1)
  132.         {
  133.                 state = 1;//直行
  134.                 oled_show();
  135.                 if(Location_Y >= 200 && Location_X <= 900)
  136.                 {
  137.                         state =0;
  138.                         break;
  139.                 }
  140.         }
  141.         while(1)
  142.         {
  143.                 state = 2;        //右转90                        0
  144.                 oled_show();
  145.                 if(Turn_Flag == 1)//转向完成
  146.                 {
  147.                         state = 0;        //停
  148.                         Turn_Flag =0;
  149.                         break;
  150.                 }
  151.         }
  152.         delay_ms(300);
  153.         while(1)
  154.         {
  155.                 state = 4;//左转180                                                -180
  156.                 oled_show();
  157.                 if(Turn_Flag == 1)//转向完成
  158.                 {
  159.                         state = 0;        //停
  160.                         Turn_Flag =0;
  161.                         break;
  162.                 }
  163.         }
  164.         delay_ms(300);
  165.         while(1)
  166.         {
  167.                 state = 2;        //右转90                                                -90
  168.                 oled_show();
  169.                 if(Turn_Flag == 1)//转向完成
  170.                 {
  171.                         state = 0;        //停
  172.                         Turn_Flag =0;
  173.                         break;
  174.                 }
  175.         }
  176.         delay_ms(300);
  177.         while(1)
  178.         {
  179.                 state = 1;//直行
  180.                 oled_show();
  181.                 if(Location_Y >= 200 && Location_X <= 0)
  182.                 {
  183.                         state =0;
  184.                         break;
  185.                 }
  186.         }
  187.         while(1)
  188.         {
  189.                 state = 3;        //左转90                                        -180
  190.                 oled_show();
  191.                 if(Turn_Flag == 1)//转向完成
  192.                 {
  193.                         state = 0;        //停
  194.                         Turn_Flag =0;
  195.                         break;
  196.                 }
  197.         }
  198.         delay_ms(300);
  199.         while(1)
  200.         {
  201.                 state = 1;//直行
  202.                 oled_show();
  203.                 if(Location_Y <= 0 && Location_X <= 0)
  204.                 {
  205.                         state =0;
  206.                         break;
  207.                 }
  208.         }
  209.         while(1)
  210.         {
  211.                 Led_Flash(50000);
  212.                 oled_show();
  213.                 delay_ms(50);
  214.         }
  215. }

复制代码

代码下载,如有错误,请指正: stm32程序.7z (313.44 KB, 下载次数: 24)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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