打印
[开发工具]

电机控制项目的生成

[复制链接]
2062|27
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Diyer2015|  楼主 | 2018-10-17 10:46 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
MARK 电机控制项目的生成这个真是方便啊!

沙发
Diyer2015|  楼主 | 2018-10-17 10:47 | 只看该作者
在能通过profiler把电机玩转以后,基本上硬件连接上已经没有什么问题。MC project generation

使用特权

评论回复
板凳
Diyer2015|  楼主 | 2018-10-17 10:47 | 只看该作者
新建一个项目,按上图进行配置。其实第三步中不一定非要选择Kit,也可以分开选择Power & Control单独配置驱动电路板和控制板。
注意选之前标定过的电机,作者用的文件名是XD001,如果选择的是官方标配的奔牛电机,效果也是一样的,选自己的电机,适应性更广,不至于换了电机就懵了。

使用特权

评论回复
地板
Diyer2015|  楼主 | 2018-10-17 10:48 | 只看该作者
OK之后弹出上图的确认信息框,核对一下即可,因为这些参数都是自动测算的,所以通常不会错。然后来到了主界面。

使用特权

评论回复
5
Diyer2015|  楼主 | 2018-10-17 10:49 | 只看该作者
下图是UM2374 中的说明截图,实际上5.1.2中工具栏上已经没有选择输出目录的,我们可以直接点save,或者在File菜单下使用save project as...

使用特权

评论回复
6
Diyer2015|  楼主 | 2018-10-17 10:49 | 只看该作者
例如,打开power stage标签下面的Digital I/O,可以看到控制器的配置方案:

使用特权

评论回复
7
Diyer2015|  楼主 | 2018-10-17 10:49 | 只看该作者
这个地方如果对照着后面生成的代码阅读,会有很大的帮助。例如,我们可以看到,逆变器使用了TIM1的PA8-PA11的通道,三相电的信号使用的是PC10-PC12,串口使用的是USART2,启停按键对应的IO是PC13,这些都是可以选择配置的,通过研究这个,我相信可以把代码移植到STM32F103等系列的芯片上(打算后面做这个事情)。总之,了解针脚配置信息很重要,另一种查看的方式是使用工具栏上的那个芯片图标,查看针脚定义。

使用特权

评论回复
8
Diyer2015|  楼主 | 2018-10-17 10:50 | 只看该作者
下面是生成代码的工作了。点击那个向下的箭头,即Generation:


生成之前,可以根据自己的需要,选择合适的工具链,我使用的是Keil v5,选好之后,点击Generate会在之前保存的项目文件目录下生成一个同名文件夹,包含了所有的项目文件。

使用特权

评论回复
9
Diyer2015|  楼主 | 2018-10-17 10:50 | 只看该作者
然后就是用工具打开项目文件,编译,下载。至于配置信息,在项目中都帮你自动完成了。

上图中可以看到,连debug的工具都给你配置好了,这个细节做得非常不错,难怪官方的文档说的是:

Download the embedded application to the target from the IDE. If the ST/LINK is correctly

installed, this is straightforward to perform.

使用特权

评论回复
10
Diyer2015|  楼主 | 2018-10-17 10:50 | 只看该作者
最后就是打开Monitor了:



测试中发现,如果调速过快,会出现speed feedback的错误,另外就是改变转向,也会出现这样的错误。最后,我还强行把转子捏死,测试一下堵转时的错误反馈,原本以为是电流会过大,Over Current的故障,结果发现依旧是speed feedback错误,而且在出现错误前,仪表上还有转速显示,这个肯定是不对的,这里先mark一下,后面需要多研究一下转速测量的原理。出现不要紧,点击一下Fault Ack按钮,就可清除故障信息。

使用特权

评论回复
11
shukongqiegeji| | 2018-10-17 11:39 | 只看该作者
随着软硬件技术的不断发展,以及用户对产品安全性,可靠性的要求,嵌入式应用的开发难度与代码体积都在迅速增加,传统的基于文本的开发方式已经越来越难以满足这种高性能与快节奏研发的要求。

基于模型的设计方法利用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构成的放大电路;上方为示波器。(**由 数控等离子切割机 http://www.hycsk.com 整理发布,**内容仅供参考)

图6 Proteus硬件原理图

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

结语

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

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

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

使用特权

评论回复
12
幸福小强| | 2018-10-17 11:39 | 只看该作者
果然很6

使用特权

评论回复
13
幸福小强| | 2018-10-17 11:40 | 只看该作者
模型开发用这个应该很给力。

使用特权

评论回复
14
Diyer2015|  楼主 | 2018-10-17 12:23 | 只看该作者
幸福小强 发表于 2018-10-17 11:40
模型开发用这个应该很给力。

的确是 这个非常好用!

使用特权

评论回复
15
幸福小强| | 2018-10-17 14:46 | 只看该作者
还是多谢楼主分享,以前用的不熟练,谢谢了。

使用特权

评论回复
16
Diyer2015|  楼主 | 2018-10-17 16:17 | 只看该作者
幸福小强 发表于 2018-10-17 14:46
还是多谢楼主分享,以前用的不熟练,谢谢了。

我这个 也是备份 留个记录 记载转发的!

应该是ST 官方的!

使用特权

评论回复
17
gyh974| | 2018-10-17 22:18 | 只看该作者
楼主可以共享一下这个软件吗,官网下载要登录,早就忘了密码了!

使用特权

评论回复
18
Diyer2015|  楼主 | 2018-10-18 09:32 | 只看该作者
估计这个只能下载一下了!我看看有没有啊!

使用特权

评论回复
19
jazzyfox| | 2018-10-19 18:33 | 只看该作者
还可以这样玩,长见识了

使用特权

评论回复
20
xiaoqizi| | 2018-10-22 15:58 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

63

主题

1615

帖子

13

粉丝