打印
[国产单片机]

请教:用定时器如何产生高频对称方波

[复制链接]
969|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
nbsmaps|  楼主 | 2023-3-2 20:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
dyx8899| | 2023-3-2 21:44 | 只看该作者
是不是指令周期没有考虑进去。先仿真试试看

使用特权

评论回复
板凳
coody| | 2023-3-2 22:48 | 只看该作者
应该用定时器直接自动取反输出,不用中断,输出12MHz都可以。
你这种情况,估计是中断耗时超过5us了。

使用特权

评论回复
地板
ayb_ice| | 2023-3-3 08:32 | 只看该作者
中断的响应是需要时间的,而且取于当前的指令执行情况,你这中断太快了,所以影响很大

使用特权

评论回复
5
kingTek| | 2023-3-3 14:03 | 只看该作者
用的哪个定时器?估计应该是每次装的值变了,24M用指令跑20M方波应该可以做到

使用特权

评论回复
6
nbsmaps|  楼主 | 2023-3-3 14:41 | 只看该作者
kingTek 发表于 2023-3-3 14:03
用的哪个定时器?估计应该是每次装的值变了,24M用指令跑20M方波应该可以做到 ...

对称方波,100KH都达不到

使用特权

评论回复
7
nbsmaps|  楼主 | 2023-3-3 15:48 | 只看该作者
dyx8899 发表于 2023-3-2 21:44
是不是指令周期没有考虑进去。先仿真试试看

仿真与直接都一样,按理说指令周期24M 高低电平没5MS好相差

使用特权

评论回复
8
GlenX| | 2023-3-5 17:20 | 只看该作者
24M的STC做US级方波,还真是有点勉强,
很多应者没有这样想:这样产生方波没有问题,但如果误差一个到几个运算周期,无论是中断影响还是CPU自身延迟耽误,
造成的误差是多少呢:1/24吗?
到底多大,算算就知道是否满足你的要求。
包括脉冲、转速测量,我见到过就没关心这个问题,那精度是多少呢,自己也不知道,只知道有时误差大。
这是做任何参与“时间”计量的项目必须严格考核的问题。

使用特权

评论回复
评论
kingTek 2023-3-30 11:37 回复TA
这位有点像当年我的伙伴,C语言凑合,但各种时序关系脑袋里是一锅粥。 
9
nbsmaps|  楼主 | 2023-3-20 16:12 | 只看该作者
GlenX 发表于 2023-3-5 17:20
24M的STC做US级方波,还真是有点勉强,
很多应者没有这样想:这样产生方波没有问题,但如果误差一个到几个 ...

24M时钟产生US级方波算1US吧,那就是500NS  STC号称比8051快24倍,那么8051 12M晶振是500NS一条指令,而这个500/24  差不多50NS一条指令没问题,有10条指令可执行,还不行,实际只有一个指令取反。而且采用PWM根本不要指令了,都是硬件产生的。

使用特权

评论回复
评论
nbsmaps 2023-3-20 17:46 回复TA
@sjnh :关键是中断要是对称方法至少那么周期我测试最小能做到12US, 小于12US全是不对称的。说明STC单片机实际24M时钟,速度没有这么快??要是用主程序关所有中断,直接取反,对称方波能做2US ,也达不到1US 
sjnh 2023-3-20 16:44 回复TA
可不是一条指令,中断要保存现场,退出中断要恢复,每操作一个变量都是占时间的,C语言编写的进中断保存的更多,恢复的也多; 
10
nbsmaps|  楼主 | 2023-3-20 17:44 | 只看该作者
coody 发表于 2023-3-2 22:48
应该用定时器直接自动取反输出,不用中断,输出12MHz都可以。
你这种情况,估计是中断耗时超过5us了。 ...

STC单片机有定时器自动取反方波吗

使用特权

评论回复
11
sjnh| | 2023-3-21 09:28 | 只看该作者
nbsmaps 发表于 2023-3-20 17:44
STC单片机有定时器自动取反方波吗

用定时器PWM方式,就是不知道你用的引脚有没有这个功能

使用特权

评论回复
12
coody| | 2023-3-21 15:48 | 只看该作者
nbsmaps 发表于 2023-3-20 17:44
STC单片机有定时器自动取反方波吗

没看过STC的手册么?每个定时器都可以自动取反输出方波(频率太快了就不要允许中断),输出方波频率=fosc/2/N,比如跑32MHz,可以输出32/2/N=16/N MHz,经常用。

使用特权

评论回复
13
coody| | 2023-3-21 15:51 | 只看该作者
比如STC8系列,定时Timer0可以从P3.5输出24/2/N的方波,N=120时,输出方波频率=24000/2/120=100KHz,N=1~65535,超级方便。

使用特权

评论回复
14
coody| | 2023-3-21 16:00 | 只看该作者
GlenX 发表于 2023-3-5 17:20
24M的STC做US级方波,还真是有点勉强,
很多应者没有这样想:这样产生方波没有问题,但如果误差一个到几个 ...

估计你没用过STC的芯片,用任意一个定时器工作于16位自动重装模式,1T模式,可以输出fosc/2/N的频率,N=1~65535,比如跑32MHz,就可以输出16/N MHz的方波频率,不占用CPU时间。

很多人对STC的MC其实都不熟悉,就是各种猜测,其实STC的MCU不错的了,速度快。
经过实际使用(早两年STM 200+一片转STC),发现很多项目都满足。

最近做的一个替代,是一个DDS芯片,米帝的DDS芯片贵得离谱,还很难买,我只用到500KHz的正弦波/方波,1Hz步进,尝试使用STC32G来做,完美解决,跑32.768MHz,输出采样达到3.2768MHz,0.001Hz步进(32位累加器),10个周期就完成DDS的处理(累加器+频率字,查正弦表输出,循环)。

使用特权

评论回复
15
coody| | 2023-3-21 16:03 | 只看该作者
nbsmaps 发表于 2023-3-3 14:41
对称方波,100KH都达不到

我经常输出10MHz左右的方波,怎么会输不出100KHz?

我用STC15W204S SOP8做的RFID读卡器,单芯片就解决了,LM358都不用,使用MCU内带的比较器恢复数据,软件解码,用定时器输出125KHz方波驱动线圈,可靠读卡距离7~8cm。

使用特权

评论回复
16
rgjinxuan| | 2023-3-21 18:57 | 只看该作者
用PWM  产生没问题的

使用特权

评论回复
17
nbsmaps|  楼主 | 2023-4-4 08:27 | 只看该作者
感谢coody与岛上称霸,STC因为用了很长时间了,一直没用到这个功能,所以就没细看资料了。现在测试一下,是可以直接在定时器引脚输出的。以前的15W好象不行,换8H 8F的都要吧了。谢谢!

使用特权

评论回复
18
nbsmaps|  楼主 | 2023-4-4 08:29 | 只看该作者
sjnh 发表于 2023-3-21 09:28
用定时器PWM方式,就是不知道你用的引脚有没有这个功能

定时方式就行了,PWM 方式因为频率一直要变,不方便

使用特权

评论回复
19
nbsmaps|  楼主 | 2023-4-4 08:31 | 只看该作者
coody 发表于 2023-3-21 16:03
我经常输出10MHz左右的方波,怎么会输不出100KHz?

我用STC15W204S SOP8做的RFID读卡器,单芯片就解决了 ...

你也是做读卡器啊,我也是,一直做不出来。想做的远距离读卡,有没有什么好的方案?关键是卡要便宜。到时项目成了,有出售的话,一起分分利润

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

39

主题

268

帖子

3

粉丝