我想生成相位差为 100ns 的 3 个 1MHz 波!使用 OC 模式生成它们是否准确?我的意思是我可以通过增加 OC 来做到这一点,小步增加 3 次,大步增加 4 次,然后继续这个,在每个 ISR 中切换一个 I/O 端口(总共 3 个 I/O 端口正在切换) 但我的问题是这个过程是否准确?!或者在这个过程中有一些时钟丢失了?!
2 回答
您可能需要查看微控制器的 PWM(脉冲宽度调制)功能。您可以使用它来设置这些波:即使您需要通过不同的计时器单元运行它们,因为计时器可能由相同的源(您的微型振荡器的振荡器)提供时钟,您可能有办法同步它们这种方式。
100ns 是很短的时间。你需要一个 10MHz 的振荡器才能打勾。如果您的微控制器每个周期可以执行一个操作,并且您想直接勾选它,那么您需要在后续指令中切换三个引脚(每个都需要 1 个周期)。这是可能的,但需要非常仔细的设计。中断等对于 100ns 来说是毫无疑问的,但是您可以巧妙地利用它们来安排引脚更改任务。你如何做到这一点取决于你到底想要实现什么。
(我曾经不得不从带有 40MHz PIC 的 1.5MHz 微型总线上窃取数据,该 PIC 在 4 个周期内执行一次操作,该数据仅可在 300ns 内采样。我可以改变它并且工作正常 - 所以这个引脚改变了业务当然也是可以的,只是需要非常仔细的设计)
不会。但是 OC 生成的波形本身是精确的,并且与您的程序的执行无关,但延迟并非如此。想想语句长度。然而,大多数语句都是 1 个周期长,其中一些更长,并且在多周期语句的中间可能不会发生中断。基于 OC 的时序不同,它是由定时器硬件执行的,因此它甚至可能发生在多周期语句的中间。总结答案:您的主要波形将是正确的,但延迟会抖动。