新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于ARM Linux的电子控制油门设计

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

作者:时间:2013-11-11来源:网络收藏

1 系统原理

1.1 电控油门原理
  工作时,由驾驶员发出转速的控制指令,由节气门开度传感器采集发动机的转速参数,并把信号输入电控单元;电控单元将控制信号和反馈的节气门位置信号进行比较,根据比较的结果来驱动执行器改变节气门的开度,使实际的开度与控制开度达到一致,从而实现车速的自动控制。
1.2 舵机控制原理
  舵机是一种位置(角度)伺服驱动器,适用于那些角度需要不断变化并可以保持的系统。S3003型舵机有3个引脚,分别为电源Vcc、地GND和控制线Signal。控制信号由Signal通道进入信号调制芯片,获得直流偏置电压[2]。它的内部有一个基准电路,产生周期为20 ms、宽度为15 ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片以决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。
  控制线的输入是一个宽度可调的周期性方波脉冲信号,方波脉冲信号的周期为20 ms(即频率为50 Hz)。当方波的脉冲宽度改变时,舵机的角度发生改变,角度变化与脉冲宽度成正比。其输出轴转角与输入脉冲宽度关系如图1所示。
基于ARM Linux的电子控制油门设计
图1 舵机输出转角与输入脉冲宽度关系
2 系统设计
  本系统采用三星公司的S3C2410和Futaba公司的S3003型舵机分别作为控制器和执行器,使用操作系统,实验平台为济南恒信有限公司的发动机实验平台。
基于ARM Linux的电子控制油门设计
图2 系统流程
2.1 系统设计流程
  系统流程如图2所示。控制器S3C2410完成各项初始化工作,接收来自操作人员的cmd指令,根据cmd的值来进行一系列的处理,包括停止执行器、旋转多少角度等。然后通过节气门开度传感器和转速传感器计算出等效的cmd值,并与cmd进行比较以决定是进行下一次cmd的判断,还是调整执行器的角度。
2.2 设置系统时钟频率
  为了降低电磁干扰和降低板间布线要求,芯片外接的晶振频率通常很低,通过时钟控制逻辑的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来动态建立设备节点
   2.6系列的内核使用udev来管理/dev目录下的设备节点。同时它也用来接替devfs及hotplug的功能,这意味着它要在添加/删除硬件时处理/dev目录以及所有用户空间的行为,包括加载firmware时。udev依赖于sysfs输出到用户空间的所有设备信息,以及当设备添加或者删除时/sbin/hotplug对它的通知[4]。
  为了udev能够正常工作,一个设备驱动程序要做的事情是通过sysfs将驱动程序所控制设备的主设备号和次设备号导出到用户空间。udev在sysfs中的/class/目录树中搜索名为dev的文件,这样内核通过/sbin/hotplug接口调用它的时候,就能获得分配给特定设备的主设备号和次设备号[5]。一个设备驱动程序只需要使用class_create接口为它所控制的每个设备创建该文件。 linux操作系统文章专题:linux操作系统详解(linux不再难懂)

上一页 1 2 下一页

评论


相关推荐

技术专区

关闭