查看: 6959|回复: 14

[求助] FTM通道引脚上升沿或下降沿触发ADC采集

[复制链接]

该用户从未签到

1

主题

7

帖子

0

新手上路

Rank: 1

积分
28
最后登录
2019-7-30
发表于 2018-12-17 13:32:26 | 显示全部楼层 |阅读模式
大家好!我现在有一个问题,我想用FTM的通道引脚,比如FTM0 CH0~CH7   FTM1 CH0~1  FTM2 CH0~1,在引脚出现上升沿或下降沿时会触发ADC进行采集,没有上升沿或下降沿变化时不采集,但是我现在碰到的情况是 只要我加了这句配置则会自动触发ADC进行采集,而且还停不下来;//FTM1->EXTTRIG |=FTM_EXTTRIG_CH1TRIG_MASK;
FTM1->EXTTRIG |=FTM_EXTTRIG_INITTRIGEN_MASK;

是不是我的理解有错误,这种方式实现不了 ,还是哪里配置错误
希望能得到大家的指点,谢谢!
我的配置是这样的:
SIM->SCGC6 |= SIM_SCGC6_FTM1_MASK;
FTM1->MOD = period -1;
FTM1->CNTIN =0;
FTM1->CNT =0;
FTM1->SC= FTM_SC_CLKS(1)|FTM_SC_PS(7);



我知道答案 目前已有14人回答
回复

使用道具 举报

该用户从未签到

723

主题

6382

帖子

0

超级版主

Rank: 8Rank: 8

积分
25448
最后登录
2025-9-4
发表于 2018-12-17 15:03:07 | 显示全部楼层
你上面加的那句代码:
FTM1->EXTTRIG |=FTM_EXTTRIG_INITTRIGEN_MASK;
If INITTRIGEN = 1, then the FTM generates a trigger when the FTM counter is updated
with the CNTIN register value in the following cases.
• The FTM counter is automatically updated with the CNTIN register value by the
selected counting mode.
可以看出,这个是会自动产生trigger的,每次FTM自动加载CNTIN的时候,就会产生trigger,这个就是你停不下来的原因。
因为FTM一直在跑,在trigger.
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

7

帖子

0

新手上路

Rank: 1

积分
28
最后登录
2019-7-30
 楼主| 发表于 2018-12-17 16:38:13 | 显示全部楼层
您好 非常感谢你的回复,我加这句话效果也是一样的FTM1->EXTTRIG |=FTM_EXTTRIG_CH1TRIG_MASK;如果不配置这个寄存器的话又不能触发PDB或者ADC,怎样才能实现我上面想要的FTM触发PDB或者ADC的功能呢,还请指导!
回复 支持 反对

使用道具 举报

该用户从未签到

723

主题

6382

帖子

0

超级版主

Rank: 8Rank: 8

积分
25448
最后登录
2025-9-4
发表于 2018-12-18 09:46:34 | 显示全部楼层
aqtcwangwy1 发表于 2018-12-17 16:38
您好 非常感谢你的回复,我加这句话效果也是一样的FTM1->EXTTRIG |=FTM_EXTTRIG_CH1TRIG_MASK;如果不配置这 ...

楼主你先告诉我你使用kinetis芯片具体型号呢?
下次问问题的时候,一定要加上型号。
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

7

帖子

0

新手上路

Rank: 1

积分
28
最后登录
2019-7-30
 楼主| 发表于 2018-12-18 15:28:45 | 显示全部楼层
不好意思  是k60
回复 支持 反对

使用道具 举报

该用户从未签到

723

主题

6382

帖子

0

超级版主

Rank: 8Rank: 8

积分
25448
最后登录
2025-9-4
发表于 2018-12-18 15:52:55 | 显示全部楼层

楼主你好!
你这样,不要用FTM_EXTTRIG_INITTRIGEN_MASK, 用通道trigger.
看看你用的是哪个通道,然后配置FTMx_EXTTRIG对应的CHnTRIG 位使能,因为那个为是:
Enables the generation of the channel trigger when the FTM counter is equal to the CnV register
而INITTRIGEN是:
Enables the generation of the trigger when the FTM counter is equal to the CNTIN register.
你选择通道CnV作为trigger,因为你的上升沿或者下降沿其实就是在counter等于CnV的时候实现的。
你可以试试看,如果还有问题,欢迎继续交流。
回复 支持 反对

使用道具 举报

该用户从未签到

723

主题

6382

帖子

0

超级版主

Rank: 8Rank: 8

积分
25448
最后登录
2025-9-4
发表于 2018-12-18 15:56:48 | 显示全部楼层
另外,你还要注意,其实你的FTM生成的PWM是一直都有的,所以你的上升沿也会一直有,所以纵然你用通道,如果你的PWM不停止,不停输出周期的PWM波,你的ADC依然会一直被触发。
如果你想要自由控制,我觉得你也可以考虑软件结合代码去触发ADC,这样你要停止,就根据你自己要的条件停止触发即可。
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

7

帖子

0

新手上路

Rank: 1

积分
28
最后登录
2019-7-30
 楼主| 发表于 2018-12-18 16:36:08 | 显示全部楼层
本帖最后由 aqtcwangwy1 于 2018-12-18 16:38 编辑

谢谢你及时的回复!因为我的项目对ADC采集速度要求比较高,以前考虑过用外部引脚中断或者FTM捕捉上升沿中断,然后在进入中断中软件触发ADC采集,这样的话可以实现但是进入中断需要时间,所以后面就考虑用FTM硬件触发,延时短。C:\Documents and Settings\Administrator\桌面 未命名.png
但是就跟你上面所说的,这种触发不受外部引脚的控制,我在想是不是自己对手册理解不到位所以在论坛上请教,现在看来需要另外想方法了
回复 支持 反对

使用道具 举报

该用户从未签到

723

主题

6382

帖子

0

超级版主

Rank: 8Rank: 8

积分
25448
最后登录
2025-9-4
发表于 2018-12-18 16:53:01 | 显示全部楼层
aqtcwangwy1 发表于 2018-12-18 16:36
谢谢你及时的回复!因为我的项目对ADC采集速度要求比较高,以前考虑过用外部引脚中断或者FTM捕捉上升沿中 ...

你能给我看看你需要的PWM的trigger波吗?
因为我比较好奇你的硬件trigger情况,你是输出PWM去控制外部的东西,然后正好用上升沿去采集才来及采吗?
为什么不能在重新加载CNT值的时候去做呢?其实如果不是因为边沿的特别需求,加载时候去采集时间和上升沿一个周期是类似的。
回复 支持 反对

使用道具 举报

该用户从未签到

723

主题

6382

帖子

0

超级版主

Rank: 8Rank: 8

积分
25448
最后登录
2025-9-4
发表于 2018-12-18 16:54:52 | 显示全部楼层
aqtcwangwy1 发表于 2018-12-18 16:36
谢谢你及时的回复!因为我的项目对ADC采集速度要求比较高,以前考虑过用外部引脚中断或者FTM捕捉上升沿中 ...

其实也不能说不受外部控制,就如我在community里面回复你的。
如果你想受外部控制,完全可以在得到外部信号的时候,停止PWM,这样不就不能产生trigger信号了,这样就会停止ADC采集,除非你不想停止PWM,只是想停止ADC采集。
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-9-6 16:10 , Processed in 0.133788 second(s), 31 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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