软件部分:
主要流程,流程图喜欢用手画
今天本子在公司,就口述咯。
1:初始化,对各个模块进行初始化。
2:通过串口接收充放电设定值。
3:根据串口接收的设定值经行设定DA模块的输出。
4:产生组号、位号。等各种数字信号。(用于设定采集哪一个点位的电压电流)
5:通过AD采集电池电压与电流。并进行运算通过串口发送。
然后就是4产生下一个点位的信号5采集下一个点位。
部分代码
char mask1[] = "00. DY.0000mV DL.00000mA "; //用于串口发送给电脑的字符数组。
zuhao = (char) k ;
dymask =(char) D[0]*5000/256 ; //AD采样的电压值
dlmask1 =(char) D[1]*10000/256 ; //AD采样的电流值 进行运算得出真是电压电流值
for(x=0;x<5;x++) //将十六进制数转化为字符存于字符数组通过串口发送
{
if(x < 2)
{
mask1[1-x] = (uint16_t)zuhao%10+48;
zuhao=(uint16_t)zuhao/10;
}
if(x < 4)
{
mask1[10-x] = (uint16_t)dymask%10+48;
dymask=(uint16_t)dymask/10;
}
mask1[21-x] = (uint16_t)dlmask1%10+48;
dlmask1=(uint16_t)dlmask1/10;
}
串口发送
ROM_UART_Send(hUART,mask1, sizeof(mask1)-1);
数字信号的代码主要产生的就是高低电平不做解释:附件上传了本人写的模拟IIC代码的源码,不知为啥找不到.C.H文件都改成TXT格式了。官方的IIC代码不知怎么回事怎么也调不成。
所以只能自己模拟咯,
以下为PCF8591的代码
至于PCF8591的芯片手册自己百度吧
/*******************************************************************
DAC 控制DA输出电压
*******************************************************************/
int DACconversion(unsigned char sla,unsigned char c, unsigned char Val)
{
I2C_Start(); //????
I2C_Send_Byte(sla); //??????
if(I2C_Wait_Ack()==1)return(0);
I2C_Send_Byte(c); //??????
if(I2C_Wait_Ack()==1)return(0);
I2C_Send_Byte(Val); //??DAC???
if(I2C_Wait_Ack()==1)return(0);
I2C_Stop(); //????
return(1);
}
/*******************************************************************
选择要采集那一路的电压共四路
*******************************************************************/
int ISendByte(unsigned char sla,unsigned char c)
{
I2C_Start(); //????
I2C_Send_Byte(sla); //??????
if(I2C_Wait_Ack()==1)return(0);
I2C_Send_Byte(c); //????
if(I2C_Wait_Ack()==1)return(0);
I2C_Stop(); //????
return(1);
}
/*******************************************************************
读AD采样值
*******************************************************************/
unsigned char IRcvByte(unsigned char sla)
{ unsigned char c;
I2C_Start(); //????
I2C_Send_Byte(sla+1); //??????
if(I2C_Wait_Ack()==1)return(0);
c= I2C_Read_Byte(); //????0
I2C_Ack(); //??????
I2C_Stop(); //????
return(c);
}