基于ARM-Linux的电子控制油门设计

发布者:Turquoise最新更新时间:2014-03-08 来源: eccn关键字:ARM  Linux  电子控制油门 手机看文章 扫描二维码
随时随地手机看文章

引言

巡航控制系统(CCS)是20世纪60年代发展起来的,又称为恒速行驶系统。巡航控制系统工作时,ECU根据各种传感器输送来的信号判断汽车的运行状况,通过执行元件自动调节节气门的开度使汽车的行驶速度与设定的车速保持一致[1]。汽车在良好路面上长时间行驶时,驾驶员启动巡航控制系统并设定行驶速度,不需驾驶员操纵加速踏板,通过巡航控制系统即可自动保持既定的行驶速度,不仅减轻了驾驶员的劳动强度,同时利用先进的电子控制技术控制节气门的开度,比驾驶员操纵节气门更精确,汽车燃料经济性、排放污染性也可得到改善。

1 系统原理

1.1 电控油门原理

工作时,由驾驶员发出转速的控制指令,由节气门开度传感器采集发动机的转速参数,并把信号输入电控单元;电控单元将控制信号和反馈的节气门位置信号进行比较,根据比较的结果来驱动执行器改变节气门的开度,使实际的开度与控制开度达到一致,从而实现车速的自动控制。

1.2 舵机控制原理

舵机是一种位置(角度)伺服驱动器,适用于那些角度需要不断变化并可以保持的系统。S3003型舵机有3个引脚,分别为电源Vcc、地GND和控制线Signal。控制信号由Signal通道进入信号调制芯片,获得直流偏置电压[2]。它的内部有一个基准电路,产生周期为20 ms、宽度为15 ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片以决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。
 

控制线的输入是一个宽度可调的周期性方波脉冲信号,方波脉冲信号的周期为20 ms(即频率为50 Hz)。当方波的脉冲宽度改变时,舵机的角度发生改变,角度变化与脉冲宽度成正比。其输出轴转角与输入脉冲宽度关系如图1所示。


舵机输出转角与输入脉冲宽度关系
图1 舵机输出转角与输入脉冲宽度关系

2 系统设计

本系统采用三星公司的S3C2410和Futaba公司的S3003型舵机分别作为控制器和执行器,使用Linux操作系统,实验平台为济南恒信有限公司的发动机实验平台。


系统流程
图2 系统流程

2.1 系统设计流程

系统流程如图2所示。控制器S3C2410完成各项初始化工作,接收来自操作人员的cmd指令,根据cmd的值来进行一系列的处理,包括停止执行器、旋转多少角度等。然后通过节气门开度传感器和转速传感器计算出等效的cmd值,并与cmd进行比较以决定是进行下一次cmd的判断,还是调整执行器的角度。[page]

2.2 设置Linux系统时钟频率

为了降低电磁干扰和降低板间布线要求,芯片外接的晶振频率通常很低,通过时钟控制逻辑的PLL提高系统时钟[3]。在三星公司的S3C2410A手册中列出了推荐的几种时钟频率,这里我们选用输出时钟频率FCLK=20280 MHz的配置,即PLL控制寄存器中的:MDIV=161(0xa1)、PDIV=3、SDIV=1。

在UBoot的board/smdk2410/smdk2410.c中进行设置:


#define M_MDIV  0xA1
#define M_PDIV  0x3
#define M_SDIV  0x1
int board_init (void){
  ……
  /* configure MPLL */
  clk_power﹥MPLLCON = ((M_MDIV ﹤﹤ 12) + (M_PDIV ﹤﹤ 4) + M_SDIV);
  ……
}
  在UBoot的cpu/arm920t/start.S中设置FCLK、HCLK、PCLK的比例:
  /* FCLK:HCLK:PCLK = 4:2:1*/
  ldrr0, =CLKDIVN
  mov r1, #3
  strr1, [r0]
 

由以上程序可知FCLK=202.80 MHz,HCLK=10140 MHz,PCLK=50.70 MHz,而S3C2410的PWM模块使用的时钟是PCLK,所以PWM的输入时钟为50.7 MHz。

2.3 舵机驱动程序编写

2.3.1 使用udev来动态建立设备节点

Linux 2.6系列的内核使用udev来管理/dev目录下的设备节点。同时它也用来接替devfs及hotplug的功能,这意味着它要在添加/删除硬件时处理/dev目录以及所有用户空间的行为,包括加载firmware时。udev依赖于sysfs输出到用户空间的所有设备信息,以及当设备添加或者删除时/sbin/hotplug对它的通知[4]。

为了udev能够正常工作,一个设备驱动程序要做的事情是通过sysfs将驱动程序所控制设备的主设备号和次设备号导出到用户空间。udev在sysfs中的/class/目录树中搜索名为dev的文件,这样内核通过/sbin/hotplug接口调用它的时候,就能获得分配给特定设备的主设备号和次设备号[5]。一个设备驱动程序只需要使用class_create接口为它所控制的每个设备创建该文件。

使用class_create函数创建class结构,这段代码在sysfs中的/sys/class下创建一个目录,目录中创建一个新的“pwm”的class类以容纳通过sysfs输出的驱动程序的所有属性。其中的一个属性是dev文件条目,它由class_device_create()创建——它触发了用户空间udev守护进程创建/dev/pwm设备节点。代码如下所示:

static struct class * pwm_class;
pwm_class = class_create(THIS_MODULE, “pwm”);
if(IS_ERR(pwm_class)){
  printk(KERN_ERR "Error creating pwm class. ");
  goto error;
}

当驱动程序发现一个设备并且已经分配了一个次设备号时,驱动程序将调用class_device_create函数:
  class_device_create(pwm_class, NULL, MKDEV(device_major, 0), NULL, “pwm”);

这段代码在/sys/class/pwm下创建一个子目录pwmN,这里N是设备的次设备号。在这个目录中创建一个文件dev,有了这个udev就可以在/dev目录下为该设备创建一个设备节点。

当设备与驱动程序脱离时,它也与分配的次设备号脱离,此时需要调用class_device_destroy(struct class *cls, dev_t devt)函数删除该设备在sysfs中的入口项:
  class_device_destroy(pwm_class, MKDEV(device_major, 0))。

2.3.2 配置PWM的输出频率

先使用Linux系统提供的系统函数来获取时钟pclk:


clk_p = clk_get(NULL, "pclk");
pclk = clk_get_rate(clk_p); 

由S3C2410数据手册可知,经过预分频器和时钟分频器之后,计算定时器0的输入时钟频率为clkin=(pclk/{prescaler0+1}/divider value);再通过16位的定时器0计数寄存器TCNTB0、和定时器0比较计数器TCMPB0(它们的值分别用tcnt和tcmp表示)分频,这样就可以从引脚Tout0处得到合适的PWM波形信号了,其周期为T=tcnt/clkin,高电平周期为Th= tcmp/clkin。

已知pclk=50.7 MHz,令
  MAX=(prescale0+1)×(divider value)(1)

则有clkin=pclk/MAX;可以取tcnt=pclk/date;又因为tcnt为16位,所以tcnt≤65 535,这样可以直接消去pclk中的507;而系统需要T=20 ms的周期,先提取出系数50,即:

tcnt=pclk/(date×50)=1 014 000/date(2)

得出MAX=date≥16,prescaler0的取值范围为0~255,divider value的可取值为1、2、4、16。

要求的PWM波形周期为20 ms,正电平宽度为0.5~2.5 ms,20 ms/0.5 ms=40,所以:
  tcmp=tcnt/40+(cmd-1)×tcnt/(40×N)(3)

其中tcmp和tcnt均为整数;N即为细分系数,它表示cmd加1时舵机将旋转(45/N)°;cmd是要输入的控制参数,用它来控制舵机的角度。

由式(1)~(3),以及tcmp和tcnt尽量取整数以减小误差的原则,MAX=date=可取16、20、25。[page]

3 实验结果分析

理论上,细分系数N取值越大、执行器的动作越精确越好,但过大的细分系数会导致执行器的命令对cmd的响应变慢。因此,N的取值应该根据执行器到节气门阀的距离来综合考虑,取细分系数N=5即使用公式:tcmp=tcnt(cmd+4)/200,最小角度为(45/5)=9,足以满足实验的需要。

采用实验的方法,对MAX=date=16、20、25分别进行实验,并使用示波器进行观察根据寄存器的取整特性来对MAX=date的值进行综合的考量。结果如表1~表3所列。其中cmd为输入指令,err为误差,Wh为高电平宽度,~Wh为实际的高电平宽度。


表1 MAX=date=16,tcnt=63375, clkin=3168750时的结果
表1 MAX=date=16,tcnt=63375, clkin=3168750时的结果


表2 MAX=date=20,tcnt=50700, clkin=2535000时的结果
表2 MAX=date=20,tcnt=50700, clkin=2535000时的结果


表3 MAX=date=25,tcnt=40560, clkin=2028000时的结果
 表3 MAX=date=25,tcnt=40560, clkin=2028000时的结果


由以上数据可以看出取MAX=date=20时,误差最小。由式(4)可知,prescale0+1=20、10、5对应的divider value=1、2、4。

结语

利用ARM锁相环所产生的高频率可以获得更精细的PWM波,从而对舵机实现更精确的控制来达到油门精确控制的目的。本文从理论和实践两方面实现了舵机角度为9的控制,要想获得更细分的角度,只需将N的值取大。如N=15,可获得的最小控制角度为(45/15)=3;N=45,可获得的最小控制角度为(45/45)=1。

关键字:ARM  Linux  电子控制油门 引用地址:基于ARM-Linux的电子控制油门设计

上一篇:基于语音识别的汽车空调控制系统设计
下一篇:基于STM32F的电动汽车交流充电桩控制系统设计

推荐阅读最新更新时间:2024-03-16 13:37

ARM Cortex-M7再想一一会儿
随着物联网的发展,嵌入式处理领域越来越需要强大的数学计算能力。ARM公司在原来Cortex-M的基础上又发展了ARM Cortex-M7,是目前微控制级别产品性能最高的。 图 1 Cortx-M7的框图 图 2Cortex-M4 对比 Cortex-M7 性能的提升,意味着Cortex-M7处理能力的提高,系统设计也随之复杂化了。 应用 运行与160MHz的Cortex-M7可以处理音频应用。 400MHz的Cortex-M7可以更好地控制电机和传感器。
[单片机]
Linux下的触摸屏驱动
一.触摸屏理论概述 对于触摸屏驱动,我们主要需要掌握触摸屏驱动代码和应用层测试代码。下面讲的是基于Mini2440的触摸屏驱动,现在的驱动我们都将设备和驱动分离,挂在平台设备总线上,让设备和驱动去匹配。而我们在linu2.6.32.2内核版本中的触摸屏驱动仍然没有将设备和驱动分离,这样就不存在匹配问题,这种现象其实我们并不陌生,在我们学习驱动的前期,都会研究简单字符驱动代表LED驱动,那个驱动就是把设备和驱动写在了一起。总结下,驱动和设备可以分离也可以不分离,建议分离,而本触摸屏驱动没有分离设备和驱动,有兴趣可以将设备和驱动进行分离。 先说明下触摸屏的工作原理,当有人在触摸屏上按下触笔时,触摸屏的四个引脚会产生不同的电压值,这
[单片机]
采用 Linux 与 DSP/BIOS RTOS 实施双 OS 信号处理技术
  在系统性能与编程简易性之间的权衡折中是通用操作系统与实时操作系统之间的主要区分点之一。   GPOS 倾向于提供较高程度的资源抽象,这不仅可通过支持软件模块性与资源隔离来提高应用的便携性、简化开发流程,同时还能增强系统的稳健性。这使 GPOS 成为诸如网络、用户界面以及显示管理等通用系统组件的理想选择。   然而,该抽象需要以系统资源的精细粒度控制作为代价,以满足信号处理代码等高强度算法的计算性能要求。对于实现这种高级别的控制,开发人员通常需要采用实时操作系统 (RTOS)。   从嵌入式信号处理角度上讲,我们通常要考虑两种类型的操作系统,即通用操作系统 Linux 与实时操作系统 DSP/BIOS。Linux 可支持
[嵌入式]
基于LinuxARM9的物流信息化终端平台上对终端定位功能实现
  前 言   物流的定位方案与技术的选择对提高现代物流配送管理效率,减少运营成本具有重要的影响。物流终端定位要求较高的定位精度,能提供全天候连续不间断的定位信息支持,能满足复杂地形条件的定位需求。   本文针对当前物流行业终端定位功能的需求进行分析,针对当前定位技术现状,提出相适应的物流终端定位功能实现方案,并在基于嵌入式Linux和ARM9硬件核心的物流信息化终端平台上对终端定位功能进行了初步的实现。   系统实现方案   移动定位技术的现状分析目前,移动定位技术已经非常成熟,较广的应用主要可以分为两大类,一类是GPS等利用卫星进行后方交汇的定位技术;另一类是利用移动通信网技术提供位置服务的定位技术。常用的有:基于Cell
[单片机]
ARM Generic Timer
Generic timer可以: 1. 调度 Event 2. 根据counter value,触发中断 3. 支持Virtualization 扩展 使用Generic Timer作为system timer的一个例子. Generic Timer提供的system counter: (1) 最少56bit 宽 (2) Frequency : 1--50MHz Supports one or more alternative operating mode in which it increments by larger amounts at a lower freqency (typicall
[单片机]
<font color='red'>ARM</font> Generic Timer
泰克嵌入式仪器软件荣获ARM TechCon “最佳产品奖”
泰克公司日前宣布,荣获了 ARM TechCon 软件类“最佳产品奖“(Best in Show Award)。在最近收购了Veridae Systems后成立的泰克嵌入式仪器事业部凭借其针对ASIC和FPGA验证与调试的 Clarus 和 Certus 工具而获得了该奖项。 《UBM Electronics》的编辑兼ARM TechCon奖评委Colin Holland先生表示:“测试与分析产品功能方面的创新是无止境的,所以当有新方法出现时,工程师们一定会注意到。将大学研究成果的技术成功地商业化,甚至还受到市场领先公司的欢迎,这是一项巨大的成就 。我们很高兴将ARM TechCon奖授予泰克嵌入式仪器事业部,为工程师提供了创新的调
[单片机]
基于嵌入式ARM9的墙面平整度检测仪研究与实现
房屋的墙面平整度是衡量房屋建筑质量的一项重要指标。现有的墙面平整度检测方法要么操作不方便且效率低下,如靠尺;要么检测仪器本身比较复杂,不易操作,需要专业的操作技巧,如使用 百分表打点 检测;或者仪器本身比较昂贵,无法广泛推广和使用,如利用无协作目标电子全站仪检测。所以研究一种原理简单,操作方便,价格便宜,体积小,便携式的手持移动墙面平整度检测设备是非常有必要且具一定商业价值的。 1 系统的总体设计 系统的目标是:设计一个嵌入式手持设备,实现对墙面平整度的检测。具体的实现过程为:USB摄像头以小分辨率(320*240)采集动态视频,旋转后直接显示在LCD上,通过观察LCD上的动态显示内容确定所选场景是否满足要求。待出现满足要求的
[单片机]
基于嵌入式<font color='red'>ARM</font>9的墙面平整度检测仪研究与实现
ARM计划将处理器植入Google电视设备
英国芯片设计商ARM本周一表示,公司的技术已经为“Google TV”准备充分,只要合作伙伴拿出基于ARM设计,明年采用ARM芯片的互联网设备就能推出。 未来三至五年,如果ARM处理器能够在Google TV中立足,那么ARM的目标就是拿下全球50%机顶盒和与数字电视市场,目前它只有30%的份额。 ARM公司全球首席运营官Tudor Brown表示:“传统PC市场正在变化,计算没有死亡,计算还将持续并增长,让人兴奋的是一些新的因素与新的业务模式,很明显,电视就是当中的一个例子。”Tudor Brown称:“我们将有一个处理器,未来几年中它在电视中占据高份额,我对此很有信心。” Tudor Brown日
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved