2812 光电编码器测速

2019-07-22 15:04发布

想问一下大家有没有直流电机正交编码电路测速的程序,毕业设计,急求啊
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
suzhanhua
1楼-- · 2019-07-22 19:46
 精彩回答 2  元偷偷看……
suzhanhua
2楼-- · 2019-07-22 20:35
小晴空
3楼-- · 2019-07-23 01:49
suzhanhua 发表于 2016-6-7 22:07
http://wenku.baidu.com/link?url=Br1rjtLGAaOohhnqIG99xHOOZhlMDdlZL5ml92g8Rqjpf16vk_JpOS-Vk3ubsJDCAKlj ...

打不开啊
free_稀饭
4楼-- · 2019-07-23 02:02
  1. /* =================================================================================
  2. 程序说明:
  3. (1)M法测速
  4. ------------------------------------------------------------------------------------
  5. 使用说明:
  6. (1)采样周期必须小于定时器2的计数周期,即Tc<T
  7. (2)使用该程序时需加载文件 f281xbmsk.h
  8. ================================================================================= */

  9. //===========================================================================
  10. // f281x_speed_m.h
  11. //===========================================================================
  12. #ifndef __F281X_SPEED_M_H__
  13. #define __F281X_SPEED_M_H__

  14. #include "f281xbmsk.h"

  15. /*------------------------------------------------------------------------------
  16. Initialization states for CAPCON
  17. -------------------------------------------------------------------------------
  18. 禁止捕获单元1和2,即使能QEP电路;使能捕获单元3、检测上升沿、选择定时器2;
  19. ------------------------------------------------------------------------------*/
  20. #define QEP_CAP_INIT_STATE    0x9004

  21. /*------------------------------------------------------------------------------
  22. Initialization states for T2CON
  23. -------------------------------------------------------------------------------
  24. 时钟源选择QEP电路;定向增/减计数;使能定时器操作;
  25. ------------------------------------------------------------------------------*/
  26. #define QEP_TIMER_INIT_STATE (FREE_RUN_FLAG +
  27.                                                           TIMER_CLOCK_SRC_QEP +
  28.                                                           TIMER_DIR_UPDN +
  29.                                                           TIMER_ENABLE +
  30.                                                           TIMER_COMPARE_LD_ON_ZERO)

  31. /*-----------------------------------------------------------------------------
  32. 结构体类型定义
  33. -----------------------------------------------------------------------------*/       
  34. typedef struct
  35. {
  36.         Uint16 LineEncoder;                 // 参数:编码器光栅数,即编码器线数
  37.         float Tc;                                         // 参数:测速时间(s)

  38.         Uint16 NewValue;                         // 变量:当前T2CNT的值
  39.         Uint16 OldValue;                         // 变量:前一步T2CNT的值
  40.        
  41.         Uint16 M1;                                         // 变量:在一定时间内测取编码器输出脉冲个数

  42.         Uint16 Direction;                         // 输出:编码器旋转方向
  43.                                                                         //当Direction=1时,编码器正转(顺时针)
  44.                                                                         //当Direction=0时,编码器反转(逆时针)
  45.         float SpeedRpm;                         // 输出:电机转速(r/m)
  46.        
  47.         void (*init)();                         // 指向初始化函数
  48.         void (*calc)();                         // 指向计算函数
  49.        
  50. } SPEED_MEAS_QEP;
  51.        
  52. /*-----------------------------------------------------------------------------
  53. SPEED_MEAS_QEP型变量的默认初始值
  54. -----------------------------------------------------------------------------*/
  55. #define SPEED_MEAS_QEP_DEFAULTS {1000,0.0002,
  56.                                                                  0,0x7FFF,
  57.                                                                  0,
  58.                                                                  0,0,
  59.                                                                  (void (*)(void))F281X_EVA_QEP_Init,
  60.                                                                  (void (*)(Uint32))speed_m_calc}

  61. /*-----------------------------------------------------------------------------
  62. 函数声明
  63. -----------------------------------------------------------------------------*/                                                                         
  64. void F281X_EVA_QEP_Init(void);
  65. void speed_m_calc(SPEED_MEAS_QEP *p);

  66. #endif // __F281X_SPEED_M_H__

  67. //===========================================================================
  68. // End of file.
  69. //===========================================================================


  70. //===========================================================================
  71. // f281x_speed_m.c
  72. //===========================================================================

  73. #include "DSP281x_Device.h"
  74. #include "f281x_speed_m.h"

  75. // 定义QEP模块初始化函数
  76. void F281X_EVA_QEP_Init(void)
  77. {
  78.         // 设置捕获单元
  79.         EvaRegs.CAPCONA.all = QEP_CAP_INIT_STATE;

  80.         // 设置捕获定时器
  81.         EvaRegs.T2CON.all = QEP_TIMER_INIT_STATE;
  82.        
  83.         // 初始化T2周期寄存器
  84.         EvaRegs.T2PR=0xFFFF;
  85.        
  86.         // 初始化计数初值
  87.         EvaRegs.T2CNT=0x7FFF;

  88.         // 设置QEP1、QEP2、CAP3为功能引脚
  89.         EALLOW;                                                                                // Enable EALLOW
  90.         GpioMuxRegs.GPAMUX.all |= 0x0700;
  91.         EDIS;                                                                                // Disable EALLOW

  92. }

  93. // 定义电机转速计算函数
  94. void speed_m_calc(SPEED_MEAS_QEP *p)
  95. {
  96.         // 检测旋转方向
  97.         p->Direction = EvaRegs.GPTCONA.bit.T2STAT;

  98.         // 检测编码器输出脉冲个数
  99.         p->NewValue = EvaRegs.T2CNT;
  100.         if(p->NewValue > p->OldValue)
  101.                 p->M1 = p->NewValue - p->OldValue;                         // T2增计数_编码器正转(顺时针)
  102.         else
  103.                 p->M1 = p->OldValue - p->NewValue;                         // T2减计数_编码器反转(逆时针)

  104.         // 计算电机转速
  105.         p->SpeedRpm = 60*p->M1/(4*p->LineEncoder*p->Tc);
  106.        
  107.         // 为下步计算作准备
  108.         EvaRegs.T2CNT = 0x7FFF;                                                 // 重装计数初值
  109.         p->OldValue = 0x7FFF;                                                         // 旧值永远为计数初值
  110.        
  111. }

  112. //===========================================================================
  113. // End of file.
  114. //===========================================================================


  115. //===========================================================================
  116. // Main.c
  117. //===========================================================================

  118. // 将工程用到的头文件包含进来
  119. #include "f281x_speed_m.h"        // Include header for the SPEED_MEAS_QEP object

  120. // 宏定义
  121. #define NUMENCODER                         1000                 // 编码器光栅数
  122. #define PWM_FREQUENCY                 20                        // 测速时间 (s)

  123. // 全局变量
  124. float32 T = 0.001/PWM_FREQUENCY;                // PWM调制周期,也是离散化的采样周期 (s)

  125. // 电机转速检测对应的结构体变量
  126. SPEED_MEAS_QEP speed1 = SPEED_MEAS_QEP_DEFAULTS;


  127. void main()
  128. {
  129.         // 初始化电机转速检测模块
  130.         speed1.init();                                                        // 初始化QEP模块
  131.         speed1.LineEncoder = NUMENCODER;
  132.         speed1.Tc = T;
  133.        
  134. }

  135. interrupt void MainISR(void)
  136. {
  137.         // -------------------------------------------------------------------------
  138.         //    电机转速检测
  139.         // -------------------------------------------------------------------------
  140.         speed1.calc(&speed1);                                                 // 启动电机转速检测
  141.         output1 = speed1.SpeedRpm;
  142.        
  143. }

  144. //===========================================================================
  145. // End of file.
  146. //===========================================================================
复制代码
zhangmangui
5楼-- · 2019-07-23 02:40
 精彩回答 2  元偷偷看……
zhangmangui
6楼-- · 2019-07-23 04:56
我有分享的帖子    你可以找找运动控制平台

一周热门 更多>