苏红卫
摘要:螺丝是紧固件的通用说法,是日常生活中不可或缺的工业必需品,目前多数产品上的螺丝仍是操作工手动锁紧,如果需锁紧螺丝数量较多的话,容易漏打、错打。该文以C语言为编程语言,围绕以STM8S903K3为主的硬件电路功能,对序列打螺丝夹具进行了软件设计说明,文章首先提出了序列打螺丝夹具软件设计的总体思路,然后对序列打螺丝夹具的主要功能函数进行了重点设计说明,最后对软件设计调试结果进行说明。该软件设计在硬件设计的基础上进行了实验调试和实际操作,并已投入实际应用中,实际解决了螺丝数量较多时按统一顺序锁紧,防止错打、漏打的问题,具备很大的推广价值。
关键词:软件设计;序列夹具;顺序锁紧
中图分类号:TP311 文献标识码:A 章编号:1009-3044(2016)25-0080-03
基于STM8S903K3的序列打螺丝夹具中功能的设定、螺丝锁紧的选择、信息数据的处理存储、加工信息的显示、工作数据通信、报警等一系列功能是根据STM8S903K3单片机的特点及硬件电路的设计而通过C语言编程来实现的。
1 系统软件设计
1.1 系统设计总流程
开机后,先对各硬件端口进行初始化,然后读取拨码开关数据来确定需要锁紧螺丝数目,之后按循序点亮指示灯,系统自检(自检中出现错误时会发出报警声音提示错误);系统自检后,RESET指示灯亮,为锁紧螺丝做好准备。
需要锁紧螺丝工作时,先用螺丝刀碰触RESET位置,第一个螺丝位置的指示灯亮,螺丝刀碰触到第一个螺丝的导柱时产生signal in信号输入单片机,单片机接收后将SET置1输出电动起子允许工作信号,当螺丝拧到要求的扭矩后,电动起子控制器会发出一个BZ信号给单片机,单片机再接收到该信号后,关闭单片机输出信号并通过点亮FirstHC595SendData函数第2个螺丝的提示灯,重复上述动作。
设计中有一个三位的拨码开关用来设置总螺丝的数量,例如设置为48个螺丝,那么在第48个螺丝锁紧后,RESET指示灯亮,返回初始化状态(此时RESET位置没有锁螺丝确认信号,即只有螺丝刀触碰到该位置后才点亮第1个螺丝指示灯)。
在锁螺丝时,假如应该锁第3个螺丝,而实际上螺丝刀在其他螺丝位置时,此时螺丝刀不启动,并发出报警声音提示错误。
程序设计总流程图如图1所示:
1.2 硬件初始化操作
系统的硬件进行初始化包括系统时钟配置初始化Clock_init()、指示灯端口初始化GPIO_LEDInit()和功能端口(编码器端口、蜂鸣器端口、BZ端口、SET端口、RESET端口、Signal In端口、功能选择端口、74HC595端口)初始化General_IO_init()。截取程序段如下:
void General_IO_init(void)
{ /**编码器端口初始化**/
GPIO_Init(GPIOB,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, GPIO_MODE_IN_PU_NO_IT);
GPIO_Init(GPIOC,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5,GPIO_MODE_IN_PU_NO_IT);
GPIO_Init(GPIOE, GPIO_PIN_5,GPIO_MODE_IN_PU_NO_IT);
/**蜂鸣器端口初始化**/
GPIO_Init(GPIOA, GPIO_PIN_1, GPIO_MODE_OUT_PP_HIGH_FAST);
/**BZ端口初始化**/
GPIO_Init(GPIOC, GPIO_PIN_6, GPIO_MODE_IN_PU_IT); /**改为中断方式**/
/**SET端口初始化**/
GPIO_Init(GPIOC, GPIO_PIN_7, GPIO_MODE_OUT_PP_LOW_FAST);
/**ER BZ端口初始化**/
GPIO_Init(GPIOB, GPIO_PIN_5, GPIO_MODE_IN_PU_IT); /**改为中断方式**/
/**RESET端口初始化---RESET螺丝刀控制器**/
GPIO_Init(GPIOB, GPIO_PIN_4, GPIO_MODE_OUT_PP_LOW_FAST);
/**为了不影响PC6的中断响应,特意初始化没有使用的PC0管脚**/
GPIO_Init(GPIOC, GPIO_PIN_0, GPIO_MODE_OUT_PP_HIGH_FAST);
/**signal_in端口初始化**/
GPIO_Init(GPIOA, GPIO_PIN_2, GPIO_MODE_IN_PU_NO_IT);
/**功能选择端口初始化**/ /**74HC595端口初始化**/
GPIO_Init(GPIOD,GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7, GPIO_MODE_OUT_PP_HIGH_FAST);
/**Reset_IO CLKIN**/
GPIO_Init(GPIOD, GPIO_PIN_0, GPIO_MODE_OUT_PP_HIGH_FAST);
}
1.3 读拨码开关的流程
程序中,利用ReadCounterNum函数读取拨码开关的数据设定值,分辨对拨码开关的个位、十位、百位数据进行设置和读取。读取个位数据程序段如下:
/**读取个位数据**/
bit_status = GPIO_ReadInputPin(GPIOC, GPIO_PIN_2); //DC1-8 8
if (bit_status == RESET) //SET or RESET
wCodeNum +=8; }
bit_status = GPIO_ReadInputPin(GPIOC, GPIO_PIN_3); //DC1-4 4
if (bit_status == RESET) //SET or RESET
wCodeNum +=4;
bit_status = GPIO_ReadInputPin(GPIOC, GPIO_PIN_4); //DC1-2 2
if (bit_status == RESET) //SET or RESET
wCodeNum +=2;
bit_status = GPIO_ReadInputPin(GPIOC, GPIO_PIN_5); //DC1-1 1
if (bit_status == RESET) //SET or RESET
wCodeNum +=1;
对于十位数据和百威数据的读取流程与个位数据的读取一致,只是对应位数据不同,十位数据对应位数据分别是128、64、32、16,百位数据对应位数据分别是2048、1024、512、256。
1.4 Signal in 信号的处理
Signal in 信号的处理通过TimeDo函数来实现。TimeDo函数中,每500ms扫描一次signal in信号,如果signal in信号来自RESET铜柱,那么保存铜柱位置,关闭蜂鸣器,并且点亮第一个螺丝位置的指示灯;如果signal in信号来自第1-47个螺丝,那么置位SET信号,关闭蜂鸣器,开启电动起子开始锁紧螺丝,如果signal in信号来自第48个螺丝,就点亮RESET铜柱位置的指示灯;另外,从硬件设计中我们可知,Signal in 信号是当电动起子碰触治具板上螺丝孔位置的铜柱产生的,如果电动起子碰触错误位置的螺丝孔位置的铜柱则开启蜂鸣器发出报警提示的声音,比如,当前待打螺丝位置为2,如果电动起子碰触螺丝孔2位置以外的铜柱,则蜂鸣器发出报警提示音,提醒操作人员打错螺丝位置。其程序流程图如图2所示。
1.5 BZ信号的处理流程
BZ信号的处理流程如图2所示。螺丝锁紧到位后电动起子控制器发出BZ信号,MCU控制模块接受到BZ信号后进入中断处理子程序中,中断处理程序包括关中断、SET信号清零、关闭电动起子,如果锁紧的螺丝是1-47个,那么点亮下一个位置螺丝的指示灯,如果锁紧的螺丝是最后一个即第48个,那么点亮RESET指示灯,然后开中断为下一个signal in信号的读取做好准备。
1.6 74HC595数据存储器数据的读取
通过HC595SendData函数可发送1到6个字节的数据,这些数据用来点亮和关闭对应个螺丝位置的指示灯、获取某个位置螺丝是否有电动起子的输入信号,最终将串行输入数据并行输出。传送1个字节的流程如图3所示。
2 程序下载调试
本设计所使用的编译环境是ST Visual Develop,编译环境开发界面如图4所示。程序使用ST-LINK工具下载,下载软件是ST Visual Programmer,程序下载界面如图5所示。
程序调试过程中,还有个bug在里面,BUG: 当打完第一个铜柱对应的螺丝的时候,在打第二个螺丝时出现告警提示音,通过DEBUG程序发现,在处理完前面打螺丝流程时遗漏了保存当前所打螺丝铜柱位置信息,导致后面判断中出现位置错误而开启蜂鸣器进行告警提示。
3 结束语
本文以C语言为编程语言,围绕以STM8S903K3为主的硬件电路功能,对序列打螺丝夹具中功能的设定、螺丝锁紧的选择、信息数据的处理存储、加工信息的显示、工作数据通信、报警等一系列功能进行了软件设计说明。该软件设计在硬件设计的基础上进行了实验调试和实际操作,并已投入实际应用中,实际解决了螺丝数量较多时按统一顺序锁紧,防止错打、漏打的问题并且具备提示、报警等功能,从实践结果和参数来看,该装置很好地解决了生产中的实际问题,具备很大的推广价值。
参考文献:
[1] 王雷. 基于STM8S903K3的电动自行车控制器设计与实现[D]. 南京: 南京理工大学, 2014.
[2] 陈方里, 钦仿仿. 基于STM8S的大功率BLDC驱动系统设计[J]. 技术与市场, 2015(10):9-10.
[3] 王强. 无刷直流电机无位置传感器起动控制与逆变器故障诊断研究[D]. 南京: 南京航空航天大学, 2015.
[4] 谭浩强. C语言程序设计[M].2版.北京: 清华大学出版社, 1999.
[5] STM8S903手册[Z]. June 2009.
[6] 74HC595 手册[Z]. 2003 Jun 25.
[7] A7C系列小型拨码开关参数手册[Z].