-
@gmchen
用开关电容滤波器合不合适?
-
LZ 考虑下单稳态触发器能不能满足要求。
-
R3 换成电压跟随器是正解。
射极跟随器成本低,但不适合量产,因为需要逐个进行校准;
运放跟随器成本高一点,但适合量产。
-
参考 COB (Chip On Board) 制造过程。
How Chip-On-Boards are Made:
https://learn.sparkfun.com/tutorials/how-chip-on-boards-are-made/all
-
本帖最后由 Jack315 于 2024-6-20 15:46 编辑
当把 LM328 :( 作为理想运放考虑时的传递函数为:
-
由于电源滤波电容的存在,在第一次上电的时候(电容上电压为零),
正常的上电波形应该是电压从零逐渐上升到正常的供电电压。
这个波形显示的是从 5V (电容上电压不为零)逐渐充电(放电)到 1V 不到,
然后突然回到正常供电电压。应该不是个正常的上电波形。
所以推断电路很可能有异常。检查下电路的连接、电路中的器件……等是否都正常。
如果方便的话,还是把电路图,甚至实物图片放上来看看。
有些问题是要在细节里才能发现的。
-
【数据处理和CORDIC 算法】
CORDIC 算法是一种高效的定点小数三角函数计算方法,可同时得到正弦和余弦的值。
如果数据处理主要涉及三角函数的计算,如 FFT,则可以考虑使用 CORDIC 算法。
总之,将数据存储和处理分开进行,利用适当的数据压缩和处理技术,64 KB 的 RAM 是应该能够应付得过来的。
-
【ADC 数据压缩】
一个 ADC 数据是 12 位,如果是用 3 个字节存储,则一秒的数据共 30 KB * 1.5 = 45 KB。
如果数据是缓慢变化的信号,如电池电压,则第一个数据保存实际的 ADC 值,后续用 4位或 8 位保存增量。则一秒的数据需要约 15KB ~ 30KB。
如果数据是已知周期的周期信号,则第一个周期保存实际的 ADC 值,后续周期用 4位或 8 位保存相同相位的增量。则一秒的数据同样只需要约 15KB ~ 30KB。但若周期不稳定,这个方法可能会有问题。
数据压缩的思想就是不保存特定值,如 0;或将重复的数据用更少的字节来表示,如连续 100 个 0x55 接连续 100 个 0xAA,可以用 0x64, 0x55, 0x64, 0xAA 来表示。
如果有必要,浮点数的存储也同样有潜力可挖。总之是用时间换空间的思路。
-
wyyyyy0518 发表于 2024-5-16 14:53
具体就是想定义两个数组用于存储采集的数字量和转换后的模拟量,用于后续的数据处理。数据采样率可以达到 ...
采样率 30 KSa/s,一个数据 16 位(12 位 ADC),一秒的数据共 60 KB。
如果数据处理可以使用定点小数,则不需要 float 数组,甚至有可能将所有 ADC 数据放在一个 uint16_t 的数组里。
另外一种可能的方法是将两个大数组用 union 定义,使得 int32_t 数组与 float 数组共享同一块 RAM。这样 RAM 使用量就可以降低一半,而数组的大小就可以从 8000 扩大到 16000。只是不知道这个大小的数组是否够用。
-
解决的方法与具体应用有关。
LZ 能否描述下这两个大数组的使用过程?
先放个网上的资源,不一定对路。
STM32内部RAM不够怎么办?
https://blog.csdn.net/linsp1314/article/details/113538672
-
电容在通交流电时也会产生机械应力,
只是这种机械应力导致失效不多见。
建议手工焊接几块板子,视故障率大小一般做 5~30 个样品。
然后通电试验。如果一样失效,则基本可以判断为设计问题。
否则大概率是工厂焊接的问题(但仍不能排除设计问题)。
在这种情况下,需要到工厂检查工艺参数。
如用两条产线进行生产,然后比较相关工艺参数与失效率数据查找原因。
-
单片机内部 ADC 的等效电路也是一个 RC 电路。
和外部的 RC 电路一起可能被分压了。
【建议】
1. 将跟随器换成一个有源低通滤波器。
这个滤波器的输出阻抗与跟随器一样很小。
其作用是滤除进入 ADC 噪声。
一般来说,温度是一个接近直流的信号,
因此,低通滤波器的截止频率要低,阻带衰减要足够大。
2. 有了这个低通滤波器后,就可以取消 RC (R10、C1)网络。
这样就没有可能的分压效应了。
如果电路形式不改,就需要结合单片机内部电路,
确定外部合适的 RC 值。
如果不是这个原因,再另外讨论。
-
估计是电源的接法有问题。
单电源三角波发生器:
实际电路中给 Vcc 并个 100nF 的电容差不多就行了。
在单电源运放电路中,提供一个正确的中间电位 (Vref = Vcc / 2) 比较重要。
这个中间电位就相当于双电源运放电路中的地。
如果没有正确的中间电位,会有各种各样问题、
-
本帖最后由 Jack315 于 2022-10-18 08:05 编辑
呜呼哀哉 发表于 2022-10-17 09:55 打算用这个 不大清楚为什么整个数据表中没有找到tf、tr参数,从其他的去减,感觉也算不出来。 版主 ...
选用施密特输入级的门电路是正解。
SN74HC04, SH54HC04 的数据手册中上升和下降时间用 Transient-time (tt) 表示。十几纳秒数量级,与 27MHz 在同一个数量级。余量略显不足,需要选速度更高的门电路。
将正弦信号转变为方波也可考虑用施密特触发器 / 缓冲器。
-
2个速度具体是什么速度?
一个速度和一个旋转方向已经包含了齿轮转动的所有信息。
-
本帖最后由 Jack315 于 2022-5-31 17:58 编辑
供 LZ 参考:
旋转变压器
使用旋转变压器是比较古老的方案,现在一般用霍尔传感器 (Allegro MicroSystems, Inc.) 。
在船舶上都有 400 Hz (不是 50 Hz)的发电机,所以额定频率也是 400 Hz。
-
LZ 是要解决这个形式滤波器的问题,还是要解决信号的滤波问题?
如果是前者,零极点的表达式都有了;
如果是后者,描述下信号的特征,或者直接说明滤波器的指标。
-
本帖最后由 Jack315 于 2022-5-7 06:49 编辑
gmchen 发表于 2022-5-6 19:43
分子表达式:
零点:
-
本帖最后由 Jack315 于 2022-3-21 17:13 编辑
Python 代码:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
def Fibonaci(n):
# 斐波纳契数列生成函数。
if n < 2:
return 1
else:
return Fibonaci(n - 1) + Fibonaci(n - 2)
def RNetwork(n = 10):
Series = [Fibonaci(i) for i in range(2 * n + 1)]
# 输出斐波纳契数列。
print('斐波纳契数列:\n{}'.format(Series))
# 输出电阻网络。
s = '分子 = {: 6d}\t分母 = {: 6d}\tR{:02d} = {:20.18f}'
print('\n电阻网络值:')
for i in range(n):
k = i + 1;
num = Series[2 * k]
den = Series[2 * k - 1]
print(s.format(num, den, k, num / den))
RNetwork()
代码输出:
-
bobde163 发表于 2022-3-21 15:28
厉害厉害,感谢解答,你的思路我晚上回来也好好研究一下,另外一上你是用什么软件做的公式公式,比写在纸 ...
这是论坛的功能:
其它论坛不多见。