找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3444|回复: 4
收起左侧

STM32F103舵机+电机控制机器人程序

[复制链接]
ID:583535 发表于 2019-7-13 16:20 | 显示全部楼层 |阅读模式
本人自己写的程序,之前参加比赛用的,不懂就问

单片机源程序如下:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "key.h"
  4. #include "sys.h"
  5. #include "usart.h"
  6. #include "timer.h"
  7. #include "string.h"
  8. volatile u8 aRxBuffer[100]={0};
  9. volatile u8 RxCounter=0;
  10. volatile u8 ReceiveState=0;

  11. volatile u8 aRxBuffer2[100]={0};
  12. volatile u8 RxCounter2=0;
  13. volatile u8 ReceiveState2=0;
  14. char flag=0;
  15. float a=0;
  16. float b=0;
  17. float c=0;
  18. float d=0;
  19. u16 m[2]={0};
  20. char timeflag=0;
  21. int x=0;



  22.         
  23. int main(void)
  24. {               
  25.          u16         time1,time2;
  26.          int i=0;
  27.          delay_init();                     //延时函数初始化         
  28.          NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);          //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
  29.          uart1_init(9600);         //串口初始化为115200
  30.          uart3_init(9600);
  31.           LED_Init();                             //LED端口初始化        
  32.           TIM3_PWM_Init(2879,0);         //不分频。PWM频率=72000000/900=80Khz
  33.          TIM_SetCompare1(TIM3,0);
  34.          TIM_SetCompare2(TIM3,0);
  35.            while(1)               
  36.         {               

  37.                 if(flag==1)
  38.                 {
  39.                         delay_ms(120);
  40.                         TIM_SetCompare1(TIM3,a);
  41.                         TIM_SetCompare2(TIM3,b);               
  42.                         if(a>=1500)        a--;
  43.                 }
  44.                 if(flag==2)
  45.                 {
  46.                         delay_ms(time1);
  47.                         TIM_SetCompare1(TIM3,m[0]);
  48.                         //TIM_SetCompare2(TIM3,m[1]);
  49.                         if(m[0]>=1500) m[0]--;
  50.                 }
  51.                 if(flag==3)
  52.                 {
  53.                         //delay_ms(8000);
  54.                         TIM_SetCompare1(TIM3,2735);
  55.                         TIM_SetCompare2(TIM3,2735);
  56.                         for(x=0;x<=7;x++)
  57.                         {
  58.                         delay_ms(1000);
  59.                         }               
  60.                         TIM_SetCompare1(TIM3,0);
  61.                         TIM_SetCompare2(TIM3,0);
  62.                         flag=0;
  63.                 }
  64.                
  65.                 if(timeflag==1)
  66.                 {        
  67.                         timeflag=0;        
  68.                         TIM_SetCompare2(TIM3,m[1]);
  69.                         if(m[1]>=1500) m[1]--;
  70.                         //printf("111");
  71.                 }
  72.                
  73.                         if( ReceiveState == 1)        //电脑调试
  74.                         {
  75.                                 for(i=0;i<=8;i++)
  76.                                 {
  77.                                 if((aRxBuffer[i]==0x4d)&&(aRxBuffer[i+1]==0x4d))
  78.                                 {
  79.                                         if(aRxBuffer[i+8]==0x00)
  80.                                         {
  81.                                         flag=0;
  82.                                         TIM_ITConfig(TIM5,TIM_IT_Update,DISABLE );
  83.                                         m[0]=(aRxBuffer[i+3]<<8)+(aRxBuffer[i+2]);
  84.                                         m[1]=(aRxBuffer[i+6]<<8)+(aRxBuffer[i+5]);
  85.                                         TIM_SetCompare1(TIM3,m[0]);
  86.                                         TIM_SetCompare2(TIM3,m[1]);
  87.                                         PBout(13)=aRxBuffer[i+4];
  88.                                         PBout(14)=aRxBuffer[i+7];                                                                        
  89.                                         a=((float)m[0])/2879;
  90.                                         b=((float)m[1])/2879;
  91.                                         printf("%.2f%%   :   %.2f%%",a*100,b*100);
  92.                                         break;
  93.                                         }
  94.                                         if(aRxBuffer[i+8]==0x01)
  95.                                         {
  96.                                         m[0]=(aRxBuffer[i+3]<<8)+(aRxBuffer[i+2]);
  97.                                         m[1]=(aRxBuffer[i+6]<<8)+(aRxBuffer[i+5]);
  98.                                         PBout(13)=aRxBuffer[i+4];
  99.                                         PBout(14)=aRxBuffer[i+7];        
  100.                                         flag=2;
  101.                                         time1=aRxBuffer[i+9];
  102.                                         time2=((u16)aRxBuffer[i+10])*100;
  103.                                                 printf("time1 = %d",time1);
  104.                                                 printf("time2 = %d",time2);
  105.                                         TIM_SetCompare1(TIM3,m[0]);
  106.                                         TIM_SetCompare2(TIM3,m[1]);
  107.                                         TIM5_Int_Init(time2,7199);
  108.                                         break;
  109.                                         }
  110.                                 }
  111.                                 }
  112.                                 memset((void *)aRxBuffer,0,100);
  113.                                 ReceiveState=0;
  114.                                 RxCounter=0;
  115.                         }
  116.                         
  117.                         if(ReceiveState2 == 1)
  118.                         {
  119.                                 printf("ok");
  120.                                 if(aRxBuffer2[0]==0xFF)
  121.                                 {
  122.                                         if(aRxBuffer2[1]==0xaa) //前进
  123.                                         {
  124.                                                 flag=0;
  125.                                                 a=2159;
  126.                                                 b=2101;
  127.                                                 TIM_SetCompare1(TIM3,a);
  128.                                                 TIM_SetCompare2(TIM3,b);
  129.                                                 PBout(13)=1;
  130.                                                 PBout(14)=1;        
  131.                                                 c=((float)2159)/2879;
  132.                                                 d=((float)2101)/2879;
  133.                                                 printf("%.2f%%   :   %.2f%%",c*100,d*100);
  134.                                         }
  135.                                         if(aRxBuffer2[2]==0xaa)        //左转
  136.                                         {
  137.                                                 flag=0;
  138.                                                 a=1958;
  139.                                                 b=1987;
  140.                                                 TIM_SetCompare1(TIM3,a);
  141.                                                 TIM_SetCompare2(TIM3,b);
  142.                                                 PBout(13)=1;
  143.                                                 PBout(14)=1;
  144.                                                 c=((float)1958)/2879;
  145.                                                 d=((float)1987)/2879;
  146.                                                 printf("%.2f%%   :   %.2f%%",c*100,d*100);
  147.                                         }
  148.                                         if(aRxBuffer2[3]==0xaa)        //右转
  149.                                         {
  150.                                                 flag=0;
  151.                                                 a=2159;
  152.                                                 b=1958;
  153.                                                 TIM_SetCompare1(TIM3,a);
  154.                                                 TIM_SetCompare2(TIM3,b);
  155.                                                 PBout(13)=1;
  156.                                                 PBout(14)=1;
  157.                                                 c=((float)2159)/2879;
  158.                                                 d=((float)1958)/2879;
  159.                                                 printf("%.2f%%   :   %.2f%%",c*100,d*100);
  160.                                         }
  161.                                         if(aRxBuffer2[4]==0xaa)        //切割运动
  162.                                         {
  163.                                                 flag=3;                                       
  164.                                                 PBout(13)=1;
  165.                                                 PBout(14)=1;                                       
  166.                                         }
  167.                                                 if(aRxBuffer2[5]==0xaa)        //停
  168.                                         {
  169.                                                 flag=0;
  170.                                                 a=0;
  171.                                                 b=0;
  172.                                                 TIM_SetCompare1(TIM3,a);
  173.                                                 TIM_SetCompare2(TIM3,b);
  174.                                                 PBout(13)=1;
  175.                                                 PBout(14)=1;
  176.                                                 c=((float)0)/2879;
  177.                                                 d=((float)0)/2879;
  178.                                                 printf("%.2f%%   :   %.2f%%",c*100,d*100);
  179.                                         }
  180.                                         if(aRxBuffer2[6]==0xaa)        //一级加速
  181.                                         {
  182.                                                 flag=0;
  183.                                                 a=2447;
  184.                                                 b=2447;
  185.                                                 TIM_SetCompare1(TIM3,a);
  186.                                                 TIM_SetCompare2(TIM3,b);
  187.                                                 PBout(13)=1;
  188.                                                 PBout(14)=1;
  189.                                                 c=((float)2447)/2879;
  190.                                                 d=((float)2447)/2879;
  191.                                                 printf("%.2f%%   :   %.2f%%",c*100,d*100);
  192.                                         }
  193.                                         if(aRxBuffer2[7]==0xaa)        //二级加速
  194.                                         {
  195.                                                 flag=0;
  196.                                                 a=2245;
  197.                                                 b=2303;
  198.                                                 TIM_SetCompare1(TIM3,a);
  199.                                                 TIM_SetCompare2(TIM3,b);
  200.                                                 PBout(13)=1;
  201.                                                 PBout(14)=1;
  202.                                                 c=((float)2245)/2879;
  203.                                                 d=((float)2303)/2879;
  204.                                                 printf("%.2f%%   :   %.2f%%",c*100,d*100);
  205.                                         }

  206.                                         if(aRxBuffer2[8]==0xaa)        //螺旋运动
  207.                                         {
  208.                                                 flag=1;
  209.                                                 a=2361;
  210.                                                 b=2303;
  211.                                                 PBout(13)=1;
  212.                                                 PBout(14)=1;
  213.                                         }                                                                                
  214.                                 }
  215.                                         memset((void *)aRxBuffer2,0,100);
  216.                                         ReceiveState2=0;
  217.                                         RxCounter2=0;
  218.                         }
  219.         }         
  220. }
复制代码

所有资料51hei提供下载:
下位机程序.7z (196.57 KB, 下载次数: 38)
回复

使用道具 举报

ID:1 发表于 2019-7-14 01:15 | 显示全部楼层
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

ID:421308 发表于 2019-7-14 09:20 | 显示全部楼层
没注释,有点懵
回复

使用道具 举报

ID:541540 发表于 2019-7-15 14:33 | 显示全部楼层
其他部分代码呢
回复

使用道具 举报

ID:583535 发表于 2019-10-11 23:11

可以加我qq问,这个上传的比较水不好意思,961109198

ID:583535 发表于 2019-10-11 23:12 | 显示全部楼层
jzyhxf 发表于 2019-7-15 14:33
其他部分代码呢

可以加我qq问,这个上传的比较水,不好意思,961109198
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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