找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1309|回复: 4
收起左侧

请教问题,用STC8A8K64DA单片机做了个多路模拟量采集,但是

[复制链接]
ID:1006638 发表于 2023-7-6 15:03 | 显示全部楼层 |阅读模式
请教问题,用STC8A8K64DA做了个多路模拟量采集,想输出添加6个继电器,根据输入信号内容不同想让每个通道可以指定选择某个继电器做为其超限的报警输出。要求选择了同一个继电器的所有变量有一个超限就报警,都不超限关闭报警,不知意思表达清楚了没报警选择这部分没思路。
回复

使用道具 举报

ID:213173 发表于 2023-7-6 16:32 | 显示全部楼层
        if(a>x || b>y || c>z)
        {
                Give_an_alarm=1;
        }
        else Give_an_alarm=0;
回复

使用道具 举报

ID:94031 发表于 2023-7-6 16:34 | 显示全部楼层
如果多路模拟量采集,量程变换完成,只需把各路报警要求与当前测量作比较,完成继电器驱动。
回复

使用道具 举报

ID:155507 发表于 2023-7-6 19:19 | 显示全部楼层
你的问题是如何使用STC8A8K64DA单片机进行多路模拟量采集,并根据输入信号的内容选择特定的继电器进行超限报警输出。你希望当选择了同一个继电器的所有变量中有一个超限时触发报警,如果都不超限则关闭报警。如果我理解得正确的话,下面是一种可能的解决方案:

1.首先,你需要配置STC8A8K64DA的多路模拟量采集功能。使用芯片的模拟输入引脚和ADC模块来连接并采集模拟信号。你需要确保正确设置ADC的参考电压和采样率,以获得准确的模拟量读数。

2.接下来,你需要连接6个继电器到合适的输出引脚上。这些引脚将用于控制继电器的开关状态。

3.在代码中,你需要设置适当的阈值来定义什么情况下被认为是超限。当一个通道的模拟量读数超过设定的阈值时,你可以将相应的继电器引脚拉高以触发报警。如果所有通道的读数都低于阈值,则关闭报警。

4.为了实现这个逻辑,你可以使用条件语句(如if语句)来检查每个通道的模拟量读数是否超过阈值。如果超过阈值,则将相应的继电器引脚设置为高电平。如果没有超过阈值,则将该继电器引脚设置为低电平。

以下是一个简单的伪代码示例,用于说明这个思路:


// 定义阈值
const int threshold = 1000;

// 采集并处理多路模拟量输入
while (1) {
    for (int channel = 0; channel < numChannels; channel++) {
        // 读取通道channel的模拟量值
        int analogValue = readAnalogValue(channel);

        // 检查是否超过阈值
        if (analogValue > threshold) {
            // 设置对应继电器引脚为高电平(触发报警)
            setRelayOutput(channel, HIGH);
        } else {
            // 设置对应继电器引脚为低电平(关闭报警)
            setRelayOutput(channel, LOW);
        }
    }
}
在上面的示例中,你需要根据你的硬件连接和具体需求进行适当的修改。此外,你还需要实现读取模拟量输入和设置继电器输出的相关函数。

请注意,这只是一个基本的示例代码,你可能需要根据你的具体应用场景进行更多的功能和错误处理。希望这个解决方案对你有所帮助,如果你有任何进一步的问题,请随时提问。

回复

使用道具 举报

ID:1006638 发表于 2023-7-7 09:23 | 显示全部楼层
如果1234通道都选择了6号继电器,那么1通道超限继电器吸合,2通道不超限继电器断开,3通道超限继电器又吸合,4通道不超限继电器又断开,这不就震荡了吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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