历史上的今天
返回首页

历史上的今天

今天是:2024年10月19日(星期六)

正在发生

2020年10月19日 | 基于三星S3C2410的ARM-Linux电子控制油门设计

2020-10-19 来源:elecfans

  引言

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


  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的判断,还是调整执行器的角度。


  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.\n”);

  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)&TImes;(divider value)(1)

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

  tcnt=pclk/(date&TImes;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。


  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。

推荐阅读

史海拾趣

Hengstler GmbH公司的发展小趣事

Helium Systems Inc.公司发展的五个故事

故事一:从物联网初创到区块链转型

Helium Systems Inc.的故事始于2013年,由Napster的联合创始人Shawn Fanning和知名游戏设计师Amir Haleem等人共同创立。最初,公司名为Skynet Phase 1,灵感来源于《终结者》系列电影中的电脑系统,旨在为物联网(IoT)创建无线网络。然而,在经历了几年的产品开发和市场探索后,该项目并未取得显著成功。直到2017年,Helium团队意识到区块链技术的潜力,决定将项目转型为基于区块链的分布式无线网络项目,即后来的Helium Network。这一转型为Helium带来了全新的发展机遇。

故事二:Helium Network的迅速崛起

自2019年Helium Network正式启动以来,该项目迅速吸引了全球用户的关注。用户只需购买并部署Helium热点设备,即可为周围的物联网设备提供无线连接,并因此获得Helium的加密货币HNT作为奖励。这种创新的挖矿模式迅速吸引了大量用户参与,Helium网络在短时间内实现了全球范围内的快速扩张。到2021年,Helium网络已经覆盖了超过160个国家和地区,拥有数十万个热点,成为全球领先的分布式无线网络之一。

故事三:融资与合作伙伴的加入

Helium Systems Inc.在发展过程中获得了多轮融资支持,其中包括来自a16z和Tiger Global等知名投资机构的巨额投资。这些资金为Helium网络的进一步扩展和技术创新提供了有力保障。同时,Helium还积极寻求与全球范围内的合作伙伴建立战略合作关系,包括电信运营商、物联网设备制造商等。这些合作伙伴的加入不仅丰富了Helium网络的应用场景,还进一步提升了其市场影响力和竞争力。

故事四:技术挑战与解决方案

在Helium网络的发展过程中,团队也面临了诸多技术挑战。例如,如何确保网络的稳定性和安全性、如何优化热点设备的部署和性能等。针对这些问题,Helium团队不断进行技术创新和优化,推出了多项新技术和解决方案。例如,他们开发了独特的PoC(Proof of Coverage)共识机制,通过该机制可以确保热点设备在提供有效覆盖时才能获得奖励,从而有效防止了作弊行为的发生。此外,Helium还加强了与区块链安全公司的合作,共同提升网络的安全性。

故事五:公司更名与未来发展

为了更好地推动Helium网络的发展,Helium Systems Inc.在2022年宣布将公司更名为Nova Labs,并启用新的品牌形象。这一更名举措旨在进一步凸显Helium网络作为分布式无线网络联盟的地位和影响力。同时,Nova Labs还宣布完成了D轮融资,并计划将资金用于进一步扩展网络覆盖范围、提升技术性能和加强市场推广等方面。展望未来,Nova Labs将继续致力于推动Helium网络的发展和创新,为全球用户提供更加安全、高效、便捷的物联网连接服务。

浙江凡华(FANHAR)公司的发展小趣事

对于计数型10键键盘编码译码显示电路,网友可能会有多个方面的问题,以下是一些常见问题及其回答:

一、设计基础与原理

问题1:计数型10键键盘编码译码显示电路的基本组成是什么?

回答:计数型10键键盘编码译码显示电路主要由三部分组成:键盘编码电路、译码电路和显示电路。键盘编码电路负责将按键的输入转换为对应的编码信号;译码电路则将该编码信号还原为可识别的信息或数据;最后,显示电路将译码后的信息以可视化的方式呈现出来。

问题2:编码和译码在数字电路中的作用是什么?

回答:编码是将信息或数据转换为二进制代码的过程,以便在数字系统中进行监测、控制、传输等操作。而译码则是编码的逆过程,即将二进制代码还原为原始的信息或数据,以便进行显示或进一步处理。在计数型10键键盘编码译码显示电路中,编码和译码是实现按键输入到显示输出的关键步骤。

二、技术实现细节

问题3:如何实现10键键盘的编码?

回答:实现10键键盘的编码通常可以采用优先编码器。优先编码器能够识别多个输入信号中的最高优先级信号,并将其转换为对应的编码输出。在10键键盘中,可以将10个按键的输入信号接入优先编码器的输入端,通过编码器的内部逻辑处理,得到按键对应的编码输出。

问题4:译码器如何选择以满足显示需求?

回答:译码器的选择应根据显示需求来确定。对于计数型10键键盘编码译码显示电路,如果显示的是十进制数字,则应选择能够处理十进制数的译码器,如74LS48等。此外,还需要考虑译码器的输入位数、输出类型(如共阳极或共阴极)以及驱动能力等因素,以确保译码器能够满足显示电路的要求。

问题5:显示电路如何设计以兼容不同显示器?

回答:显示电路的设计应兼顾译码器、驱动器和显示器三部分。首先,根据译码器的输出选择合适的驱动器来驱动显示器。驱动器的选择应考虑显示器的类型(如七段数码管、LED点阵等)、工作电压和电流等因素。其次,根据显示器的特性设计显示电路,包括确定显示方式(如静态显示或动态显示)、设置显示亮度等。最后,通过连接译码器、驱动器和显示器,实现按键输入到显示输出的完整电路。

三、常见问题与解决方案

问题6:如何解决按键冲突问题?

回答:按键冲突是指多个按键同时按下时,电路无法正确识别所有按键的状态。在计数型10键键盘编码译码显示电路中,可以通过采用优先编码器来避免按键冲突问题。因为优先编码器能够识别最高优先级的按键信号,并忽略其他低优先级的按键信号。此外,还可以通过软件算法来进一步处理按键冲突问题,如设置按键去抖动时间、检测按键按下和释放的时间差等。

问题7:如何提高电路的抗干扰能力?

回答:提高电路的抗干扰能力可以从多个方面入手。首先,选择具有良好抗干扰性能的元器件和电路布局方式;其次,在电路设计中加入滤波、去耦等电路来抑制干扰信号;最后,通过软件算法来识别和排除干扰信号的影响。此外,还可以采用屏蔽、接地等外部措施来进一步提高电路的抗干扰能力。

以上是对计数型10键键盘编码译码显示电路中网友可能提出的问题及其回答的总结。在实际应用中,还需要根据具体需求和条件进行灵活调整和优化。

CT Micro公司的发展小趣事
  1. 创业初期与技术创新

CT Micro公司最初由几位电子工程领域的专家创立,他们看到了微型计算机断层扫描(Micro-CT)技术在电子行业中的巨大潜力。初期,公司面临着资金短缺和技术难题,但他们通过不断研发和创新,成功开发出了一款具有高性价比的Micro-CT设备,迅速获得了市场的认可。

  1. 市场拓展与合作伙伴关系

随着产品的成熟,CT Micro开始积极寻求市场拓展。他们与多家电子制造企业建立了合作关系,为这些企业提供Micro-CT设备的定制服务。通过与这些企业的合作,CT Micro不仅扩大了市场份额,还进一步提升了产品的技术水平和应用范围。

  1. 研发升级与产品迭代

面对日益激烈的市场竞争,CT Micro不断投入研发力量,对Micro-CT设备进行升级和迭代。他们成功推出了多款新型设备,具有更高的分辨率、更快的扫描速度和更低的辐射剂量。这些新产品的推出,进一步巩固了CT Micro在电子行业中的领先地位。

  1. 国际化战略与市场拓展

随着国内市场的饱和,CT Micro开始实施国际化战略。他们积极参与国际展览和研讨会,展示自己的产品和技术实力。同时,他们还在海外设立了销售和服务中心,为国际客户提供更加便捷的服务。通过这些努力,CT Micro成功打开了国际市场的大门。

  1. 社会责任与可持续发展

在快速发展的同时,CT Micro也积极履行社会责任。他们注重环保和可持续发展,采用环保材料和节能技术生产产品。此外,他们还积极参与公益事业,为贫困地区的教育和医疗事业贡献力量。这些举措不仅提升了公司的社会形象,也为其可持续发展奠定了坚实基础。

请注意,这些故事框架是虚构的,并不代表CT Micro公司的实际发展情况。如果您需要了解CT Micro公司或类似公司的真实故事,建议您查阅相关公司的官方网站、新闻报道或行业分析报告。

艾为(AWINIC)公司的发展小趣事

2008年,孙洪军牵头创办了上海艾为电子技术股份有限公司。创立之初,艾为就明确了其使命:专注于混合信号、模拟、射频等IC设计,聚焦在手机、可穿戴、智能硬件、IOT等消费电子领域。公司秉持着“客户需求是艾为存在的唯一理由,高素质的团队是艾为的最大财富”的理念,致力于为消费电子市场提供高性能的集成电路解决方案。

Adamant Co Ltd公司的发展小趣事

随着企业规模的扩大,Adamant Co Ltd逐渐意识到社会责任的重要性。公司积极参与公益事业,为社会做出贡献。同时,公司还注重可持续发展,通过采用环保材料和生产工艺、降低能耗等方式,实现绿色生产。这些举措不仅提升了公司的社会形象,也为公司的长期发展注入了新的活力。

这些故事虽然基于虚构的Adamant Co Ltd公司,但其中所描述的挑战、机遇和策略在电子行业中是普遍存在的。通过这些故事,我们可以对电子行业企业的发展过程有一个大致的了解。

汇顶科技(GOODiX)公司的发展小趣事

品质是电子行业的生命线。Adamant Co Ltd深知这一点,因此在品质管理方面下足了功夫。公司建立了严格的品质管理体系,从原材料采购到产品生产、检测、出厂等各个环节都严格把关。同时,公司还注重品牌建设,通过提升产品形象和服务质量,赢得了客户的信任和口碑。这些努力使得Adamant Co Ltd在行业中树立了良好的品牌形象。

问答坊 | AI 解惑

一些变频器说明书

大家共享,希望大家有更多的变频器,PLC,伺服驱动等资料与大家共享 [ 本帖最后由 yurongchun 于 2008-5-27 10:38 编辑 ]…

查看全部问答>

05月11日 CPU部分电路图,待商榷版

昨天花了一天时间画的原理图,这是CPU控制部分,与数据采集板的接口部分还没有打网络标号(包括电平转换的芯片),打算先把这一块板给做出來调软件,本来打算用LPC2103作为从控制器,后来画到后面想想还是换成了MSP430F135,因为LPC2103要用双电源供电,如果 ...…

查看全部问答>

Linux下ARM汇编点滴

第一部分 Linux下ARM汇编语法尽管在Linux下使用C或C++编写程序很方便,但汇编源程序用于系统最基本的初始化,如初始化堆栈指针、设置页表、操作 ARM的协处理器等。初始化完成后就可以跳转到C代码执行。需要注意的是,GNU的汇编器遵循AT&T的汇编语法 ...…

查看全部问答>

动了谁的PPP?

把手机作为modem连接PC,用PC的调制解调器拨号时,究竟modem的PPP协议栈是否工作?谁看过相关的源码能确定这个问题。…

查看全部问答>

在获取滚动条的SB_THUMBPOSITION事件位置值,总是不对

当触发滚动条的SB_THUMBPOSITION事件时,我把滚动条的滑块托到最后,得到值不是SCROLLINFO中的nMax值,为什么啊。…

查看全部问答>

猎头职位:Hardware Design Engineer (欧洲一家做控制系统的公司,地点:上海)

Listed in London Stock Exchange, our client is a global group of five businesses that supply control and automation solutions that deliver efficiency, safety and effectiveness in process automation, controls and transportation e ...…

查看全部问答>

请问下PXA270和基带是如何通信的?

请问下PXA270和基带是如何通信的?是不是通过UART口发送AT Command啊? 比如打电话功能是发送一个ATD……的命令给基带么? …

查看全部问答>

Altera CycloneIII FPGA锁相环输出问题

输入时钟为27M,通过锁相环倍频成270M,270M是ASI IP核使用的时钟。目前有8个PCB,可以正常使用的有4个,不能正常使用的有4个,同样的FPGA程序。不能正常使用的PCB中,signaltap使用此270M做采样时钟,会显示waiting for clock 或者采出很乱的波形 ...…

查看全部问答>

征集花灯创意

元宵节将至,想为女友做一个电子的花灯。无奈小弟才疏学浅,特此征集创意。大家一起想想,有现成的方案也行啊。谢谢了啊!…

查看全部问答>