找回密码
 立即注册

QQ登录

只需一步,快速开始

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

飞思卡尔直立电磁组 代码开源

[复制链接]
跳转到指定楼层
楼主
ID:250969 发表于 2018-7-20 10:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小白程序,需要的可以拿走

单片机源程序如下:
  1. #include "common.h"
  2. #include "include.h"
  3. #include "control.h"

  4. extern float OutData[4];
  5. extern float Gyro_Now, angle_offset_vertical;          //陀螺仪转化后的角速度,转化后的加速度角度
  6. extern float g_fCarAngle, g_fGyroscopeAngleIntegral;   //融合后的角度
  7. extern volatile float MMA7361 , ENC03, MMA7361_X;    //加速度计AD ,陀螺仪AD
  8. extern float left_count, right_count, Speed_count;
  9. extern float Speed_L_Last, Speed_R_Last;
  10. extern float newspeed_PWM[2], Speed_PWM[2];
  11. extern float AD[4];
  12. extern float AD_sum[4];
  13. extern float AD_min[4];
  14. extern float AD_max[4];
  15. extern int AD_norvalue[4];
  16. extern uint8 dire_flag, bal_flag; //stop_flag = 0;
  17. extern float speed_flag;
  18. uint8 systick_flag = 1, dire_timeflag = 1;
  19. //char ch;
  20. extern struct PID sptr;    //速度
  21. extern struct PID dire;    //转向

  22. extern void PIT0_IRQHandler(void);
  23. extern   void OutPut_Data(void);   
  24. void All_Init();
  25. void Speed_PID_Init();


  26. void main()
  27. {
  28.   DisableInterrupts;
  29.   gpio_init(PTG0,GPO,1);
  30.   gpio_init(PTG1,GPO,1);
  31.   gpio_init(PTG2,GPO,1);
  32.   gpio_init(PTG3,GPO,1);
  33.   key_init(KEY_A);
  34.   All_Init();
  35.   DELAY_MS(2000);
  36.   EnableInterrupts;
  37.   ftm_pulse_clean(FTM0);
  38.   ftm_pulse_clean(FTM1);
  39.   while(1)
  40.   {
  41. //      led_turn(LED0);  
  42. //      led_turn(LED0);
  43.     if(dire_timeflag == 5)
  44.     {
  45.       dire_timeflag = 1;
  46.       get_elec();
  47.       elec_handle();
  48.     }
  49.     else
  50.     {
  51.       dire_timeflag++;
  52.       get_elec();
  53.     }
  54. //    if(stop_flag == 1)
  55. //    {
  56. //      irq_init (IRQ_PIN, IRQ_PULLUP_EN | IRQ_FALLING) ;          //配置为下降沿中断
  57. //      enable_irq(IRQ_IRQn);
  58. //    }
  59.   }
  60. }

  61. void All_Init()
  62. {
  63.   led_init(LED3);
  64.   led_init(LED2);
  65.   led_init(LED0);
  66.   led_init(LED1);
  67.   uart_init(UART0,115200);
  68.   gpio_init(PTD6,GPO,1);      //陀螺仪SEL
  69.   PTD6_OUT = 1;
  70.   adc_init(ADC0_SE2);         //ZOUT_Z
  71.   adc_init(ADC0_SE3);         //Gyro1
  72.   adc_init(ADC0_SE7);         //L1
  73.   adc_init(ADC0_SE5);         //L2
  74.   adc_init(ADC0_SE11);        //L5
  75.   adc_init(ADC0_SE10);        //L6
  76.   //在  port_cfg.h 中修改精度
  77.   ftm_pwm_init(FTM2, FTM_CH3,40000,1000);   
  78.   ftm_pwm_init(FTM2, FTM_CH2,40000,1000);   
  79.   ftm_pwm_init(FTM2, FTM_CH0,40000,1000);  
  80.   ftm_pwm_init(FTM2, FTM_CH1,40000,1000);   
  81.   gpio_init(PTG4,GPO,1);
  82.   gpio_init(PTD4,GPO,1);
  83.   gpio_init(PTD2,GPO,1);
  84.   gpio_init(PTF1,GPO,1);     
  85.   ftm_pulse_init(FTM0, FTM_PS_1, TCLK1);     //PTE0  encoder
  86.   ftm_pulse_init(FTM1, FTM_PS_1, TCLK2);     //PTE7
  87.   gpio_init(PTE5,GPI,0);      //left
  88.   gpio_init(PTB5,GPI,0);      //right
  89.   
  90.   pit_init_ms(PIT0, 5);
  91.   enable_irq(PIT_CH0_IRQn);
  92.   systick_timing_ms(10);
  93.   Speed_PID_Init();
  94. }

  95. void Speed_PID_Init(void)
  96. {
  97.   sptr.SetPoint = 25;  
  98.   sptr.Proportion = 5;
  99.   sptr.Integral = 0.025;  
  100.   sptr.Derivative = 0;//0.18;
  101.   sptr.now_Error[0] = 0;          //Error[0]
  102.   sptr.now_Error[1] = 0;
  103.   sptr.Last_Error[0] = 0;         //Error[-1]
  104.   sptr.Last_Error[1] = 0;
  105.   sptr.Prev_Error[0] = 0;         //Error[-2]
  106.   sptr.Prev_Error[1] = 0;        

  107.   dire.SetPoint = 100;           
  108.   dire.Proportion = 4.5;                //0.02 ;
  109.   dire.Integral = 0.001;//0.032;            //0.00015
  110.   dire.Derivative = 0.00;//0.002;
  111.   dire.now_Error[0] = 0;
  112.   dire.now_Error[1] = 0;
  113.   dire.Last_Error[0] = 0;  
  114.   dire.Last_Error[1] = 0;
  115.   dire.Prev_Error[0] = 0;  
  116.   dire.Prev_Error[1] = 0;
  117. }

  118. void pit_ch0_irq(void)
  119. {   
  120.   led_turn(LED3);
  121.   AD_Calculate();  
  122.   if(systick_flag%2 == 0)
  123.     get_speed();
  124.   if(systick_flag == 20)
  125.   {
  126.     //get_speed();
  127.     run_speed();
  128.     systick_flag = 1;
  129.   }
  130.   systick_flag++;
  131.   Speed_Calculate(g_fCarAngle,Gyro_Now);
  132.   PIT_Flag_Clear(PIT0);        
  133. }
  134. //
  135. //void  irq_irq(void)   
  136. //{   
  137. //   while(IS_IRQ_FLAG())  
  138. //   {  
  139. //        ftm_pwm_duty(FTM2,FTM_CH2,0);
  140. //        ftm_pwm_duty(FTM2,FTM_CH3,0);
  141. //        ftm_pwm_duty(FTM2,FTM_CH1,0);
  142. //        ftm_pwm_duty(FTM2,FTM_CH0,0);   
  143. //        gpio_set(PTG0,0);
  144. //        gpio_set(PTG1,0);
  145. //        gpio_set(PTG2,0);
  146. //        gpio_set(PTG3,0);  
  147. //   }   
  148. //   IRQ_CLEAN_FLAG() ;   
  149. //}

  150. //void systick_irq(void)        
  151. //{        
  152. //   static int i=0;        
  153. //   if(i==100000)         
  154. //   {        
  155. //       stop_flag = 1;            
  156. //       i=0;        
  157. //   }        
  158. //   else      
  159. //   {        
  160. //       i++;
  161. //       stop_flag = 0;      
  162. //   }        
  163. //}

复制代码

所有资料51hei提供下载:

V7.10.0.rar (161.05 KB, 下载次数: 57)


评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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