经过3个星期的学习,今日终于调通正电原子SMT32精英板+研华ADAM4117模拟5V电压检测
今日总结分享给大家
一、研华ADAM4117是正负15V电压检测仪器,精度相对很高。具体资料百度搜索可知,典型使用是上位机+ADAM4520+ADAM4117,其中4520是串口转485,4117需要485连接;
4117检测需要接收到“#01+回车符”
二、准备阶段使用串口助手+USB to 485模块+ADAM
使用串口助手发送#01,选中发送新行;当发出命令时,就收到ADAM4117发会的电压值
使用自己编辑的VB.NET2022串口助手,发送命令:可以实现
三、今天调试正点原子485模块实验,先用串口实验调试通过。485能收能发,并且通过验证每一个字符的判读。可以实现串口助手对小灯的控制。
四、STM32485AB接通ADAM4117AB,开始调试;
这里对正点原子485程序的数据发送命令进行了更改,增加字符串功能。更改原来的程序,使用一个变量,因为初学这样比较好理解。
经过前面类似的调试方法,ADAM4117终于被调试通了。非常HAPPY,初学者的乐趣
1、进一步说明这些数据
最长的一串数据时ADAM4117发回来的电压值,刚开始字符显示不全,通过改变LCD显示字符多少的值调试好
ADAM4117返回的值第一个是一个>符号,经过反复调整485回收显示函数的值,发现我们可以对字符数组的维数进行处理,所一显示屏参数直接给BUF[1],之后数据的第一位不显示,看着更像测试数据。
对数据的第1,8,15,22,29位进行判读,他们都是‘+’字符,通过判断他们的位与关系控制STM32的LED翻转
对数据的第3位进行5V范围判读,模拟4.85-5.25范围,采用IF语句,控制LED翻转,同时对细节判断让他回显"OK"和"KO"字符。 将结果字符保存在数组中
程序的主循环:
while(1)
{
key=KEY_Scan(0);
if(key==KEY0_PRES)//KEY0°´ÏÂ,·¢ËÍÒ»´ÎÊý¾Ý
{
LCD_ShowxNum(30+i*32,190,rs485buf[i],3,16,0X80); //ÏÔʾÊý¾Ý
RS485_Send_Data_str("#01"); //¸øADAM·¢ËÍ×Ö·û´® ĩβ'\r'
//RS485_Send_Data(rs485buf,1);//·¢ËÍ5¸ö×Ö½Ú
}
RS485_Receive_Data(rs485buf,&ke);
//ADAMÊý¾ÝÊǵÚ0λ> µÚ1£¬8£¬15£¬22£¬29.ÊÇ·ûºÅ
if(ke)//½ÓÊÕµ½ÓÐÊý¾Ý
{
LCD_ShowString(30,230+1*32,800,16,16,&rs485buf[1]);
if(rs485buf[1]=='+'&&rs485buf[8]=='+'&&rs485buf[15]=='+'&&rs485buf[22]=='+'&&rs485buf[29]=='+') //µÚһλºÍµÚ°ËλʮÎåÊÇÕý
{
LED0=!LED0;
LCD_ShowString(30,230+5*32,41,16,16,&rs485buf[3]);
delay_ms(3000);
if(rs485buf[3]>='4'&&rs485buf[3]<'6')
{
LED0=!LED0;
delay_ms(3000);
if(rs485buf[3]=='4'&&rs485buf[5]>='8'&&rs485buf[6]>='5')
{
LED0=!LED0;
delay_ms(3000);
LCD_ShowString(30,230+8*32,41,16,16,rusalt);
printf("%c%c",rusalt[0],rusalt[1]);
}
else if(rs485buf[5]<='2'&&rs485buf[6]<='5')
{
LED0=!LED0;
delay_ms(3000);
LCD_ShowString(30,230+8*32,41,16,16,rusalt);
printf("%c%c",rusalt[0],rusalt[1]);
}
else
{
LCD_ShowString(30,230+8*32,41,16,16,rusalt1);
printf("%c%c",rusalt1[0],rusalt1[1]);
}
}
}
//ke=0;
}
}
}
今天对学到内容进行总结,防止自己后续忘记和有相同学习经历的朋友参考。
手机微信15762271229 QQ 923800110
近期课题VB.NET2012串口助手调通ADAM4117,前面的VB.2022已经调试通,由于没有总结可能还要重新实验,前进CLICK!!!