大家新年好啊。前几天回乡下过年了,也没带啥东西回去,所以啥也干不了,昨天回来了,又做了一个小实验,跟大家分享一下。
前言
之前用F28335驱动一个舵机旋转(链接在这),一般来说,舵机无法整圈旋转,因此一般也不算转速。不过我手头上这个是360°舵机,所以可以整圈旋转,因此打算利用F28335的eCAP模块结合红外传感器对舵机的转速进行测量。
相关知识
eCAP模块简介
脉冲捕获模块可以通过捕获脉冲量的上升沿或者下降沿,来计算脉冲信号的宽度和占空比,进而可以进行相关控制操作。其典型应用有:
- 电机测速
- 测量脉冲电平宽度
- 测量一系列脉冲占空比和周期
- 电流/电压传感器的PWM编码信号的解码
F28335一共有6组eCAP模块,每个eCAP模块不但具有捕获功能,而且还可用作PWM输出功能,这次咱利用的是它的捕获功能。
红外传感器简述
本次所用的红外传感器主要是利用不透明的物体对红外射线的遮挡来实现测量。传感器实物如下图所示,有一根电源线、一根地线以及一根信号线。另外,传感器上还有一个槽结构,当不透明物体位于槽中并将红外射线遮挡时,信号线上输出低电平,否则输出高电平。因此,我们可以通过检测信号线的电平来判断槽中是否有物体;同时,如果将一个整圈旋转的物体置于槽中,就可以通过电平切换的时间间隔对旋转物体的转速做出测量。
(图片来自网络,侵删)
实现过程
GPIO配置
GPIO配置主要分为eCAP模块相关GPIO配置以及红外传感器相关GPIO配置。由于红外传感器的输出信号是eCAP模块的输入信号,所以将传感器的信号线接到eCAP模块的输入线;另外,由于传感器功率较低,因此直接利用开发板上的DVDD3.3端口给传感器供电。GPIO配置代码如下:
EALLOW;
GpioCtrlRegs.GPBPUD.bit.GPIO48 = 0;
GpioCtrlRegs.GPBQSEL2.bit.GPIO48 = 0;
GpioCtrlRegs.GPBMUX2.bit.GPIO48 = 1;
EDIS;
DVDD3.3的配置在例程函数中,无需修改,此处不列出。
eCAP模块配置
eCAP模块的配置首先要进行时钟使能:
SysCtrlRegs.PCLKCR1.bit.ECAP6ENCLK=1;
然后需要对eC