矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
楼主: bht998

MF47强改200k欧灵敏度与简单上位机编程

[复制链接]
发表于 2025-3-16 22:16:56 | 显示全部楼层
本帖最后由 奥德赛 于 2025-3-16 22:18 编辑

楼主厉害呀,淘宝上这种自动调零的还挺贵
回复 支持 反对

使用道具 举报

发表于 2025-3-16 22:17:13 | 显示全部楼层
bht998 发表于 2025-3-16 19:06
近期会有预览版(能正常使用但寿命存疑),供爱好者测试之用,
如果你有维修能力,欢迎参与测试。

适配天宇厂47系列的套件吗?后面出的话那就太好
回复 支持 反对

使用道具 举报

发表于 2025-3-16 22:19:33 | 显示全部楼层
引起关注后,说不定还可以把专利卖给厂家
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2025-3-17 12:45:18 | 显示全部楼层
本帖最后由 bht998 于 2025-3-17 12:48 编辑

支架4_proc.jpg
支架5_proc.jpg
  临时找了一根铜丝把1602绑在了支架上,这样看起来好多了。
虽然1602只给它设置了很小的背光电流,但还是有效果的,有维修能力的
可以改电阻加大背光电流。

当前我手上只有五片电路板,想要预览版的快留言预定。
回复 支持 反对

使用道具 举报

     
发表于 2025-3-17 13:35:36 来自手机 | 显示全部楼层
有蜂鸣档吗?能不能点亮led
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2025-3-17 14:03:34 | 显示全部楼层
本帖最后由 bht998 于 2025-3-17 14:13 编辑
DZ0975 发表于 2025-3-17 13:35
有蜂鸣档吗?能不能点亮led


Rx1档低于20欧就会有声音。
测试电压3.0V,低于3.0V的都能点亮,但要选择合适的档位测试,以防烧坏LED。
Rx1档低于20欧时为脉冲模式,(表棒短路时)峰值电流约110mA,平均电流约10mA。
回复 支持 反对

使用道具 举报

     
发表于 2025-3-17 15:50:16 来自手机 | 显示全部楼层
电流太大了!短路时1ma比较合适。预览版只有pcb吗?
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2025-3-17 16:18:46 | 显示全部楼层
本帖最后由 bht998 于 2025-3-17 16:22 编辑
DZ0975 发表于 2025-3-17 15:50
电流太大了!短路时1ma比较合适。预览版只有pcb吗?


原版的MF47,Rx1档短路电流约90mA,MF500的Rx1档中值为10欧,
短路电流约150mA,指针式的万用表差不多都这样,你可以选择其它测
试电流小的档位。比如我这个Rx10k档短路电流不到20uA(3V)。

预览版PCB会安装好所有零件,除了测电池的bat档,其它档都能正常使用,
只有五个,我这边会组装成完整的表给大家,带有1602显示组件,不带电池,
用户要自己准备14500锂电池或五号铁锂电池,表棒为可选件,到时会拍照
片给大家看实物。
回复 支持 反对

使用道具 举报

     
发表于 2025-3-17 18:11:51 | 显示全部楼层
bht998 发表于 2025-3-15 20:01
很遗憾,现在已经很难买到以前的老表了,
新生产的都是碳膜电位器,磕磕碰碰几下就坏
了。

     我有一块MF47,调零电位器是罕见的线绕电位器,
整体.jpg
表盘.jpg
内部.jpg
校准电位器.jpg
欧姆调零电位器.jpg
回复 支持 反对

使用道具 举报

发表于 2025-3-18 00:26:01 来自手机 | 显示全部楼层
你好,前辈,会考虑开源吗?
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2025-3-18 09:25:25 | 显示全部楼层
本帖最后由 bht998 于 2025-3-18 09:37 编辑
guodegang 发表于 2025-3-18 00:26
你好,前辈,会考虑开源吗?


暂时没考虑过开源,这玩意儿原理其实很简单,
你完全可以用51单片机做一个差不多的出来。
只是某些参数要用特殊的算法加上很多次的实验
才能达到满意的效果。我们曾经用不同的单片机
做了三个版本,报废的电路板那是一堆一堆的,
经过反复的测试才成现在的样子。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2025-3-18 19:33:50 | 显示全部楼层
本帖最后由 bht998 于 2025-3-18 20:52 编辑

接下来就是上位机编程了,编一个有用户界面的上位机程序目前对我来说还是有一
定难度的,写一个控制台下的程序则容易了许多,只有“main函数”加“大循环”。
以前写的电阻并联求值小程序,只有控制台界面,算上标点符号也只有15行,贴出来
和大家一起学习最简单的电脑编程:

#include  <stdio.h>
int main(void)
{
  float  x,y,z;
  printf("\n***电阻并联求值小程序***\n\n");
  while(1){
    printf("============分隔线======\n");
    printf("电阻1(可输入小数):");
    scanf("%f",&x);
    printf("\n电阻2(可输入小数):");
    scanf("%f",&y);
    z=(float)(x*y/(x+y));
    printf("\n并联阻值=%g\n\n",z);
    }
}
找一个大家喜欢的编译器编译出来就行了,运行效果如下:
电阻并联求值.png


我这个指针万用表是通过串口连接电脑的,比如我电脑上的串口是DAP-link,
相应的驱动程序必须先安装好,然后就是电脑编程了。
  经过多方查找,终于找到了一个简单的串口配置发送和接收示例程序,
此程序配置串口为57600波特率,8位字长,1位停止位,无校验,并通过COM3
发送和接收数据。源码如下,和大家一起学习:
#include <windows.h>
#include <stdio.h>
int main() {
    printf("\n这是一个串口测试程序!\n\n注意串口号是否正确!\n\n");
    printf("请连接串口设备的Rx和Tx,\n\n然后运行此程序\n\n");
    HANDLE hSerial;
    DCB dcbSerialParams = {0};
    COMMTIMEOUTS timeouts = {0};
    // 打开串口,这里改成对应的串口号
    hSerial = CreateFile("\\\\.\\COM3", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    if (hSerial == INVALID_HANDLE_VALUE) {
        fprintf(stderr, "打开串口出错!\n\n请填写正确的串口号后再编译运行!\n");
        getchar();
        return 1;
    }
    // 配置串口参数
    dcbSerialParams.DCBlength = sizeof(dcbSerialParams);
    if (!GetCommState(hSerial, &dcbSerialParams)) {
        fprintf(stderr, "获取串口状态出错\n");
        CloseHandle(hSerial);
        return 1;
    }
    dcbSerialParams.BaudRate = CBR_57600;//波特率
    dcbSerialParams.ByteSize = 8;//8位字长
    dcbSerialParams.StopBits = ONESTOPBIT;//1位停止
    dcbSerialParams.Parity = NOPARITY;//无校验
    if (!SetCommState(hSerial, &dcbSerialParams)) {
        fprintf(stderr, "设置串口状态出错\n");
        CloseHandle(hSerial);
        return 1;
    }
    // 设置超时
    timeouts.ReadIntervalTimeout = 50;
    timeouts.ReadTotalTimeoutConstant = 50;
    timeouts.ReadTotalTimeoutMultiplier = 10;
    timeouts.WriteTotalTimeoutConstant = 50;
    timeouts.WriteTotalTimeoutMultiplier = 10;
    if (!SetCommTimeouts(hSerial, &timeouts)) {
        fprintf(stderr, "设置超时出错\n");
        CloseHandle(hSerial);
        return 1;
    }
    // 发送数据
    unsigned char sendData[] = {0xa1, 0xd2, 0xb3, 0x84, 0x35};
    DWORD bytesWritten;
    if (!WriteFile(hSerial, sendData, sizeof(sendData), &bytesWritten, NULL)) {
        fprintf(stderr, "串口写入出错\n");
        CloseHandle(hSerial);
        return 1;
    }
    printf("发送 %lu 字节\n", bytesWritten);
    // 接收数据
    unsigned char receiveData[256];
    DWORD bytesRead;
    if (!ReadFile(hSerial, receiveData, sizeof(receiveData), &bytesRead, NULL)) {
        fprintf(stderr, "串口接收出错\n");
        CloseHandle(hSerial);
        return 1;
    }
    printf("接收 %lu 字节: ", bytesRead);
    for (DWORD i = 0; i < bytesRead; i++) {
        printf("%02X ", receiveData);
    }
    printf("\n\n成功接收数据,请关闭此程序!");
    // 关闭串口
    CloseHandle(hSerial);
    getchar();//等待用户查看结果
    return 0;
}
### 代码说明
1. **打开串口**:使用`CreateFile`函数打开串口`COM3`。如果打开失败,程序会输出错误信息并退出。
2. **配置串口参数**:使用`GetCommState`获取当前串口配置,然后设置波特率、字长、停止位和校验位等参数,最后通过`SetCommState`应用这些配置。
3. **设置超时**:通过`SetCommTimeouts`设置串口的读写超时时间。
4. **发送数据**:使用`WriteFile`函数将数组`sendData`中的数据发送到串口。
5. **接收数据**:使用`ReadFile`函数从串口读取数据,并将读取到的数据存储在`receiveData`数组中。
6. **关闭串口**:使用`CloseHandle`关闭串口。
### 编译和运行
在Windows上使用C编译器(如MinGW或Visual Studio)编译该程序,并运行生成的可执行文件。确保COM3端口已连接并配置正确。
### 注意事项
- 确保COM3端口可用且正确连接。
- 如果COM3端口被其他程序占用,程序将无法打开串口。
- 该程序假设发送和接收的数据量较小,如果需要处理大量数据,可能需要调整缓冲区大小和超时设置。
这个示例程序展示了如何使用Windows API进行基本的串口通信。根据实际需求,可以进一步扩展和优化该程序。

如果将电脑串口的Rx和Tx连接起来,程序运行的结果是收到了自己发送的数据,效果图如下:
串口测试错误.jpg 串口测试通过.jpg

经过我的几番改进增加了数据记录到文件的功能,
控制台界面变成了如下的样子:

串口记录效果.jpg 串口记录txt.jpg

串口到文本文件exe.zip (12.13 KB, 下载次数: 4)






回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2025-3-20 16:54:44 | 显示全部楼层
本帖最后由 bht998 于 2025-3-20 16:56 编辑

MF47电流档原理1.jpg
  这款表电流测量部分的原理如上图所示,满量程设定
为100mV,各档分流电阻阻值可以计算得到。10A档电阻
丝为25mR,实际上满量程为242.5mV,经R2和R3分压得
到100mV进入测量机构,对于0.5A档来说,实际的采样电
阻刚好是0.2欧。0.1mAx10M=1kV,50uAx10M=500V,
25uAx10M=250V,5uAx10M=50V,交流电压经电阻分压
和二极管整流后进入50uA节点,所以交流电压档的灵敏度
是9k欧每伏。
回复 支持 反对

使用道具 举报

     
发表于 2025-3-20 23:51:26 来自手机 | 显示全部楼层
强,期待你的成品
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2025-3-22 14:33:26 | 显示全部楼层
MF47改装版原理.png
  最近开始学kicad,又画了一遍图,总算画得差不多了,
再加上放大器和单片机adc测量,就构成了完整的电路图了。
其实这个原理不难,交流电压和原表一样,被测交流电压经
各档分压电阻后由二极管D1和D2整流,实际测量的是50uA
直流电流。欧姆档改成了和数字表相似的结构,Rx10k档为基
础档,Rx1k档在165k电阻基础上并联18.333k电阻得到16.5k
基准电阻,其它欧姆档可依此类推,Rx1档电流有点偏大,加
了10欧的限流电阻。
  单片机测量到的数据在其内部计算和转换,最后由定时
器推动表头指针完成显示,爱好者可以添加常用的单片机如51
做出自己的版本来。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-26 09:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表