当前位置:首页 > 嵌入式 > 嵌入式硬件
[导读]基于模型设计是国外流行的一种先进的嵌入式系统开发方式。以无刷直流电机为例,利用开发工具Simulink、Stateflow、RealTime Workshop(RTW)等,可在MATLAB平台实现其算法模型。经验证正确后直接生成嵌入式代码,用户仅需作少量代码微调即可在Proteus中进行虚拟硬件测试。该方法无需设计者精通各种编程语言,只需

引言

随着软硬件技术的不断发展,以及用户对产品安全性,可靠性的要求,嵌入式应用的开发难度与代码体积都在迅速增加,传统的基于文本的开发方式已经越来越难以满足这种高性能与快节奏研发的要求。

基于模型的设计方法利用Mathworks提供的一系列工具,可直接实现从设计理念到算法模型,再由模型自动生成嵌入式代码的高效开发流程。对于本例来说,在LPC2124芯片上实现无刷电机控制(BLDC),设计者无需考虑如何将电机状态的变换用C或汇编语言体现,仅需关注算法本身,将繁琐的代码生成工作交给计算机完成。这样可以大大缩短产品开发周期,显著提高工作效率。

1 原理分析

直流无刷电机的工作离不开电子开关电路,因此由电动机本体、转子位置传感器和电子开关电路3部分组成了直流无刷电机的控制系统,其结构框图如图1所示。直流电源通过开关电路向电动机定子绕组供电,位置传感器随时检测转子所处的位置,并根据位置信号来控制开关管的导通和截止,从而自动地控制哪些绕组通电、哪些绕组断电,实现了电子换相。

图1 无刷电机控制系统结构框图

下面以一个三相绕组的无刷电机为例,简要介绍其工作原理。图2为三相全桥式驱动电路原理图,对其采用二相通电的方式驱动,即有两个绕阻同时通电。图中包含6个晶体管、二极管组成的三相逆变电路,Ha、Hb、Hc为霍尔元件反馈的转子位置信号。控制电路会根据位置信号决定6路PWM信号的通断,进而使功率管导通或关断,使绕阻按一定顺序导通,驱动电机连续旋转。

当采用二相导通方式驱动电机时,功率管的导通或关断情况经过1/6周期(即60°)。在直流无刷电机的内部嵌有3个霍尔位置传感器,它们在空间上相差120°。由于电机的转子是永磁体,当它在转动的时候,其磁场将发生变化形成旋转磁场,每个霍尔传感器都会产生180°脉宽的输出信号。

图2 三相全桥式驱动电路原理图

假设当前功率管V1、V6导通,则电流从A相流入电机,从C相流出电机,由电流经绕阻产生的磁场方向为(A,?C)。由A和?C的合磁场产生的转矩使转子转动到AC位置。转子的转动使霍尔传感器的输出发生变化,控制电路会据此调整功率管的导通情况,将V6关断,V5导通。这时,电流从A相流入电机,从B相流出电机,经绕阻产生的磁场方向为(A,?B)。由A和?B的合磁场产生的转矩使转子转动到AB位置。同样,霍尔器件又会输出一个不同的值,控制电路作出相应的处理,完成一个完整的换相周期。

2 模型搭建

根据上述原理简介可知,无刷电机由一组PWM信号驱动。PWM信号按霍尔元件传送的位置信号决定其通断状态,以驱动电机连续旋转;而PWM信号占空比可用于调节电机转速。在Stateflow中创建状态图,模型共设置PWM1~6六路PWM信号,并以按键key的值控制电机的开关,由此可得无刷电机的状态图,如图3所示。

图3 无刷电机状态图

MotorOff子状态中,将6路PWM信号的占空比调至0,以达到关闭电机的作用,如图4所示。

图4 MotorOff子状态

MotorOn子状态与MotorOff子状态基本类似,不同之处在于:模型接收霍尔元件传送回的电机转子位置信号,并以此判断PWM信号的通断。当霍尔元件返回值为1时,第2、6路PWM信号导通;值为2时,第3、4路PWM信号导通;值为3时,第2、4路PWM信号导通;值为4时,第1、5路PWM信号导通;值为5时,第1、6路PWM信号导通;值为6时,第3、5路PWM信号导通。

Stateflow状态图中的变量pinsel0、pinsel1、io0dir为芯片设置位,pwmmr0~pwmmr6联合控制PWM输出,sensor表示霍尔器件的值,key控制电机是否工作,变量speed用于接收外部的控制信号(例如电位器和ADC),调节PWM占空比,实现电机调速。

完成Stateflow状态图之后,再配合Simulink中的库模块即可完成如图5所示的算法模型。当key=1,电机处于打开状态时,若霍尔传感器状态为1,则第2和第6路PWM信号导通,输出512。信号占空比是由pwmmr0~pwmmr6联合控制的,pwmmr0已将PWM波的周期定义为1 024,则输出512即表示占空比为1:1,这证明算法模型达到了预期目的。

图5 算法模型3代码快速生成

RTW生成实时代码的过程大致可分为成4个阶段:

① 用户在MATLAB/Simulink/Stateflow建立算法模型。
② TLC目标语言编译器读取.rtw文件中的信息,将模型转化成源代码。
③ 生成指定目标的代码。
④ 连接开发目标程序所需的环境。

由上述过程可知,需要对模型作部分修改。图5所示模型中,设计者需要将各个信号源模块和显示器模块替换为输入/输出端口模块,这样才能在生成的代码中为硬件预留数据接口。在模型配置页面中需要将硬件类型指定为ARM compatible,求解器设置为离散型,RTW中的模板文件设置为ert.tlc。

完成上述设置后,将模型保存为arm_BLDC.mdl,按下模型工具栏的按钮即可生成代码。如果计算机上已经安装了TASKING IE FOR ARM软件,并与MATLAB平台正确关联后,系统会自动生成工程,并编译生成可执行文件,非常快捷方便。未安装该软件的用户可用自己熟悉的IDE自行创建工程并加入自动生成的C代码,之后对ert_main.c文件的代码作部分修改(有注释的部分为修改内容):

……
#include "LPC2124.h"/*添加LPC2124头文件*/
extern void PWM_Init(void);/*声明外部函数PWM_Init*/
extern void AD_Read(void);/*声明外部函数AD_Read*/
……//模型输入口与硬件相关联
arm_BLDC_U.In1=(IO0PIN&0x03800000)>>23;
arm_BLDC_U.In2=(IO0PIN&0x8000)>>15;
……//模型输出口与硬件相关联
PINSEL0=arm_BLDC_Y.Out1;
PINSEL1=arm_BLDC_Y.Out2;
IO0DIR=arm_BLDC_Y.Out3;
PWMMR0=arm_BLDC_Y.Out4;
PWMMR1=arm_BLDC_Y.Out5;
PWMMR2=arm_BLDC_Y.Out6;
PWMMR3=arm_BLDC_Y.Out7;
PWMMR4=arm_BLDC_Y.Out8;
PWMMR5=arm_BLDC_Y.Out9;
PWMMR6=arm_BLDC_Y.Out10;
PWMLER=arm_BLDC_Y.Out11;
……
int_T main(int_T argc, const char_T *argv[]);
int_T main(int_T argc, const char_T *argv[]){
/* Initialize model */
arm_BLDC_initialize();
PWM_Init();//调用PWM_Iint()
ADCR=0x002E0401;//ADC初始化
/* Simulating step behavior */
while (rtmGetErrorStatus(arm_BLDC_M) == (NULL)) {
AD_Read();//调用A/D_Read()
arm_BLDC_U.In3=(ADDR>>6) & 0x3FF;// AD结果赋值到In3口
rt_OneStep();//调用rt_OneStep()
}
……//删除printf与fflush代码
……

BLDC控制模型利用了芯片中的PWM发生和ADC功能,因此还需要这两个模块的初始化代码。将初始化代码保存为BLDC_init.c并加入到工程中即可进行编译。

#include"LPC2124.h"
void PWM_Init(void){//初始化LPC2124芯片的PWM功能
PWMPR=1200; //设置分频系数
PWMMR0=1024;//PWMMR0~PWMMR6控制初始占空比
PWMMR1=PWMMR2=PWMMR3=PWMMR4=PWMMR5=PWMMR6=0;
PWMMCR=0x00000002; //重置MR0时钟
PWMPCR=0x7E00; //使能PWM1~PWM6输出
PWMLER=0x7F; //使能PWM0~PWM6锁存
PWMTCR=0x09; //使能PWM模式并启动定时器
}
void AD_Read(void){
ADCR=(ADCR&0x00FFFF00)|0x01|(1<<24);//设置通道1,并进行第1次转换
while((ADDR&0x80000000)==0);//等待转换结束
ADCR &=~0x01000000;//停止转换
}

4 虚拟硬件测试

在Proteus7.7平台下,可以方便地对设计进行虚拟硬件测试。根据前述原理简介,不难搭建如图6所示的Proteus硬件原理图。左侧的按键控制电机的运行/停止,电位器与ADC控制电机转速;中部为三相电桥,分别与电机的三相相连;下方是由3个IR2112构成的放大电路;上方为示波器。

图6 Proteus硬件原理图

在LPC2124芯片中加载编译生成的hex文件进行测试,即可正确实现对电机的控制。

结语

基于模型设计为设计者提供了一个通用的开发与测试平台,可将算法模型自动转换为嵌入式C代码,大大降低嵌入式系统开发的门槛,设计者可轻松生成优化的自定义C代码,缩短了开发周期,避免了过多的人为错误。

在开发过程的各个环节都进行不断的测试,与传统方法相比,测试得更为彻底,并且在后期更进行了Proteus虚拟硬件测试,进一步确保了设计的可靠性。

这种由概念到实现的开发方式在国外已经有广泛应用,本文也对其优势有所论述,相信该方法在国内会受到越来越多的青睐。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

在嵌入式系统开发、调试和测试过程中,J-Link作为一种高效的调试工具,为开发者提供了极大的便利。然而,要想充分发挥J-Link的功能,首先需要正确安装其驱动程序。本文将详细介绍J-Link驱动的安装过程,并深入解析其中...

关键字: jlink 嵌入式系统 嵌入式开发

与谷歌的合作使 Nordic 能够在 nRF Connect SDK 中嵌入开发人员软件,以构建与安卓移动设备兼容的谷歌Find My Device和未知跟踪器警报服务

关键字: 谷歌 SoC 嵌入式开发

嵌入式开发作为当今电子工程和信息技术领域的核心分支,涵盖了广泛的软硬件技术和系统集成方法,用于构建高性能、低成本、低功耗、体积小巧且功能专一的嵌入式系统。这些系统无处不在,从微型传感器节点到复杂的工业控制设备,从日常使用...

关键字: 嵌入式开发 Python

嵌入式开发是当今信息技术领域不可或缺的一部分,它融合了硬件设计、软件开发和系统集成等多个学科,专门用于创建那些被嵌入到特定设备或系统中的专用计算机系统。嵌入式开发的主要过程包括利用分立元件或集成器件进行电路设计、结构设计...

关键字: 嵌入式开发 硬件设计 软件开发

嵌入式开发作为一种专业且技术密集型的领域,涵盖了从硬件底层驱动、中间件到应用层软件开发等多个层面的工作,其所需的工具种类繁多,各有针对性,旨在提升开发效率、保证代码质量以及简化调试过程。

关键字: 嵌入式开发 keil

嵌入式开发作为信息技术领域的重要分支,其涉及的语言种类繁多,各具特色。这些语言的选择取决于目标平台的特性、性能需求、开发者的熟练程度以及项目的具体要求。本文将详细介绍几种常见的嵌入式开发语言,包括C语言、C++、汇编语言...

关键字: 嵌入式开发 C语言

嵌入式开发是一项综合了硬件设计、软件编程以及系统整合的技术活动,其目的是为了创造出能够在特定环境中高效、稳定运行的嵌入式系统。这一流程涵盖了多个紧密关联且不可或缺的阶段,从最初的客户需求分析到最终的产品测试和交付,每个环...

关键字: 嵌入式开发 硬件设计

嵌入式开发作为一个融合了计算机软硬件和系统工程的综合性领域,其成功与否往往取决于三个核心要素的有效整合与协调。这三个要素分别是:硬件平台的选择与设计、软件开发及其优化、以及系统级的设计与集成。深入理解并熟练掌握这三个方面...

关键字: 嵌入式开发 ARM

嵌入式开发作为信息技术的关键支柱,在全球数字化转型浪潮中扮演着无可替代的角色。从传统的嵌入式微控制器到如今先进的片上系统(SoC),再到与云计算、人工智能深度融合的智能终端,嵌入式系统的演进与发展始终紧跟时代脉搏。本文将...

关键字: 嵌入式开发 智能应用

嵌入式开发是一种专门针对特定硬件平台设计和实现软件系统的工程实践,它涵盖了从需求分析、系统设计、编程实现、调试测试直到产品部署及维护的全过程。本文将深入探讨嵌入式开发的主要阶段,分解其流程并阐述每个步骤的关键要点,以便于...

关键字: 嵌入式开发 嵌入式软件
关闭
关闭