找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 126|回复: 7
打印 上一主题 下一主题
收起左侧

求教M0单片机汇编后几个指令周期的指点

[复制链接]
跳转到指定楼层
楼主
我想用单片机的定时器来测频率,参考的是国民技术的M0的031和其中的例程,我自己是这么想的,因为水平有限手册也领会不够,想象中和实际有不对的地方也请指出,先多谢了。
我想就用48M的时钟做定时器时钟去测外部15K的频率,那么一个外部信号周期应该是计时为3200个时钟,为了获得这个定时值在官方例程中使用了
IC2Value = TIM_GetCap2(TIM3)来获取定时器的值来计算外部信号频率,我个人认为这条指令会带来额外的计时误差,会造成测频误差变的更大,因此就想在得到这个值后减掉这条指令带来的时钟数,这个c语言我看得都还是磕磕巴巴不完全理解更不敢妄谈汇编语句了,把汇编后截图出来,请教下这条指令汇编后究竟需要减去那几个汇编语句?分别占用了多少时钟周期?再就是哪里有这个ARM汇编指令周期的讲解书可以参考下?


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:883242 发表于 2024-4-29 21:20 | 只看该作者
有流水线的体系结构都不谈每条指令的执行时间。比如你代码里面的BEQ如果成功了,流水线就会被清空重新加载,谁知道时间是多少?
回复

使用道具 举报

板凳
ID:401564 发表于 2024-4-30 00:10 | 只看该作者
不要用8051的思路去学32
测量有定时器
精确延时有滴答时钟
回复

使用道具 举报

地板
ID:879348 发表于 2024-4-30 08:32 | 只看该作者
你认为而已,实际设置在低电平停止计数,所以这个数值取决于信号而不是你的程序,你的程序只需要保证在低电平内读数清零就可以,这个时间是很久的
回复

使用道具 举报

5#
ID:1066092 发表于 2024-4-30 20:46 | 只看该作者
Y_G_G 发表于 2024-4-30 00:10
不要用8051的思路去学32
测量有定时器
精确延时有滴答时钟

先谢了。
我想用计时法去测频率。每一个测量周期都要得出当前的频率是多少。
如果定时器时钟是48M去测外部一个15K的信号的真实频率,应该每个周期计时是48000000/15000=3200个,如果计时误差为1那么测得的频率误差是不是就差了1/3200×15000≈4.7hz?如果按例程中进入定时器中断后再获取定时器的值,再根据定时器的值来计算频率,定时器中的实际值应该会比实际值更大频率误差也就更大。如果能知道从定时器进入中断到获取定时器值经过了多少周期,将获得的定时器值减去这段时间的周期值,那是不是可以得到更接近真实3200的值?从而得到误差更小?单片机的晶振是48M,定时器的时钟也同样是这个48M就可以不用考虑晶振漂移的问题,假设的条件是外部信号幅度保持稳定不变。
不用计频法来测频率是因为需要用足够长的时间和足够准确的定时周期才能得到准确的外部频率测量,没有那么长的时间去累加外部信号个数,我想要每1ms也就是最多计15个外部信号就要得出准确的外部信号频率是多少,不管是计频还是计时法算出来的频率如果和真实频率差个几十上百hz就没有意义了。
上面只是我的想法,对定时器不熟不知道这样理解是否正确,还望指教。
回复

使用道具 举报

6#
ID:401564 发表于 2024-5-2 12:49 | 只看该作者
hisun 发表于 2024-4-30 20:46
先谢了。
我想用计时法去测频率。每一个测量周期都要得出当前的频率是多少。
如果定时器时钟是48M去测 ...

如果你是一个范围很宽的频率,比如是从0.1HZ到20KHZ都有,那么单一的定时器肯定就不行了
你可以使用端口中断加定时器来计算
当出现一个下降沿的时候,就开启定时器,定时器不用分频,开启中断,每次溢出都把时间累加,直到出现下降沿,再停止定时器,这样不就得到一个高电平的总时间了吗?
你也可以用上升沿和下降沿来区分高电平和低电平,并把时间累加,这样,你就会得到一个高电平时间和低时间
再把时间进行一下平均值滤波,这就得到一个频率了,误差不会太大的
回复

使用道具 举报

7#
ID:1066092 发表于 2024-5-2 16:17 | 只看该作者
Y_G_G 发表于 2024-5-2 12:49
如果你是一个范围很宽的频率,比如是从0.1HZ到20KHZ都有,那么单一的定时器肯定就不行了
你可以使用端口中 ...

非常感谢答复指点。
我是想这么用的,传感器在传送带上,传送带每秒速度最大可以达到2米/秒,按最小检测异物来说,每毫秒传送带走2毫米在传感器上反映相位移动了10度这样子,我在搜索见到的计频法或者计时法测频率想要准确的话都需要一定时间累积才可以获得比较准确的频率,但是我这样用累积时间过长可能最小异物已近冲过传感器,信号太弱无法分辨出是干扰还是确有异物过去,检测失败。
为了检测最小异物,我就想最好是每个信号周期都能得出它的时间宽度,当有异物在传感器下通过时,它的时间宽度会有个跳变。而之所以这么说,是因为我用示波器看波形,当有异物贴近时波形会有1.1us的移动,但在X轴上用光标看信号的宽度时间,和没有异物贴近时的宽度时间基本没有变化,或者说在时间上调动光标到两者相同位置感觉不到有什么变化基本都是15K信号时的宽度66.6us宽度,示波器上显示出的频率波动也是看不出有什么特别变化,所以用频率来识别异物的方法是行不通的,同时信号的电压幅度也看不出来有什么变化,所以用检测电压幅的方法来识别异物也是行不通的。移除异物后信号又会回到原始位置,所以我认为是异物造成信号相位发生了变化--至于这个理解,有坛友质疑我所认为的相位有变化是错误的,给我的感觉是坛友认为同一个信号在示波器上是不能够确认相位发生了变化,是我不会使用示波器造成的错误理解。而我认为是会发生相位变化的,因为这个信号相位的变化是发生在有异物和无异物的不同时间内进行比较的,完全可能有相位变化进行比较,多说这两句,如果我理解有错误还请能指点,我确实不会理论,示波器也是才买来学习不怎么会用。我丢把菜刀进去,信号相位和原始的变化了约30度,但是信号的周期宽度,频率,电压幅度还是看不出来有什么变化。
昨晚又搜到个等精度频率测量方法,这个似乎比计频法和计时法的精度都高很多,但是这个原理还是没理解出来,没搞懂,也还要多用一个定时器。
回复

使用道具 举报

8#
ID:401564 发表于 2024-5-3 09:06 | 只看该作者
hisun 发表于 2024-5-2 16:17
非常感谢答复指点。
我是想这么用的,传感器在传送带上,传送带每秒速度最大可以达到2米/秒,按最小检测 ...

好深奥,这个已经超出了我的知识范围了.....
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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