Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread
【24嵌入式设计大赛】基于HPM5300-EVK的无刷电机控制系统
发布于 2024-09-16 13:24:13 浏览:338
订阅该版
[tocm] 基于HPM5300-EVK的无刷电机控制系统 基于HPM5300-EVK的无刷电机控制系统是一个结合了高性能RISC-V内核MCU与无刷电机技术的先进系统。该系统通过HPM5300-EVK开发板实现对无刷电机的精确控制,以下是对该系统的详细分析: # 一、系统组成 1. HPM5300-EVK开发板 核心处理器:基于先楫半导体的HPM5300系列高性能RISC-V内核MCU,主频高达480MHz,支持双精度浮点运算及强大的DSP扩展,专为高性能运动控制和传感器应用设计。 存储资源:内置1MB Flash和288KB SRAM,为复杂应用提供足够的存储空间。 通信接口:拥有多个串行通信接口,如CAN-FD、LIN、UART、SPI、I2C等,并配备USB OTG内置HS PHY,满足各类通信需求。 模拟功能:集成了16位ADC(模数转换器)、12位DAC(数模转换器)以及运算放大器,支持多种传感器输入,包括光电式、磁感应和旋转变压器,适用于复杂的模拟信号处理。 调试支持:集成了板载调试器,并提供了标准JTAG接口,可以连接JLINK、DAPLINK等调试器,方便开发者进行代码调试。 2. 无刷电机 组成:无刷电机由转子和定子组成,转子通常由永磁体构成,定子则由线圈组成。通过电子控制器控制电流的方向和大小,实现电机的旋转。 优点:相比传统有刷电机,无刷电机具有高效率、低噪音、长寿命等优点。 3. 控制器 功能:控制器接收来自HPM5300-EVK开发板的控制信号,并通过电机驱动器将适当的电流和电压输送到无刷电机,实现对电机转速和方向的精确控制。 实现方式:通常采用微处理器或数字信号处理器(DSP)来实现运算和控制算法,如PID控制、矢量控制等。 # 二、系统特点 高精度控制:HPM5300-EVK开发板的高性能RISC-V内核和丰富的外设接口,使得系统能够实现无刷电机的高精度位置、速度和力矩控制。 高可靠性:无刷电机本身的结构设计和电子控制器的精确控制,使得系统具有较高的可靠性,能够在恶劣工况下稳定运行。 易于开发:HPM5300-EVK开发板提供了丰富的开发资源和便捷的调试环境,支持VS Code、SEGGER Embedded Studio等集成开发环境,方便开发者进行开发和调试。 广泛应用:该系统可广泛应用于工业自动化、电动车辆、家电产品、医疗设备等领域,实现高效、可靠和精准的控制。 ## 主要程序 代码使用的是先楫sdk代码生成工具,使用历程rt-thread-nano修改得到。 1.系统初始化 2.初始化pwm 3.初始化定时器输入捕获 4.初始化电调控制器。发送开机信号 ## 部分代码展示 ```c //初始化 int my_pwm_init(void) { uint32_t freq; uint8_t cmp_index = 0; pwm_cmp_config_t cmp_config[2] = {0}; pwm_config_t pwm_config = {0}; init_pwm_pins(HPM_PWM0); freq = clock_get_frequency(PWM_CLOCK_NAME); reload = freq / 1000 * PWM_PERIOD_IN_MS - 1; pwm_stop_counter(PWM); reset_pwm_counter(); pwm_get_default_pwm_config(PWM, &pwm_config); pwm_config.enable_output = true; pwm_config.dead_zone_in_half_cycle = 0; pwm_config.invert_output = false; /* * reload and start counter */ pwm_set_reload(PWM, 0, reload); pwm_set_start_count(PWM, 0, 0); /* * config cmp = RELOAD + 1 */ cmp_config[0].mode = pwm_cmp_mode_output_compare; cmp_config[0].cmp = reload + 1; cmp_config[0].update_trigger = pwm_shadow_register_update_on_hw_event; cmp_config[1].mode = pwm_cmp_mode_output_compare; cmp_config[1].cmp = reload; cmp_config[1].update_trigger = pwm_shadow_register_update_on_modify; /* * config pwm as output driven by cmp */ if (status_success != pwm_setup_waveform(PWM, PWM_OUTPUT_PIN1, &pwm_config, cmp_index, &cmp_config[0], 1)) { rt_kprintf("failed to setup waveform\n"); // while(1); } cmp_config[0].cmp = reload >> 1; /* * config pwm as reference */ if (status_success != pwm_setup_waveform(PWM, PWM_OUTPUT_PIN2, &pwm_config, cmp_index + 1, &cmp_config[0], 1)) { rt_kprintf("failed to setup waveform\n"); // while(1); } pwm_load_cmp_shadow_on_match(PWM, cmp_index + 2, &cmp_config[1]); rt_kprintf("pwm init success %d\r\n",reload); return RT_EOK; } ``` ### 初始化电调 ```c void air_start(void) { pwm_start_counter(PWM); pwm_issue_shadow_register_lock_event(PWM); rt_thread_mdelay(1000); rt_thread_mdelay(1000); rt_thread_mdelay(1000); pwm_update_raw_cmp_edge_aligned(PWM, 0,3200000*0.95); pwm_update_raw_cmp_edge_aligned(PWM, 1,3200000*0.95); rt_thread_mdelay(1000); rt_thread_mdelay(1000); pwm_update_raw_cmp_edge_aligned(PWM, 0,3200000*0.904); pwm_update_raw_cmp_edge_aligned(PWM, 1,3200000*0.904); } ``` # 结尾 我们很高兴看到您对 RT-Thread 的学习和使用充满热情,并希望您能够在 RT-Thread 的平台上实现更多的创新和应用。如果您在学习过程中遇到任何问题或需要进一步的帮助,请随时联系我们或访问 RT-Thread 的官方网站和社区论坛。我们期待与您一起成长,共同推动 RT-Thread 的发展!
1
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
ZWH
这个人很勤快,没空留下点什么
文章
3
回答
141
被采纳
3
关注TA
发私信
相关文章
1
RT-THREAD在STM32H747平台上移植lwip
2
正点原子miniSTM32开发板读写sdcard
3
反馈rtt串口驱动对低功耗串口lpuart1不兼容的问题
4
Keil MDK 移植 RT-Thread Nano
5
RT1061/1052 带 RTT + LWIP和LPSPI,有什么坑要注意吗?
6
RT thread HID 如何收发数据
7
求一份基于RTT系统封装好的STM32F1系列的FLASH操作程序
8
RT-Thread修改项目名称之后不能下载
9
rt-studio编译c++
10
有木有移植rt-thread(nano)到riscv 32位MCU上
推荐文章
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总线
ART-Pi
FinSH
USB
文件系统
DMA
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
rt-smart
FAL
ESP8266
I2C_IIC
WIZnet_W5500
ota在线升级
UART
cubemx
PWM
flash
packages_软件包
freemodbus
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
ulog
C++_cpp
at_device
本月问答贡献
出出啊
1516
个答案
342
次被采纳
小小李sunny
1440
个答案
289
次被采纳
张世争
794
个答案
171
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
1
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
4
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部