专栏
标签
如何将Sysblock的生成代码部署至树莓派
技术分享
发布于 2025-08-06 16:58:31
查看 12过去300天

在实际工作中,有时需要对模型进行半实物仿真,以此来验证模型的正确性。本文将以六步换相模型部署到树莓派4B为例,讲述如何将已建立好的模型以代码生成的形式部署到树莓派中。

前期准备

模型准备

本文使用的模型为无刷直流电机(BLDC)的六步换相模型,基本原理为利用电磁作用在定子上的三个相绕组中产生扭矩,然后根据霍尔传感器对转子位置的检测对转子进行分区控制。其中增量式编码器会输出转子更具体的位置,将这个位置与目标角度使用PID进行调节以控制定子中的PWM输出和正反转控制最后完成对电机的控制。

50.png

树莓派与驱动板准备

  1. 使用的树莓派为树莓派4B
  2. 使用的驱动板为ATK-PD6010B
  3. 使用的无刷直流电机为42JSF630AS-1000
  4. 导线若干

代码生成

1.解压最下方上传的附件1(模型及数据字典文件.7z),打开For_emd_code_2;

51.png

2.检查数据字典是否绑定成功,若未绑定点击进入数据字典,并点击选择已存在字典文件与当前模型绑定,选择解压包中的MODD文件完成绑定;

52.png

3.检查绑定后,点击代码生成,生成代码;

53.png

4.生成后点击代码生成路径进行跳转或复制地址进行跳转;

54.png

5.跳转后进入文件夹点击mwb_main进入并进行修改;

55.png

6.首先增加需要引用的头文件与定义树莓派的接口,define的接口可以根据不同的需求进行修改,本文的接口仅做参考,下图为修改前后的代码;

56.png

#include "For_emd_code_2_private.h"//声明头文件
#include "mwb_runtime.h"

#include <stddef.h>
#include <stdio.h>
#include <wiringPi.h> //导入wiringPi.h库

#define  EN_Out 1//设置引脚
#define  AH_pin 30//输出的引脚
#define  AL_pin 21
#define  BH_pin 22
#define  BL_pin 23
#define  CH_pin 24
#define  CL_pin 25
#define  HallA 27//输入的霍尔变量
#define  HallB 28
#define  HallC 29
#define  ENCA 0//编码器的输出
#define  ENCB 2
#define  ENCZ 3

代码说明:

  • #include "For_emd_code_2_private声明头文件,为下文写入变量做准备;
  • #include <wiringPi.h>引脚设置所需要的库;
  • #define EN_Out 1对端口名命名。

7.对端口的输出模式进行设置,其中Sources_id为目标角度波形更换参数,后续可以再模型中的subsystem中进行修改,PWM_up为PWM的上限限制,避免因其过快的转速导致驱动板过流,余下的KI_Global,KP_Global为PID参数;

57.png

wiringPiSetup();
    pinMode(EN_Out, OUTPUT);   // 配置端口为输出模式

    pinMode(AH_pin, OUTPUT);   // 配置端口为输出模式
    pinMode(AL_pin, OUTPUT);   // 配置端口为输出模式
    pinMode(BH_pin, OUTPUT);   // 配置端口为输出模式
    pinMode(BL_pin, OUTPUT);   // 配置端口为输出模式
    pinMode(CH_pin, OUTPUT);   // 配置端口为输出模式
    pinMode(CL_pin, OUTPUT);   // 配置端口为输出模式
          
    pinMode(HallA, INPUT);   // 配置端口为输入模式
    pinMode(HallB, INPUT);   // 配置端口为输入模式
    pinMode(HallC, INPUT);   // 配置端口为输入模式
    pinMode(ENCA, INPUT);   // 配置端口为输入模式
    pinMode(ENCB, INPUT);   // 配置端口为输入模式
    pinMode(ENCZ, INPUT);   // 配置端口为输入模式

    pullUpDnControl(HallA, PUD_DOWN);   // 对一个设置 IO 模式为 INPUT 的输入引脚设置上拉电阻模式
    pullUpDnControl(HallB, PUD_DOWN);   // 对一个设置 IO 模式为 INPUT 的输入引脚设置上拉电阻模式
    pullUpDnControl(HallC, PUD_DOWN);   // 对一个设置 IO 模式为 INPUT 的输入引脚设置上拉电阻模式
    pullUpDnControl(ENCA, PUD_UP);   // 对一个设置 IO 模式为 INPUT 的输入引脚设置上拉电阻模式
    pullUpDnControl(ENCB, PUD_UP);   // 对一个设置 IO 模式为 INPUT 的输入引脚设置上拉电阻模式
    pullUpDnControl(ENCZ, PUD_UP);   // 对一个设置 IO 模式为 INPUT 的输入引脚设置上拉电阻模式
    /* END:   use output variables of the model, 
              such as printing them out or assigning them to other variables */
              
    Sources_id =1;
    PWM_up = 30;
    KI_Global = 0.1;
    KP_Global = 0.1;

8.下面是树莓派端口读取和写入的设置,printf函数在电机运转的同时输出,会对电机的运转过程造成干涉,所以仅在调试过程中可以打开;

58.png

 HALL_A  = (int) digitalRead(HallA); //读取树莓派引脚输出的霍尔信号与编码器信号
        HALL_B  = (int) digitalRead(HallB);
        HALL_C  = (int) digitalRead(HallC);
        ENC_A   = (int) digitalRead(ENCA);
        ENC_B   = (int) digitalRead(ENCB);
        ENC_Z   = (int) digitalRead(ENCZ);


        Step();
        
        digitalWrite(AH_pin, A_P);//将计算得出的控制信号写入引脚
        digitalWrite(AL_pin, A_N);
        digitalWrite(BH_pin, B_P);
        digitalWrite(BL_pin, B_N);
        digitalWrite(CH_pin, C_P);
        digitalWrite(CL_pin, C_N);



        
        //printf("Hall:%d,%d,%d ||ENC:%d,%d,%d||",HALL_A,HALL_B,HALL_C,ENC_A,ENC_B,ENC_Z);//霍尔信号和编码器信号
        //printf("6Pha:%d,%d,%d,%d,%d,%d||",A_P,A_N,B_P,B_N,C_P,C_N);//6路PWM信号
        //printf("ENC_ref:%d||",ENC_ref);//构造的三角波信号源
        //printf("ENC_Back:%d||",ENC_Back);//基于编码器反馈的脉冲数
        //printf("gap:%d||PWM_cycle:%f||",(ENC_ref-ENC_Back),PWM_cycle);//高边PWM观测
        //printf("select_neg:%d ||select_pos:%d||",select_neg,select_pos);//构造的正扇区,负扇区
        //printf("\n");
        //delay(100);

9.更改后的代码见最下方上传的附件2(mwb_main.c),如果修改不成功可以考虑使用上面的代码覆盖源代码,如果对模型名称有修改的话,需要对代码的名称及内部描述的引用文件进行修改。

PC与树莓派连接

1.本文使用MobaXterm对树莓派进行控制,首先接线。根据下图所示信息进行接线

59.jpg
60.jpg
将两板接线;
61.jpg
下图为实际的接线图;
62.png

2.接线后将树莓派与PC建立连接,可以使用网线连接或网络连接均可无线网络则连接wlan0的地址,网线连接则连接eth0;

63.jpg

3.点击菜单中的Sessions,再点击New Session新建连接,本文使用ssh进行连接;

64.png

4.连接成功后进入菜单。

部署代码

1.在菜单中新建文件夹;

65.png

2.将生成好的代码拖入文件夹;

66.png

3.进入路径

cd /home/pi/Sixstep_code_0227/

4.对文件进行编译

gcc *.c -o mo -lwiringPi -lm

5.运行编译好的文件

./mo

实际运行效果见附件3(运行效果.mp4)。

所属专栏:Sysblock基础平台
产品信息:Sysblock 嵌入式代码生成工具
其他
附件 3 个附件(1086kb)

全部回答

暂无数据
暂无数据
用户
和原帖交流更多问题细节吧,去
我要发帖 我要发帖
资料中心 资料中心
查看更多>
热门帖子 热门帖子
主要贡献者 主要贡献者
过去7天