请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TM4C123GH6PM 有人能否解释一下 TIvaware 中提供的 API /driverlib/qei.h:
extern void QEIVelocityConfigure (uint32_t ui32Base、uint32_t ui32PreDiv、 uint32_t ui32Period);
ui32Period 在这里是什么?
我编写了一个简单的程序来计算电机的位置、运动方向和速度:
/*! *@作者 Yash Bansod *@日期 2017年9月26日 * *@简介 正交编码器 *@详细信息 该程序连接正交编码器外设以获取位置 * 和速度信息。 *@注意 tm4c123ghpm_startup_ccs.c 包含 *的矢量表 微控制器。 它经过修改、可在 *上执行指定的 ISR PortF 中断。 */ /*------------------ 包含文件 ---------- */ #include //标准整数类型库 #include //标准布尔类型库 #include "inc/tm4c123gh6m.h" // Tiva C #include "inc/hw_memmap.h"上中断和寄存器分配的定义 //定义 Tiva C 系列器件存储器映射 的宏#include "inc/hw_types.h" //定义常用类型和宏 #include "inc/hw_gpio.h" //为 GPIO 硬件定义宏 #include "inc/hw_qEI.h" //访问 QEI 硬件 #include "driverlib/debug.h"时使用的宏 //用于帮助调试驱动程序库 #include "driverlib/sysctl.h"的宏 //为 DriverLib 的系统控制 API 定义和宏#include "driverlib/interrupt.h" //为 DriverLib 的 NVIC 控制器 API 定义和宏#include "driverlib/gpio.h" //为 DriverLib 的 GPIO API 定义和宏 #include "driverlib/pin_map.h" //所有器件的外设到引脚的映射 #include "driverlib/rom.h" //为 driverLib 的 ROM API 定义和宏 #include "driverlib/QEI.h" //正交编码器驱动程序的原型 /*------------------------------------------------------- 全局变量 ---------- */ volatile uint32_t ui32Qe1Pos; //用于存储 QEI1 volatile Int32_t i32Qe1Dir 位置的变量; //用于存储 QEI1 volatile uint32_t ui32Qe1Vel 方向的变量; //用于存储 QEI1速度的变量 /*--------------- 函数原型 ---------- */ /*------------------ 主程序 ---------- */ int main (void){ //将系统时钟设置为80MHz,将 PWM 模块时钟设置为1.25MHz ROM_SysCtlClockSet (SYSCTL_SYSDIV_2_5 |SYSCTL_USE_PLL |SYSCTL_OSC_MAIN |SYSCTL_XTAL_16MHz); //启用外设 PortD 和 QEI1的时钟 ROM_SysCtlPeripheralEnable (SYSCTL_Periph_QEI1); ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOC); //为 QEI 信号配置 PC4、PC5、PC6 ROM_GPIOPinTypeQEI (GPIO_PORTC_BASE、GPIO_PIN_5 | GPIO_PIN_6); ROM_GPIOPinConfigure (GPIO_PC5_PHA1); ROM_GPIOPinConfigure (GPIO_PC6_PHB1); //将 QEI1配置为使具有2400 PPR 的正交输入的 PhA 和 PhB 递增 ROM_QEIConfigure (QEI1_base、QEI_CONFIG_CAPTURE_A_B | QEI_CONFIG_QUIPOTIVATE、2400); ROM_QEIVelocityConfigure (QEI1_base、QEI_VELDIV_1、10000); ROM_QEIVelocityEnable (QEI1_base); //启用 QEI1 ROM_QEIEnable (QEI1_BASE); while (1){ ui32Qei1Pos = ROM_QEIPositionGet (QEI1_base); i32Qe1Dir = ROM_QEIDirectionGet (QEI1_BASE); ui32Qei1Vel = ROM_QEIVelocityGet (QEI1_base); } }/* ------------------ 函数定义 ---------- *
我从什么角度获取速度? 它是直接转换为 RPM 还是以滴答形式?