Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
先楫HPM_RISCV
【24嵌入式设计大赛】基于HPM5300的FOC电机旋钮
发布于 2024-09-18 06:08:27 浏览:762
订阅该版
[tocm] # 一、项目概述 本项目为基于HPM5300 EVK开发板、无刷电机驱动板和2208无刷电机组成的FOC旋钮。使用FOC的高度可控性,模拟各种旋钮的转动效果。 ## 目标功能 - 配合无刷电机驱动板,完成FOC闭环控制 - 圆形屏幕跑LVGL,做图形交互 - USB HID 接入,模拟实际设备 # 二、设计思路 - 初期使用现成的开发板、驱动板和屏幕做功能验证,三大部分分别调试完成,连接完成功能展示 - 做集成化设计,重新设计版图和结构,做成X-Knob这种形式的。USB 5V升压驱动电机,只需连接USB,不需要其他电源供电 # 三、实现过程 ## 1、硬件介绍 - 硬件连接 |HPM5300 EVK 引脚|外接模块|说明| |-|-|-| |PA26|M0_IN1|FOC驱动板| |PA27|NC|-| |PA28|M0_IN2|-| |PA29|NC|-| |PA30|M0_IN3|-| |PA31|NC|-| |PB13|IA|-| |PB14|IB|-| |PB02|SCL|AS5600| |PB03|SDA|-| |PB05|SCK|GC9A01| |PB07|MOSI|-| |PB10|DC|-| - 磁编码器部分 我所使用的无刷电机套装传感器使用的是磁编码器AS5600,并且给出的接口是I2C形式,因此需要使用开发板的I2C接口。 - 驱动板部分 这里使用的是`灯哥开源`的V3P电机驱动板,这是一个两路无刷驱动板,本次只使用到了其中一路。 - 屏幕部分 这里使用的是1.28寸 GC9A01 240X240 SPI屏,CS已接下拉电阻,RST已接复位电路,背光无法控制,默认打开,因此这三个角不需要接。 ## 2、软件实现 本工程使用的FOC算法部分,移植自[HPM5361MiniFOC](https://github.com/LX050724/HPM5361MiniFOC) ,在此感谢开源。本工程基于`RT Thread studio` IDE创建和调试。 - FOC算法适配 参考工程项目使用HPM的SEI接口连接传感器,获取角度数据,并依靠PWM连接触发,完成环路计算(在终中断中实现硬实时)。但我这套硬件只能用I2C读取,但是因为使用了RTT 标准I2C驱动,读写中有加锁,无法在中断中使用,会直接断言报错。且原工程环路计算频率极高(50K),在RTOS中直接使用不现实,一是I2C跟不上,二是影响RTOS运行。再者,本项目的目标是做旋钮效果模拟,因此选择降低环路计算频率。 下面主要讲下适配过程中的一些重要的地方。 `1:`编码器型号更换,原始角度从16位变为12位。 `2:`project_config中修改采样电阻和放大倍数。 `3:`PID系数重新调整。 `4:`环路计算改为定时100Hz运行一次。 但是因为计算频率的降低,导致使用电流环做反馈时一直碰到卡顿和震荡现象。尝试连续几天的PID调参,一直无法解决,遂选择放弃电流环,选择最简单的办法,使用传感器的角度直接做位置环路控制,进行计算变换。 并且因为时间没安排好,以及工作太多,导致功能实现进度极慢,目前这部分还只完成了简单的多档旋钮模拟。 - 界面LVGL适配 屏幕的驱动参考自[此处仓库](https://github.com/liyanboy74/gc9a01-esp-idf)。 ``` c static int LCD_Device_Init(void) { lcd_device = RT_NULL; lcd_device = (struct rt_spi_device *)rt_malloc(sizeof(struct rt_spi_device)); if(RT_NULL == lcd_device) { LOG_E("Failed to malloc the spi device."); return -RT_ENOMEM; } if (RT_EOK != rt_spi_bus_attach_device_cspin(lcd_device, SPI_LCD_DEVICE_NAME, "spi3",rt_pin_get("PB04"), RT_NULL)) { LOG_E("Failed to attach the spi device."); return -RT_ERROR; } if (RT_NULL == rt_device_find(SPI_LCD_DEVICE_NAME)) { LOG_E("Failed to probe the lcd."); return -RT_ERROR; } //配置spi参数 struct rt_spi_configuration cfg; { cfg.data_width = 8;//数据宽度为八位 cfg.mode = RT_SPI_MASTER | RT_SPI_MODE_0 | RT_SPI_MSB; cfg.max_hz = 80 * 1000 * 1000;// } rt_spi_configure(lcd_device, &cfg); //前面的频率配置没用,锁在了80M。 rt_pin_mode(LCD_DC_PIN, PIN_MODE_OUTPUT); GC9A01_Init(); GC9A01_FillRect(0,0,239,239,0XF800); return RT_EOK; } /* 导出到自动初始化 */ INIT_DEVICE_EXPORT(LCD_Device_Init); ``` 随后是LVGL接口的适配 ``` c static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p) { if(disp_flush_enabled) { int32_t x; int32_t y; for(y = area->y1; y <= area->y2; y++) { for(x = area->x1; x <= area->x2; x++) { GC9A01_DrawPixel(x,y,color_p->full); color_p++; } } } lv_disp_flush_ready(disp_drv); } ``` 这里的刷屏使用的画点,并且用来RTT标准驱动,导致刷屏很慢,后期等熟悉HPM的SPI DMA模式,使用这种方式来刷屏。 目前从x-knob的界面复制了一部分过来。 - USB HID适配 这部分打算跑`cherryusb`协议栈,但目前还处于计划表阶段,还没做。 [代码仓库地址](https://github.com/starry-m/HPM5300EVK_DEMO) # 四、现象 ![RTT-HPM5300.jpg](https://oss-club.rt-thread.org/uploads/20240918/6467d8e87b21139f597e9466e51e1caf.jpg.webp) # 五、总结 摊子铺的太大加上时间没安排好,导致做的项目乱七八糟,希望自己改正,后面一定要把他做完。在此也感谢RTT举办了这个比赛,让我能有机会玩到这么好的板子。
1
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
EITR_8350
学习ing~~~
文章
2
回答
0
被采纳
0
关注TA
发私信
相关文章
1
官网订了一块HPM6750EVK,淘宝没有卖的
2
hpm6750运行rt-tnread怎么双核一起运行
3
HPM6750跑RTT+Lwip百兆网很快,但是千兆网只有2MByte/s左右
4
如何使HPM6750工作在双核模式
5
hpm6750evk开发板使能C++特性,编译报错
6
STUDIO版本是2.2.6,在这个环境下调试HPM6750,出现以下现象。
7
RT-Thread Studio 如何设置野火DAP仿真?
8
hpm6750evkmini bsp导入studio失败
9
RT-Thread Studio 2.2.6版本JLINK版本是V7.5无法支持先楫RISC-V,需要更新JLINK固件
10
rt thread studio jlink最新版本 调试hpm6750,无法进入到main函数
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
MicroPython
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
19
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
6
个答案
2
次被采纳
用户名由3_15位
13
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
RTT_逍遥
1
篇文章
5
次点赞
大龄码农
1
篇文章
5
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部