找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 11859|回复: 19
收起左侧

kea128电磁组智能车控制源码

  [复制链接]
ID:277775 发表于 2018-1-19 16:03 | 显示全部楼层 |阅读模式
keaz1284  可跑程序

单片机源程序如下:
  1. #include "headfile.h"

  2. int flag;


  3. void Para_Init()
  4. {
  5. PID_ANGLE.P=0.10;
  6. PID_ANGLE.D=0.001;
  7. PID_SPEED.P=1.5;
  8. PID_SPEED.I=0.05;
  9. PID_TURN.P=0.01;
  10. PID_TURN.D=0.005;
  11. Fuzzy_Kp=0.005;
  12. Fuzzy_Kd=0.0005;
  13. SetSpeed=2.5;
  14. Set_Angle=20;


  15. Control_Para[0]=SetSpeed;
  16.   Control_Para[1]=PID_ANGLE.P;
  17. Control_Para[2]= PID_ANGLE.D;
  18. Control_Para[3]= PID_SPEED.P;
  19. Control_Para[4]= PID_SPEED.I;
  20. Control_Para[5]= PID_TURN.P;
  21. Control_Para[6]= PID_TURN.D;
  22. }

  23. void main(void)
  24. {
  25.      DisableInterrupts ;     
  26.      
  27.      ADC_Init(ADC_CHANNEL_AD4,ADC_12BIT);   //电磁采集0
  28.      ADC_Init(ADC_CHANNEL_AD5,ADC_12BIT);   //电磁采集1
  29.      ADC_Init(ADC_CHANNEL_AD2,ADC_12BIT);   //电磁采集2
  30.      ADC_Init(ADC_CHANNEL_AD3,ADC_12BIT);   //电磁采集3
  31.      ADC_Init(ADC_CHANNEL_AD6,ADC_12BIT);   //电磁采集4
  32.      ADC_Init(ADC_CHANNEL_AD7,ADC_12BIT);   //电磁采集5
  33.      ADC_Init(ADC_CHANNEL_AD10,ADC_12BIT);   //电池电压采集实验
  34.    
  35.      button_init();                         //按键初始化
  36.      switch_init();                         //拨码开关初始化
  37.      FTM_PWM_init(CFTM2, FTM_CH5, 20000, 0);       //PWM0 PTG7  电机驱动
  38.      FTM_PWM_init(CFTM2, FTM_CH4, 20000, 0);    //PWM1 PTG6  电机驱动
  39.    
  40.      FTM_PWM_init(CFTM2, FTM_CH3, 20000, 0);       //PWM2 PTG5  电机驱动
  41.      FTM_PWM_init(CFTM2, FTM_CH2, 20000, 0);    //PWM3 PTG4  电机驱动
  42.    
  43.      PULSE_INIT(CFTM0);                      //编码器1采集
  44.      PULSE_INIT(CFTM1);                      //编码器1采集
  45.    
  46.      uart_init(UARTR1,1500000);              //wifi模块传输初始化
  47.    
  48.      BEEP_ON;
  49.      OLED_Init();                          //OLED      初始化
  50.      OLED_Draw_Logo();                   //画logo专用函数
  51.      delay(300);
  52.      OLED_Fill(0);                     //初始清屏
  53.      BEEP_OFF;            
  54.      I2C_Init();                       //初始化加速度陀螺仪传感器
  55.      PIT_Init(PIT_CHANNEL0,2*BUS_CLK_KHZ); //定时中断   2ms 初始化
  56.      EnableInterrupts;
  57.     Para_Init();
  58.      led_init();
  59.      water_lights();
  60.      while(1)
  61.     {
  62.        if(beep)
  63.       {
  64.         BEEP_ON;
  65.         delay(50);
  66.         BEEP_OFF;
  67.         beep=0;
  68.       }  
  69.        Read_Switch();
  70.       Check_BottonPress();
  71.       if(SendPara)
  72.       {
  73.         SendPara=0;
  74.         Send_Parameter();
  75.       }  
  76.       
  77.        if(flag)  //此段不超过0.5ms 200ms主频  6ms 或8ms 执行一次
  78.       {
  79.         flag=0;
  80.       
  81.         Send_Begin();
  82.         Variable_update();
  83.         Send_Variable();
  84.         Send_Inductor();
  85.       }  
  86.       if(OLED_Refresh)
  87.       {
  88.         OLED_Draw_UI();
  89.       }      
  90.     }
  91. }
  92. //定时器0中断函数
  93. void PIT0_ISR(void)

  94. {
  95.    static uint8 flag_100ms,cnt=0;
  96.      RunTime=RunTime+0.002;
  97.   flag_100ms++;

  98.   if(flag_100ms>50)
  99.   {
  100.    flag_100ms=0;  
  101.    Speed_Control();  //100ms进行一次速度控制
  102.    LED_RED_TURN;
  103.    SpeedCount=0;
  104.   }
  105.    cnt++;
  106.    if(cnt==1)      //4ms运行一次
  107.    {
  108.        flag=1;
  109.      ADC_SAMPLE();   
  110.      Get_Attitude();
  111.      Angle_Calculate();
  112.      Angle_Control();
  113.      Get_Speed();
  114.      
  115.       Direction_Control();
  116.   
  117.    
  118.    }
  119.    if(cnt>=2)
  120.    {
  121.      cnt=0;
  122.    }
  123.      SpeedCount++;
  124.      Speed_Control_Output();
  125.      Moto_Out();

  126.    PIT->CHANNEL[0].TFLG |= PIT_TFLG_TIF_MASK;//清楚中断标志位  
  127.   
  128. }
  129.   //定时器0中断函数
  130. void UART0_ISR(void)

  131. {
  132.    static uint8 recv;
  133.   static uint8 data_cnt=0;
  134.   static uint8 predata[10];
  135.   static uint8 Recv_Buff[100];
  136.   static uint8 Data_Receiving=false;
  137.   
  138. // recv=Uart_GetChar(UART1_BASE);
  139.   /**********代表正在接收来自上位机的参数数据*********/
  140.   if(Data_Receiving)
  141.   {
  142.       if(data_cnt<56)
  143.       {
  144.        Recv_Buff[data_cnt]= recv;
  145.        data_cnt++;
  146.       }
  147.       else
  148.       {
  149.         data_cnt=0;    //达到帧长
  150.         Data_Receiving=false;
  151.         if(recv==2)  //帧尾
  152.         {
  153.            Modify_Parameter(Recv_Buff);
  154.            SendPara=1;      //参数回传,确认参数修改完成
  155.             beep=1; //开启蜂鸣器
  156.         }
  157.       }
  158.   }

  159.   
  160.   
  161.   if( predata[1]==0x55&&predata[0]==0xAA)
  162.   {
  163.    
  164.       switch(recv)         //判断功能字
  165.        {
  166.           case 1:           //读取参数
  167.              if(SendPara==0) SendPara=1;
  168.               beep=1; //开启蜂鸣器
  169.             break;
  170.          
  171.           case 2:           //修改参数
  172.             data_cnt=0;
  173.             Data_Receiving=true;
  174.           case 3:           //保存参数
  175.             //EEPROM_Save();
  176.             beep=1; //开启蜂鸣器
  177.           break;        
  178.          
  179.           case 4:           //功能开关1
  180.            
  181.           break;   
  182.          
  183.           case 5:           //功能开关2
  184.            
  185.           break;     
  186.          
  187.           case 6:           //功能开关3
  188.            
  189.           break;
  190.          
  191.           case 7:           //功能开关4
  192.            
  193.           break;        
  194.          
  195.           default:           //
  196.            break;
  197.         }
  198.   }
  199.   predata[1]=predata[0];
  200.   predata[0]=recv;
  201. }
  202.   
复制代码

注意代码不是用Keil写的,用的iar编译的
iar工程文件.7z (1.01 MB, 下载次数: 262)

评分

参与人数 1黑币 +1 收起 理由
djdj呵呵 + 1 很给力!

查看全部评分

回复

使用道具 举报

ID:285130 发表于 2018-2-24 10:44 | 显示全部楼层
是用iar吗
回复

使用道具 举报

ID:285260 发表于 2018-2-25 23:27 | 显示全部楼层

是的,我用过。程序可以用
回复

使用道具 举报

ID:285260 发表于 2018-2-25 23:28 | 显示全部楼层
楼主,一般用2个电感。你用4个,怎么安装的啊
回复

使用道具 举报

ID:191831 发表于 2018-2-26 20:29 | 显示全部楼层
freepoet 发表于 2018-2-25 23:27
是的,我用过。程序可以用

求教具体一点
回复

使用道具 举报

ID:294075 发表于 2018-3-19 15:54 | 显示全部楼层
看起来还不错,感谢楼主无私奉献
回复

使用道具 举报

ID:300507 发表于 2018-4-2 22:02 来自手机 | 显示全部楼层
在哪里可以改管脚通道
回复

使用道具 举报

ID:302449 发表于 2018-4-5 16:52 | 显示全部楼层
IAR可以用吗
回复

使用道具 举报

ID:305384 发表于 2018-4-10 20:48 | 显示全部楼层
修改引脚的在哪里啊
回复

使用道具 举报

ID:310693 发表于 2018-4-18 10:53 | 显示全部楼层
楼主转弯怎么控制的?
回复

使用道具 举报

ID:310693 发表于 2018-4-18 12:12 | 显示全部楼层
楼主能问下你的转向控制思路吗?
回复

使用道具 举报

ID:236212 发表于 2018-5-2 20:36 | 显示全部楼层
帮顶
回复

使用道具 举报

ID:236212 发表于 2018-5-2 21:01 | 显示全部楼层
请问楼主用的是什么上位机?
回复

使用道具 举报

ID:335297 发表于 2018-5-21 22:04 | 显示全部楼层
感谢楼主的分享
回复

使用道具 举报

ID:259503 发表于 2018-5-30 18:17 | 显示全部楼层
这是F车KEA128的嘛?
回复

使用道具 举报

ID:349062 发表于 2018-6-13 19:34 | 显示全部楼层
很棒的程序
回复

使用道具 举报

ID:450022 发表于 2018-12-19 16:44 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:1028251 发表于 2022-5-22 18:59 | 显示全部楼层
为啥显示The project could not be opened
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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