一、前言
这是昨天制作的STM32单片机测试电路板。下面对于它输出PWM功能进行测试。利用RC低通滤波器对PWM信号进行滤波。这样可以获得一个由 PWM 占空比控制的 DAC 输出。下面对于如何降低RC滤波之后的波纹进行实际测量。
二、基本测试
设置单片机使用外部晶体,单片机工作的时钟频率为 72MHz。设置TIM4输出两个通道。它的16bit 计数器,周期为 0x10000 。
软件中启动 TIM4 的 PWM 功能。根据单片机的始终频率以及PWM定时器的设置。可以计算出PWM波形的频率。 对应 1098.6Hz。通过示波器观察,可以看到输出的PWM波形频率正是 1.098kHz。展开波形,观察 2000 对应的高电平时间, 根据PWM 设置参数,可以计算出对应的高电平的时间为 27.78微秒。示波器光标测量,对应PWM脉冲高电平为 27.85微秒,与参数计算结果相符。下面搭建RC低通滤波电路。
设置TIM4的 PWM 第二个通道输出极性取反,可以看到第二个通道输出极性反向了。利用 CCR 寄存器,分别设置两个通道占空比,这里设置两个通道 CCR 都是 0x2000,对应 八分之一的占空比。两个输出的PWM一正一反,这是因为它们的极性一个高电平,一个是低电平。
三、RC低通滤波
使用一个电阻和一个电容给输出PWM信号进行滤波。电阻为 10k欧姆,电容为 0.1微法。对应的时间常数为 1ms。经过RC滤波之后,信号变成了直流信号 。不过还能够看到信号还存在着波动。在 八分之一占空比是,使用数字万用表的交流档测量信号中的交流电压的有效值 102mV。交流分量的大小随着占空比不同发生变化。
测试不同占空比下,输出直流电压中的交流分量。可以看到在占空比为 50% 时,输出信号中的交流分量最大。
▲ 图1.3.1 PWM占空比对应的输出交流电压
四、反向补偿
为了降低RC滤波中的交流分量,可以利用两路PWM,它们输出极性相反。 这样在第一个输出低通滤波的基础上, 利用RC耦合到第一路输出,由于它的极性相反,所以可以中和前面输出信号中的交流分量。
这是没有补偿前,在 占空比50% 时,RC低通滤波输出的信号。加上反向补偿之后,输出信号中的交流分量大大降低了。
下面对于补偿RC回路中的电阻R2,通过可编程电阻箱进行电阻扫描,从 9kΩ,变化到 11kΩ,查看一下当 R2 变化到多少时,输出信号中的电压达到最小。通过测量结果来看,当R2 达到 10kΩ时,补偿信号中的交流信号达到最小。另外,结果显示这个补偿电路无法将输出信号中的交流完全抵消。
▲ 图1.4.1 补偿电路中R的大小对于交流电压的影响
设置不同的占空比,使用数字万用表测量RC滤波后中交流分量的有效值,同样,可以看到在 50%占空比的时候,输出交流分量达到最大。对比没有补偿和有补偿情况下,可以看到经过补偿之后,信号中的交流分量降低到原来的 14% 左右。
▲ 图1.4.2 经过补偿之后,在不同占空比下叔叔信号的交流分量
▲ 图1.4.3 没有补偿和有补偿下不同占空比对应的输出交流信号
※ 总 结 ※
本文通过实验测试了应用互补的两路PWM输出,有效抑制RC低通滤波之后直流分量中残余的交流分量。置于为什么没有能够完全消除交流分量,后面还需要进行理论分析。不过,能够将交流分量消除 八倍以上,这种利用互补PWM抑制输出中波动的方法还是非常有效的。那么,是否有可能利用互补的PWM将输出信号中的交流分量完全消除呢?
参考资料
[1]STM32的IO口到底可以吸收和释放多大的电流?: https://blog.csdn.net/zhuoqingjoking97298/article/details/135919408
[2]STM32的单片机测试电路板: https://blog.csdn.net/zhuoqingjoking97298/article/details/135913547?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22135913547%22%2C%22source%22%3A%22zhuoqingjoking97298%22%7D