嘉立创产业服务站群
发作品签到
标准版

【ART-Pi】智能窗户电机控制器扩展板+272650A

工程标签

3.4k
0
0
0

简介

这是一块ART-Pi扩展版。本项目包含了一个AT8870 H桥驱动,以及雨滴传感器接口,板载一个温湿度传感器。操作系统采用RT-Thread。MCU开发IDE使用RT-Thread Studio。

简介:这是一块ART-Pi扩展版。本项目包含了一个AT8870 H桥驱动,以及雨滴传感器接口,板载一个温湿度传感器。操作系统采用RT-Thread。MCU开发IDE使用RT-Thread Studio。

开源协议

CC-BY-NC-SA 3.0

创建时间:2021-01-11 08:29:23更新时间:2021-10-05 14:09:45

描述

早就耳闻RTT大名,但是一直没有机会接触。趁着这次机会,正好能够增加一项技能。据说RTT的软件包可以很方便的接入阿里云等平台,于是决定顺便抱着学习RTT的态度参加这次活动。
计划使用RT-Thread的软件包接入阿里云,并且控制推窗器推杆电机正反转,实现窗户智能化控制。实测之后发现AT8870能提供的电流还是太小,即便是在无负载的情况下也无法完全驱动推杆,所以视频演示只能用一个小电机来做了。有机会再做一个继电器版本的来控制推杆。

原本就设计了温湿度传感器,结果涂鸦第二期训练营正好同时开营,而且还是主推MCU开发模式,真是太巧了,和ART-Pi活动配合的天衣无缝。于是临时更改设计,预留了涂鸦模块的位置,一个板子参加两个训练营吧,两边侧重点不同。

本项目迭代了两个硬件版本。 第一版: L298N H桥芯片+钮子开关双电源切换+温湿度传感器+光照传感器+双光耦。 第二版: AT8870 H桥芯片,移除钮子开关,增加OLED接口和位置,移除光照传感器。移除一个光耦。增加三个按键。

1. 电源

因为电机需要24V输入,电源方案: 电源从扩展板输入24V,通过扩展板的板载TPS54331将24V转为5V,然后通过P1的+5V_USB引脚向ART-Pi供电。24电源DC口设计了过压、过流保护电路。 电源方案也有较大的改动,由于取消了原先的钮子开关,后来发现还是应该在5V增加一个防倒灌二极管,这样才能单独使用底板供电。于是飞了一个上去。
24-5V电源芯片介绍:

2. 电机驱动

电机驱动使用了单通道H桥电流控制电机驱动器AT8870。特点:

  • 宽电压供电,6.5V-38V
  • 低RDS(ON)电阻
  • PWM电流整流/限流
  • 支持低功耗休眠模式
  • 过温关断电路
  • 短路保护
  • 欠压锁定保护
  • 自动故障恢复
  • 3.6A峰值驱动输出,2A持续输出能力

原计划使用了电子推杆,直接给24V即可驱动,正负极换向即可反方向运动。结果测试过程中Boom了一个AT8870,看来AT8870驱动能力不够,所以demo改为驱动小电流的电机,用来拉个窗帘或者卷帘还是OK的。
AT8870.png
最重要的是,当无底板的时候,也可以把它当作一个独立的电机驱动板来用!!

3. 雨滴检测

板子到了以后发现我选错了封装,用了一个1.5间距的排针...这个货就是比2.54mm间距的贵很多,手头还没有这个间距的排针。暂时就不做雨滴检测测试了。

5. 温湿度检测

没有使用常见的SHT31,而是使用TI的HDC1080DR,而且它更便宜啊。最终把它设计到板子右上角,通过槽孔隔离,底层通孔开窗,尽量减少板子自身发热对温度测量的影响。
image.png

5. 按键

  1. 关窗按键:按下会进入关窗操作(旋转电机),中间再按可以暂停,然后再按继续完成余下关窗操作。同时屏幕会显示正在关窗。
  2. 开窗按键:按下会进入开窗操作(反向旋转电机)。操作逻辑同上。同时屏幕会显示正在开窗。

6. OLED 显示

image.png
显示内容:

  • 时钟(使用了STM32H750的硬件RTC,使用了NTP功能定期同步时钟)。
  • 窗户状态
  • 开关状态
  • 实时天气(使用了高德天气API)
  • 室内温湿度(板载HDC1080提供)
  • 按键的时候提示正在开窗还是关窗
    OLED驱动芯片为SSD1315,全局刷新模式。初始化代码和网上流行的的略有差别。

Note:

  • RTT和RTT Studio第一次接触,肝了好多天,终于一次性搞定所有代码。
  • 第一次尝试使用多页原理图。还算顺利。

原理图所有阻容均支持嘉立创SMT基础库。

blockdiagram.png

软件设计

  • 软件工程由RT-Thread Studio中创建。
  • 项目充分利用了RT-Thread的多线程特性,使用事件来实现线程之间的相互通讯。
  • 项目使用了RT-Thread自动初始化的特性,所以在main()中基本看不到其他初始化函数。
  • RT-Thread 版本: 4.0.3
  • RT-Thread Studio 版本: 2.0.0

此版本与涂鸦版本在软件上有很大的区别。天气信息获取、时钟同步、云平台等都有很大的不同,这个版本更多利用了RT-Thread操作系统自身的线程来访问网络以及相互协同工作。

关于时钟

本项目使用了STM32H750的硬件RTC,通过NTP进行时钟同步。而且我发现了一个奇怪的现象,一旦我操作电机之后,drv_rtc.从里面的return mktime(&tm_new);会返回一个错误的数据,寄存器出来的值是对的,但是mktime返回的时间戳就不对了!后来我只好重写了一个函数:void app_read_rtc(struct tm *timeinfo),直接传指针进去,反正我不需要时间戳,我需要的是日期和时间。

关于天气

我实现了自动根据IP来查询本地天气。

天气免费API其实有很多,免费的比较推荐和风天气和高德。本项目最后采用了高德的免费天气API。使用的时候请自行使用源代码中的宏定义写入自己的API KEY。
关于天气归属地,我还是用了一个免费的API来获取IP地址的归属地,然后根据归属地自动获取当地天气,缺点是只能精确到市一级。代码中还可以自定义默认的归属地(本例中是余杭区),在归属地API无法获得信息情况下,根据默认的归属地查询天气。

关于阿里云

RT-Thread的一大特点是有各种软件包。但是阿里云的软件包虽然可以连上服务器,但是配网部分我的测试结果是那部分没有移植完成,如果启用了配网,是无法通过编译的。所以设备就无法通过阿里的“云智能”进行配网和绑定设备,无法接入智能生活平台使用。最后只能绕道使用阿里物联网平台和IoT Studio,做了一个手机H5页面来进行控制,速度响应会比app控制慢一些,但是仍然完成了本项目所需要的显示和控制。

关于OLED驱动和硬件I2C

一开始先尝试了RT-Thread的u8g2软件包,确实能很快驱动OLED屏幕。但是它使用了GPIO模拟I2C,却没有使用RT-Tread的软件I2C框架,而我的两个I2C设备都挂在这个I2C总线上,修改起来很麻烦。于是放弃软件I2C,改用硬件I2C,然后毫不意外遇上了传说中的STM32 I2C锁死问题,通过重新初始化解决。
驱动OLED遇到了很多问题,一开始使用局部刷新方式,但是会随机出现一些部分错位。然后改用全局刷新,却在开机的时候垂直错位4个bit。然后debug了很久,通过修改offset设置修复。但是发现运行久了还是会逐渐发生错位。这是一个很奇怪的现象,在其他芯片上没出现过这种问题。可能与I2C锁死的处理方式有关?需要进一步检查。

我还曾经尝试使用硬件I2C + DMA,折腾了2天之后才发现ART-Pi引出的I2C4只支持BDMA,而BMDA只能访问SRAM4,如果要使用DMA就要把buffer存放或者映射到SRAM4,这个...在CubeMX里面操作还比较麻烦,需要修改LD文件。于是暂时放弃。

关于HDC1080

HDC1080的调试也花了不少时间,最开始也曾经尝试使用RT-Thread的HDC1000软件包(与HDC1080兼容)。但是RTT注册了软件I2C1之后,软件包在初始化设备的时候却提示找不到i2c1。于是放弃。软件包使用了传感器框架反而使得初始化和访问变得很复杂。
改用硬件I2C之后,由于HAL进行了I2C读写封装,如果HDC1080直接使用HAL_I2C_MEM_Write()会导致测量命令发送失败,读取温湿度也失败。网上资料很少,最后终于从国外网友的一篇帖子里面找到灵感,解决了它的读取问题。

源文件简要说明:

├─applications
│  ├── amap_weather.c   //高德天气API相关
│  ├── amap_weather.h
│  ├── app_event.c      //事件和全局变量
│  ├── app_event.h
│  ├── app_oled_hwi2c.c     //OLED硬件I2C驱动
│  ├── app_window_control.c //电机控制相关
│  ├── linkkit_solo.c   //阿里云相关
│  ├── main.c
│  ├── oled.c           //OLED显示相关
│  ├── oledfont.h       //OLED字体相关
│  ├── oled.h
│  ├── sensor_hdc1080.c        //温湿度传感器相关
│  └── SConscript

|

>

Github地址

Github项目地址

图片

第二版实物手机APP
2_1.jpgapp.jpg

最后的建议

  1. 尽量还是做一个电机部分的电源隔离,否则可能会对OLED显示产生干扰。
  2. 如果不隔离,至少要增加一个扩展板5V输出防倒灌二极管。
  3. 如果使用推杆这类无需调速的应用,还是继电器最佳。

设计图

原理图(1 / 3)
PCB

BOM

IDNameDesignatorFootprintQuantity
1220uF/50VC1610X10.5_JX1
216KR6R06031
3TPS54331DRU1SOIC-8_L5.0-W4.0-P1.27-LS6.0-BL1
48.2nFC4C06031
5mts203K1MTS-2031

附件

序号文件名称下载次数
1
QQ20210329-164148@2x.png
13
2
ART-Pi2_1.mp4
91
克隆工程
添加到专辑
0
0
分享
侵权投诉

评论

全部评论(1)
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航