智能晾机架项目
- 开发过程
- 前期准备
- 分离工程
- 导入工程
- 安装包
- 安装最近的rt-thread 包
- AB32VG1的 SDK包
- RISC-V-GCC工具链
- 下载
- 硬件搭建
- 开发板上的3.3V能否可用的问题??
- 大体的硬件规划
- 软件设计
- 控制逻辑设计
- 按键线程实现
- 其他线程的实现
- 代码地址
- 视频地址
- 遇到的问题
- rt-thread studio不习惯,还是用menuconfig来配置,但scons构建时,生成什么格式呢?
- 新建studio工程后,没有rtt配置及软件包的配置界面???
- 直接用sht3x的软件包,没法读出温湿度问题??
- 关于IIC管脚的初始化
- sht3x软件包如何操作模拟I2c?
- 问题的跟踪,rt_i2c_transfer()这个函数一直返回-1,why????
- multibuttun软件包在哪里?
- dht11直接用软件包,按PA0与PFO打印输出不一样问题??
正好公司项目已经完成了,进入了测试期,也赶上rtt与发烧友举办这个risc-v的大赛,所以就报名了,一来可以加深一下对rtt的理解,二来也了解下中科蓝讯的芯片。
开发过程
还是之前的套路,先把开发资料下载下来,然后就是看资料,写测试程序,最后集成。不再重复了,只是记录下主要的里程碑及遇到问题。
前期准备
主要是熟悉一下studio开发环境
分离工程
从rt-thread中分离出ab32的工程,之前操作过很多遍了,不再展开
导入工程
在rt-thread studio中选 文件 -> 导入 -> 选择 “RT-Thread Studio项目到工作空间中” ->选择好分离出的文件为根目录,点完成,自动导入项目。这种方式不行的话,就新建 一个基于rt-thread的项目,选基于ab32vg1的开发板即可,一样可以导入demo工程。
安装包
安装最近的rt-thread 包
找到sdk manager ,一定要选latest安装包,不是studio自带的那个版本
AB32VG1的 SDK包
安装后最新rt-thread包后,才能进行这一步的安装。否则会提示错误
RISC-V-GCC工具链
下载
不出意外的话,应该是可以直接编译通过,找到的资料都是用downloader下载。暂不支持仿真。
硬件搭建
开发板上的3.3V能否可用的问题??
因为要外接磁传感器,需要3.3V,开发板上自带的vcc3V3能否可用呢???看了下原理图,蓝讯这个开发板上不带3.3Vldo,本身这个3.3V是AB32VG1内部稳压输出的,且已经带载了红外,三色灯,TF卡座等外设,查看它的数据手册,最大输出电流只有150ma,还是偏小的。经过权衡,3.3v还是利用之前板子上的电压吧。
大体的硬件规划
大体需要的资源:
系统功能 | 管脚 | 需要资源(占用的管脚数) | 说明 |
---|---|---|---|
两路PWM(需要单独控制) | time5PWM2 PE1 LPWM1 PA1(这两路对应板子上的三色灯的两路灯,这样可以先模拟,没问题的话,再带载测试) | 2个 | 单独控制两个电机的转动 |
方向控制 | PE7 | 2个 | 控制电机转动方向(1个电机1个) |
雷达 | PF0 | 1个 | 雷达触发输入管脚 |
按键输入 | s2 PF1 | 1个 | 一键控制 |
温湿度 | PE2 SDA ,PE3 SCL(用sht30没有成功)换成DHT11,管脚为PA0,这块控制逻辑实质上与雷达是一样的。去掉吧,实际这块也没什么实际意义,阳台都是室内,能通过室外的阳台几乎是没有的 | 2个 | 用sht30,模拟IIc |
限位 | PE5,PE6 | 4个 | 前后左右方向限位,限制电机的转动 |
指示灯 | 只能选PE4了,对应的是三色灯的绿灯 | 1个 | 主要用于功能状态的指示 |
串口(就用开发板的串口1) | PA3(rx)33脚 PA4(tx) 34脚 | 2个 | 打印程序状态 |
需要的资源不多,开发板给留出的管脚够用,可以直接使用开发板上提供的按键输入,三色指示灯,另外,还可以再打开一路串口,实现程序状态的打印。其他功能电路,也不是很复杂,直接用之前项目的板子外接线就可以,也免去的画板及重新焊接的时间。
不知怎么弄的,sht30及dht11,直接用软件包都没有实现读取操作,可以用一头雾水来形容,追踪了一下代码,也没发现什么问题。看网友用18B20,并且都是接到PF0口来实现读取温度的,心中很疑惑,也问了厂家的技术,他也买了一个sht30来试,也一直没有回复。所以这块先放放吧,等待官方回复。去掉了,这块在stm32上是没有任何问题的,再说也没具体的实际意义,几乎没有阳台是可以通室外的,考虑再三,还是去掉了。
软件设计
控制逻辑设计
按键线程实现
使用MultiButton,软件包。使用,详见MultiButton官网说明,需要根据上面控制逻辑的设计,添加自己的逻辑即可。
其他线程的实现
按控制逻辑实现就可以,不再展开。
代码地址
智能晾衣架项目:gitee代码地址
视频地址
B站演示视频地址
遇到的问题
rt-thread studio不习惯,还是用menuconfig来配置,但scons构建时,生成什么格式呢?
答案是不可以,再用env来开发了,scons --target前期是要工程里有一个mdk或其他工具的模板文件。找了一圈,目录是没有的,还是返回studio的开发环境吧。
新建studio工程后,没有rtt配置及软件包的配置界面???
还真不是工程的事,是自己对studio不熟悉。将导航器的内容,当作项目资源管理器来对待了。造成没有rtt配置选项。切换到,窗口 -> 显示视图 -->资源管理器,即可
直接用sht3x的软件包,没法读出温湿度问题??
之前在stm32平台下,一直都是很顺利的,没有分析过源码,借这个机会,分析下。至于为什么要分析源码,因为,管脚压根就没有想要的波形输出。所以很有可能是初始化的时候就有问题。
关于IIC管脚的初始化
在libraries -> hal_drivers -> drv_soft_i2c.c里,有如下代码:
/* I2C initialization function */
int rt_hw_i2c_init(void)
{rt_size_t obj_num = sizeof(i2c_obj) / sizeof(struct ab32_i2c);rt_err_t result;for (int i = 0; i < obj_num; i++) {i2c_obj[i].ops = ab32_bit_ops_default;i2c_obj[i].ops.data = (void *)&soft_i2c_config[i];i2c_obj[i].i2c2_bus.priv = &i2c_obj[i].ops;ab32_i2c_gpio_init(&i2c_obj[i]);//这里便完成了初始化result = rt_i2c_bit_add_bus(&i2c_obj[i].i2c2_bus, soft_i2c_config[i].bus_name);RT_ASSERT(result == RT_EOK);ab32_i2c_bus_unlock(&soft_i2c_config[i]);LOG_D("software simulation %s init done, pin scl: %d, pin sda %d",soft_i2c_config[i].bus_name,soft_i2c_config[i].scl,soft_i2c_config[i].sda);}return RT_EOK;
}
INIT_BOARD_EXPORT(rt_hw_i2c_init);
若从上面的代码看,确实是看不出什么问题,暂且认为这里已经初始化好了。用示波器看,两个管脚确也波形输出,但只是一闪而过。
sht3x软件包如何操作模拟I2c?
通过sht3x_init()完成了将注册好的i2c设备,到sht3x间的映射,同时也创建一个互斥量 dev->lock = rt_mutex_create(“mutex_sht3x”, RT_IPC_FLAG_FIFO);这个锁只有在单次读后和反初始化时,会释放,也只有在这两上时刻,才会再次读取到温湿度值,也就是调用sht3x_read_singleshot(sht3x_device)这个函数。然后,再调用i2c_core.c中,rtt提供的i2c底层操作函数。这只是一个大体的调用过程。
问题的跟踪,rt_i2c_transfer()这个函数一直返回-1,why???
不能仿真,只能一个函数,一个分支的打印,追踪到i2c_core.c中rt_i2c_transfer()这个函数一直返回-1.为什么呢???
这个问题,弄了好几天,先暂停,完善其他功能代码。
multibuttun软件包在哪里?
在miscellaneous packages里。
dht11直接用软件包,按PA0与PFO打印输出不一样问题??
如下图所示:
这个是用PF0口输出的
这个是用PA0输出的。
手头就两种传感器,都试了,直接用软件包一直也没调通,但逻辑和雷达是差不多的,不同的是雷达是控制上下电机,而温湿度是控制左右电机,仅此而矣。所以决定先不弄温湿度了,先把项目进行下去,用手动不一样可以控制吗?