91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于RT-Thread與瑞薩 VisionBoard 的多功能電機驅動器開發(fā) | 技術集結

RT-Thread官方賬號 ? 2026-02-12 18:14 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1. 前言

該項目是基于瑞薩 VisionBoard 主控芯片開發(fā)的多功能電機驅動器,核心通過 485 串口協議實現外部設備與驅動器的通訊,進而控制電機啟停等動作。開發(fā)過程中為豐富功能,臨時新增了通用隔離輸入輸出、步進電機驅動等硬件電路,目前已完成電源模塊、無刷電機驅動模塊、485 通訊模塊的功能驗證。

這次開發(fā)是實踐學習的過程:不僅接觸了新的 PCB 制圖工具完成電路布局與走線(雖布局走線仍有待優(yōu)化),還學習了 RT-Thread 操作系統(tǒng)的基礎使用,同時初步掌握了瑞薩 VisionBoard 芯片及配套開發(fā)工具的操作邏輯。(我的這個作品項目主要是我個人學習一下第一次參加比較懵所以整體是一團亂的所以希望大家見諒哈謝謝)

a3fa122c-07fb-11f1-96ea-92fbcf53809c.png

a40c1454-07fb-11f1-96ea-92fbcf53809c.png

(實力有限我只是把我想嘗試的部分先添加進去了看上去很雜后面會重新畫板打樣,然后功能這次就都一個模塊一個模塊去實現并沒有進行整合,然后另外的BTB拓展板是后面發(fā)現RPI的PWM口正常來說應該是三個可以實現PWM互補然后用六步換相吧好像但是工具不是很會用所以就麻煩了點然后不夠用所以就臨時打樣的有加LED數碼管OLED并且把BTB的IO口用排針再引出來)

2. 設計方案

2.1電機模塊

2.1.1 電機選擇

選用兩類電機覆蓋不同場景:

無刷電機:用于持續(xù)運轉的場景;

步進電機:用于高精度位置控制的場景。

2.1.2 無刷電機控制

基于硬件電路實現驅動與監(jiān)測:

核心驅動:采用 EG2123A 無刷電機驅動芯片(U29),輸出電機相驅動信號;

電流監(jiān)測:通過 INA240 雙向電流檢測芯片(U25、U26),實時監(jiān)測無刷電機的相電流;

功率輸出:由 NMOS 管組成的功率電路(Q4、Q5 等),放大驅動信號后連接無刷電機(接口 J8)。

  • a41f198c-07fb-11f1-96ea-92fbcf53809c.png

這個是驅動波形(電機轉起來好像還是有點問題還得再測一下看看但是電路能正常的驅動電機)

  • a42ba012-07fb-11f1-96ea-92fbcf53809c.png

2.1.3 步進電機控制

基于 A4988 芯片實現細分驅動:

驅動核心:采用 A4988 雙步進電機驅動芯片(U1、U2),支持 DIR(方向)、STEP(脈沖)控制;

電流監(jiān)測:通過 INA219 電流檢測芯片(U3、U4),監(jiān)測步進電機工作電流;

接口:通過 J10、J13 接口連接步進電機,傳輸驅動信號。

a437eaac-07fb-11f1-96ea-92fbcf53809c.png

2.2 主控板及其按鍵模塊

2.2.1 主控芯片選擇

選用瑞薩 VisionBoard 系列芯片作為主控核心,負責:解析 485 通訊指令、輸出電機驅動信號、管理各功能模塊的邏輯調度。

2.2.2 無線通信模塊的選?。ㄕ{整為:通訊模塊(485 串口通訊))

采用 “隔離 + 獨立供電” 的 485 通訊方案:

信號隔離:通過 TJA121M31 芯片(U13)實現主控與 485 總線的信號隔離;

總線收發(fā):通過 GM485E 收發(fā)器(U16)完成 485 差分信號的轉換;

電源隔離:通過 B0505S-1WR3 模塊(U14)為 485 電路單獨供電,避免共地干擾;

接口:通過 J15 接口連接外部 485 設備。

  • a444a148-07fb-11f1-96ea-92fbcf53809c.png

a4506a50-07fb-11f1-96ea-92fbcf53809c.pnga45ce15e-07fb-11f1-96ea-92fbcf53809c.pnga4684670-07fb-11f1-96ea-92fbcf53809c.png

這些主要是485測試到的波形能夠使用但是波形可能不太正常峰值沒有到3.3V還得修改。

2.2.3 通用隔離輸入輸出模塊

通過 EL357N 光耦實現信號隔離:

隔離輸入:外部信號經 2.2K 電阻限流、1N4148W 防反后,通過光耦(U18、U19)傳輸至主控(MCU_IN1~IN4,接口 U40);

隔離輸出:主控信號(MCU_OUT1~OUT2)經光耦(U20、U21)隔離后輸出(接口 U42、U7),配合 4.7K 上拉電阻增強驅動能力。

  • a47487a0-07fb-11f1-96ea-92fbcf53809c.png

2.3.5 電源模塊

設計多級穩(wěn)壓電路,為各模塊供電:

+12V 輸入:經 U54 芯片穩(wěn)壓后,供給無刷電機驅動等高壓模塊;

+12V 轉 + 5V:經 U35 芯片轉換,供給 485 通訊、無刷驅動電路;

+5V 轉 + 3.3V:經 RT90L3-33GB LDO(U36)轉換,供給主控、光耦、電流檢測芯片等低壓模塊;

濾波:各電源支路搭配 10uF/0.1uF 電容,實現穩(wěn)壓濾波。

a482dc1a-07fb-11f1-96ea-92fbcf53809c.png

下面這張圖是電源的紋波還可以個人感覺可能有機會再調試下電阻電容

a48e302e-07fb-11f1-96ea-92fbcf53809c.pnga499b336-07fb-11f1-96ea-92fbcf53809c.pnga4a55718-07fb-11f1-96ea-92fbcf53809c.png

下面的這幾張是降壓后的波形

a499b336-07fb-11f1-96ea-92fbcf53809c.pnga4b823fc-07fb-11f1-96ea-92fbcf53809c.png

3. 代碼工程

3.1源碼分享

分享 RT-Thread 在瑞薩 VisionBoard 的適配代碼;

提供 485 驅動、無刷電機驅動、電源監(jiān)測等模塊的源碼(含初始化、指令解析邏輯)。

rasc配置以及部分代碼

  • a4c3420a-07fb-11f1-96ea-92fbcf53809c.png

PWM參數死區(qū)時間波形方式以及頻率等需要按照實際去調
可參考RT-Thread指南

《RA8D1 Vision Board開發(fā)實踐指南》上線啦

十三、RA8D1 Vision Board上的IIC實踐(歐小龍)

https://club.rt-thread.org/ask/article/ee39d1a9067b6ca0.html

RT-Thread-【Vision Board 創(chuàng)客營】Vision Board上的ADC實踐RT-Thread問答社區(qū) - RT-Thread

https://club.rt-thread.org/ask/article/921f3b1452d1d203.html

[RT-Thread-Vision Board創(chuàng)客營] PWM模塊實踐RT-Thread問答社區(qū) - RT-Thread

https://club.rt-thread.org/ask/article/921f3b1452d1d203.html


motor_ctrl.c

#include"FOC.h"#include"rtdevice.h"

#defineMOTOR_THREAD_STACK_SIZE 2048

#defineMOTOR_THREAD_PRIORITY 8

#defineMOTOR_THREAD_TIMESLICE 10

#defineMAX_TARGET_SPEED_RPM 2400.0f

#defineSPEED_RAMP_RATE 100.0f

static float current_target_speed = 0.0f;

static rt_bool_t motor_enabled = RT_FALSE;

static rt_uint16_t motor_pole_pairs = 7;

static float rpm_to_radps(float rpm) {

return rpm 2.0f PI / 60.0f;

}

static float radps_to_rpm(float radps) {

return radps 60.0f / (2.0f PI);

}

static float speed_ramp(float target_speed, float current_speed, float dt) {

float max_delta = SPEED_RAMP_RATE * dt;

if (target_speed > current_speed) {

current_speed += max_delta;

if (current_speed > target_speed) current_speed = target_speed;

} else {

current_speed -= max_delta;

if (current_speed < target_speed) current_speed = target_speed;?

} return current_speed;

}

static void motor_thread_entry(void *parameter) {

static rt_tick_t last_time = 0;

static float current_speed_rpm = 0.0f;

foc_init(); foc_start(); motor_enabled = RT_TRUE;

while (1) { rt_tick_t current_time = rt_tick_get(); float dt = (current_time - last_time) * 0.001f; if (dt <= 0) dt = 0.001f;

if (motor_enabled) {
float target_velocity = get_target_velocity();
float target_speed_rpm = radps_to_rpm(target_velocity);

target_speed_rpm = target_speed_rpm > MAX_TARGET_SPEED_RPM ? MAX_TARGET_SPEED_RPM : target_speed_rpm;
target_speed_rpm = target_speed_rpm < -MAX_TARGET_SPEED_RPM ? -MAX_TARGET_SPEED_RPM : target_speed_rpm;

current_speed_rpm = speed_ramp(target_speed_rpm, current_speed_rpm, dt);

float target_mech_radps = rpm_to_radps(current_speed_rpm);
FOC_M0_SET_VEL(target_mech_radps);

foc_loop();

if (current_time - last_time > RT_TICK_PER_SECOND) {
float actual_vel = getVelocity();
float actual_rpm = radps_to_rpm(actual_vel);
rt_kprintf("Motor: Target=%.1fRPM, Actual=%.1fRPM\n", current_speed_rpm, actual_rpm);
last_time = current_time;
}
} else {
current_speed_rpm = 0;
FOC_M0_SET_VEL(0);
}

rt_thread_mdelay(1);
last_time = current_time;

}

}

void motor_start(void) {

rt_thread_t tid = rt_thread_create("motor", motor_thread_entry, RT_NULL, MOTOR_THREAD_STACK_SIZE, MOTOR_THREAD_PRIORITY, MOTOR_THREAD_TIMESLICE);

if (tid) { rt_thread_startup(tid);

}

}

void motor_enable(rt_bool_t enable) {

motor_enabled = enable;

if (!enable) {

set_target_velocity(0);

}

}


rs485.c

#include"bsp_rs485.h"
#include"hal_data.h"

#defineRS485_RX_BUF_SIZE 100
#defineRS485_SWITCH_DELAY 10

static uint8_t rs485_rx_data[RS485_RX_BUF_SIZE];
static volatile uint16_t rs485_rx_datalen;
static volatile bool rs485_rx_complete;
static volatile bool rs485_tx_complete;

fsp_err_t RS485_Init(void)
{
fsp_err_t err = FSP_SUCCESS;
err = R_SCI_B_UART_Open(&g_uart2_rs485_ctrl, &g_uart2_rs485_cfg);
if(FSP_SUCCESS != err) return err;
err = R_SCI_B_UART_Read(&g_uart2_rs485_ctrl, rs485_rx_data, RS485_RX_BUF_SIZE);
return err;
}

void RS485_Print(uint8_t *str, uint32_t strlen)
{
RS485_TX_EN;
R_BSP_SoftwareDelay(RS485_SWITCH_DELAY, BSP_DELAY_UNITS_MILLISECONDS);
rs485_tx_complete = false;
R_SCI_B_UART_Write(&g_uart2_rs485_ctrl, str, strlen);
while(false == rs485_tx_complete);
R_BSP_SoftwareDelay(RS485_SWITCH_DELAY, BSP_DELAY_UNITS_MILLISECONDS);
RS485_RX_EN;
}

uint16_t RS485_GetRxData(uint8_t *buf, uint16_t len)
{
uint16_t copy_len = (rs485_rx_datalen < len) ? rs485_rx_datalen : len;
R_BSP_InterruptsDisable();
memcpy(buf, rs485_rx_data, copy_len);
rs485_rx_datalen = 0;
rs485_rx_complete = false;
R_BSP_InterruptsEnable();
R_SCI_B_UART_Read(&g_uart2_rs485_ctrl, rs485_rx_data, RS485_RX_BUF_SIZE);
return copy_len;
}

bool RS485_GetRxComplete(void)
{
return rs485_rx_complete;
}

void rs485_uart2_callback(uart_callback_args_t *p_args)
{
switch(p_args->event)
{
case UART_EVENT_RX_COMPLETE:
rs485_rx_complete = true;
break;
case UART_EVENT_RX_CHAR:
R_BSP_InterruptsDisable();
if(rs485_rx_datalen < RS485_RX_BUF_SIZE)
{
rs485_rx_data[rs485_rx_datalen] = (uint8_t)p_args->data;
rs485_rx_datalen++;
}
R_BSP_InterruptsEnable();
break;
case UART_EVENT_TX_COMPLETE:
rs485_tx_complete = true;
break;
default:
break;
}
}

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • 瑞薩
    +關注

    關注

    37

    文章

    22481

    瀏覽量

    90811
  • 電機驅動器
    +關注

    關注

    16

    文章

    860

    瀏覽量

    66409
  • RT-Thread
    +關注

    關注

    32

    文章

    1611

    瀏覽量

    44803
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    RT-Thread Vector軟件包:嵌入式開發(fā)的動態(tài)數組容器 | 技術集結

    RT-Thread Vector軟件包:嵌入式開發(fā)的動態(tài)數組容器 | 技術集結
    的頭像 發(fā)表于 01-25 09:33 ?5366次閱讀
    <b class='flag-5'>RT-Thread</b> Vector軟件包:嵌入式<b class='flag-5'>開發(fā)</b>的動態(tài)數組容器 | <b class='flag-5'>技術</b><b class='flag-5'>集結</b>

    RA4系列開發(fā)板體驗】+RT-thread5.0.0

    1.插上電源和自制的ST-Link。2.下載RT-Thread5.0.0 https://github.com/RT-Thread/rt-thread3.下載MDK中的
    發(fā)表于 12-28 00:35

    RT-Thread Studio驅動SD卡

    總結前言硬件平臺:RT-Thread ART-Pi STM32H750XBH6開發(fā)板 H750開發(fā)開發(fā)軟件:RT-Thread Studi
    發(fā)表于 12-27 19:13 ?20次下載
    <b class='flag-5'>RT-Thread</b> Studio<b class='flag-5'>驅動</b>SD卡

    RT-Thread全球技術大會:的解決方案、產品陣容以及四大核心技術介紹

    RT-Thread全球技術大會:的解決方案、產品陣容以及四大核心技術介紹 ? ? ? ? ? 審核編輯:彭靜
    的頭像 發(fā)表于 05-27 10:14 ?1764次閱讀
    <b class='flag-5'>RT-Thread</b>全球<b class='flag-5'>技術</b>大會:<b class='flag-5'>瑞</b><b class='flag-5'>薩</b>的解決方案、產品陣容以及四大核心<b class='flag-5'>技術</b>介紹

    RT-Thread全球技術大會:關于“e-AI”概念的訓練和開發(fā)流程

    RT-Thread全球技術大會:關于“e-AI”概念的訓練和開發(fā)流程 ? ? ? ? 審核編輯:彭靜 ?
    的頭像 發(fā)表于 05-27 10:30 ?1596次閱讀
    <b class='flag-5'>RT-Thread</b>全球<b class='flag-5'>技術</b>大會:關于<b class='flag-5'>瑞</b><b class='flag-5'>薩</b>“e-AI”概念的訓練和<b class='flag-5'>開發(fā)</b>流程

    RT-Thread全球技術大會:搭載觸摸按鍵單元的MCU介紹

    RT-Thread全球技術大會:搭載觸摸按鍵單元的MCU介紹 ? ? ? ? 審核編輯:彭靜 ?
    的頭像 發(fā)表于 05-27 10:33 ?1736次閱讀
    <b class='flag-5'>RT-Thread</b>全球<b class='flag-5'>技術</b>大會:搭載觸摸按鍵單元的<b class='flag-5'>瑞</b><b class='flag-5'>薩</b>MCU介紹

    RT-Thread大會:e- AI成功案例及部署

      RT-Thread IoT OS Global Tech Conference (RT-Thread GTC,RT-Thread全球技術大會)致力于圍繞
    的頭像 發(fā)表于 05-27 10:18 ?2001次閱讀
    <b class='flag-5'>RT-Thread</b>大會:<b class='flag-5'>瑞</b><b class='flag-5'>薩</b>e- AI成功案例及部署

    RT-Thread全球技術大會:關于RA2L1-CPK低功耗CPU演示

    RT-Thread全球技術大會:關于RA2L1-CPK低功耗CPU演示 ? ? ? ? ? 審核編輯:彭靜 ?
    的頭像 發(fā)表于 05-27 15:23 ?2062次閱讀
    <b class='flag-5'>RT-Thread</b>全球<b class='flag-5'>技術</b>大會:關于<b class='flag-5'>瑞</b><b class='flag-5'>薩</b>RA2L1-CPK低功耗CPU演示

    電子正式成為RT-Thread金牌會員:進一步加速RA生態(tài)發(fā)展

    日前,全球半導體解決方案供應商電子(Renesas)與知名物聯網操作系統(tǒng)廠商睿賽德科技(RT-Thread)簽署會員合作協議,電子正
    的頭像 發(fā)表于 11-09 10:38 ?1390次閱讀
    <b class='flag-5'>瑞</b><b class='flag-5'>薩</b>電子正式成為<b class='flag-5'>RT-Thread</b>金牌會員:進一步加速RA生態(tài)發(fā)展

    【線下培訓】上海臨港: RT-Thread × 工業(yè)監(jiān)視 RA6M3 HMI Board解決方案

    RT-Thread將于10月14日在上海臨港舉行一場線下培訓。 本次培訓將為開發(fā)者們帶來期待已久的熱門技術主題,
    的頭像 發(fā)表于 09-07 17:40 ?1774次閱讀
    【線下培訓】上海臨港: <b class='flag-5'>RT-Thread</b> × <b class='flag-5'>瑞</b><b class='flag-5'>薩</b> 工業(yè)監(jiān)視<b class='flag-5'>器</b> RA6M3 HMI Board解決方案

    Cortex-M內核RA MCU的RT-Thread BSP制作教程發(fā)布

    Cortex-M內核RA MCU的RT-Thread BSP制作教程發(fā)布
    的頭像 發(fā)表于 09-18 10:58 ?1597次閱讀
    <b class='flag-5'>瑞</b><b class='flag-5'>薩</b>Cortex-M內核RA MCU的<b class='flag-5'>RT-Thread</b> BSP制作教程發(fā)布

    【議程發(fā)布】10月上海線下培訓:RT-Thread × 工業(yè)監(jiān)視+HMI解決方案!

    為大家?guī)硇袠I(yè)主題演講! 同時,我們也邀請到RT-Thread工程師 張丙儒 和 張康 ,他們將為開發(fā)者們帶來期待已久的熱門技術主題培訓,RT-Thread ×?
    的頭像 發(fā)表于 09-28 18:45 ?1332次閱讀
    【議程發(fā)布】10月上海線下培訓:<b class='flag-5'>RT-Thread</b> × <b class='flag-5'>瑞</b><b class='flag-5'>薩</b> 工業(yè)監(jiān)視<b class='flag-5'>器</b>+HMI解決方案!

    【好書推薦】RT-Thread設備驅動開發(fā)指南

    近年來國內芯片產業(yè)和物聯網產業(yè)的快速崛起,行業(yè)發(fā)展迫切需要更多人才,尤其需要掌握嵌入式操作系統(tǒng)等底層技術的人才。隨著RT-Thread被更廣泛地應用于行業(yè)中,開發(fā)者對嵌入式驅動
    的頭像 發(fā)表于 08-01 08:35 ?2021次閱讀
    【好書推薦】<b class='flag-5'>RT-Thread</b>設備<b class='flag-5'>驅動</b><b class='flag-5'>開發(fā)</b>指南

    電子全球VP蒞臨RT-Thread指導交流

    近日,電子高級副總裁関俊彥(ToshihikoSeki)先生及電子嵌入式處理事業(yè)部市場總監(jiān)沈清女士一行拜訪了上海睿賽德電子科技有限
    的頭像 發(fā)表于 08-30 13:11 ?1262次閱讀
    <b class='flag-5'>瑞</b><b class='flag-5'>薩</b>電子全球VP蒞臨<b class='flag-5'>RT-Thread</b>指導交流

    電子亮相RT-Thread 20周年開發(fā)者大會

    日前,“開源向實·生產力進化啟示錄”全球峰會暨RT-Thread睿賽德二十周年開發(fā)者大會在上海舉行。過去一年中,電子與RT-Thread
    的頭像 發(fā)表于 02-02 16:05 ?290次閱讀