注册 登录
查看: 3141|回复: 45

[其他] 我用KL26的TPM1模块对编码器计数,输入脚能检测到编码器的波形就是计数输出总是0

[复制链接]
发表于 2014-3-27 21:15:21 | 显示全部楼层 |阅读模式
我用KL26的TPM1模块对编码器计数,编码器的脉冲输入引脚是接输入脚TPM_CLKIN1_PIN  PTE17上,而且在单片机的PTE17上能检测到编码器输出的的波形,但就是计数输出总是0啊,这是为什么啊。我用的编码器不是漏极输出的,程序就是例程中程序啊


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 1互助 +2 收起 理由
陌语伶仃 + 2 谢谢分享!

查看全部评分

回复

使用道具 举报

发表于 2014-3-28 09:24:53 | 显示全部楼层
我仅听说过 KL26的 LPTMR 有bug,貌似没听说过 TPM 的脉冲计数有bug啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-28 09:56:08 | 显示全部楼层
栾端静 发表于 2014-3-28 09:24
我仅听说过 KL26的 LPTMR 有bug,貌似没听说过 TPM 的脉冲计数有bug啊

真的有BUG啊,计数不了啊
回复 支持 反对

使用道具 举报

发表于 2014-3-28 10:13:47 | 显示全部楼层
在 board/FIRE_MKL_conf.h  里把频率降下来,原先的频率设置太高了。(下面的是我用的配置)
  1. /*
  2. * 定义 PLL 超频 频率
  3. */
  4. #define PLL_CLK                PLL200      // 从 PLL_e 里选择 已提供的 配置方案
  5.                                           // core/bus 频率 都是 pll 整数倍分频而来

  6. #define MAX_CORE_CLK            100        // core     (bus        >= pll/16  )
  7. #define MAX_BUS_CLK             40         // bus      (bus        >= core/16  )
其中 PLL的定义是从下面这里找到的:
  1. typedef enum
  2. {
  3.     PLLUSR      ,  //自定义设置分频系数模式,直接加载 全局变量 mcg_div 的值
  4.     PLL48,
  5.     PLL64,
  6.     PLL66,
  7.     PLL68,
  8.     PLL72,
  9.     PLL80,
  10.     PLL96,
  11.     PLL128,
  12.     PLL136,
  13.     PLL148,
  14.     PLL200,
  15.     PLL220,

  16.     PLL_MAX,
  17. } PLL_e;
回复 支持 反对

使用道具 举报

发表于 2014-3-28 10:14:06 | 显示全部楼层
我这边用着没发现问题
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-28 10:32:47 | 显示全部楼层
丁玉 发表于 2014-3-28 10:14
我这边用着没发现问题

你这个我测试过了,能给我发份你的程序不,我真的找不出哪儿有问题啊
回复 支持 反对

使用道具 举报

发表于 2014-3-28 11:00:37 | 显示全部楼层
你用的跟山外哥例程的有点不一样。

你用E17的话,有没有修改管脚复用表?默认是 PTC13的:(在board/FIRE_port_cfg.h配置)
  1. #define TPM_CLKIN1_PIN  PTC13       //PTA19、PTB17、PTC13、PTE17、PTE30              PTA19不要用 (与晶振冲突)
上面是山外哥默认的,如果你需要PTE17,那么就把 PTC13 换成 PTE17
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-28 11:20:40 | 显示全部楼层
康锦 发表于 2014-3-28 11:00
你用的跟山外哥例程的有点不一样。

你用E17的话,有没有修改管脚复用表?默认是 PTC13的:(在board/FIRE_ ...

谢谢啊,但是这个我已经改了
回复 支持 反对

使用道具 举报

发表于 2014-3-28 12:12:42 | 显示全部楼层
刚刚重新测试一下,没发现有bug,可以正常进行脉冲计数。

你先用我们的例程,除了降低频率,其他的都不要该,按我们的方法去接线,试试。
回复 支持 反对

使用道具 举报

发表于 2014-3-28 12:14:25 | 显示全部楼层
另外,这个模块是必用的,很多队伍都已经测试OK,所以代码上的bug应该不多,或者有小bug。
先用我们的例程,这例程是我们验证过,所以应该是没问题的,测试OK了就考虑是不是硬件问题。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-28 12:53:06 | 显示全部楼层
山外メ雲ジ 发表于 2014-3-28 12:14
另外,这个模块是必用的,很多队伍都已经测试OK,所以代码上的bug应该不多,或者有小bug。
先用我们的例程 ...

山外哥,真的搞不出来啊,我都调了两天了,还是一直输出为0啊
回复 支持 反对

使用道具 举报

发表于 2014-3-28 12:53:53 | 显示全部楼层
woshijpf 发表于 2014-3-28 12:53
山外哥,真的搞不出来啊,我都调了两天了,还是一直输出为0啊

你先用我们的例程,除了降低频率,其他的都不要该,按我们的方法去接线,试试。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-28 12:54:39 | 显示全部楼层
山外メ雲ジ 发表于 2014-3-28 12:14
另外,这个模块是必用的,很多队伍都已经测试OK,所以代码上的bug应该不多,或者有小bug。
先用我们的例程 ...

山外哥能帮忙在线调试下吗
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-28 12:55:42 | 显示全部楼层
山外メ雲ジ 发表于 2014-3-28 12:53
你先用我们的例程,除了降低频率,其他的都不要该,按我们的方法去接线,试试。

山外哥,我都试过啦,还是不行,不知道哪儿出状况啊
回复 支持 反对

使用道具 举报

发表于 2014-3-28 12:56:01 | 显示全部楼层
woshijpf 发表于 2014-3-28 12:54
山外哥能帮忙在线调试下吗

这个貌似更多的是硬件问题,而不是软件问题吧。我们发布的例程,我刚才是重新测过,是OK的。你按照我们例程去操作,试试吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-28 13:01:13 | 显示全部楼层
山外メ雲ジ 发表于 2014-3-28 12:56
这个貌似更多的是硬件问题,而不是软件问题吧。我们发布的例程,我刚才是重新测过,是OK的。你按照我们例 ...

你们的例子里就是把TPM0模块的通道CH0产生PWM波输出,然后将输出脚PTE24连接上TPM_CKLIN0 对应的引脚PTC13,就是这样测试的啊,还是不行

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-28 13:21:04 | 显示全部楼层
山外メ雲ジ 发表于 2014-3-28 12:56
这个貌似更多的是硬件问题,而不是软件问题吧。我们发布的例程,我刚才是重新测过,是OK的。你按照我们例 ...

山外哥啊,我都用最新的下载的程序测试过了,还是不行啊,是不是板子出问题啦,pwm波可以产生,但就是计不了数啊,都快崩溃啦
回复 支持 反对

使用道具 举报

发表于 2014-3-28 14:26:27 | 显示全部楼层
woshijpf 发表于 2014-3-28 13:21
山外哥啊,我都用最新的下载的程序测试过了,还是不行啊,是不是板子出问题啦,pwm波可以产生,但就是计不了 ...

加我Q:753258889,我看看什么问题吧。
回复 支持 反对

使用道具 举报

发表于 2014-4-28 21:42:44 | 显示全部楼层
我也出现这个问题了。。请问怎么解决的。。我是c13一直没有数
回复 支持 反对

使用道具 举报

发表于 2014-4-28 21:44:25 | 显示全部楼层
山外メ雲ジ 发表于 2014-3-28 14:26
加我Q:753258889,我看看什么问题吧。


我也出现这个问题了。。请问怎么解决的。。我是c13一直没有数
回复 支持 反对

使用道具 举报

发表于 2014-4-28 21:50:35 | 显示全部楼层
zyc 发表于 2014-4-28 21:44
我也出现这个问题了。。请问怎么解决的。。我是c13一直没有数

楼主的问题是改动过我们的底层,导致的。
请先直接从我们的代码解压,然后仅仅修改为C13,可以修改主频,然后重新测一下。
回复 支持 反对

使用道具 举报

发表于 2014-4-28 21:55:40 | 显示全部楼层
山外メ雲ジ 发表于 2014-4-28 21:50
楼主的问题是改动过我们的底层,导致的。
请先直接从我们的代码解压,然后仅仅修改为C13,可以修改主频, ...

是pll不能超的太多嘛??多大可以??改频率是不是仅仅需要改一个pll220就行下面的core和bus那个用改嘛
回复 支持 反对

使用道具 举报

发表于 2014-4-28 21:57:53 | 显示全部楼层
zyc 发表于 2014-4-28 21:55
是pll不能超的太多嘛??多大可以??改频率是不是仅仅需要改一个pll220就行下面的core和bus那个用改嘛

KL26 一般内核频率最大为 110M ,但受温度、芯片差异等影响,有的最大内核频率就100M。比赛求稳定,最好是100M内。

参考如下帖子:
K60 KL26 主频和总线频率的关系 - 智能车资料区 - 山外-vcan123论坛 http://www.vcan123.com/forum.php ... p;tid=81&ctid=1
回复 支持 反对

使用道具 举报

发表于 2014-4-28 21:59:05 | 显示全部楼层
山外メ雲ジ 发表于 2014-4-28 21:50
楼主的问题是改动过我们的底层,导致的。
请先直接从我们的代码解压,然后仅仅修改为C13,可以修改主频, ...

那就纳闷了,为何相同的主频  c12就可以呢?你们自己测试过c13嘛??相同220mpll下
回复 支持 反对

使用道具 举报

发表于 2014-4-28 22:03:00 | 显示全部楼层
zyc 发表于 2014-4-28 21:59
那就纳闷了,为何相同的主频  c12就可以呢?你们自己测试过c13嘛??相同220mpll下

高频情况下有不稳定是正常的,C13,之前帮楼主调试的时候测试过是OK的。

你可以先C13 用GPIO口输出0和1,看看电压正不正常
回复 支持 反对

使用道具 举报

发表于 2014-4-28 22:06:28 | 显示全部楼层
山外メ雲ジ 发表于 2014-4-28 21:57
KL26 一般内核频率最大为 110M ,但受温度、芯片差异等影响,有的最大内核频率就100M。比赛求稳定,最好是 ...

而且接上鹰眼之后,采集的图像一直在闪。。一直跳。。。如果我为了测回c13引脚上的脉冲降频的话。。那摄像头采集那块不得更出问题啊。。。
回复 支持 反对

使用道具 举报

发表于 2014-4-28 22:09:04 | 显示全部楼层
山外メ雲ジ 发表于 2014-4-28 22:03
高频情况下有不稳定是正常的,C13,之前帮楼主调试的时候测试过是OK的。

你可以先C13 用GPIO口输出0和 ...

正常。。。
回复 支持 反对

使用道具 举报

发表于 2014-4-28 22:46:26 | 显示全部楼层
zyc 发表于 2014-4-28 22:06
而且接上鹰眼之后,采集的图像一直在闪。。一直跳。。。如果我为了测回c13引脚上的脉冲降频的话。。那摄像 ...

参考这帖子:
KL图像为什么会时而平移时而正常啊? - 智能车讨论区 - 山外-vcan123论坛 http://www.vcan123.com/forum.php ... tid=2325&ctid=6
回复 支持 反对

使用道具 举报

发表于 2014-4-28 23:39:22 | 显示全部楼层
山外メ雲ジ 发表于 2014-4-28 22:46
参考这帖子:
KL图像为什么会时而平移时而正常啊? - 智能车讨论区 - 山外-vcan123论坛 http://www.chuxu ...

我的现象是一种跳。。一个闪屏那种。。明天去接个试试。。脉冲采集那个也去试试。。不好使的话再向你请教。。我用的是你们的fx学弟们用的是你们的kl26.。。出现很多k60不能出现的问题。。不得不去帮忙解决。。但是真的是资源问题或者是芯片等级问题的话。。我也无能为力了。。
回复 支持 反对

使用道具 举报

发表于 2014-4-28 23:39:59 | 显示全部楼层
山外メ雲ジ 发表于 2014-4-28 22:46
参考这帖子:
KL图像为什么会时而平移时而正常啊? - 智能车讨论区 - 山外-vcan123论坛 http://www.chuxu ...

不过还是谢谢你。。。。。山外的售后技术维护就是比其他的靠谱
回复 支持 反对

使用道具 举报

发表于 2014-4-28 23:46:17 | 显示全部楼层
zyc 发表于 2014-4-28 23:39
我的现象是一种跳。。一个闪屏那种。。明天去接个试试。。脉冲采集那个也去试试。。不好使的话再向你请教 ...

闪屏,是黑白识别的那种跳吗?是KL26才出现的吗?K60没出现吧?
如果是仅仅KL26才出现,那么接下拉电阻滤波就好。

如果是K60也出现,那么可以参考这帖子:
山外鹰眼在日光灯下闪烁的原因分析 - 智能车资料区 - 山外-vcan123论坛 http://www.vcan123.com/forum.php ... p;tid=28&ctid=6
回复 支持 反对

使用道具 举报

发表于 2014-4-28 23:47:09 | 显示全部楼层
zyc 发表于 2014-4-28 23:39
不过还是谢谢你。。。。。山外的售后技术维护就是比其他的靠谱

呵呵,谢谢支持。
回复 支持 反对

使用道具 举报

发表于 2014-4-28 23:48:26 | 显示全部楼层
山外メ雲ジ 发表于 2014-4-28 23:46
闪屏,是黑白识别的那种跳吗?是KL26才出现的吗?K60没出现吧?
如果是仅仅KL26才出现,那么接下拉电阻滤 ...

是kl26、、谢谢指点。。明天去实验室试一试。。。如果不行的话。还望指点。。。那个c13脉冲那个问题能不能不降频就可以解决呢??
回复 支持 反对

使用道具 举报

发表于 2014-4-28 23:52:49 | 显示全部楼层
zyc 发表于 2014-4-28 23:48
是kl26、、谢谢指点。。明天去实验室试一试。。。如果不行的话。还望指点。。。那个c13脉冲那个问题能不能 ...

C13脉冲计数的问题,这个我也不敢肯定,先用我们最原始的代码试试吧。不行再论坛反馈。
KL26是三级流水线,单指令周期的,所以即使是与XS128同样80M频率,KL26也会运行更快。
回复 支持 反对

使用道具 举报

发表于 2014-4-28 23:58:19 | 显示全部楼层
山外メ雲ジ 发表于 2014-4-28 23:52
C13脉冲计数的问题,这个我也不敢肯定,先用我们最原始的代码试试吧。不行再论坛反馈。
KL26是三级流水线 ...

就是你们给的例程。。只是调用时候调用TPM_CLKIN1  而宏定义那块没有改。。所以就是c13。。这些都不会错的。。如果真不行的话估计就是频率的问题了。。。这样感觉好坑爹啊。。。哈哈。。该睡了。。
回复 支持 反对

使用道具 举报

发表于 2014-5-1 16:38:59 | 显示全部楼层
山外メ雲ジ 发表于 2014-4-28 23:52
C13脉冲计数的问题,这个我也不敢肯定,先用我们最原始的代码试试吧。不行再论坛反馈。
KL26是三级流水线 ...

还是不可以。。无论降频还是怎么地。。c13就是没有脉冲。。。c12正常。。。怎么破
回复 支持 反对

使用道具 举报

发表于 2014-5-1 17:15:55 | 显示全部楼层
山外メ雲ジ 发表于 2014-4-28 23:52
C13脉冲计数的问题,这个我也不敢肯定,先用我们最原始的代码试试吧。不行再论坛反馈。
KL26是三级流水线 ...

更奇葩的问题是。。非要初始化一下tpm0模块。。然后脉冲计数才可以用
回复 支持 反对

使用道具 举报

发表于 2014-6-27 18:33:09 | 显示全部楼层
楼主,,我也出现了你这个情况,,是怎么回事啊??求指教,,计数一直为0 。。为什么呢???
回复 支持 反对

使用道具 举报

发表于 2014-6-27 19:03:55 | 显示全部楼层
zyc 发表于 2014-5-1 17:15
更奇葩的问题是。。非要初始化一下tpm0模块。。然后脉冲计数才可以用

lz你的问题解决了吗  我们也遇到同样的问题 求指点
回复 支持 反对

使用道具 举报

发表于 2014-7-7 13:56:56 | 显示全部楼层
zyc 发表于 2014-5-1 17:15
更奇葩的问题是。。非要初始化一下tpm0模块。。然后脉冲计数才可以用

是啊 我的也是必须初始化TPM0 之后才能计数,不知道为什么
回复 支持 反对

使用道具 举报

发表于 2015-2-12 00:42:54 | 显示全部楼层
zyc 发表于 2014-5-1 17:15
更奇葩的问题是。。非要初始化一下tpm0模块。。然后脉冲计数才可以用

不知道你的问题解决没,请教一下,我的也是类似问题必须TPM0初始化后才能脉冲计数,我用TPM0的通道0和1作为电机pwm,刚开始是输出相同pwm没有发现问题,现在两轮给不同pwm了,计数就成有问题了,10ms pit中断,100线编码器显示0,1,0,1清计数器的函数去掉后记的脉冲值根本就不对。。现在很急求帮助啊!
回复 支持 反对

使用道具 举报

发表于 2015-2-12 00:43:33 | 显示全部楼层
hanqbww 发表于 2014-7-7 13:56
是啊 我的也是必须初始化TPM0 之后才能计数,不知道为什么

不知道你的问题解决没,请教一下,我的也是类似问题必须TPM0初始化后才能脉冲计数,我用TPM0的通道0和1作为电机pwm,刚开始是输出相同pwm没有发现问题,现在两轮给不同pwm了,计数就成有问题了,10ms pit中断,100线编码器显示0,1,0,1清计数器的函数去掉后记的脉冲值根本就不对。。现在很急求帮助啊!
回复 支持 反对

使用道具 举报

发表于 2015-2-12 00:43:52 | 显示全部楼层
浮躁。 发表于 2014-6-27 19:03
lz你的问题解决了吗  我们也遇到同样的问题 求指点

不知道你的问题解决没,请教一下,我的也是类似问题必须TPM0初始化后才能脉冲计数,我用TPM0的通道0和1作为电机pwm,刚开始是输出相同pwm没有发现问题,现在两轮给不同pwm了,计数就成有问题了,10ms pit中断,100线编码器显示0,1,0,1清计数器的函数去掉后记的脉冲值根本就不对。。现在很急求帮助啊!
回复 支持 反对

使用道具 举报

发表于 2015-2-12 10:28:37 | 显示全部楼层
z3214456cc 发表于 2015-2-12 00:43
不知道你的问题解决没,请教一下,我的也是类似问题必须TPM0初始化后才能脉冲计数,我用TPM0的通道0和1作 ...

用新版本kl26库,旧版本是有bug
来自安卓客户端来自安卓客户端
回复 支持 反对

使用道具 举报

发表于 2015-2-12 14:16:29 | 显示全部楼层
山外メ雲ジ 发表于 2015-2-12 10:28
用新版本kl26库,旧版本是有bug

之前用的是5.2 现在下了5.2.1还是不行当pwm相同时




当pwm不同时

红色是TPM的
蓝色是lmptr的


程序是直接按照例程写的

/*!
*     COPYRIGHT NOTICE
*     Copyright (c) 2013,山外科技
*     All rights reserved.
*     技术讨论:山外论坛 http://www.vcan123.com
*
*     除注明出处外,以下所有内容版权均属山外科技所有,未经允许,不得用于商业用途,
*     修改内容时必须保留山外科技的版权声明。
*
* @file       main.c
* @brief      山外KL26 平台主程序
  * @author     山外科技
* @version    v5.2
* @date       2014-10-26
*/

#include "common.h"
#include "include.h"

volatile uint16 zuo_s=0;
volatile uint16 you_s=0;

void devices_init();
void PIT_IRQHandler(void);//PIT中断函数声明

void main(void)
{

    uint8 var[2];
    devices_init();

    while(1)
    {

            var[0]=(uint8)zuo_s;
            var[1]=(uint8)you_s;
            vcan_sendware((uint8_t *)var, sizeof(var));

            //camera_get_img();//取图像开始工作
            img_extract(img,imgbuff,CAMERA_SIZE);
            tpm_pwm_duty(TPM0, TPM_CH0,800);              //PTC1
            tpm_pwm_duty(TPM0, TPM_CH1,700);

           oled_image();

           LCD_P6x8Str(80,1,"z_s");LCD_Write_6x8Int(100,1,zuo_s);
           LCD_P6x8Str(80,2,"y_s");LCD_Write_6x8Int(100,2,you_s);


   }



}

void devices_init()              
{

    DisableInterrupts;                  //关闭总中断

    //camera_init(imgbuff);

    LCD_Init();


    //配置中断服务函数
    set_vector_handler(PORTA_VECTORn ,PORTA_IRQHandler);    //设置ov7725中断服务函数为 PORTA_IRQHandler
    set_vector_handler(DMA0_VECTORn ,DMA0_IRQHandler);      //设置ov7725的中断服务函数为 DMA0_IRQHandler

    tpm_pwm_init(TPM1,TPM_CH0,50,servo_mid);//舵机初始化,PTB0
    //10000u则精度为0.1%,用于占空比 duty 形参传入,即占空比为 duty/TPM_PRECISON

    tpm_pwm_init(TPM0,TPM_CH0,20*1000,950);              //PTC1  电机PWM初始化
    tpm_pwm_init(TPM0,TPM_CH1,20*1000,930);              //PTC2


    pit_init_ms(PIT1, 20); //PIT中断10ms一次
    set_vector_handler(PIT_VECTORn ,PIT_IRQHandler); //设定中断向量表
    enable_irq(PIT_IRQn);//使能中断向量

    tpm_pulse_init(TPM2,TPM_CLKIN0,TPM_PS_1);
    lptmr_pulse_init(LPT0_ALT2, 0XFFFF, LPT_Rising);//编码器,TPM,LPTMR计数


    set_irq_priority(DMA0_IRQn,0);         //DMA采集完成中断最高
    set_irq_priority(PORTA_IRQn,1);        //其次为A端口中断,用于摄像头的行和场中断
    //set_irq_priority(PORTC_PORTD_IRQn,2);  //接着是C端口中断,编码器产生的中断以及按键产生的中断
    set_irq_priority(PIT_IRQn,2);          //定时器产生的中断最后

    EnableInterrupts;
}

void PIT_IRQHandler(void)
{

        if(PIT_TFLG(PIT1) == 1 )        //判断是否 PIT1 进入中断
    {


        zuo_s= tpm_pulse_get(TPM2);
        you_s = lptmr_pulse_get();

      tpm_pulse_clean(TPM2);
      lptmr_pulse_clean();


        PIT_Flag_Clear(PIT1);       //清中断标志位
     }
}


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2015-6-4 22:45:23 | 显示全部楼层
楼主解决这个问题没有啊?感觉写的都没问题啊
回复 支持 反对

使用道具 举报

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

本版积分规则

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