[应用相关] 最小是一半

[复制链接]
1042|27
 楼主| chuxh 发表于 2020-2-8 11:42 | 显示全部楼层 |阅读模式
我现在在做一个正弦波移相的东西,用延时对两个波进行移相。波的频率是20hz到20khz,430f149的单片机主频是8Mhz,定时器的最小时延是0.125us。由于移相的精度是1度,波是低频的时候还可以用0.125*CCR0(CCR0是整数)实现,波变成高频就需要小数才能延时了。有没有什么方法能解决这个事?
#define CPU_F ((double)8000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))   //延时1微妙
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))      //延时1毫秒
我现在有这样一个延时函数,查了一下资料“x”的值为常量或常量表达式即可,“x”能不能是小数,如果“x”能是小数,那延时不就能小于1us了,我用了几个小数试了一下,发现最小是delay(1)的一半,这是怎么回事
goodluck09876 发表于 2020-2-8 11:49 | 显示全部楼层
估计和分频系数有关系!

系统的晶振时钟是不是稳定也有一定的关系吧!
juventus9554 发表于 2020-2-8 11:55 | 显示全部楼层

那你能不能将你的信号先分频后再做延时然后再倍频呢..
pengf 发表于 2020-2-8 11:58 | 显示全部楼层

有没有什么更精确的延时函数??
yinxiangh 发表于 2020-2-8 12:01 | 显示全部楼层
“x”只能是常量或者表达式
zyf部长 发表于 2020-2-8 12:04 | 显示全部楼层

有没有什么方法能让“x”可以是变量的啊
guoyt 发表于 2020-2-8 12:10 | 显示全部楼层
建议楼上你试试定时器吧............
wangpe 发表于 2020-2-8 12:16 | 显示全部楼层
你是想延时多少时间啊.........你可以选择不同频率的时钟源
huwr 发表于 2020-2-8 12:20 | 显示全部楼层
选择不同的计数方式来达到不同的延时啊
tian111 发表于 2020-2-8 12:24 | 显示全部楼层
你能不能将你的信号先分频后再做延时然后再倍频呢.....
chenho 发表于 2020-2-8 12:28 | 显示全部楼层
不然按照你说的延时的时间也太小了吧
renyaq 发表于 2020-2-8 12:32 | 显示全部楼层

单片机主频还是固定的.....
liuzaiy 发表于 2020-2-8 12:36 | 显示全部楼层
delay函数的是自己包装的函数的,跟主频率相关系的。
chenjunt 发表于 2020-2-8 12:41 | 显示全部楼层
如上面的程序所示,其中的延迟函数用那种方法,使用系统的延迟周期函数__delay_cycles(int n); 可以达到比较精确的延迟
xxmmi 发表于 2020-2-8 12:44 | 显示全部楼层
这个内部的延时也不一定准确的
yufe 发表于 2020-2-8 12:47 | 显示全部楼层

发错版块了。
langgq 发表于 2020-2-8 12:50 | 显示全部楼层
任何事情都是有限度的,你这个0.125us根本不现实,还不要说延时,几个指令周期都不止0.125us
happy_10 发表于 2020-2-8 12:55 | 显示全部楼层
程序不是简单赋值就能完事儿的,真要做这么高的指标想别的办法吧
shimx 发表于 2020-2-8 12:59 | 显示全部楼层
波通过什么产生
 楼主| chuxh 发表于 2020-2-8 13:03 | 显示全部楼层

你看函数原型是小数吗?一般这都是整数。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

936

主题

11296

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部