|
发表于 2020-2-14 12:50:29
|
显示全部楼层
单片机要与调整板共地,DAC输出的基准电压才有参考意义。两块板子共地,R21、R24分压后得到的是负压,您把这个负压直接送DAC?
AR2是1:1的反相放大,作用就是电压极性转换,您用它的输出做电压采样不是很好吗?如果考虑Uset而不能改变R20、R23的分压值的话,把R21、R24挪到AR2的输出端与地之间,并适当改变分压比,信号极性和幅值就都满足要求了。
电流采样也可做同样的处理,但建议用两只单独的分压电阻,信号取自R27的话,范围只有0-0.5V,高位数ADC的精度被白白浪费了。
继电器控制其实就是几个判断语句,在DA值不同的区间开关不同的继电器。并注意留一点滞回空间,免得在切换点附近继电器乱跳。
以下是以前写的继电器控制函数,是双继电器做四段切换的代码。
根据您的绕组和继电器搭配情况稍微改改就能用:
/*********************************************************************************
* 函 数 名: Relay_CONT
* 功能说明: 根据形参带入的电压值控制继电器切换
* 形 参:ADC_V
* 返 回 值: 无
* 日 期:
*******************************************************************************/
void Relay_CONT(u16 ADC_V)
{
if(ADC_V<=510)
{
REL_J1_L;
REL_J2_H;
}
else //电压由低向高变化时,6.1V跳变。由高向低变化时,6.0V跳变。
if(ADC_V>520 && ADC_V<=1300) //保留0.1V的滞回空间。
{
REL_J1_H;
REL_J2_H;
}
else
if(ADC_V>1330 && ADC_V<=2000) //保留0.3V的滞回空间。
{
REL_J1_L;
REL_J2_L;
}
else
if(ADC_V>2030) //保留0.3V的滞回空间。
{
REL_J1_H;
REL_J2_L;
}
} |
|