michaelli594 发表于 2022-11-5 12:01:19

STC15F2K60S2的IO翻转速度能精确控制在204.8kHz吗

本帖最后由 michaelli594 于 2022-11-5 17:11 编辑

单片机型号是STC15F2K60S2,外部晶振11.0592MHz
想实现某一个IO口进行快速翻转,速度控制在20.48kHz到204.8kHz的范围内。

要求频率调节步进为1hz,误差在0.1hz内,请问能实现吗


试过用16位重装载的定时器直接输出时钟,好像速度能上去,但是精度误差达不到
另外PCA的高速脉冲有人试过吗,有用过的大哥讲下不
感激不尽{:cry:}

矩阵时间 发表于 2022-11-5 12:48:44

可以用 12.288MHz 的频率来试试,或者用 24.576MHz。这两种标称频率,好分频,也好买到

michaelli594 发表于 2022-11-5 15:11:14

矩阵时间 发表于 2022-11-5 12:48
可以用 12.288MHz 的频率来试试,或者用 24.576MHz。这两种标称频率,好分频,也好买到 ...
(引用自2楼)

刚刚说错了要求误差,现在更新了,24.576Mhz估计做不到吧?而且还分频?

MYQQ2021 发表于 2022-11-6 08:04:19

频率调节步进为1hz,这个做不到
误差在0.1hz内,这个某些频点能做到,就看晶振准不准了

t3486784401 发表于 2022-11-6 08:16:06

我帮 LZ 算一下为啥不行(假如不用PLL):

需要用 11M 左右的基础频率,生成 0.2k-20k 的方波频率。生成过程(无论用定时器还是软件计数)就是分频,调整分频系数获得不同频率。

在 0.2k 位置,分频系数= 11M / 0.2k = 55k
在 20k 位置,分频系数= 11M / 20k = 0.55k

受限于数字化硬件,在不使用 PLL、不使用闰秒机制的情况下,分频系数只能是整数。
所以在 20k 位置,分频系数每调整一格,相当于调整了 1/550,对应频率变化 20k/550= 36 (Hz),远远超过 LZ 要的 1Hz 步进。

-----------------------------------------------------------------

回到 LZ 的要求,如果能给用 PLL 应该是个什么结构?

在 20k 位置,要求分频系数不能小于 20k,才能达到 1Hz 步进。此时主频大约为 20k * 20k = 400M (Hz).
也就是你首先得用 PLL 获得一个 400MHz 的基频,然后再分频回 20k,才能有 1Hz 的步进

michaelli594 发表于 2022-11-6 16:45:55

本帖最后由 michaelli594 于 2022-11-6 16:47 编辑

t3486784401 发表于 2022-11-6 08:16
我帮 LZ 算一下为啥不行(假如不用PLL):

需要用 11M 左右的基础频率,生成 0.2k-20k 的方波频率。生成过 ...
(引用自5楼)

赞,那么调整步进在30hz,误差范围在10hz内应该也不能做到吧。而且我还需要并口赋值输出正弦码表呢{:mad:}

michaelli594 发表于 2022-11-6 17:03:55

t3486784401 发表于 2022-11-6 08:16
我帮 LZ 算一下为啥不行(假如不用PLL):

需要用 11M 左右的基础频率,生成 0.2k-20k 的方波频率。生成过 ...
(引用自5楼)

不过我和你想的方式不大一样,我是算的在高频率的时候,增减1-50hz,直接计算周期的变化,发现周期的变化差值远小于晶振周期,直接就判定为不可行,分频的方向我倒是没考虑

t3486784401 发表于 2022-11-6 17:25:24

michaelli594 发表于 2022-11-6 16:45
赞,那么调整步进在30hz,误差范围在10hz内应该也不能做到吧。而且我还需要并口赋值输出正弦码表呢{:mad: ...
(引用自6楼)

io 翻转只能输出方波。分频的结果我一开始也写了,只能是方波;要输出正弦,肯定是要细分查表的:

a. 如果按照定速查表,和之前的分频一样,20k 处需要把一个正弦周期细分为 20k 个取样点,最低查表速度 400MHz;

b. 如果按照变速查表,基本没法确保步进,多一格少一格巨大的频率步进就过去了;

怀疑 LZ 要自制 DDS,却又没啥证据

t3486784401 发表于 2022-11-6 17:34:49

michaelli594 发表于 2022-11-6 17:03
不过我和你想的方式不大一样,我是算的在高频率的时候,增减1-50hz,直接计算周期的变化,发现周期的变化 ...
(引用自7楼)

其实再往下推会有一样的结论:

发现周期变化远小于晶振 -> 试图提升频率,使晶振周期能适配该周期变化 -> 算得 fosc 不小于 400M

michaelli594 发表于 2022-11-6 17:50:29

t3486784401 发表于 2022-11-6 17:25
io 翻转只能输出方波。分频的结果我一开始也写了,只能是方波;要输出正弦,肯定是要细分查表的:

a. 如 ...
(引用自8楼)

哈哈,你猜对的,只不过同事硬是说这方案能做到400hz每周期256个点输出,而且还是并口查表输出。我寻思怎么也搞不了,只靠51输出这么快这么精确的周期,理论上根本做不到嘛

wanggoals 发表于 2022-11-6 19:24:11

感觉你这个要求应是STC+DDS,或者FPGA+D/A才能干的事情。

michaelli594 发表于 2022-11-6 21:52:10

wanggoals 发表于 2022-11-6 19:24
感觉你这个要求应是STC+DDS,或者FPGA+D/A才能干的事情。
(引用自11楼)

产生波形的芯片是ad5424,这个没啥问题,就是mcu这边的输出精度达不到

小李非刀 发表于 2022-11-8 17:37:43

STC15系列。
如果是定时器自动重装输出高速时钟(不要允许中断),则输出最好时钟为 fosc/2,比如fosc=12MHz,则定时器可以输出最高6MHz的方波。
如果是IO翻转,则取反IO要3T,短跳转要3T,IO输出最高频率为fosc/12。

小李非刀 发表于 2022-11-8 17:41:35

楼主使用外部晶振2.048MHz、4.096MHz、8.192MHz、16.384MHz、32.768MHz、10.24MHz或20.48MHz均可以做到。
页: [1]
查看完整版本: STC15F2K60S2的IO翻转速度能精确控制在204.8kHz吗