您好! 我对这幅文字墙感到非常抱歉、但我们不是很了解这是如何工作的、我们真的可以使用一些帮助!
我和我的合作伙伴使用 eCAP 模块来检测物体与超声波传感器的距离。
其工作方式如下:
我们尝试按如下方式进行设置:
超声波传感器根据高数字信号与检测到的物体的距离(例如、)返回一段时间内的高数字信号 如果数字信号远离、则数字信号为高电平100微秒;如果物体靠近超声波传感器、则超声波传感器将在极短的时间内输出高数字尖峰(例如1微秒)。
理想情况下、ID 类似于检测从超声传感器返回的信号的正边沿、并在一段时间内对其进行采样。 如果它很快变低、我知道超声波传感器附近有一个物体。 如果它保持高电平、我知道物体离得远。
我们只需要测量 t_pw。
我们已将 ECCTL1设置为:
ECap1Regs.ECCTL1.bit.FREE_SOFT = 1; 中断后//停止以进行调试
ECap1Regs.ECCTL1.bit.prescale = 0; //无校验器
ECap1Regs.ECCTL1.bit.CAPLDN = 1 //启用捕捉单元
ECap1Regs.ECCTL1.bit.CAP1POL = 1;//在下降边沿上开始计时
ECap1Regs.ECCTL1.bit.CAP2POL = 0;//上升沿返回值
ECap1Regs.ECCTL1.bit.CAP3POL = 1;//在下降边沿上开始计时
ECap1Regs.ECCTL1.bit.CAP4POL = 0;//在上升边沿上开始计时
ECap1Regs.ECCTL1.bit.CTRRST1 = 1;// 在检测到一个上升边沿后、复位定时器
ECap1Regs.ECCTL1.bit.CTRRST2 = 1;// 检测到下降沿后、返回值
ECap1Regs.ECCTL1.bit.CTRST3 = 1;// 这只是对 eCAP1的阴影,所以当我们复位 CTRRST1时不应该复位它?
ECap1Regs.ECCTL1.bit.CTRRST4 = 1;// 这只是对 eCAP2的阴影, 所以当我们复位 CTRRST2时不应该复位它?
//控制寄存器2
ECap1Regs.ECCTL2.bit.CONT_ONESHT = 0;//连续、因为我们要使定时器在第一个边沿(事件)之后保持运行?
ECap1Regs.ECCTL2.bit.STOP_Wrap = 3;// 我们 只想知道上升事件和下降事件之间的差异,所以这无关紧要?
ECap1Regs.ECCTL2.bit.SYNCI_EN = 1;//启用同步输入
ECap1Regs.ECCTL2.bit.SYNCO_SEL = 0;//直通
ECap1Regs.ECCTL2.bit.TSCTRSTOP = 1;//起始计数器
ECap1Regs.ECCTL2.bit.rearm = 1;// ARM 单次触发
ECap1Regs.ECCTL2.bit.TSCTRSTOP = 0; //确保计数器已停止
ECap1Regs.ECEINT.BIT.CEVT4 = 1; // 2个事件(上升然后下降)=中断,然后我们得到值
_________________________________
这有道理吗?
_________________________________
另外、还有几个简短的问题!
我们有5个超声波传感器、每个传感器只需1个引脚。 查看示例代码、我认为我们有足够的引脚、这是正确的吗?
最后、返回的值是否表示脉宽内计数的周期数? 定时器的值返回到哪个寄存器?
