产品概述

单片机dds 记录一下STM32做的双路DDS信号发生器模块设计过程

小编 2024-11-24 产品概述 23 0

记录一下STM32做的双路DDS信号发生器模块设计过程

前言:

最近带学生要做一个正弦波测试电源的课题,用来作为单相电表的测试电源。电表出厂的时候要校准。比如一个220V/50A的电表,电网的电压不一定是标准220v,可能是200v有时候也可能240v,这都是很正常的。再说电流,如果小功率电器,比如5w的手机充电器,那么电流大概只有0.02A,如果是一台3KW的热水器,电流大概就会有15A。所以电表出厂时要测试各种负载情况下的电压电流就不可能用固定的负载测试。在已知电压电流的情况下检查电表的读数,这就可以知道电表是否准确了。这时候就要用到交流测试电源了。

刚开始我也很困惑,根据欧姆定律电源不是可以输出电压和电流吗?怎么电压一路,电流一路呢?比如我们测试220V/50A情况下电表精度的时候不可能找一个11KW的电器接在标准的220v电压上让你去测试啊!而且下感性或容性负载情况下电流电压有相移也是模拟不了的。这样就必须有两路电源让电压和电流分别被电表芯片测量到形成功率数据。这样就是我们需要做的单相交流测试电源了!

我们正常使用电表时电压从电表的输入端会送到内部变压器进行降压整流滤波后给电表的芯片和液晶供电,另外电表内部也会有一个分压电路把220V的输入电压用电阻分压后送给电表芯片采集电压。单相表的电流采样一般会使用锰铜片作为采样电阻,电流流过锰铜片会产生压降,把这个信号送给电表芯片计算电流。

所以我们要做两路独立的电源,一路加在电表的进线端,另一路加在电表中锰铜片两端。这样没有负载,电表也可以显示电压、电流和功率数据。听到这里估计很多人都已经明白了。

来我们看一下下图单相电表的正常使用中的接法和用单相交流测试电源的接法示意图。

我们的交流测试源要求电压、电流两路隔离输出。而且电压输出是恒压,电流输出作为恒流输出。

交流测试源要求:

电压源功率20W,电流源功率20W,电压电流相互独立采用C型卧式变压器隔离;输出失真度由于0.1%;频率45.00-65.00HZ,最小步进0.01HZ,精度0.01HZ;电压输出0-220V可调,最小步进0.1%,精度0.1%;电流输出分为0-50A档,最小步进0.1%,精度0.1%;电流相对于电压的相位0-360°可调,最小步进0.01°,精度0.05°。

我们给出的方案就是用单片机产生两路频率、相位、幅值可调的正弦波信号。将正弦波信号分别送给两个功放模块然后经过变压器升压或升流。变压器有内阻,所以升压升流后的电压电流会随负载的增大而减小。此时通过电压、电流互感器采样后反馈给功放模块的前级运放做负反馈,调节负反馈的深度从而达到负载变化输出端稳定的状态。

问题的关键就在于这个信号发生器,如何用单片机产生两路频率、相位、幅值都可调的正弦波呢?首先我们想到了STM32F103RCT6单片机,它有串口、IIC接口、1路12位的DAC(2通道),并且有72M高频运行速度。这样太合适不过了。

正题:

以下部分我们主要研究STM32的信号发生器,信号发生器做好了这个项目基本就没什么问题了。首先我们分析STM32单片机12位的DAC数据是0-4095,对于0.1%的幅值步进是绝对没有问题的。72M主频,开一个360K的定时器中断来输出波形数据也是绝对没有问题的。比如要输出50HZ正弦波,360K/50=7200,就是说每个周期细分7200个数据,那么这样的正弦波的失真度绝对也是可以达到要求的。那么我们就运用FPGA课程里面学习的DDS原理,做出频率可调相位可调的波形。

接下来我们先写个固定频率的程序,输出几个不同频率的正弦波看下情况。

45HZ固定频率、100%幅值的正弦波:

50HZ固定频率、100%幅值的正弦波:

65HZ固定频率、100%幅值的正弦波:

50HZ固定频率、1%幅值的正弦波:

50HZ固定频率、10%幅值的正弦波:

50HZ固定频率、30%幅值的正弦波:

50HZ固定频率、50%幅值的正弦波:

50HZ固定频率、80%幅值的正弦波:

双通道50HZ、100%幅值、0°相位:

双通道50HZ、100%幅值、180°相位:

双通道50HZ、电压100%幅值、电流1%、0°相位:

双通道50HZ、电压100%幅值、电流10%、0°相位:

双通道50HZ、电压100%幅值、电流50%、0°相位:

双通道50HZ、电压100%幅值、电流100%、120°相位:

接下来就是如何调频了,这个缺点麻烦,不太容易理解。这里我先卖个关子,我们先继续进行实验。实验发现这个基于单片机原理的DDS信号发生器性能还是不错的,频率做到10K波形依然挺稳定。那么我们做这个信号发生器就不仅限于这个交流测试源了啊。开心!我们先把这个信号源优化一下,调整好性能参数后,以后可能其他课题项目也会用到的。那么我们重新调整一下信号发生器的参数,经测试在没有滤波的情况下2K以下的波形都是非常漂亮的。考虑到后期加滤波情况,我们将频率限制在20KHZ。考虑到多用途情况又增加了三角波、锯齿波、方波,随后看看能不能把自定义波形加里面及任意波,这个难度似乎有点大,还在思考之中!

似乎在一定程度上(低频情况)可以替代AD9850、AD9833、AD9834这种专业级的DDS芯片的。当然20KHZ以上的波形产生我们这个方案是肯定不行的。但是能替代一部分需求也是不错的,想想就来劲,开干!

最终给出新的参数:

·频率0-20KHZ,步进0.01HZ,两路波形允许输出不同频率波形;

·相位0-360°可调,最小步进0.01°,相位调节只在两路波形频率相同时生效;

·幅值0-100%可调,最小步进0.1%;

·正弦波、方波、三角波、锯齿波,四种波形可选;

·IIC、串口通信,每个芯片可以设置不同地址,以便输出多路正弦波使用。

那么我们来拟定一个通信协议吧,串口通信简单,先做串口部分吧。看下图:

/******************************************数据举例******************************************/

//地址清零

FA AF FE

//设置有返回数据

FA 00 A1 01 FE

//软复位

FA 00 A2 FE

//设置模块地址为0

FA 00 A3 00 FE

//设置通道1输出1234.56HZ,幅值1000,正弦波

FA 00 A4 01 00 12 34 56 FE

FA 00 A5 01 10 00 FE

FA 00 A7 01 01 FE

//设置通道2输出1234.56HZ,幅值1000,正弦波

FA 00 A4 02 00 12 34 56 FE

FA 00 A5 02 10 00 FE

FA 00 A7 02 01 FE

//设置通道2输出相位180°

FA 00 A6 02 01 80 00 FE

由于我不会做上位机,所以只能用串口调试助手测试,用起来还是比较麻烦的。所以希望会做上位机的网友给做一个简单的上位机吧,谢谢了!我给出一个示意图:

我先把HEX文件附上去,等IIC、自定义波形程序、上位机弄好再把源代码附上来!

记录一下STM32做的双路DDS信号发生器模块设计过程

前言:

最近带学生要做一个正弦波测试电源的课题,用来作为单相电表的测试电源。电表出厂的时候要校准。比如一个220V/50A的电表,电网的电压不一定是标准220v,可能是200v有时候也可能240v,这都是很正常的。再说电流,如果小功率电器,比如5w的手机充电器,那么电流大概只有0.02A,如果是一台3KW的热水器,电流大概就会有15A。所以电表出厂时要测试各种负载情况下的电压电流就不可能用固定的负载测试。在已知电压电流的情况下检查电表的读数,这就可以知道电表是否准确了。这时候就要用到交流测试电源了。

刚开始我也很困惑,根据欧姆定律电源不是可以输出电压和电流吗?怎么电压一路,电流一路呢?比如我们测试220V/50A情况下电表精度的时候不可能找一个11KW的电器接在标准的220v电压上让你去测试啊!而且下感性或容性负载情况下电流电压有相移也是模拟不了的。这样就必须有两路电源让电压和电流分别被电表芯片测量到形成功率数据。这样就是我们需要做的单相交流测试电源了!

我们正常使用电表时电压从电表的输入端会送到内部变压器进行降压整流滤波后给电表的芯片和液晶供电,另外电表内部也会有一个分压电路把220V的输入电压用电阻分压后送给电表芯片采集电压。单相表的电流采样一般会使用锰铜片作为采样电阻,电流流过锰铜片会产生压降,把这个信号送给电表芯片计算电流。

所以我们要做两路独立的电源,一路加在电表的进线端,另一路加在电表中锰铜片两端。这样没有负载,电表也可以显示电压、电流和功率数据。听到这里估计很多人都已经明白了。

来我们看一下下图单相电表的正常使用中的接法和用单相交流测试电源的接法示意图。

我们的交流测试源要求电压、电流两路隔离输出。而且电压输出是恒压,电流输出作为恒流输出。

交流测试源要求:

电压源功率20W,电流源功率20W,电压电流相互独立采用C型卧式变压器隔离;输出失真度由于0.1%;频率45.00-65.00HZ,最小步进0.01HZ,精度0.01HZ;电压输出0-220V可调,最小步进0.1%,精度0.1%;电流输出分为0-50A档,最小步进0.1%,精度0.1%;电流相对于电压的相位0-360°可调,最小步进0.01°,精度0.05°。

我们给出的方案就是用单片机产生两路频率、相位、幅值可调的正弦波信号。将正弦波信号分别送给两个功放模块然后经过变压器升压或升流。变压器有内阻,所以升压升流后的电压电流会随负载的增大而减小。此时通过电压、电流互感器采样后反馈给功放模块的前级运放做负反馈,调节负反馈的深度从而达到负载变化输出端稳定的状态。

问题的关键就在于这个信号发生器,如何用单片机产生两路频率、相位、幅值都可调的正弦波呢?首先我们想到了STM32F103RCT6单片机,它有串口、IIC接口、1路12位的DAC(2通道),并且有72M高频运行速度。这样太合适不过了。

正题:

以下部分我们主要研究STM32的信号发生器,信号发生器做好了这个项目基本就没什么问题了。首先我们分析STM32单片机12位的DAC数据是0-4095,对于0.1%的幅值步进是绝对没有问题的。72M主频,开一个360K的定时器中断来输出波形数据也是绝对没有问题的。比如要输出50HZ正弦波,360K/50=7200,就是说每个周期细分7200个数据,那么这样的正弦波的失真度绝对也是可以达到要求的。那么我们就运用FPGA课程里面学习的DDS原理,做出频率可调相位可调的波形。

接下来我们先写个固定频率的程序,输出几个不同频率的正弦波看下情况。

45HZ固定频率、100%幅值的正弦波:

50HZ固定频率、100%幅值的正弦波:

65HZ固定频率、100%幅值的正弦波:

50HZ固定频率、1%幅值的正弦波:

50HZ固定频率、10%幅值的正弦波:

50HZ固定频率、30%幅值的正弦波:

50HZ固定频率、50%幅值的正弦波:

50HZ固定频率、80%幅值的正弦波:

双通道50HZ、100%幅值、0°相位:

双通道50HZ、100%幅值、180°相位:

双通道50HZ、电压100%幅值、电流1%、0°相位:

双通道50HZ、电压100%幅值、电流10%、0°相位:

双通道50HZ、电压100%幅值、电流50%、0°相位:

双通道50HZ、电压100%幅值、电流100%、120°相位:

接下来就是如何调频了,这个缺点麻烦,不太容易理解。这里我先卖个关子,我们先继续进行实验。实验发现这个基于单片机原理的DDS信号发生器性能还是不错的,频率做到10K波形依然挺稳定。那么我们做这个信号发生器就不仅限于这个交流测试源了啊。开心!我们先把这个信号源优化一下,调整好性能参数后,以后可能其他课题项目也会用到的。那么我们重新调整一下信号发生器的参数,经测试在没有滤波的情况下2K以下的波形都是非常漂亮的。考虑到后期加滤波情况,我们将频率限制在20KHZ。考虑到多用途情况又增加了三角波、锯齿波、方波,随后看看能不能把自定义波形加里面及任意波,这个难度似乎有点大,还在思考之中!

似乎在一定程度上(低频情况)可以替代AD9850、AD9833、AD9834这种专业级的DDS芯片的。当然20KHZ以上的波形产生我们这个方案是肯定不行的。但是能替代一部分需求也是不错的,想想就来劲,开干!

最终给出新的参数:

·频率0-20KHZ,步进0.01HZ,两路波形允许输出不同频率波形;

·相位0-360°可调,最小步进0.01°,相位调节只在两路波形频率相同时生效;

·幅值0-100%可调,最小步进0.1%;

·正弦波、方波、三角波、锯齿波,四种波形可选;

·IIC、串口通信,每个芯片可以设置不同地址,以便输出多路正弦波使用。

那么我们来拟定一个通信协议吧,串口通信简单,先做串口部分吧。看下图:

/******************************************数据举例******************************************/

//地址清零

FA AF FE

//设置有返回数据

FA 00 A1 01 FE

//软复位

FA 00 A2 FE

//设置模块地址为0

FA 00 A3 00 FE

//设置通道1输出1234.56HZ,幅值1000,正弦波

FA 00 A4 01 00 12 34 56 FE

FA 00 A5 01 10 00 FE

FA 00 A7 01 01 FE

//设置通道2输出1234.56HZ,幅值1000,正弦波

FA 00 A4 02 00 12 34 56 FE

FA 00 A5 02 10 00 FE

FA 00 A7 02 01 FE

//设置通道2输出相位180°

FA 00 A6 02 01 80 00 FE

由于我不会做上位机,所以只能用串口调试助手测试,用起来还是比较麻烦的。所以希望会做上位机的网友给做一个简单的上位机吧,谢谢了!我给出一个示意图:

我先把HEX文件附上去,等IIC、自定义波形程序、上位机弄好再把源代码附上来!

相关问答

ddsf242型单相电子式多费率电能表的各种详细功能

ESAM是嵌入式安全模块(EmbeddedSecureAccessModule)的简称。目前在我国,嵌入式安全模块主要应用在水、电、气三表中。为使用IC卡作为预付费的三...

设计并实现一个锯齿波发生器电路?

有好多方案呢一,用现在流行的DDS芯片,比如AD9833之类的二,用专用信号发生器比上面的DDS强大一些比如MAX038,ICL0803三,如果非要用集成运放来实现,加稳压...

1ma恒流源电路原理?

1ma恒流源电路的原理是以一定频率连续从EPROM中读取正弦采样数据,经D/A转换并滤波后产生EIT所需的正弦信号。采用DDS集成芯片AD9830,其内部有两个12位相位寄...

有没有参加过电子设计大赛的学长学姐分享一下心路历程,注意事项。呆萌小学弟想参加?

先回答几个问题:你想参加哪个组别(电源,仪器仪表,控制,模拟射频,其他)你擅长什么编程(单片机编程,电路设计(电源射频普通pcb绘制...fpgaverilo...

帮忙答一下,专业的单相电子式预付费电表生产厂家,单相电子...

[回答]将预购电量或金额写入电子卡(存储器)中,交给用户持电子卡到对应电表上进行通讯,预购值自动送入电表中。DDSY483单相电子式预付费电能表是以全数字化...

大仙们 能问一下,台州电加热蒸汽发生器的供应商,电加热蒸...

[回答]对比了好几家,尔尔服装机械无论是在产品介绍、还是销售咨询服务都有良好的体验,性价比也挺高的。负离子发生器是一种生成空气负离子的装置。大小和...

在电子电路方面工作的,应当学习那些技能,并且往哪个方向发...

dds信号发生器,4位半数字万用表,加起来估计要6000以上了。一般人供不起。其他...走软件硬件结合的话,就业范围大,最主要的是学好单片机、嵌入式、汇编、C、模...

想问下:便携式里氏硬度计怎么用?

凡能使超声波以一恒定速度在其内部传播的各种材料均可采用此原理测量。超声波测厚仪按工作原理分:有干涉法、共振法及脉冲反射法等几种,由于脉冲反...

合肥数控车床该怎么操作?

数控车床首先你要知道编程,然后了解开机,再了解里面怎么操作,了解fanuc的G代码和M代码,对刀的输入,还有操作面板数控技术也叫计算机数控技术,目前...

充电器的恒流功能与过流保护有什么不同?-ZOL问答

恒流功能是在充电时为了保护电器而稳定电流的功能,而过流保护是在电器充满电之后防止过充自动停止充电的功能。过电流发生开始至热敏电阻动作完成...

猜你喜欢