` 本帖最后由 Cumu 于 2021-8-10 22:30 编辑
Cumu开源项目已经改名为:七云物联,请访问www.iot7.cn的文档中心下载开源资料
前面两节写了:
第一节:一键开关机及充电检测
第二节:USB固件升级及串口共用
下面开始第三节的万用表最重要的一个功能:档位切换.
首先来看下视频演示
FS9721可用量程如下:
受到磁保持继电器最大电流限制,将交直流10A档位去掉,其他档位可一键切换,可以远程APP切换。 由于FS9721是为拨盘开关设计的,所以官方电路需要改动,让MCU可以完全控制FS9721的档位,改动如下: 1、 MEA1-MEA4与MCU连接,并将MCU的IO口设置成集电极开路,MEA1-MEA4档位如下:
2、 官方电路中J1-J9是用拨盘开关控制,现改为2个磁保持继电器控制
3、 交直流变换、频率占空比变换需要按键控制,现改为MCU控制:
这样通过MEA控制、磁保持继电器控制、两个功能键控制 即可实现全量程MCU控制! 程序如下(比如程序中调用Change_fun(7); 即可测量频率 ) //入口参数:0 电压 1 电阻 2 电流 3 电容
void Change_MEA(uint8_t i)//MEA切换
{
switch (i)
{
case 0://电压
{
MEA1_1;
MEA2_1;
MEA3_1;
MEA4_1;
}break;
case 1://电阻
{
MEA1_1;
MEA2_0;
MEA3_1;
MEA4_1;
}break;
case 2://电流
{
MEA1_0;
MEA2_1;
MEA3_1;
MEA4_1;
}break;
case 3://电容
{
MEA1_1;
MEA2_1;
MEA3_1;
MEA4_0;
}break;
}
} //控制磁保持继电器
//0、电压档位 1、电阻档位 2、电流档位
void Relay(uint8_t i)
{
switch (i)
{
case 0://电压档位 两个磁保持继电器全部释放
{
KBOFF_1;
Delay_ms(100);
KBOFF_0;
KAOFF_1;
Delay_ms(100);
KAOFF_0;
}break;
case 1://电阻档位 继电器2释放,继电器1吸合
{
KBOFF_1;
Delay_ms(100);
KBOFF_0;
KAON_1;
Delay_ms(100);
KAON_0;
}break;
case 2://电流档位 继电器2吸合 继电器1释放
{
KBON_1;
Delay_ms(100);
KBON_0;
KAOFF_1;
Delay_ms(100);
KAOFF_0;
}break;
}
} //切换量程
//0电阻 1二极管 2蜂鸣器 3直流电压,4直流电流、5交流电压、6交流电流、7交流频率、8交流占空比、9电容
void Change_fun(uint8_t i)
{
switch (i)
{
case 0://电阻
{
Change_MEA(1);//将MEA设置成电阻档
Relay(1);//控制磁保持继电器
if(function==1)//当前量程是二极管,按下2次SELECT键切换成电阻量程
{
SELECT_0;
Delay_ms(100);
SELECT_1;
Delay_ms(100);
SELECT_0;
Delay_ms(100);
SELECT_1;
}
else if(function==2)//当前量程是蜂鸣器,按下1次SELECT键切换成电阻量程
{
SELECT_0;
Delay_ms(100);
SELECT_1;
}
function=0;//新的当前量程
}break;
case 1://二极管
{
Change_MEA(1);//将MEA设置成电阻档
Relay(1);//控制磁保持继电器
if(function==2)//当前量程是蜂鸣器,按下2次SELECT键切换成二极管量程
{
SELECT_0;
Delay_ms(100);
SELECT_1;
Delay_ms(100);
SELECT_0;
Delay_ms(100);
SELECT_1;
}
else if(function==1)//当前量程是二极管,不用任何操作
{
}
else //其他量程都需按1次SELECT键
{
SELECT_0;
Delay_ms(100);
SELECT_1;
}
function=1;//新的当前量程
}break;
case 2://蜂鸣器
{
Change_MEA(1);//将MEA设置成电阻档
Relay(1);//控制磁保持继电器
if(function==1)//当前量程是二极管,按下1次SELECT键切换成蜂鸣器量程
{
SELECT_0;
Delay_ms(100);
SELECT_1;
}
else if(function==2)//当前量程是蜂鸣器,不用任何操作
{
}
else //其他量程都需按2次SELECT键
{
SELECT_0;
Delay_ms(100);
SELECT_1;
Delay_ms(100);
SELECT_0;
Delay_ms(100);
SELECT_1;
}
function=2;//新的当前量程
}break;
case 3://直流电压
{
Change_MEA(0);//将MEA设置成电压
Relay(0);//控制磁保持继电器
function=3;//新的当前量程
}break;
case 4://直流电流
{
Change_MEA(2);//将MEA设置成电流
Relay(2);//控制磁保持继电器
function=4;//新的当前量程
}break;
case 5://交流电压
{
Change_MEA(0);//将MEA设置成电压
Relay(0);//控制磁保持继电器
if(function==5)//当前量程是交流电压,无需按键
{
}
if(function==7)//当前量程是交流频率,按2次HZBUTY键
{
HZBUTY_0;
Delay_ms(100);
HZBUTY_1;
Delay_ms(100);
HZBUTY_0;
Delay_ms(100);
HZBUTY_1;
}
if(function==8)//当前量程是交流占空比,按1次HZBUTY键
{
HZBUTY_0;
Delay_ms(100);
HZBUTY_1;
}
else//当前量程为其他量程,按1次SELECT键
{
SELECT_0;
Delay_ms(100);
SELECT_1;
}
function=5;//新的当前量程
}break;
case 6://交流电流
{
Change_MEA(2);//将MEA设置成电流
Relay(2);//控制磁保持继电器
if(function==6)//当前量程是交流电流,无需按键
{
}
else//当前量程为其他量程,按1次SELECT键
{
SELECT_0;
Delay_ms(100);
SELECT_1;
}
function=6;//新的当前量程
}break;
case 7://交流频率
{
Change_MEA(0);//将MEA设置成电压
Relay(0);//控制磁保持继电器
if(function==7)//当前量程是交流频率,无需按键
{
}
else if(function==8)//当前量程为交流占空比,按2次HZBUTY键
{
HZBUTY_0;
Delay_ms(100);
HZBUTY_1;
Delay_ms(100);
HZBUTY_0;
Delay_ms(100);
HZBUTY_1;
}
else if(function==5)//当前量程为交流电压,按1次HZBUTY键
{
HZBUTY_0;
Delay_ms(100);
HZBUTY_1;
}
else//当前量程为其他量程,按1次SELECT键 按1次HZBUTY键
{
SELECT_0;
Delay_ms(100);
SELECT_1;
Delay_ms(100);
HZBUTY_0;
Delay_ms(100);
HZBUTY_1;
}
function=7;//新的当前量程
}break;
case 8://交流占空比
{
Change_MEA(0);//将MEA设置成电压
Relay(0);//控制磁保持继电器
if(function==8)//当前量程是交流占空比,无需按键
{
}
else if(function==7)//当前量程为交流频率,按1次HZBUTY键
{
HZBUTY_0;
Delay_ms(100);
HZBUTY_1;
}
else if(function==5)//当前量程为交流电压,按2次HZBUTY键
{
HZBUTY_0;
Delay_ms(100);
HZBUTY_1;
Delay_ms(100);
HZBUTY_0;
Delay_ms(100);
HZBUTY_1;
}
else//当前量程为其他量程,按1次SELECT键 按2次HZBUTY键
{
SELECT_0;
Delay_ms(100);
SELECT_1;
Delay_ms(100);
HZBUTY_0;
Delay_ms(100);
HZBUTY_1;
Delay_ms(100);
HZBUTY_0;
Delay_ms(100);
HZBUTY_1;
}
function=8;//新的当前量程
}break;
case 9:
{
Change_MEA(3);//将MEA设置成电容
Relay(0);//控制磁保持继电器
function=9;//新的当前量程
}break;
}
}
下面是PC客户端的显示界面,GIF动画,比较大,加载需要时间(UDP通讯刚刚调通,下周与Cumu主机连调)
FS9721数据手册
STM32F030源码(没整理,等上位机联调结束整理)
`
|