目录
既然已经选择了单片机实现方案,这里我们只讨论前两个主要困难。
前言
由于之前的期末考试周、电赛的初选和培训停更了较长的一段时间。那么今天想跟大家分享的是基于STM32的移相波形输出,如果你觉得这篇文章对你有所帮助,还请多多支持。如果有错误的话也请直接指出!事不宜迟,我们马上开始!!
一、基本知识储备
1.什么是移相
(1)移相,顾名思义就是调整波的相位。这个实现起来非常简单,只需要两个“振动”频率相同的“振动源”间隔适宜的时间起振即可。这个时间间隔只要不是周期的整数倍即可。
2.我们移相的目的
(1)我们移相不是为了移相,而是有着很多必要的其他目标,比如:我们想固定偏移某个确定的相位(最好可算可调),并在一个示波器上稳定同屏显示,进而方便接下来的一系列操作。下面也将以这个目标为例展开说明。
二、遇到的主要困难
1.会发生波形漂动
(1)原因:实际上单片机的晶振也不是绝对准确的(如果是内部的RC振荡电路导出的频率更不准,其受温度的影响大,迫不得已使用时需要引入温度补偿),这样就使得其产生的波形在于相对准确的波形(如信号发生器产生的波形)同频显示时两者之间的相对频率误差会随着时间不断累积,最终肉眼观察的现象就是发生波形漂动,即显示的两波形无法保持相对静止。
2.单片机处理同样需要时间
(1)在处理相对低频的信号时单片机依旧游刃有余,但是参考波的频率一高(比方说达到100KHZ),此时单片机的处理时间反映在示波器上就是多移动了一段相位。这样的话很可能使得对于相位精确度的指标无法达成。
3.单片机本身的局限
(1)单片机的主控是CPU,其工作原理上是单线程顺序执行的,在引入RTOS(实时操作系统)后可以近似看做并行执行(实际上是单线程乱序执行)。但是单片机的性能实在是太有限了,在针对高频信号的捕捉和输出方面乏力。尤其在需要频繁进入中断的情况下,软件资源被大量消耗,想要进行多功能程序的编写非常困难。
4.单片机DAC外设的局限性
(1)在输出PWM波的时候单片机可以轻松的胜任,但是在输出模拟信号时单片机的DAC输出波形的缺点在高级一些的示波器面前便暴露无遗——你可以看到像楼梯一样排列的方波。如果你对于单片机输出波形的平滑度或者美观度有着较高的需求,还是需要慎重考虑的。也可以考虑进行后期的一些处理。
三、解决方案
既然已经选择了单片机实现方案,这里我们只讨论前两个主要困难。
1.如何解决波形漂动
我们前面谈到,波形漂动的来源是单片机晶振的相对误差。我们从此入手,可以考虑使用一个更加准确的外部晶振,也可以只保留一个基准振动源(我个人更推荐后面这个,这个几乎可以完全消除误差,毕竟是一个娘生的)。
具体一点讲,以下是我的实现方案(以PWM波为例):
保留外部的信号发生器发生波形作为基准波形,对其进行移相操作。此时我们可以对单片机的指定GPIO口配置中断(我一般配置外部上升沿触发中断)。这样的话我们每一次监测到外部信号的上升沿就立即调整单片机自身TIMx内部的CNT与ARR的关系,从而实现移相。
当然,这个方法最致命的缺点就是频繁进入中断,还是按照实际情况来吧。此方法来源于南邮的张学长以及蒋学长的授课,仅供参考。
2.如何解决多出来的一段相位
这个其实可以结合示波器的坐标轴不断调整相位的取值,从而试出这一段的长度,进而消除误差。打个比方,将原本的ARR*360/
换成ARR*360/
/0.98