开天斧3.1版-P1.7采样直流电压-50Hz交流电压计算有效值-串口1返回虚拟数码管显示
开天斧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.
还是没看懂读取负电压的原理 405616736 发表于 2023-5-24 06:22
还是没看懂读取负电压的原理
可以结合手册看下呢
405616736 发表于 2023-5-24 06:22
还是没看懂读取负电压的原理
请参考屠龙刀、开天斧的示波器输入电路,ADC参考电压是Vref,输入是以Vref/2为0点参考,ADC读数为2048就是0点,高于2048就是正,低于就是负。
本帖最后由 405616736 于 2023-5-24 20:45 编辑
STC32位8051芯片 发表于 2023-5-24 08:48
可以结合手册看下呢
谢谢,之前没留意手册的电路图,现在搞明白了 梁工 发表于 2023-5-24 11:09
请参考屠龙刀、开天斧的示波器输入电路,ADC参考电压是Vref,输入是以Vref/2为0点参考,ADC读数为2048就 ...
谢谢,我再看看手册研究一下 梁工 发表于 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;
} 405616736 发表于 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。 梁工 发表于 2023-5-25 15:18
1、校准系数,比如实际电压为10V,显示电压为12V,则校准系数=10/12=0.83333。
2、我国市电频率50Hz,周 ...
非常感谢解释,现软硬件的原理都完全明白了 这个程序移植到屠龙刀三,发现串口不工作。