找回密码
 立即注册

QQ登录

只需一步,快速开始

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

电赛源码资料:STM32风力摆

[复制链接]
跳转到指定楼层
楼主
ID:276156 发表于 2018-1-15 14:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
风力摆代码,直接用

单片机源程序如下:
  1. /*!
  2. *     COPYRIGHT NOTICE
  3. *     Copyright (c) 2013,山外科技
  4. *     All rights reserved.

  5. *     除注明出处外,以下所有内容版权均属山外科技所有,未经允许,不得用于商业用途,
  6. *     修改内容时必须保留山外科技的版权声明。
  7. *
  8. * @file       main.c
  9. * @brief      山外KL26 平台主程序
  10. * @author     山外科技
  11. * @version    v5.2
  12. * @date       2014-10-26
  13. */

  14. #include "common.h"
  15. #include "include.h"

  16. #define MOTOR_HZ    (20*1000)

  17. #define XOUT    ADC0_SE9
  18. #define YOUT    ADC0_SE13
  19. #define ZOUT    ADC0_SE15
  20. #define Gyro1   ADC0_SE14
  21. #define Gyro2   ADC0_SE12
  22. #define Ang     ADC0_SE11
  23. Site_t site_lcd;
  24. uint16 x,y,z,gyro1,gyro2,ang;                           //保存ADC转换结果

  25. //子函数声明
  26. void LCD_show_int();//LCD显示字符
  27. void PIT_IRQHandler(void);//中断函数
  28. void move();//移动

  29. void main()
  30. {

  31.         //陀螺仪初始化
  32.     adc_init(XOUT);
  33.     adc_init(YOUT);
  34.     adc_init(ZOUT);
  35.     adc_init(Gyro2);         //角加速度  Angular2
  36.     adc_init(Gyro1);         //角加速度  Angular1
  37.     adc_init(Ang);
  38.         
  39.         //LCD初始化
  40.     LCD_init();               
  41.         LCD_show_int();        
  42.         
  43.         //初始化 电机 PWM
  44.     tpm_pwm_init(TPM0, TPM_CH0,MOTOR_HZ,100);
  45.     tpm_pwm_init(TPM0, TPM_CH1,MOTOR_HZ,100);
  46.     tpm_pwm_init(TPM0, TPM_CH4,MOTOR_HZ,100);
  47.     tpm_pwm_init(TPM0, TPM_CH5,MOTOR_HZ,100);
  48.     gpio_init(PTC12,GPO,0);
  49.         
  50. /********************************开PIT中断******************************/
  51.         pit_init_ms(PIT0, 10);                                //初始化PIT0,定时时间为: ??ms
  52.         
  53.     set_vector_handler(PIT_VECTORn ,PIT_IRQHandler);       //设置PIT0的中断服务函数为 PIT_IRQHandler
  54.     enable_irq (PIT_IRQn);                                 //使能PIT0中断

  55.     while(1)
  56.     {
  57.         site_lcd.x = 24;
  58.         site_lcd.y = 2;

  59.         x = adc_once(XOUT,ADC_8bit);
  60.         LCD_num_C (site_lcd, x , FCOLOUR , BCOLOUR);
  61.                
  62.         site_lcd.y += 15;
  63.                 y = adc_once(YOUT,ADC_8bit);
  64.         LCD_num_C (site_lcd, y , FCOLOUR , BCOLOUR);
  65.                
  66.         site_lcd.y += 15;
  67.         z = adc_once(ZOUT,ADC_8bit);
  68.         LCD_num_C (site_lcd, z , FCOLOUR , BCOLOUR);
  69.                
  70.         site_lcd.y += 15;
  71.         gyro1 = adc_once(Gyro1,ADC_8bit);
  72.         LCD_num_C (site_lcd, gyro1 , FCOLOUR , BCOLOUR);
  73.                
  74.         site_lcd.y += 15;
  75.         gyro2 = adc_once(Gyro2,ADC_8bit);
  76.         LCD_num_C (site_lcd, gyro2 , FCOLOUR , BCOLOUR);
  77.                
  78.         site_lcd.y += 15;
  79.         ang = adc_once(Ang,ADC_8bit);
  80.         LCD_num_C (site_lcd, ang , FCOLOUR , BCOLOUR);
  81.     }

  82. }

  83. /******************************LCD初始化****************************/
  84. void LCD_show_int()
  85. {
  86.         LCD_init();
  87.         site_lcd.x = 0;
  88.         site_lcd.y = 2;  
  89.         LCD_str(site_lcd, "X", BLUE, GREEN);
  90.         site_lcd.y = 17;
  91.         LCD_str(site_lcd, "Y", BLUE, GREEN);
  92.         site_lcd.y = 32;
  93.         LCD_str(site_lcd, "Z", BLUE, GREEN);
  94.         site_lcd.y = 47;
  95.         LCD_str(site_lcd, "G1", BLUE, GREEN);
  96.         site_lcd.y = 62;
  97.         LCD_str(site_lcd, "G2", BLUE, GREEN);
  98.         site_lcd.y = 77;
  99.         LCD_str(site_lcd, "A", BLUE, GREEN);  
  100.         site_lcd.y = 92;
  101.         LCD_str(site_lcd, "k", BLUE, GREEN);
  102.         site_lcd.y = 107;
  103.         LCD_str(site_lcd, "dp", BLUE, GREEN);
  104.         site_lcd.x=68;
  105.         site_lcd.y = 2;  
  106.         LCD_str(site_lcd, "wp", BLUE, GREEN);//位置PD
  107.         site_lcd.y = 17;
  108.         LCD_str(site_lcd, "wd", BLUE, GREEN);
  109.         site_lcd.y = 32;
  110.         LCD_str(site_lcd, "zl", BLUE, GREEN);//速度
  111.         site_lcd.y = 47;
  112.         LCD_str(site_lcd, "sp", BLUE, GREEN);
  113.         site_lcd.y = 62;
  114.         LCD_str(site_lcd, "h1", BLUE, GREEN);//环岛
  115.         site_lcd.y = 77;
  116.         LCD_str(site_lcd, "h2", BLUE, GREEN);
  117.         site_lcd.y = 92;
  118.         LCD_str(site_lcd, "h3", BLUE, GREEN);
  119.         site_lcd.y = 107;
  120.         LCD_str(site_lcd, "D", BLUE, GREEN);
  121. }

  122. void PIT_IRQHandler(void)
  123. {
  124.     //PIT0 和 PIT1 共用相同中断号,所以两者都共用相同中断函数,需要根据标志位来判断是由哪个PIT触发中断

  125.     if(PIT_TFLG(PIT0) == 1 )        //判断是否 PIT0 进入中断
  126.     {
  127.                 move();
  128.             PIT_Flag_Clear(PIT0);       //清中断标志位
  129.     }
  130. }

  131. void move()
  132. {
  133.         tpm_pwm_duty(TPM0, TPM_CH0,70);
  134.     tpm_pwm_duty(TPM0, TPM_CH1,70);
  135.     tpm_pwm_duty(TPM0, TPM_CH4,70);
  136.     tpm_pwm_duty(TPM0, TPM_CH5,70);
  137. }
复制代码

所有资料51hei提供下载:
风力摆.rar (854.08 KB, 下载次数: 37)


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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