嵌入式分享合集11

一、直流电压有效值

电压的有效值是多少?

    最近遇到好多问题,都与基本概念相关。忍不住,就想多说几句。

    研究生面试,我出了一个问题,一个100kHz的方波信号,幅度大约是几伏的数量级,想测量其有效值,用什么仪器,怎么测?多数学生一脸茫然,搞的我不好意思,惭愧题目是不是太难了。我急了,问学生,一个1.5V的电池,其电压有效值是多少?学生问我,直流量有有效值吗?我忍。我不得不忍。

    什么是有效值?一个变化电压的有效值,是指把它加载到一个确定的阻性负载上,在一个周期内的功,与电压为A的直流量作用在相同的负载上,在等长时间内的功相同,那么该变化电压的有效值就是A。广义理解,一个电池的电压有效值就是1.5V,一个幅度为A的方波,如果是单极性方波,占空比50%,有效值为幅值A的0.707倍。这时候,又有人问我,什么是方波啊?

    以前的一个学生,参与的一个题目,用一个10欧姆电阻把一个待测的1uA左右的电流转变成10uV左右的电压,然后用AD620和多级直流放大进入ADC,却发现输出总有很大的偏移量。于是就买了好些个放大器,挑选,想让偏移量小些。查查资料就知道,AD620A级的输入失调电压典型值为30uV,最大值为125uV,已经远大于被测信号10uV。至少应该知道,此处使用被大家广为推崇的AD620是不靠谱的。

    但是,设计者就是不知道这个道理。

    昨晚我的学生来聊天,问我,学这些基础有用吗?其实,不用问我,问问歌唱演员就可以了,问他们,吊嗓子重要吗?问问厨师,刀工重要吗?

    现阶段,很多比赛都是些花里胡哨的作品,很吸引眼球,功能也很强悍。但是面对这些竞赛的孩子,你就是不能问他们问题,一问就露馅了——底子很薄,但成果很强。就像以“满汉全席”夺得厨师大赛冠军一样,回家后做不好一个炒土豆丝。

    所以,我特别希望能多一些比赛,就赛那些基础的东西。比如12V电源,谁能做出动态范围最大的单管放大器,或者做一个最准的电子秤,就比这些指标。噪声最小、频带最宽、带内最平坦、失真度最小、温度稳定性最好等等,可以研究的东西很多。

    但很遗憾,谁也不会对此感兴趣。就比赛一个放大器,外行看起来一点都不拉风,没劲透顶了。

    可是看看身边现状,看看某些日益堕落的教师和学生,好大喜功的媒体,谁能救救我们的基础教育,谁能把孩子们拉回来,静静地在实验室做一些看似枯燥,却蕴含玄机的实验?

下面科普基本概念

一、基本概念:

    交流电的有效值:

    在相同的电阻上分别通以直流电流和交流电流,经过一个交流周期的时间,如果它们在电阻上所损失的电能相等的话,则把该直流电流(电压)的大小作为交流电流(电压)的有效值,正弦电流(电压)的有效值等于其最大值(幅值)的0.707倍。

    交流电的平均值:

    对于交流电来说,数学上的平均值是0(因为是正负是对称的)。但电工技术上我们关心的是其量值(绝对值)的大小。所以电工技术上的平均值指的是电流(电压)的绝对值在一个周期内的平均值。

二、例子:

    1、10V的直流电压加在10Ω电阻的两端,电阻的发热功率是多少?

    这个答案很简单,坛里所有的朋友都会:P=U×U/R=10V×10V/10Ω=10W

    2、如果把上面的10V直流电压改成下图±10V的方波呢,电阻的发热功率又是多少?

    答案是否也不难?因为负半周时电压的平方和正半周时是一样的,所以功率也和上面一样还是10W!

    电压是负的功率还是正的,也就是功率和电压的正负无关。

    图中红色部分是正半周做的功,蓝色部分是负半周作的功。

    问:这个±10V的方波电压的平均值是多少?有效值是多少?峰值是多少?

    根据上面的定义,很明显:

    ①平均值是10V(其电压的绝对值在一个周期内的平均值是10V);

    ②有效值是10V(发热功率相同的等效直流电压是10V);

    ③峰值是10V

    3、如果把上面的方波去掉负半周部分(也就是+10V方波),那电阻上的功率又会是多少呢?

    很明显,只有一半时间在做功,从宏观上看其平均功率只有一半了,也就是5W!

同问:这个+10V的方波电压的平均值是多少?有效值是多少?峰值是多少?

    根据上面的定义,很明显:

    ①平均值是5V(其电压的绝对值在一个周期内的平均值是5V);

    ②有效值是7.07V:(发热功率相同的等效直流电压是:U^2=PR=5W×10Ω,U=根号50≈7.07V);

    ③峰值是10V

    可见:去掉负半周后其电压的平均值是原来的一半,而有效值并不是原来的一半,而是原来的0.707倍!峰值不变。

    以上为了便于理解,用了方波做例子计算。

    如果用正弦波,那么就需要有高等数学的微积分知识,对于某些朋友可能理解困难。

    事实上为什么正弦交流电的峰值和有效值之间是根号2倍的关系,以及平均值之间的关系等都是通过积分计算得出的,对于非正弦波其关系就不一定相同了,所以千万别乱套用。

    对于正弦波现在我们可以用有效值相同的方波去等效,那么也可以得出这样的结论:半波整流后的电压有效值是整流前的有效值的0.707倍,而并不是有些朋友理解的一半。

二、SMT32的HEX文件里加入固件版本的方法

使用MDK编译器,让STM32程序HEX文件中加入固件版本信息。

代码

    代码如下:

   延庆川北小区45孙老师 收卖废品破烂垃圾炒股 废品孙 再回收

//------------------------------------------------------------------------------#include <absacc.h>
//------------------------------------------------------------------------------#define VERINFO_ADDR_BASE   (0x8009F00) // 版本信息在FLASH中的存放地址const char Hardware_Ver[] __attribute__((at(VERINFO_ADDR_BASE + 0x00)))  = "Hardware: 1.0.0";const char Firmware_Ver[] __attribute__((at(VERINFO_ADDR_BASE + 0x20)))  = "Firmware: 1.0.0";const char Compiler_Date[] __attribute__((at(VERINFO_ADDR_BASE + 0x40))) = "Date: "__DATE__;const char Compiler_Time[] __attribute__((at(VERINFO_ADDR_BASE + 0x60))) = "Time: "__TIME__;
//------------------------------------------------------------------------------

    写入到程序中:

    选项配置中:Flash地址与大小不用做任何修改!

    HEX文件:

    串口打印输出:

上述方法的缺点

    上述操作可行, 但是有一个缺点:就是生成的bin文件都是满flash大小的, 造成每次烧录都是整个flash读写。相关文章:详解STM32在线IAP升级

    其实这个可以把存放地址放到前面,比如偏移1K的地方,都不用改指定地址。

    按照上述操作,程序末尾到VERINFO_ADDR_BASE地址这一段会被填充成0x00。根据需要可以修改VERINFO_ADDR_BASE减小地址,或者说不强制指定地址,由编译器自动分配,但这样就要去找相应的版本标识字符串了。

whaosoft aiot http://143ai.com

优化方法

    不想前面这一段被大量填充0x00,让HEX文件体积小一点的话, 可以把选项配置中Flash的Size改小一点,把VERINFO_ADDR_BASE设置成从FlashSize后面的空间开始,这样生成的HEX文件就小了,且未用空间就不会被大量填充0x00了。

    方法如下:

猜你喜欢

转载自blog.csdn.net/qq_29788741/article/details/125747554