AB32VG1项目之智能晾衣架

2023-10-26

智能晾机架项目


正好公司项目已经完成了,进入了测试期,也赶上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输出的。
在这里插入图片描述

手头就两种传感器,都试了,直接用软件包一直也没调通,但逻辑和雷达是差不多的,不同的是雷达是控制上下电机,而温湿度是控制左右电机,仅此而矣。所以决定先不弄温湿度了,先把项目进行下去,用手动不一样可以控制吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AB32VG1项目之智能晾衣架 的相关文章

随机推荐