找回密码
 立即注册

QQ登录

只需一步,快速开始

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

风力摆控制系统全套设计资料(代码+图+报告)15年电赛作品

  [复制链接]
跳转到指定楼层
楼主
这是15年电赛的风力摆控制系统,里面包含完整的代码和完整的报告以及实物图,可以学到很多东西。


论文:


单片机源程序如下:
  1. #include<rtx51tny.h>                 /* RTX51 tiny functions & defines */
  2. #include <intrins.h>
  3. #include "LCD12864.h"
  4. #include "key.h"
  5. #include "stc12uart1定时器1.h"
  6. #include "stc12uart2.h"
  7. #include "HW_PWM.h"
  8. #include<math.h>
  9. #include<stdio.h>

  10. #define uchar unsigned char
  11. #define uint  unsigned int

  12. unsigned char Key=0x00;                         //确定当前哪个按键按下

  13. sbit LED11=P0^2;
  14. sbit LED12=P0^3;
  15. sbit LED13=P0^4;
  16. sbit LED14=P0^7;

  17. /*------------------------------------------------------------------------------------
  18. ------------------------------------------------------------------------------------*/
  19. xdata float mpu6050[9];
  20. xdata unsigned char PWM1=1,PWM2=1;
  21. xdata float Gyro_y=0.0;
  22. xdata float Angle_x=0.0; //MPU6050测得的x轴的角度
  23. xdata float Angle_x_set=10;                //x轴设定的角度 角度与位移的公式 L*tan(Angle_x_set)=x
  24. xdata float x;                                                        //L为万向节到纸面原点的垂直距离(单位cm)  Angle_x_set为需要设定的角度

  25. xdata float Kp_x=10,Ki_x=0,Kd_x=0.1;
  26. xdata float Now_error_x=0,Last_error_x=0;         //Now_error 当前偏差 Last_error 上一次偏差  Pre_error上上一次偏差
  27. xdata int uk_x=0,uk1_x=0.01,duk_x=0;

  28. xdata float Kp_y=10,Ki_y=0,Kd_y=0.1;
  29. xdata float Now_error_y=0,Last_error_y=0;         //Now_error 当前偏差 Last_error 上一次偏差  Pre_error上上一次偏差
  30. xdata int uk_y=0,uk1_y=0,duk_y=0;

  31. xdata float setjiaodu3=0;
  32. uchar m,i;
  33. bit Basic04Flag=0;      //基础部分4标志位
  34. //bit Basic04Flag2=0;
  35.                                                         //x为纸面的位移
  36. int PID_control();
  37. /*------------------------------------------------------------------------------------
  38. ------------------------------------------------------------------------------------*/

  39. void SystemInit(void) _task_  0                                //任务0----------------系统初始化
  40. {        
  41.         LCD12864_Init();                   //12864液晶初始化
  42.         KeyInit();                                   //按键初始化
  43.         UART2_Init();                 //STC12C5A串口2初始化,独立波特率发生器产生波特率
  44.         UART1_Init();                 //STC12C5A串口1初始化,定时器1产生波特率
  45.         HW_PWMInit();
  46.         
  47.         HW_PWM0Set(1);
  48.         HW_PWM1Set(1);
  49.         PWM1=1;
  50.         PWM2=1;

  51.         MenuOperate(0);
  52.         MenuOperate(0);
  53.         MenuOperate(0);

  54.         LED11=1;
  55.         LED12=1;
  56.         LED13=1;
  57.         LED14=1;

  58.         os_create_task(1);                        //创建任务1
  59.         os_create_task(2);                        //创建任务2
  60.         os_create_task(3);          //创建任务3
  61.         os_create_task(4);          //创建任务4
  62.         os_create_task(5);                        //创建任务5
  63.         os_create_task(6);          //创建任务6
  64.         os_create_task(7);          //创建任务7
  65.         os_create_task(8);          //创建任务8
  66.         os_create_task(9);          //创建任务9

  67.         os_delete_task(0);                        //删除初始化函数
  68. }
  69. void  KeyScan(void)     _task_       1                           //任务1-----------------------按键扫描
  70. {
  71.         unsigned char keyvalue=KEY_NULL;
  72.         
  73.         while(1)
  74.         {
  75.                 GetKey(&keyvalue);                                                    //获取当前键值
  76.                 if(keyvalue==(KEY_VALUE_1|KEY_DOWN))         //按键一按下   指针减
  77.                 {
  78.                         Key=0x30;
  79.                         os_send_signal(2);
  80.                 }
  81.                 if(keyvalue==(KEY_VALUE_2|KEY_DOWN))         //按键er按下   指针加
  82.                 {
  83.                         Key=0x28;
  84.                         os_send_signal(2);
  85.                 }
  86.                 if(keyvalue==(KEY_VALUE_3|KEY_DOWN))         //按键san按下   确定
  87.                 {
  88.                         Key=0x18;
  89.                         os_send_signal(2);
  90.                 }
  91.                 if(keyvalue==(KEY_VALUE_4|KEY_DOWN))                  //按键四按下   返回
  92.                 {
  93.                         Key=0x08;
  94.                         os_send_signal(2);
  95.                 }
  96.                 os_wait(K_IVL,3,0);                                                 //进行周期性检测
  97.         }
  98. }
  99. void  LCD12864Display(void) _task_   2                          //任务2-----------------12864液晶显示
  100. {
  101.         while(1)
  102.         {
  103.                 os_wait(K_SIG,0,0);             //等待按键信号
  104.                 MenuOperate(Key);
  105.         }
  106. }
  107. void UartRec(void)      _task_       3                  //任务3-------------------串口收发
  108. {
  109. //    float Value[3];
  110. //        float x,y,z;
  111. //        xdata char str[16];

  112.         while(1)
  113.         {
  114. //                Value [0] = ((short)(ucStrAngle[1]<<8| ucStrAngle[0]))/32768.0*180;
  115. //                Value[1] = ((short)(ucStrAngle[3]<<8| ucStrAngle[2]))/32768.0*180;
  116. //                Value[2] = ((short)(ucStrAngle[5]<<8| ucStrAngle[4]))/32768.0*180;
  117. //                acc_x=(float)(((unsigned short)ucStra[3]<<8)|ucStra[2])/32768.0*16;
  118.                 Angle_x=((short)(ucStrAngle[3]<<8| ucStrAngle[2]))/32768.0*180;
  119.                 Gyro_y=((short)(ucStrw[3]<<8|ucStrw[2]))/32768.0*2000;

  120.                
  121. //                mpu6050[0]=(float)mpu[0]/32768.0*16;           //加速度
  122. //                mpu6050[1]=(float)mpu[1]/32768.0*16;
  123. //                mpu6050[2]=(float)mpu[2]/32768.0*16;

  124.                 mpu6050[3]=(float)mpu[3]/32768.0*2000;          //角速度
  125.                 mpu6050[4]=(float)mpu[4]/32768.0*2000;
  126.                 mpu6050[5]=(float)mpu[5]/32768.0*2000;

  127.                 mpu6050[6]=(float)mpu[6]/32768.0*180;           //角度
  128.                 mpu6050[7]=(float)mpu[7]/32768.0*180;
  129.                 mpu6050[8]=(float)mpu[8]/32768.0*180;

  130. //                sprintf(str,"%.3f %.3f\n",mpu6050[6],mpu6050[7]);
  131. //                UART1_SendStr(str);
  132.                 UART1_SendPWM(PWM1,PWM2);
  133. //                Data_Send_Status(Value[0],Value[1],Value[2]);
  134. //                Data_Receive(&x,&y,&z);
  135. //                UART1_SendPWM(64,64);
  136.                 os_switch_task();        
  137.         }        
  138. }                                          
  139. void TaskSwitch(void)   _task_       4                      //任务4
  140. {
  141.         while(1)
  142.         {
  143.                 switch(KeyFuncIndex)
  144.                 {
  145.                         case 10:          //基础1
  146.                         //        HW_PWM0Set(1);
  147.                         //        HW_PWM1Set(1);
  148.                                 os_send_signal(5);
  149.                                 break;
  150.                         case 11:          //基础2
  151.                                 //HW_PWM0Set(1);
  152.                                 //HW_PWM1Set(1);
  153.                                 os_send_signal(6);
  154.                                 break;
  155.                         case 12:          //基础3
  156.                                 os_send_signal(7);
  157.                                 break;
  158.                         case 16:          //基础4
  159.                                 os_send_signal(9);
  160.                                 break;
  161.                         case 13:                  //发挥1
  162.                                 os_send_signal(8);
  163.                                 break;
  164.                         case 14:           //发挥2
  165.                                 os_send_signal(9);
  166.                                 break;
  167.                         case 15:           //发挥3
  168.                                 break;
  169.                 }
  170.                 os_switch_task();
  171.         }
  172. }
  173. void PID_control_x()
  174. {
  175.         
  176.         Now_error_x=-mpu6050[6];        //偏差=设定值—实际值
  177.         duk_x=Kp_x*(Now_error_x-Last_error_x)+Ki_x*Now_error_x+Kd_x*mpu6050[3];          //pid增量式公式

  178.         uk_x=duk_x+uk1_x;          //通过pid调节所需要改变的值
  179.         
  180.         uk1_x=uk_x;        //变量值移位
  181.         Last_error_x=Now_error_x;

  182. }

  183. void PID_control_y()
  184. {
  185.         
  186.         Now_error_y=0.0-mpu6050[7];        //偏差=设定值—实际值
  187.         duk_y=Kp_y*(Now_error_y-Last_error_y)+Ki_y*Now_error_y+Kd_y*mpu6050[4];          //pid增量式公式

  188.         uk_y=duk_y+uk1_y;          //通过pid调节所需要改变的值        
  189.         uk1_y=uk_y;        //变量值移位
  190.         Last_error_y=Now_error_y;

  191. }
  192. void Basic01(void)      _task_       5              //任务5        基础部分1
  193. {
  194.         while(1)
  195.         {
  196.                 os_wait(K_SIG,0,0);
  197.         //        PID_control_x();
  198.                 if(Angle_x>-3.0&&Angle_x<10.5)        //Angle_x为x轴的角度,电机的方向通过角度的正负确定
  199.                 {
  200.                         HW_PWM0Set(255);
  201.                         HW_PWM1Set(1);                                
  202.                 }
  203.                 else if(Angle_x<-3.0&&Angle_x>-7.5)
  204.                 {
  205.                         HW_PWM0Set(1);
  206.                         HW_PWM1Set(1);        
  207.                 }
  208.                 else if(Angle_x<-7.5&&Angle_x>-9.8)
  209.                 {
  210.                         HW_PWM0Set(1);
  211.                         HW_PWM1Set(255);        
  212.                 }
  213.                 else
  214.                 {
  215.                         HW_PWM0Set(1);
  216.                         HW_PWM1Set(1);
  217.                 }

  218. //                if(mpu6050[6]>2)
  219. //                {
  220. //                                uk_x=fabs(uk_x);
  221. //                                if(uk_x>=256)
  222. //                                {
  223. //                                        uk_x=255;
  224. //                                }
  225. //                                        PWM1=1;
  226. //                                PWM2=uk_x;
  227. //                         //hou yiwozhengqianfangweizuobuao
  228. //                //                LED14=1;
  229. //                }
  230. //                if(mpu6050[6]<-2)
  231. //                {
  232. //                                uk_x=fabs(uk_x);
  233. //                                if(uk_x>=256)
  234. //                                {
  235. //                                        uk_x=255;
  236. //                                }
  237. //                                PWM1=uk_x;
  238. //                                PWM2=1;         
  239. //                        
  240. //                }
  241. //                else
  242. //                {
  243. //                        PWM1=1;
  244. //                        PWM2=1;         
  245. //                }
  246.                         
  247. //                HW_PWM1Set(1);        
  248. //                   HW_PWM0Set(255);
  249. //                os_wait(K_TMO,122,0);
  250.         
  251.                
  252. //                HW_PWM0Set(1);
  253. //                HW_PWM1Set(155);
  254. //                os_wait(K_TMO,38,0);

  255.                 os_switch_task();
  256.         }
  257. }                                         
  258. void Basic02(void)      _task_       6           //任务6             基础部分2
  259. {
  260. //        xdata char str[16];

  261.          HW_PWM0Set(1);
  262.          HW_PWM1Set(1);

  263.          while(1)
  264.          {
  265.                 os_wait(K_SIG,0,0);

  266.                 Angle_x_set=atan(Basic02SetValue/2.0/92.0)*57.295;
  267.                   
  268. //                sprintf(str,"%.3f  %.3f\n",Angle_x,Gyro_y);
  269. //                UART1_SendStr(str);
  270.                 if(Basic02SetValue>=30&&Basic02SetValue<=32)
  271.                 {
  272.                           if(Angle_x>-1.0&&Angle_x<3.0)        //Angle_x为x轴的角度,电机的方向通过角度的正负确定
  273.                         {
  274.                                 HW_PWM0Set(255);
  275.                                 HW_PWM1Set(1);                                
  276.                         }
  277.                         else if(Angle_x<0.0&&Angle_x>-3.0)
  278.                         {
  279.                                 HW_PWM0Set(1);
  280.                                 HW_PWM1Set(1);        
  281.                         }
  282.                         else if(Angle_x<-3.0&&Angle_x>-5.5)
  283.                         {
  284.                                 HW_PWM0Set(1);
  285.                                 HW_PWM1Set(245);        
  286.                         }
  287.                         else
  288.                         {
  289.                                 HW_PWM0Set(1);
  290.                                 HW_PWM1Set(1);
  291.                         }
  292.                 }
  293.                 if(Basic02SetValue>=33&&Basic02SetValue<=35)
  294.                 {
  295.                           if(Angle_x>-1.0&&Angle_x<3.3)        //Angle_x为x轴的角度,电机的方向通过角度的正负确定
  296.                         {
  297.                                 HW_PWM0Set(255);
  298.                                 HW_PWM1Set(1);                                
  299.                         }
  300.                         else if(Angle_x<-1.0&&Angle_x>-3.3)
  301.                         {
  302.                                 HW_PWM0Set(1);
  303.                                 HW_PWM1Set(1);        
  304.                         }
  305.                         else if(Angle_x<-3.3&&Angle_x>-5.5)
  306.                         {
  307.                                 HW_PWM0Set(1);
  308.                                 HW_PWM1Set(245);        
  309.                         }
  310.                         else
  311.                         {
  312.                                 HW_PWM0Set(1);
  313.                                 HW_PWM1Set(1);
  314.                         }
  315.                 }
  316.                 if(Basic02SetValue==36)                //wucha
  317.                 {
  318.                           if(Angle_x>-1.2&&Angle_x<3.5)        //Angle_x为x轴的角度,电机的方向通过角度的正负确定
  319.                         {
  320.                                 HW_PWM0Set(255);
  321.                                 HW_PWM1Set(1);                                
  322.                         }
  323.                         else if(Angle_x<-1.0&&Angle_x>-3.5)
  324.                         {
  325.                                 HW_PWM0Set(1);
  326.                                 HW_PWM1Set(1);        
  327.                         }
  328.                         else if(Angle_x<-3.5&&Angle_x>-5.5)
  329.                         {
  330.                                 HW_PWM0Set(1);
  331.                                 HW_PWM1Set(255);        
  332.                         }
  333.                         else
  334.                         {
  335.                                 HW_PWM0Set(1);
  336.                                 HW_PWM1Set(1);
  337.                         }
  338.                 }
  339.                 if(Basic02SetValue>=37&&Basic02SetValue<=39)
  340.                 {
  341.                           if(Angle_x>-2.0&&Angle_x<3.5)        //Angle_x为x轴的角度,电机的方向通过角度的正负确定
  342.                         {
  343.                                 HW_PWM0Set(255);
  344.                                 HW_PWM1Set(1);                                
  345.                         }
  346.                         else if(Angle_x<-2.0&&Angle_x>-3.5)
  347.                         {
  348.                                 HW_PWM0Set(1);
  349.                                 HW_PWM1Set(1);        
  350.                         }
  351.                         else if(Angle_x<-3.5&&Angle_x>-6.0)
  352.                         {
  353.                                 HW_PWM0Set(1);
  354.                                 HW_PWM1Set(255);        
  355.                         }
  356.                         else
  357.                         {
  358.                                 HW_PWM0Set(1);
  359.                                 HW_PWM1Set(1);
  360.                         }
  361.                 }
  362.                 if(Basic02SetValue>=40&&Basic02SetValue<=43)
  363.                 {
  364.                           if(Angle_x>-2.0&&Angle_x<4.9)        //Angle_x为x轴的角度,电机的方向通过角度的正负确定
  365.                         {
  366.                                 HW_PWM0Set(255);
  367.                                 HW_PWM1Set(1);                                
  368.                         }
  369.                         else if(Angle_x<-2.0&&Angle_x>-4.9)
  370.                         {
  371.                                 HW_PWM0Set(1);
  372.                                 HW_PWM1Set(1);        
  373.                         }
  374.                         else if(Angle_x<-4.9&&Angle_x>-7.3)
  375.                         {
  376.                                 HW_PWM0Set(1);
  377.                                 HW_PWM1Set(255);        
  378.                         }
  379.                         else
  380.                         {
  381.                                 HW_PWM0Set(1);
  382.                                 HW_PWM1Set(1);
  383.                         }
  384.                 }
  385.                 if(Basic02SetValue==44)
  386.                 {
  387.                           if(Angle_x>-2.0&&Angle_x<4.7)        //Angle_x为x轴的角度,电机的方向通过角度的正负确定
  388.                         {
  389.                                 HW_PWM0Set(255);
  390.                                 HW_PWM1Set(1);                                
  391.                         }
  392.                         else if(Angle_x<-2.0&&Angle_x>-4.7)
  393.                         {
  394.                                 HW_PWM0Set(1);
  395.                                 HW_PWM1Set(1);        
  396.                         }
  397.                         else if(Angle_x<-4.7&&Angle_x>-7.2)
  398.                         {
  399.                                 HW_PWM0Set(1);
  400.                                 HW_PWM1Set(255);        
  401.                         }
  402.                         else
  403.                         {
  404.                                 HW_PWM0Set(1);
  405.                                 HW_PWM1Set(1);
  406.                         }
  407.                 }
  408.                 if(Basic02SetValue>=45&&Basic02SetValue<=46)
  409.                 {
  410.                           if(Angle_x>-2.0&&Angle_x<5.0)        //Angle_x为x轴的角度,电机的方向通过角度的正负确定
  411.                         {
  412.                                 HW_PWM0Set(255);
  413.                                 HW_PWM1Set(1);                                
  414.                         }
  415.                         else if(Angle_x<-2.0&&Angle_x>-4.9)
  416.                         {
  417.                                 HW_PWM0Set(1);
  418.                                 HW_PWM1Set(1);        
  419.                         }
  420.                         else if(Angle_x<-4.9&&Angle_x>-7.5)
  421.                         {
  422.                                 HW_PWM0Set(1);
  423.                                 HW_PWM1Set(255);        
  424.                         }
  425.                         else
  426.                         {
  427.                                 HW_PWM0Set(1);
  428.                                 HW_PWM1Set(1);
  429.                         }
  430.                 }
  431.                 if(Basic02SetValue>=47&&Basic02SetValue<=49)
  432.                 {
  433.                           if(Angle_x>-2.0&&Angle_x<5.0)        //Angle_x为x轴的角度,电机的方向通过角度的正负确定
  434.                         {
  435.                                 HW_PWM0Set(255);
  436.                                 HW_PWM1Set(1);                                
  437.                         }
  438.                         else if(Angle_x<-2.0&&Angle_x>-6.0)
  439.                         {
  440.                                 HW_PWM0Set(1);
  441.                                 HW_PWM1Set(1);        
  442.                         }
  443.                         else if(Angle_x<-6.0&&Angle_x>-8.6)
  444.                         {
  445.                                 HW_PWM0Set(1);
  446.                                 HW_PWM1Set(255);        
  447.                         }
  448.                         else
  449.                         {
  450.                                 HW_PWM0Set(1);
  451.                                 HW_PWM1Set(1);
  452.                         }
  453.                 }
  454.                 if(Basic02SetValue>=50&&Basic02SetValue<=51)
  455.                 {
  456.                           if(Angle_x>-2.0&&Angle_x<6.0)        //Angle_x为x轴的角度,电机的方向通过角度的正负确定
  457.                         {
  458.                                 HW_PWM0Set(255);
  459.                                 HW_PWM1Set(1);                                
  460.                         }
  461.                         else if(Angle_x<-2.0&&Angle_x>-6.9)
  462.                         {
  463.                                 HW_PWM0Set(1);
  464.                                 HW_PWM1Set(1);        
  465.                         }
  466.                         else if(Angle_x<-6.9&&Angle_x>-9.8)
  467.                         {
  468.                                 HW_PWM0Set(1);
  469.                                 HW_PWM1Set(255);        
  470.                         }
  471.                         else
  472.                         {
  473.                                 HW_PWM0Set(1);
  474.                                 HW_PWM1Set(1);
  475.                         }
  476.                 }
  477.                 if(Basic02SetValue>=52&&Basic02SetValue<=53)
  478.                 {
  479.                           if(Angle_x>-2.0&&Angle_x<5.6)        //Angle_x为x轴的角度,电机的方向通过角度的正负确定
  480.                         {
  481.                                 HW_PWM0Set(255);
  482.                                 HW_PWM1Set(1);                                
  483.                         }
  484.                         else if(Angle_x<-2.0&&Angle_x>-7.6)
  485.                         {
  486.                                 HW_PWM0Set(1);
  487.                                 HW_PWM1Set(1);        
  488.                         }
  489.                         else if(Angle_x<-7.6&&Angle_x>-10.5)
  490.                         {
  491.                                 HW_PWM0Set(1);
  492.                                 HW_PWM1Set(255);        
  493.                         }
  494.                         else
  495.                         {
  496.                                 HW_PWM0Set(1);
  497.                                 HW_PWM1Set(1);
  498.                         }
  499.                 }
  500.                 if(Basic02SetValue>=54&&Basic02SetValue<=55)
  501.                 {
  502.                           if(Angle_x>-2.0&&Angle_x<6.0)        //Angle_x为x轴的角度,电机的方向通过角度的正负确定
  503.                         {
  504.                                 HW_PWM0Set(255);
  505.                                 HW_PWM1Set(1);                                
  506.                         }
  507.                         else if(Angle_x<-2.0&&Angle_x>-8.0)
  508.                         {
  509.                                 HW_PWM0Set(1);
  510.                                 HW_PWM1Set(1);        
  511.                         }
  512.                         else if(Angle_x<-8.0&&Angle_x>-11.5)
  513.                         {
  514.                                 HW_PWM0Set(1);
  515.                                 HW_PWM1Set(255);        
  516.                         }
  517.                         else
  518.                         {
  519.                                 HW_PWM0Set(1);
  520.                                 HW_PWM1Set(1);
  521.                         }
  522.                 }
  523.                 if(Basic02SetValue>=56&&Basic02SetValue<=58)
  524.                 {
  525.                           if(Angle_x>-2.0&&Angle_x<7.3)        //Angle_x为x轴的角度,电机的方向通过角度的正负确定
  526.                         {
  527.                                 HW_PWM0Set(255);
  528.                                 HW_PWM1Set(1);                                
  529.                         }
  530.                         else if(Angle_x<-2.0&&Angle_x>-7.3)
  531.                         {
  532.                                 HW_PWM0Set(1);
  533.                                 HW_PWM1Set(1);        
  534.                         }
  535.                         else if(Angle_x<-7.3&&Angle_x>-11.5)
  536.                         {
  537.                                 HW_PWM0Set(1);
  538.                                 HW_PWM1Set(255);        
  539.                         }
  540.                         else
  541.                         {
  542.                                 HW_PWM0Set(1);
  543.                                 HW_PWM1Set(1);
  544.                         }
  545.                 }
  546.                 if(Basic02SetValue>=59&&Basic02SetValue<=60)
  547.                 {
  548.                           if(Angle_x>-2.0&&Angle_x<7.8)        //Angle_x为x轴的角度,电机的方向通过角度的正负确定
  549.                         {
  550.                                 HW_PWM0Set(255);
  551.                                 HW_PWM1Set(1);                                
  552.                         }
  553.                         else if(Angle_x<-2.0&&Angle_x>-7.8)
  554.                         {
  555.                                 HW_PWM0Set(1);
  556.                                 HW_PWM1Set(1);        
  557.                         }
  558.                         else if(Angle_x<-7.8&&Angle_x>-12.5)
  559.                         {
  560.                                 HW_PWM0Set(1);
  561.                                 HW_PWM1Set(255);        
  562.                         }
  563.                         else
  564.                         {
  565.                                 HW_PWM0Set(1);
  566.                                 HW_PWM1Set(1);
  567.                         }
  568.                 }
  569.                  os_switch_task();        
  570.          }
  571. }



  572. void Basic03(void)      _task_       7           //任务7             基础部分3
  573. {

  574. while(1)
  575. {
  576.         
  577.         os_wait(K_SIG,0,0);
  578.         
  579.         if(Basic03SetValue==10)           //10度
  580.         {
  581.                
  582.                 if(mpu6050[3]>0)
  583.                 {
  584.                         HW_PWM0Set(1);
  585.                         HW_PWM1Set(1);
  586.                 }
  587.                 else
  588.                 {
  589.                         HW_PWM0Set(1);
  590.                         HW_PWM1Set(55);
  591.                 }
  592.                 if(mpu6050[7]>30)
  593.                 {
  594.                         HW_PWM0Set(1);
  595.                         HW_PWM1Set(1);
  596.                 }        
  597.                 /*处理Y轴*/
  598.                 if(mpu6050[4]>0)
  599.                 {
  600.                         PWM1=1;
  601.                         PWM2=55;               
  602.                 }
  603.                 else
  604.                 {
  605.                         PWM1=205;
  606.                         PWM2=1;        
  607.                 }
  608.                 if(mpu6050[6]>30)
  609.                 {
  610.                         HW_PWM0Set(1);
  611.                         HW_PWM1Set(1);
  612.                 }
  613.         }

  614.         if(Basic03SetValue==20)                         //20度
  615.         {
  616.         if(mpu6050[3]>0)
  617.                 {
  618.                         HW_PWM0Set(75);
  619.                         HW_PWM1Set(1);
  620.                 }
  621.                 else
  622.                 {
  623.                         HW_PWM0Set(1);
  624.                         HW_PWM1Set(205);
  625.                 }
  626.                 if(mpu6050[7]>30)
  627.                 {
  628.                         HW_PWM0Set(1);
  629.                         HW_PWM1Set(1);
  630.                 }        
  631.                 /*处理Y轴*/
  632.                 if(mpu6050[4]>0)
  633.                 {
  634.                         PWM1=1;
  635.                         PWM2=255;               
  636.                 }
  637.                 else
  638.                 {
  639.                         PWM1=255;
  640.                         PWM2=1;        
  641.                 }
  642.                 if(mpu6050[6]>30)
  643.                 {
  644.                         HW_PWM0Set(1);
  645.                         HW_PWM1Set(1);
  646.                 }
  647.         }

  648.         if(Basic03SetValue==30)
  649.         {
  650.                
  651.                         
  652.                 if(mpu6050[3]>0)
  653.                 {
  654.                         HW_PWM0Set(90);
  655.                         HW_PWM1Set(1);
  656.                 }
  657.                 else
  658.                 {
  659.                         HW_PWM0Set(1);
  660.                         HW_PWM1Set(205);
  661.                 }
  662.                 if(mpu6050[7]>15)
  663.                 {
  664.                         HW_PWM0Set(1);
  665.                         HW_PWM1Set(1);
  666.                 }        
  667.                 /*处理Y轴*/
  668.                 if(mpu6050[4]>0)
  669.                 {
  670.                         PWM1=1;
  671.                         PWM2=255;               
  672.                 }
  673.                 else
  674.                 {
  675.                         PWM1=255;
  676.                         PWM2=1;        
  677.                 }
  678.                 if(mpu6050[6]>30)
  679.                 {
  680.                         HW_PWM0Set(1);
  681.                         HW_PWM1Set(1);
  682.                 }
  683.         }

  684.         if(Basic03SetValue==40)
  685.         {
  686.         if(mpu6050[3]>0)
  687.                 {
  688.                         HW_PWM0Set(120);
  689.                         HW_PWM1Set(1);
  690.                 }
  691.                 else
  692.                 {
  693.                         HW_PWM0Set(1);
  694.                         HW_PWM1Set(205);
  695.                 }
  696.                 if(mpu6050[7]>15)
  697.                 {
  698.                         HW_PWM0Set(1);
  699.                         HW_PWM1Set(1);
  700.                 }        
  701.                 /*处理Y轴*/
  702.                 if(mpu6050[4]>0)
  703.                 {
  704.                         PWM1=1;
  705.                         PWM2=255;               
  706.                 }
  707.                 else
  708.                 {
  709.                         PWM1=255;
  710.                         PWM2=1;        
  711.                 }
  712.                 if(mpu6050[6]>15)
  713.                 {
  714.                         HW_PWM0Set(1);
  715.                         HW_PWM1Set(1);
  716.                 }
  717.         }

  718.         if(Basic03SetValue==50)
  719.         {
  720.                
  721.                 if(mpu6050[3]>0)
  722.                 {
  723.                         HW_PWM0Set(105);
  724.                         HW_PWM1Set(1);
  725.                 }
  726.                 else
  727.                 {
  728.                         HW_PWM0Set(1);
  729.                         HW_PWM1Set(168);
  730.                 }
  731.                 if(mpu6050[7]>30)
  732.                 {
  733.                         HW_PWM0Set(1);
  734.                         HW_PWM1Set(1);
  735.                 }        
  736.                 /*处理Y轴*/
  737.                 if(mpu6050[4]>0)
  738.                 {
  739.                         PWM1=1;
  740.                         PWM2=205;               
  741.                 }
  742.                 else
  743.                 {
  744.                         PWM1=205;
  745.                         PWM2=1;        
  746.                 }
  747.                 if(mpu6050[6]>30)
  748.                 {
  749.                         HW_PWM0Set(1);
  750.                         HW_PWM1Set(1);
  751.                 }
  752.         }

  753.         if(Basic03SetValue==60)
  754.         {
  755.                
  756.         if(mpu6050[3]>0)
  757.                 {
  758.                         HW_PWM0Set(205);
  759.                         HW_PWM1Set(1);
  760.                 }
  761.                 else
  762.                 {
  763.                         HW_PWM0Set(1);
  764.                         HW_PWM1Set(205);
  765.                 }
  766.                 if(mpu6050[7]>30)
  767.                 {
  768.                         HW_PWM0Set(1);
  769.                         HW_PWM1Set(1);
  770.                 }        
  771.                 /*处理Y轴*/
  772.                 if(mpu6050[4]>0)
  773.                 {
  774.                         PWM1=1;
  775.                         PWM2=205;               
  776.                 }
  777.                 else
  778.                 {
  779.                         PWM1=125; //145
  780.                         PWM2=1;        
  781.                 }
  782.                 if(mpu6050[6]>20)
  783.                 {
  784.                         HW_PWM0Set(1);
  785.                         HW_PWM1Set(1);
  786.                 }
  787.         }

  788.         if(Basic03SetValue==70)
  789.         {
  790.                 if(mpu6050[3]>0)
  791.                 {
  792.                         HW_PWM0Set(145); //145
  793.                         HW_PWM1Set(1);
  794.                 }
  795.                 else
  796.                 {
  797.                         HW_PWM0Set(1);
  798.                         HW_PWM1Set(145);
  799.                 }
  800.                 if(mpu6050[7]>30)
  801.                 {
  802.                         HW_PWM0Set(1);
  803.                         HW_PWM1Set(1);
  804.                 }        
  805.                 /*处理Y轴*/
  806.                 if(mpu6050[4]>0)
  807.                 {
  808.                         PWM1=1;
  809.                         PWM2=205;               
  810.                 }
  811.                 else
  812.                 {
  813.                         PWM1=1; //145
  814.                         PWM2=1;        
  815.                 }
  816.                 if(mpu6050[6]>20)
  817.                 {
  818.                         HW_PWM0Set(1);
  819.                         HW_PWM1Set(1);
  820.                 }
  821.         }

  822.         if(Basic03SetValue==80)
  823.         {
  824.                 if(mpu6050[3]>0)
  825.                 {
  826.                         HW_PWM0Set(145); //145
  827.                         HW_PWM1Set(1);
  828.                 }
  829.                 else
  830.                 {
  831.                         HW_PWM0Set(1);
  832.                         HW_PWM1Set(145);
  833.                 }
  834.                 if(mpu6050[7]>30)
  835.                 {
  836.                         HW_PWM0Set(1);
  837.                         HW_PWM1Set(1);
  838.                 }        
  839.                 /*处理Y轴*/
  840.                 if(mpu6050[4]>0)
  841.                 {
  842.                         PWM1=1;
  843.                         PWM2=205;               
  844.                 }
  845.                 else
  846.                 {
  847.                         PWM1=1; //145
  848.                         PWM2=1;        
  849.                 }
  850.                 if(mpu6050[6]>20)
  851.                 {
  852.                         HW_PWM0Set(1);
  853.                         HW_PWM1Set(1);
  854.                 }

  855.         }

  856.         if(Basic03SetValue==90)
  857.         {
  858.                         if(Angle_x>-3.0&&Angle_x<10.5)        //Angle_x为x轴的角度,电机的方向通过角度的正负确定
  859.                 {
  860.                         HW_PWM0Set(255);
  861.                         HW_PWM1Set(1);                                
  862.                 }
  863.                 else if(Angle_x<-3.0&&Angle_x>-7.5)
  864.                 {
  865.                         HW_PWM0Set(1);
  866.                         HW_PWM1Set(1);        
  867.                 }
  868.                 else if(Angle_x<-7.5&&Angle_x>-9.8)
  869.                 {
  870.                         HW_PWM0Set(1);
  871.                         HW_PWM1Set(255);        
  872.                 }
  873.                 else
  874.                 {
  875.                         HW_PWM0Set(1);
  876.                         HW_PWM1Set(1);
  877.                 }

  878.         }

  879.         
  880.         if(Basic03SetValue==100)
  881.         {
  882.                
  883.                 if(mpu6050[3]>0)
  884.                 {
  885.                         HW_PWM0Set(1);
  886.                         HW_PWM1Set(210);
  887.                 }
  888.                 else
  889.                 {

  890.                         HW_PWM0Set(175);
  891.                         HW_PWM1Set(1);
  892.                 }
  893.                 if(mpu6050[7]>30)
  894.                 {
  895.                         HW_PWM0Set(1);
  896.                         HW_PWM1Set(1);
  897.                 }        
  898.                 /*处理Y轴*/
  899.                 if(mpu6050[4]>0)
  900.                 {
  901.         
  902.                         PWM1=45;
  903.                         PWM2=1;                        
  904.                 }
  905.                 else
  906.                 {
  907.                         PWM1=1;
  908.                         PWM2=45;
  909.                 }
  910.                 if(mpu6050[6]>30)
  911.                 {
  912.                         HW_PWM0Set(1);
  913.                         HW_PWM1Set(1);
  914.                 }
  915.         }

  916.         if(Basic03SetValue==110)
  917.         {
  918.                
  919.                 if(mpu6050[3]>0)
  920.                 {
  921.                         HW_PWM0Set(1);
  922.                         HW_PWM1Set(205);
  923.                 }
  924.                 else
  925.                 {

  926.                         HW_PWM0Set(175);
  927.                         HW_PWM1Set(1);
  928.                 }
  929.                 if(mpu6050[7]>30)
  930.                 {
  931.                         HW_PWM0Set(1);
  932.                         HW_PWM1Set(1);
  933.                 }        
  934.                 /*处理Y轴*/
  935.                 if(mpu6050[4]>0)
  936.                 {
  937.         
  938.                         PWM1=95;
  939.                         PWM2=1;                        
  940.                 }
  941.                 else
  942.                 {
  943.                         PWM1=1;
  944.                         PWM2=95;
  945.                 }
  946.                 if(mpu6050[6]>30)
  947.                 {
  948.                         HW_PWM0Set(1);
  949.                         HW_PWM1Set(1);
  950.                 }
  951.         }


  952.            if(Basic03SetValue==120)
  953.         {
  954.                
  955.                 if(mpu6050[3]>0)
  956.                 {
  957.                         HW_PWM0Set(1);
  958.                         HW_PWM1Set(185);
  959.                 }
  960.                 else
  961.                 {

  962.                         HW_PWM0Set(175);
  963.                         HW_PWM1Set(1);
  964.                 }
  965.                 if(mpu6050[7]>30)
  966.                 {
  967.                         HW_PWM0Set(1);
  968.                         HW_PWM1Set(1);
  969.                 }        
  970.                 /*处理Y轴*/
  971.                 /*处理Y轴*/
  972.                 if(mpu6050[4]>0)
  973.                 {
  974.         
  975.                         PWM1=155;
  976.                         PWM2=80;                        
  977.                 }
  978.                 else
  979.                 {
  980.                         PWM1=1;
  981.                         PWM2=105;
  982.                 }
  983.                 if(mpu6050[6]>30)
  984.                 {
  985.                         HW_PWM0Set(1);
  986.                         HW_PWM1Set(1);
  987.                 }
  988.         }

  989.         if(Basic03SetValue==130)
  990.         {
  991.                
  992.                 if(mpu6050[3]>0)
  993.                 {
  994.                         HW_PWM0Set(1);
  995.                         HW_PWM1Set(205);
  996.                 }
  997.                 else
  998.                 {

  999.                         HW_PWM0Set(175);
  1000.                         HW_PWM1Set(1);
  1001.                 }
  1002.                 if(mpu6050[7]>30)
  1003.                 {
  1004.                         HW_PWM0Set(1);
  1005.                         HW_PWM1Set(1);
  1006.                 }        
  1007.                 /*处理Y轴*/
  1008.                 if(mpu6050[4]>0)
  1009.                 {
  1010.         
  1011.                         PWM1=195;  //185
  1012.                         PWM2=80;                        
  1013.                 }
  1014.                 else
  1015.                 {
  1016.                         PWM1=1;
  1017.                         PWM2=95;
  1018.                 }
  1019.                 if(mpu6050[6]>30)
  1020.                 {
  1021.                         HW_PWM0Set(1);
  1022.                         HW_PWM1Set(1);
  1023.                 }
  1024.         }

  1025.           if(Basic03SetValue==140)
  1026.         {
  1027.                
  1028.                 if(mpu6050[3]>0)
  1029.                 {
  1030.                         HW_PWM0Set(1);
  1031.                         HW_PWM1Set(165);
  1032.                 }
  1033.                 else
  1034.                 {

  1035.                         HW_PWM0Set(155);
  1036.                         HW_PWM1Set(1);
  1037.                 }
  1038.                 if(mpu6050[7]>30)
  1039.                 {
  1040.                         HW_PWM0Set(1);
  1041.                         HW_PWM1Set(1);
  1042.                 }        
  1043.                 /*处理Y轴*/
  1044.                 if(mpu6050[4]>0)
  1045.                 {
  1046.         
  1047.                         PWM1=205;
  1048.                         PWM2=1;                        
  1049.                 }
  1050.                 else
  1051.                 {
  1052.                         PWM1=1;
  1053.                         PWM2=105;
  1054.                 }
  1055.                 if(mpu6050[6]>30)
  1056.                 {
  1057.                         HW_PWM0Set(1);
  1058.                         HW_PWM1Set(1);
  1059.                 }
  1060.         }

  1061.         if(Basic03SetValue==150)
  1062.         {
  1063.                 if(mpu6050[3]>0)
  1064.                 {
  1065.                         HW_PWM0Set(1);
  1066.                         HW_PWM1Set(225);
  1067.                 }
  1068.                 else
  1069.                 {

  1070.                         HW_PWM0Set(35);
  1071.                         HW_PWM1Set(1);
  1072.                 }
  1073.                 if(mpu6050[7]>30)
  1074.                 {
  1075.                         HW_PWM0Set(1);
  1076.                         HW_PWM1Set(1);
  1077.                 }        
  1078.                 /*处理Y轴*/
  1079.                 if(mpu6050[4]>0)
  1080.                 {
  1081.         
  1082.                         PWM1=185;
  1083.                         PWM2=1;                        
  1084.                 }
  1085.                 else
  1086.                 {
  1087.                         PWM1=1;
  1088.                         PWM2=185;
  1089.                 }
  1090.                 if(mpu6050[6]>15)
  1091.                 {
  1092.                         HW_PWM0Set(1);
  1093.                         HW_PWM1Set(1);
  1094.                 }
  1095.         }

  1096.         if(Basic03SetValue==160)
  1097.         {
  1098.                
  1099.                 if(mpu6050[3]>0)
  1100.                 {
  1101.                         HW_PWM0Set(1);
  1102.                         HW_PWM1Set(185);
  1103.                 }
  1104.                 else
  1105.                 {

  1106.                         HW_PWM0Set(35);
  1107.                         HW_PWM1Set(1);
  1108.                 }
  1109.                 if(mpu6050[7]>30)
  1110.                 {
  1111.                         HW_PWM0Set(1);
  1112.                         HW_PWM1Set(1);
  1113.                 }        
  1114.                 /*处理Y轴*/
  1115.                 if(mpu6050[4]>0)
  1116.                 {
  1117.         
  1118.                         PWM1=205;
  1119.                         PWM2=1;                        
  1120.                 }
  1121.                 else
  1122.                 {
  1123.                         PWM1=1;
  1124.                         PWM2=205;
  1125.                 }
  1126.                 if(mpu6050[6]>30)
  1127.                 {
  1128.                         HW_PWM0Set(1);
  1129.                         HW_PWM1Set(1);
  1130.                 }
  1131.         }

  1132.         if(Basic03SetValue==170)
  1133.         {
  1134.                
  1135.                 if(mpu6050[3]>0)
  1136.                 {
  1137.                         HW_PWM0Set(1);
  1138.                         HW_PWM1Set(95);
  1139.                 }
  1140.                 else
  1141.                 {

  1142.                         HW_PWM0Set(5);
  1143.                         HW_PWM1Set(1);
  1144.                 }
  1145.                 if(mpu6050[7]>30)
  1146.                 {
  1147.                         HW_PWM0Set(1);
  1148.                         HW_PWM1Set(1);
  1149.                 }        
  1150.                 /*处理Y轴*/
  1151.                 if(mpu6050[4]>0)
  1152.                 {
  1153.         
  1154.                         PWM1=205;
  1155.                         PWM2=1;                        
  1156.                 }
  1157.                 else
  1158.                 {
  1159.                         PWM1=1;
  1160.                         PWM2=205;
  1161.                 }
  1162.                 if(mpu6050[6]>30)
  1163.                 {
  1164.                         HW_PWM0Set(1);
  1165.                         HW_PWM1Set(1);
  1166.                 }
  1167.         }
  1168.         
  1169. //                        mpu6050[5]=(float)mpu[5]/32768.0*2000;
  1170.         

  1171.         
  1172. //                if(mpu6050[3]<0&&mpu6050[4]>0)
  1173. //                {
  1174. //                        LED11=0;         //hou yiwozhengqianfangweizuobuao
  1175. //                        LED14=1;
  1176. //                        if(mpu6050[6]<3.0&&mpu6050[6]>0)
  1177. //                        {
  1178. //                                  PWM1=1;
  1179. //                                PWM2=255;
  1180. //                        }
  1181. //                        
  1182. //                }
  1183. //                if(mpu6050[3]<0&&mpu6050[4]<0)
  1184. //                {
  1185. //                        LED12=0;           //zuo
  1186. //                        LED13=1;
  1187. //                        HW_PWM0Set(uk);
  1188. //                }
  1189. //                if(mpu6050[3]>0&&mpu6050[4]>0)
  1190. //                {
  1191. //                        LED13=0;           //有
  1192. //                        LED12=1;
  1193. //                }
  1194. //                if(mpu6050[3]>0&&mpu6050[4]<0)
  1195. //                {
  1196. //                        LED14=0;//qian
  1197. //                        LED11=1;
  1198. //                        if(mpu6050[6]<0&&mpu6050[6]>-3.0)
  1199. //                        {
  1200. //                                  PWM1=255;
  1201. //                                PWM2=1;
  1202. //                        }
  1203. //                }
  1204.                

  1205.                 os_switch_task();
  1206.         }        
  1207. }

  1208. void High01(void) _task_           8                  //任务8               发挥1          High01SetValue
  1209. {
  1210.         PWM1=1;
  1211.         PWM2=1;
  1212.         HW_PWM0Set(1);
  1213.         HW_PWM1Set(1);

  1214.         while(1)
  1215.         {        
  1216.                 os_wait(K_SIG,0,0);
  1217.                 if(High01SetValue==15)
  1218.                 {
  1219.                         if(mpu6050[7]>-1.0&&mpu6050[7]<3.0)        //Angle_x为x轴的角度,电机的方向通过角度的正负确定
  1220.                         {
  1221.                                 HW_PWM0Set(255);
  1222.                                 HW_PWM1Set(1);                                
  1223.                         }
  1224.                         else if(mpu6050[7]<0.0&&mpu6050[7]>-3.0)
  1225.                         {
  1226.                                 HW_PWM0Set(1);
  1227.                                 HW_PWM1Set(1);        
  1228.                         }
  1229.                         else if(mpu6050[7]<-3.0&&mpu6050[7]>-5.5)
  1230.                         {
  1231.                                 HW_PWM0Set(1);
  1232.                                 HW_PWM1Set(245);        
  1233.                         }
  1234.                         else
  1235.                         {
  1236.                                 HW_PWM0Set(1);
  1237.                                 HW_PWM1Set(1);
  1238.                         }
  1239.         
  1240.         
  1241.                         if(mpu6050[6]>-1.0&&mpu6050[6]<3.2)        //Angle_x为x轴的角度,电机的方向通过角度的正负确定
  1242.                         {
  1243.                                 PWM1=255;
  1244.                                 PWM2=1;                                
  1245.                         }
  1246.                         else if(mpu6050[6]<-1.0&&mpu6050[6]>-5.0)
  1247.                         {
  1248.                                 PWM1=1;
  1249.                                 PWM2=1;        
  1250.                         }
  1251.                         else if(mpu6050[6]<6.0&&mpu6050[6]>3.2)
  1252.                         {
  1253.                                 PWM1=1;
  1254.                                 PWM2=245;        
  1255.                         }
  1256.                         else
  1257.                         {
  1258.                                 PWM1=1;
  1259.                                 PWM2=1;
  1260.                         }
  1261.                 }
  1262.                

  1263.                 if(High01SetValue>=16&&High01SetValue<=18)
  1264.                 {
  1265.                         if(Angle_x>-2.0&&Angle_x<4.9)        //Angle_x为x轴的角度,电机的方向通过角度的正负确定
  1266.                         {
  1267.                                 HW_PWM0Set(255);
  1268.                                 HW_PWM1Set(1);                                
  1269.                         }
  1270.                         else if(Angle_x<-2.0&&Angle_x>-4.9)
  1271.                         {
  1272.                                 HW_PWM0Set(1);
  1273.                                 HW_PWM1Set(1);        
  1274.                         }
  1275.                         else if(Angle_x<-4.9&&Angle_x>-7.3)
  1276.                         {
  1277.                                 HW_PWM0Set(1);
  1278.                                 HW_PWM1Set(255);        
  1279.                         }
  1280.                         else
  1281.                         {
  1282.                                 HW_PWM0Set(1);
  1283.                                 HW_PWM1Set(1);
  1284.                         }
  1285.                
  1286.                
  1287.                         if(mpu6050[6]>-1.8&&mpu6050[6]<3.5)        //Angle_x为x轴的角度,电机的方向通过角度的正负确定
  1288.                         {
  1289.                                 PWM1=255;
  1290.                                 PWM2=1;                                
  1291.                         }
  1292.                         else if(mpu6050[6]<-2.0&&mpu6050[6]>-5.0)
  1293.                         {
  1294.                                 PWM1=1;
  1295.                                 PWM2=1;        
  1296.                         }
  1297.                         else if(mpu6050[6]<7.0&&mpu6050[6]>3.5)
  1298.                         {
  1299.                                 PWM1=1;
  1300.                                 PWM2=255;        
  1301.                         }
  1302.                         else
  1303.                         {
  1304.                                 PWM1=1;
  1305.                                 PWM2=1;
  1306.                         }
  1307.                 }
  1308.                
  1309.                 if(High01SetValue>=18&&High01SetValue<=19)
  1310.                 {
  1311.                         if(Angle_x>-2.0&&Angle_x<6.0)        //Angle_x为x轴的角度,电机的方向通过角度的正负确定
  1312.                         {
  1313.                                 HW_PWM0Set(255);
  1314.                                 HW_PWM1Set(1);                                
  1315.                         }
  1316.                         else if(Angle_x<-2.0&&Angle_x>-6.0)
  1317.                         {
  1318.                                 HW_PWM0Set(1);
  1319.                                 HW_PWM1Set(1);        
  1320.                         }
  1321.                         else if(Angle_x<-6.0&&Angle_x>-8.6)
  1322.                         {
  1323.                                 HW_PWM0Set(1);
  1324.                                 HW_PWM1Set(255);        
  1325.                         }
  1326.                         else
  1327.                         {
  1328.                                 HW_PWM0Set(1);
  1329.                                 HW_PWM1Set(1);
  1330.                         }
  1331.                         if(mpu6050[6]>-2.5&&mpu6050[6]<3.5)        //Angle_x为x轴的角度,电机的方向通过角度的正负确定
  1332.                         {
  1333.                                 PWM1=255;
  1334.                                 PWM2=1;                                
  1335.                         }
  1336.                         else if(mpu6050[6]<-2.0&&mpu6050[6]>-5.0)
  1337.                         {
  1338.                                 PWM1=1;
  1339.                                 PWM2=1;        
  1340.                         }
  1341.                         else if(mpu6050[6]<8.0&&mpu6050[6]>3.5)
  1342.                         {
  1343.                                 PWM1=1;
  1344.                                 PWM2=255;        
  1345.                         }
  1346.                         else
  1347.                         {
  1348.                                 PWM1=1;
  1349.                                 PWM2=1;
  1350.                         }
  1351.                 }
  1352.                 if(High01SetValue>=20&&High01SetValue<=22)
  1353.                 {
  1354.                
  1355.                         if(Angle_x>-2.0&&Angle_x<6.9)        //Angle_x为x轴的角度,电机的方向通过角度的正负确定
  1356.                         {
  1357.                                 HW_PWM0Set(255);
  1358.                                 HW_PWM1Set(1);                                
  1359.                         }
  1360.                         else if(Angle_x<-2.0&&Angle_x>-6.9)
  1361.                         {
  1362.                                 HW_PWM0Set(1);
  1363.                                 HW_PWM1Set(1);        
  1364.                         }
  1365.                         else if(Angle_x<-6.9&&Angle_x>-9.8)
  1366.                         {
  1367.                                 HW_PWM0Set(1);
  1368.                                 HW_PWM1Set(255);        
  1369.                         }
  1370.                         else
  1371.                         {
  1372.                                 HW_PWM0Set(1);
  1373.                                 HW_PWM1Set(1);
  1374.                         }


  1375.                         if(mpu6050[6]>-2.8&&mpu6050[6]<3.5)        //Angle_x为x轴的角度,电机的方向通过角度的正负确定
  1376.                         {
  1377.                                 PWM1=255;
  1378.                                 PWM2=1;                                
  1379.                         }
  1380.                         else if(mpu6050[6]<-2.0&&mpu6050[6]>-5.0)
  1381.                         {
  1382.                                 PWM1=1;
  1383.                                 PWM2=1;        
  1384.                         }
  1385.                         else if(mpu6050[6]<8.5&&mpu6050[6]>3.5)
  1386.                         {
  1387.                                 PWM1=1;
  1388.                                 PWM2=255;        
  1389.                         }
  1390.                         else
  1391.                         {
  1392.                                 PWM1=1;
  1393.                                 PWM2=1;
  1394.                         }
  1395.                 }

  1396.                 if(High01SetValue>=23&&High01SetValue<=24)
  1397.                 {
  1398.                
  1399.                         if(Angle_x>-2.0&&Angle_x<8.0)        //Angle_x为x轴的角度,电机的方向通过角度的正负确定
  1400.                         {
  1401.                                 HW_PWM0Set(255);
  1402.                                 HW_PWM1Set(1);                                
  1403.                         }
  1404.                         else if(Angle_x<-2.0&&Angle_x>-8.0)
  1405.                         {
  1406.                                 HW_PWM0Set(1);
  1407.                                 HW_PWM1Set(1);        
  1408.                         }
  1409.                         else if(Angle_x<-8.0&&Angle_x>-11.5)
  1410.                         {
  1411.                                 HW_PWM0Set(1);
  1412.                                 HW_PWM1Set(255);        
  1413.                         }
  1414.                         else
  1415.                         {
  1416.                                 HW_PWM0Set(1);
  1417.                                 HW_PWM1Set(1);
  1418.                         }
  1419.                         if(mpu6050[6]>-3.3&&mpu6050[6]<3.5)        //Angle_x为x轴的角度,电机的方向通过角度的正负确定
  1420.                         {
  1421.                                 PWM1=255;
  1422.                                 PWM2=1;                                
  1423.                         }
  1424.                         else if(mpu6050[6]<-2.0&&mpu6050[6]>-5.0)
  1425.                         {
  1426.                                 PWM1=1;
  1427.                                 PWM2=1;        
  1428.                         }
  1429.                         else if(mpu6050[6]<9.0&&mpu6050[6]>3.5)
  1430.                         {
  1431.                                 PWM1=1;
  1432.                                 PWM2=255;        
  1433.                         }
  1434.                         else
  1435.                         {
  1436.                                 PWM1=1;
  1437.                                 PWM2=1;
  1438.                         }
  1439.                 }
  1440.         
  1441.                 if(High01SetValue==25)
  1442.                 {
  1443.                         if(Angle_x>-2.0&&Angle_x<8.0)        //Angle_x为x轴的角度,电机的方向通过角度的正负确定
  1444.                         {
  1445.                                 HW_PWM0Set(255);
  1446.                                 HW_PWM1Set(1);                                
  1447.                         }
  1448.                         else if(Angle_x<-2.0&&Angle_x>-8.0)
  1449.                         {
  1450.                                 HW_PWM0Set(1);
  1451.                                 HW_PWM1Set(1);        
  1452.                         }
  1453.                         else if(Angle_x<-8.0&&Angle_x>-11.5)
  1454.                         {
  1455.                                 HW_PWM0Set(1);
  1456.                                 HW_PWM1Set(255);        
  1457.                         }
  1458.                         else
  1459.                         {
  1460.                                 HW_PWM0Set(1);
  1461.                                 HW_PWM1Set(1);
  1462.                         }
  1463.                
  1464.                         if(mpu6050[6]>-3.8&&mpu6050[6]<3.5)        //Angle_x为x轴的角度,电机的方向通过角度的正负确定
  1465.                         {
  1466.                                 PWM1=255;
  1467.                                 PWM2=1;                                
  1468.                         }
  1469.                         else if(mpu6050[6]<-2.0&&mpu6050[6]>-5.0)
  1470.                         {
  1471.                                 PWM1=1;
  1472.                                 PWM2=1;        
  1473.                         }
  1474.                         else if(mpu6050[6]<9.8&&mpu6050[6]>3.5)
  1475.                         {
  1476.                                 PWM1=1;
  1477.                                 PWM2=255;        
  1478.                         }
  1479.                         else
  1480.                         {
  1481.                                 PWM1=1;
  1482.                                 PWM2=1;
  1483.                         }
  1484.                 }

  1485.                 if(High01SetValue>=26&&High01SetValue<=27)
  1486.                 {
  1487.                
  1488.                         if(Angle_x>-2.0&&Angle_x<7.3)        //Angle_x为x轴的角度,电机的方向通过角度的正负确定
  1489.                         {
  1490.                                 HW_PWM0Set(255);
  1491.                                 HW_PWM1Set(1);                                
  1492.                         }
  1493.                         else if(Angle_x<-2.0&&Angle_x>-7.3)
  1494.                         {
  1495.                                 HW_PWM0Set(1);
  1496.                                 HW_PWM1Set(1);        
  1497.                         }
  1498.                         else if(Angle_x<-7.3&&Angle_x>-11.5)
  1499.                         {
  1500.                                 HW_PWM0Set(1);
  1501.                                 HW_PWM1Set(255);        
  1502.                         }
  1503.                         else
  1504.                         {
  1505.                                 HW_PWM0Set(1);
  1506.                                 HW_PWM1Set(1);
  1507.                         }

  1508.                         if(mpu6050[6]>-4.8&&mpu6050[6]<3.5)        //Angle_x为x轴的角度,电机的方向通过角度的正负确定
  1509.                         {
  1510.                                 PWM1=255;
  1511.                                 PWM2=1;                                
  1512.                         }
  1513.                         else if(mpu6050[6]<-2.0&&mpu6050[6]>-5.0)
  1514.                         {
  1515.                                 PWM1=1;
  1516.                                 PWM2=1;        
  1517.                         }
  1518.                         else if(mpu6050[6]<11.0&&mpu6050[6]>3.5)
  1519.                         {
  1520.                                 PWM1=1;
  1521.                                 PWM2=255;        
  1522.                         }
  1523.                         else
  1524.                         {
  1525.                                 PWM1=1;
  1526.                                 PWM2=1;
  1527.                         }
  1528.                 }
  1529.                
  1530.                
  1531.                 if(High01SetValue>=28&&High01SetValue<=29)
  1532.                 {
  1533.                         if(Angle_x>-2.0&&Angle_x<7.8)        //Angle_x为x轴的角度,电机的方向通过角度的正负确定
  1534.                         {
  1535.                                 HW_PWM0Set(255);
  1536.                                 HW_PWM1Set(1);                                
  1537.                         }
  1538.                         else if(Angle_x<-2.0&&Angle_x>-7.8)
  1539.                         {
  1540.                                 HW_PWM0Set(1);
  1541.                                 HW_PWM1Set(1);        
  1542.                         }
  1543.                         else if(Angle_x<-7.8&&Angle_x>-12.5)
  1544.                         {
  1545.                                 HW_PWM0Set(1);
  1546.                                 HW_PWM1Set(255);        
  1547.                         }
  1548.                         else
  1549.                         {
  1550.                                 HW_PWM0Set(1);
  1551.                                 HW_PWM1Set(1);
  1552.                         }

  1553.                         if(mpu6050[6]>-5.5&&mpu6050[6]<3.5)        //Angle_x为x轴的角度,电机的方向通过角度的正负确定
  1554.                         {
  1555.                                 PWM1=255;
  1556.                                 PWM2=1;                                
  1557.                         }
  1558.                         else if(mpu6050[6]<-2.0&&mpu6050[6]>-5.0)
  1559.                         {
  1560.                                 PWM1=1;
  1561.                                 PWM2=1;        
  1562.                         }
  1563.                         else if(mpu6050[6]<12.0&&mpu6050[6]>3.5)
  1564.                         {
  1565.                                 PWM1=1;
  1566.                                 PWM2=255;        
  1567.                         }
  1568.                         else
  1569.                         {
  1570.                                 PWM1=1;
  1571.                                 PWM2=1;
  1572.                         }
  1573.                 }

  1574.                 if(High01SetValue>=30&&High01SetValue<=31)
  1575.                 {
  1576.                 if(Angle_x>-2.5&&Angle_x<7.8)        //Angle_x为x轴的角度,电机的方向通过角度的正负确定
  1577.                         {
  1578.                                 HW_PWM0Set(255);
  1579.                                 HW_PWM1Set(1);                                
  1580.                         }
  1581.                         else if(Angle_x<-2.0&&Angle_x>-7.8)
  1582.                         {
  1583.                                 HW_PWM0Set(1);
  1584.                                 HW_PWM1Set(1);        
  1585.                         }
  1586.                         else if(Angle_x<-7.8&&Angle_x>-13.5)
  1587.                         {
  1588.                                 HW_PWM0Set(1);
  1589.                                 HW_PWM1Set(255);        
  1590.                         }
  1591.                         else
  1592.                         {
  1593.                                 HW_PWM0Set(1);
  1594.                                 HW_PWM1Set(1);
  1595.                         }

  1596.                         if(mpu6050[6]>-6.6&&mpu6050[6]<3.5)        //Angle_x为x轴的角度,电机的方向通过角度的正负确定
  1597.                         {
  1598.                                 PWM1=255;
  1599.                                 PWM2=1;                                
  1600.                         }
  1601.                         else if(mpu6050[6]<-2.0&&mpu6050[6]>-5.0)
  1602.                         {
  1603.                                 PWM1=1;
  1604. ……………………

  1605. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码


所有资料51hei提供下载:
风力摆控制系统.rar (16.72 MB, 下载次数: 588)



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

使用道具 举报

沙发
ID:308437 发表于 2018-7-19 10:02 | 只看该作者
想问,这个是你的原创么?因为这个我在其他论坛上看到过~~
回复

使用道具 举报

板凳
ID:374977 发表于 2018-7-19 17:00 | 只看该作者
写的不错
回复

使用道具 举报

地板
ID:456306 发表于 2019-6-16 12:10 | 只看该作者
用51做,真的厉害,很好奇实际效果,要是有视频就好了
回复

使用道具 举报

5#
ID:456306 发表于 2019-6-16 12:28 | 只看该作者
看了看报告,上面说是用的开环系统啊,又用了PID。。。
回复

使用道具 举报

6#
ID:540642 发表于 2019-7-16 09:43 | 只看该作者
原理图有吗

回复

使用道具 举报

7#
ID:584982 发表于 2019-7-16 11:26 | 只看该作者
一开始我以为用51板子做不出来,后来我学长跟我说51板子功能其实很强大的,32板子能做的,它都能做
回复

使用道具 举报

8#
ID:552132 发表于 2019-7-25 16:26 | 只看该作者
这个是用12做的吧,不是51
回复

使用道具 举报

9#
ID:445996 发表于 2019-8-6 22:08 | 只看该作者
小宠物 发表于 2019-7-25 16:26
这个是用12做的吧,不是51

51说的是8051内核的单片机都是51单片机
回复

使用道具 举报

10#
ID:591230 发表于 2019-10-29 22:29
实物出售吗

11#
ID:229821 发表于 2020-2-27 20:06 | 只看该作者
不错。谢谢分享。谢谢了。
回复

使用道具 举报

12#
ID:843761 发表于 2020-11-15 11:09 | 只看该作者
哪位大佬有全部的原理图啊
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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