找回密码
 立即注册
查看: 3988|回复: 25

开天斧3.1版-P1.7采样直流电压-50Hz交流电压计算有效值-串口1返回虚拟数码管显示

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2023-5-11 15:14:53 | 显示全部楼层 |阅读模式
开天斧3.1版-P1.7/ADC7 采样直流电压-50Hz交流电压计算有效值-串口1(P3.1)返回虚拟数码管显示

本程序演示使用开天斧三.1的P1.7做12位ADC输入测量直流电压或50Hz正弦波电压有效值,通过串口1(P3.1)发送给上位机,波特率115200,8,n,1.
用户请先别修改程序, 直接将"ADC.hex"下载到开天斧3.1板子测试.

下载时选择主频24MHZ. 测试时, 电脑的串口助手设置115200,8,n,1.

打开串口助手开始接收, 再打开"STC调试助手"中的"7段数码管"即可看到结果.

测量交流AC电压时:
上电后默认测量交流电压有效值, 显示 AC xx.xx
如果当前显示DC, 则按一下P3.4, 显示AC xx.xx
J6(示波器输入信号AC\DC选择)开路, 交流耦合.
将J5输入对地短路, 看显示是否为0, 不为0则按下P3.5按键归0.
然后从J5输入50Hz交流电压, 将会显示电压有效值, 输入范围为0~8.5V AC, 超过则显示 AC EEEE

测量直流DC电压时:
如果当前显示AC, 则按一下P3.4, 显示DC xx.xx
J6(示波器输入信号AC\DC选择)用短路片(跳线帽)短路, 直流耦合.
将J5输入对地短路, 看显示是否为0, 不为0则按下P3.5按键归0.
然后从J5输入直流电压, 将会显示+-直流电压值, 输入范围为-11~13.5V DC, 超过则显示 DC EEEE 或 DC -EEEE.


输入接线.JPG

数码管虚拟显示设置.JPG

交流电压显示效果.JPG

直流正电压显示效果.JPG

直流负电压显示效果.JPG

11-开天斧3.1-P1.7采样直流电压-50Hz交流电压计算有效值-串口1(P3.1)返回虚拟数码管显示.rar (368.33 KB, 下载次数: 346)


回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-04-26 20:12:05
已绑定手机

3

主题

17

回帖

1449

积分

金牌会员

积分
1449
发表于 2023-5-24 06:22:46 | 显示全部楼层
还是没看懂读取负电压的原理

点评

请参考屠龙刀、开天斧的示波器输入电路,ADC参考电压是Vref,输入是以Vref/2为0点参考,ADC读数为2048就是0点,高于2048就是正,低于就是负。  详情 回复 发表于 2023-5-24 11:09
可以结合手册看下呢  详情 回复 发表于 2023-5-24 08:48
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:142
  • 最近打卡:2025-04-27 09:42:20

11

主题

157

回帖

1780

积分

版主

积分
1780
发表于 2023-5-24 08:48:07 | 显示全部楼层
40561*** 发表于 2023-5-24 06:22
还是没看懂读取负电压的原理

可以结合手册看下呢
1.png

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2023-5-24 11:09:11 | 显示全部楼层
40561*** 发表于 2023-5-24 06:22
还是没看懂读取负电压的原理

请参考屠龙刀、开天斧的示波器输入电路,ADC参考电压是Vref,输入是以Vref/2为0点参考,ADC读数为2048就是0点,高于2048就是正,低于就是负。
1.png

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-04-26 20:12:05
已绑定手机

3

主题

17

回帖

1449

积分

金牌会员

积分
1449
发表于 2023-5-24 16:19:57 | 显示全部楼层
本帖最后由 405616736 于 2023-5-24 20:45 编辑

谢谢,之前没留意手册的电路图,现在搞明白了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-04-26 20:12:05
已绑定手机

3

主题

17

回帖

1449

积分

金牌会员

积分
1449
发表于 2023-5-24 16:20:12 | 显示全部楼层
梁*** 发表于 2023-5-24 11:09
请参考屠龙刀、开天斧的示波器输入电路,ADC参考电压是Vref,输入是以Vref/2为0点参考,ADC读数为2048就 ...

谢谢,我再看看手册研究一下
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-04-26 20:12:05
已绑定手机

3

主题

17

回帖

1449

积分

金牌会员

积分
1449
发表于 2023-5-25 14:48:24 | 显示全部楼层
梁*** 发表于 2023-5-24 11:09
请参考屠龙刀、开天斧的示波器输入电路,ADC参考电压是Vref,输入是以Vref/2为0点参考,ADC读数为2048就 ...

梁工,再请教一下两个问题:
1、adc_avr = (u16)((float)adc_avr * 0.621118f);        //校准,根据具体电路参数确定。
该程序中0.621118f这个参数是否根据电路中分压公式计算出来的?

2、该程序定时器设置是否根据50Hz来设置采用周期的?
Timer0_Config(0, MAIN_Fosc / 8000);        //t=0: reload值是主时钟周期数,  (中断频率)
u8        Timer0_Config(u8 t, u32 reload)        //t=0: reload值是主时钟周期数,  t=1: reload值是时间(单位us)
{
        TR0 = 0;        //停止计数

        if(t != 0)        reload = (u32)(((float)MAIN_Fosc * (float)reload)/1000000UL);        //重装的是时间(us), 计算所需要的系统时钟数.
        if(reload >= (65536UL * 12))        return 1;        //值过大, 返回错误
        if(reload < 65536UL)        AUXR |= 0x80;                //1T mode
        else
        {
                AUXR &= ~0x80;        //12T mode
                reload = reload / 12;
        }
        reload = 65536UL - reload;
        TH0 = (u8)(reload >> 8);
        TL0 = (u8)(reload);

        ET0 = 1;        //允许中断
        PT0 = 1;        //高优先级中断
        TMOD = (TMOD & ~0x03) | 0;        //工作模式, 0: 16位自动重装, 1: 16位定时/计数, 2: 8位自动重装, 3: 16位自动重装, 不可屏蔽中断
        TR0 = 1;        //开始运行
        return 0;
}

点评

1、校准系数,比如实际电压为10V,显示电压为12V,则校准系数=10/12=0.83333。 2、我国市电频率50Hz,周期20ms,采样按N个周期时间为窗口,采样频率为8000Hz,则20ms对应160个采样,采样次数就是160的正数倍(即20ms  详情 回复 发表于 2023-5-25 15:18
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2023-5-25 15:18:33 | 显示全部楼层
40561*** 发表于 2023-5-25 14:48
梁工,再请教一下两个问题:
1、adc_avr = (u16)((float)adc_avr * 0.621118f);        //校准,根据具体电路参 ...

1、校准系数,比如实际电压为10V,显示电压为12V,则校准系数=10/12=0.83333。
2、我国市电频率50Hz,周期20ms,采样按N个周期时间为窗口,采样频率为8000Hz,则20ms对应160个采样,采样次数就是160的正数倍(即20ms的整数倍对应的采样数)。12位ADC采样交流电压的绝对值是11位,平方值是22位,u32类型是32位,则最多可以有1024个采样,由于要160的倍数,所以采样800次,对应100ms。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-04-26 20:12:05
已绑定手机

3

主题

17

回帖

1449

积分

金牌会员

积分
1449
发表于 2023-5-25 18:07:19 | 显示全部楼层
梁*** 发表于 2023-5-25 15:18
1、校准系数,比如实际电压为10V,显示电压为12V,则校准系数=10/12=0.83333。
2、我国市电频率50Hz,周 ...

非常感谢解释,现软硬件的原理都完全明白了
回复 支持 反对

使用道具 举报 送花

1

主题

22

回帖

85

积分

注册会员

积分
85
发表于 2023-7-16 15:53:53 | 显示全部楼层
这个程序移植到屠龙刀三,发现串口不工作。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 06:37 , Processed in 0.333616 second(s), 123 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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