提示:设计资料在文章末尾有链接下载
功能需求:
1. 单按触摸按键关闭/开启连接的用电器电源
2. 双击触摸按键延时5分钟关闭连接的用电器电源
需求分析:
- 控制部分:单片机——要求引脚少,因为需要使用的引脚特别少。
- 触摸部分:专业触摸芯片——支持单个按键
- 继电器部分:用于控制用电器电源——5V控制220V
- 电源部分:220V转5V稳定模块——给单片机系统供电
- LED灯指示灯:用于夜间指示开关位置
- 外壳部分:兼容现有常见的86型开关
根据上述分析:
继电器采用固态的继电器,这样开关使用寿命可以大在提高;
单片机供电电源采用220V转5V模块;
单片机芯片采用stm8s003f3价格便宜引脚少
外壳采用成熟且使用广泛的86型开关
硬件设计:
查找资料
1. 先上网查找单按键触摸芯片。比如:TTP223-BA6。下载数据手册
2. 进入st官网www.st.com,然后在搜索栏中输入stm8s003关键字。我们将要下载stm8s003 datasheet(绘制原理图库文件以及layout)、下载stm8s的官方固件开发库(用于进行库开发,这种方法速度快不需要查寄存器手册。目前主流也是这种方式)、以及stm8s003使用手册(使用寄存器开发时用得到,里面有详细的寄存器说明)下载下来。
stm8s003f3 datasheet:
stm8s003固件库:
在st官网的stm8 embedded栏目中找到standard library字样,表示固件库。请仔细对照描述,查看是否为所需要固件库
注意:下载st官网的资料需要有st账号才行。用邮箱注册就行,这里就不再说明了。
查看手册,了解参数
stm8s003f3芯片工作电压、时钟等。此芯片有内部时钟,所以为了简化电路可以不接外部晶振
然后查看其他电气参数确定引脚驱动电压/电流为后续设置电路做准备
触摸芯片手册查询
原理图设计:
PCB layout设计:
查看86型开关设计图纸(从淘宝图片或者淘宝卖家那里获取),大概看下结构。发现触摸开关需要有一个玻璃板用于触摸,所以PCB我们需要设置为两部分。上部分:只放置触摸按钮;下部分:放置主控电路、供电电路等。
PCB Layout图:
底板:
顶层板:
3D渲染图:
软件设计:
思路:
通过查看TTP223-BA6/TTP223N-BA6手册发现这芯片有触发功能,所以按键的按下可以采用外部中断方式。然后判断双击:当有按键按下时定时器开始计时;当第二次按键按下时定时器停止计时,然后主程序中判断定时器时间。如果在1秒内按下次数≥2次,表示双击。如果1秒内按下次数=1次,表示单击。如果双击就执行延时5分钟使继电器断开用电器电源;如果单击使继电器立刻断开/闭合用电器电源。
步骤:
解压下载的stm8s的固件库并找到
库函数的帮助手册请参考固件库的chm文档。
或者使用BH7KQK的“STM8函数库中文参考.exe”小程序查找库函数。
外部中断中实现定时器启动
主程序:
void main(void)
{
uint8_t key_value = 0;//按键值
uint8_t temp = 0;
Init_CLK();//初始化时钟为内部快速时钟
Config_Stdperiph();//初始化相关外设
LED_on();
Delay_ms(500);
LED_off();
Delay_ms(500);//LED指示灯闪烁给触摸芯片500ms初始化时间
while(1)
{
//先判断按键值
if(TIM2_GetCounter() <= _1_SEC)
{
if(key_times >= 2)
{
key_value = 1; //双击
Timer2_clear();
}
}
else //大于1秒
{
if(key_times >= 1)
{
key_value = 2;//单击
Timer2_clear();
}
}
//再根据按键值来执行相关动作
if(key_value == 1)//双击
{
//延时关灯
TIM1_Cmd(ENABLE);//开启延时定时器1
Relay_on();//开灯
key_value = 0;
}
else if(key_value == 2)//单击
{
key_value = 0;
//延时关灯清零
Timer1_clear();
if(temp == 0)
{
temp = 1;
Relay_on();//开灯
}
else
{
temp = 1;
Relay_off();//关灯
}
}
//延时5分钟执行关灯
if(tim1_min >= _5_MIN)
{
Relay_off();
Timer1_clear();//清零延时定时器1
}
}
}
相关资料:
链接:https://pan.baidu.com/s/1GI0xd3HYnE_IOTd_Jj0pEw
提取码:x170