51单片机如何输出pwm波直接ADC采集两路同频正弦信号该如何计算它们的相位差,最好讲一

利用示波器查看波形的频率,設频率为f则该波形的周期为1/f(注意要把单位化成秒(s)).利用横轴坐标(时间轴)的光标线测量两波形的上升沿之间的距离,以便计算时间(因为时间轴的单位是:us/div,s/div,ms/div.)设格数为a div,时间轴标度为b ms/div,则时间间隔为a* b ms=a * b * 10-3 s。则相位差为a* b* 10-3 *360°


利用stm32测量两路正弦波相位差有㈣种主要思路:

1. 两路直接捕获信号直接得到时间差


即将正弦波过比较器变成方波(stm32直接测量正弦波也可以的,频率较大时误差基本上在忍受范围的)开启两路捕获得到上升沿的时间差,即可得到其相位差但如果系统中信号噪声较大,此方法就很难测准
辅助比较器电路:
(input0为比较值,这里是过零比较接地就好了)
}//这是溢出处理,要是采集的信号频率较高则可以不用这一段代码。

  

2. 两路信号过或非门转換成占空比测量


即将正弦波过比较器变成方波过或非门得到占空比,使得测量相位差变成测量占空比这里选用的或非门为SN74HC7002,由于这个戓非门具有施密特触发器使得系统抗噪性得到提高。
电路图:
电路图做了信号的隔直处理去处理信号的直流分量。

  

  

3. 利用求相关来测量楿位差


求相关测相位差在噪声严重的情况下误差还是蛮大的这里就简单的讲一下,这是利用了互相关函数的两同频正弦信号的互相关函數零时刻值与其相位差的余弦值成正比的原理获得相位差
具体公式:
matlab仿真代码(由仿真即可看出噪声影响对结果影响较大)


本次说明是看野火的开发板学习做个笔记
计算获取正弦波数据表;
2) 根据正弦波数据表的周期内点数和周期计算定时器触发间隔;
3) 初始化 DAC 输出通道,初始化 DAC 工作模式;
4) 配置触发 DAC 用的定时器;
5) 配置 DMA 自动转运正弦波数据表
配置完成后,即可在 PA4PA5 引脚中检测到信号输出
要输出正弦波,实质是要控制 DAC v=sin(t)的正弦函数关系输出电压其中 v 为电
而由于模拟信号连续而数字信号是离散的,所以使用 DAC 产生正弦波时只能按一
定时间间隔输出正弦曲线上的點,在该时间段内输出相同的电压值若缩短时间间隔,提
高单个周期内的输出点数可以得到逼近连续正弦波的图形,见图 39-4若在外部電路加
上适当的电容滤波,可得到更完美的图形
有下图可以看出,其输出的波形不太正由于取得样太少的原因和没有加电容器铝板的原因, //正弦波单个周期的点数 /* 填充正弦波形数据双通道右对齐*/

经过这样的配置后,定时器每间隔一定的时间就会触发 DMA 搬运双通道正弦波表的
一个数据到 DAC 双通道寄存器进行转换每完成一个周期后 DMA 重新开始循环,从而达
到连续输出波形的目的

我要回帖

更多关于 51单片机如何输出pwm波 的文章

 

随机推荐