飞思卡尔 所有的算法
飞思卡尔s12系列CAN波特率计算

简单介绍一个波特率的计算,在CAN的底层协议里将CAN数据的每一位时间(TBit)分为许多的时间段(Tscl),这些时间段包括:A.位同步时间(Tsync)B.时间段1(Tseg1)C.时间段2(Tseg2)其中位同步时间占用1个Tscl;时间段2占用(Tseg1+1)个Tscl;时间段2占用(Tseg2+1)个Tscl,所以CAN控制器的位时间(TBit)就是:TBit=Tseg1+Tseg2+Tsync=(TSEG1+TSEG2+3)*Tscl,那么CAN的波特率(CANbps)就是1/TBit。
但是这样计算出的值是一个理论值。
在实际的网络通信中由于存在传输的延时、不同节点的晶体的误差等因素,使得网络CAN的波特率的计算变得复杂起来。
CAN在技术上便引入了重同步的概念,以更好的解决这些问题。
这样重同步带来的结果就是要么时间段1(Tseg1)增加TSJW(同步跳转宽度SJW+1),要么时间段减少TSJW,因此CAN的波特率实际上有一个范围:1/(Tbit+Tsjw)≤CANbps≤1/(Tbit-Tsjw)CAN有波特率的值四以下几个元素决定:A.最小时间段Tscl;B.时间段1TSEG1;C.时间段2TSEG2;D.同步跳转宽度SJW那么Tscl又是怎么计算的呢?这是总总线时序寄存器中的预分频寄存器BRP派上了用场,Tscl=(BRP+1)/FVBP。
FVBP为微处理器的外设时钟。
下面用一个例子来举例说明。
注:本例中时钟使用总线时钟,若选择外设时钟,则外设时钟=晶振频率/2比如,总线时钟fbus=16M,准备设定的波特率CANbps=250K,则(1)位时间TBit=1/250k=4us.同时,(2)TBit=Tseg1+Tseg2+Tsync=(TSEG1+TSEG2+3)*Tscl,一般(TSEG1+TSEG2+3)的值取16(8~25之间),则Tscl=4us/16=250ns而同时(3)Tscl=(BRP+1)/fbusfbus为微处理器的总线时钟。
飞思卡尔图像处理总结

图像处理算法总结一、简介根据第九届全国大学生“飞思卡尔”杯智能车竞赛要求,针对摄像头平衡组的车模要求,我们小组需要自主设计一辆两轮平衡直立的由摄像头自主识别路径并以较快速度行进的智能小车。
其中图像数据的处理是摄像头组能否取得好成绩的关键。
我们这次使用的是野火鹰眼ov7725硬件二值化摄像头(如图1所示),基于飞思卡尔K60单片机控制,并通过IAR6.3编译,编译界面如图2所示。
图1.鹰眼摄像头图2.iar编译界面二、设计要求对鹰眼摄像头采集回来的一副二值化的图像数据进行解压,图像处理,求出赛道中线和车体中心线的偏差,通过PID调节,将转向控制量返回,从而实现转向控制。
其中图像处理包括:黑线提取,赛道类型判断,计算转向偏差。
三、算法设计3.1 黑线提取我们采用的是跟踪边缘检测算法。
由于黑色的目标引导线是连续曲线,所以相邻两行的左右边缘点比较靠近。
跟踪边缘检测正是利用了这一特性,对直接边缘检测进行了简化。
其思路是:若已寻找到某行的左边缘,则下一次就在上一个左边缘附近进行搜寻。
这种方法的特点是始终跟踪每行左边缘的附近,去寻找下一列的左边缘,所以称为“跟踪”边缘检测算法。
该算法的优点:在首行边缘检测正确的前提下,该算法具有较强的抗干扰性,能更有效地消除垂直交叉黑色引导线的干扰,以及引导线外黑色图像的影响,始终跟踪目标引导线。
另外,与直接边缘检测法比较,跟踪边缘检测算法的时间复杂度更低,因此效率更高。
且通过多次试验,中心线提取基本没有出现大的问题。
如图3,为一次拍摄的赛道图像,经图像处理后将计算的中线显示在上位机上,图33.2赛道类型判断影响赛车速度成绩的一个重要因素就是对弯道和直道的提前识别判断,从而实现安全过弯,快速过直道、S弯道,以提高比赛成绩。
我们通过小液晶模块,或者摄像头上位机将拍回来的赛道图像反复仔细地对比查看,提取出相关的特征作为判断条件,从而完成赛道类型的判断。
另外,由于智能车上安装的摄像头相对于赛道存在一定的倾斜角度,因此会造成采集到的赛道图像具有一定的梯形失真,即图像中的赛道远端窄、近端宽,因而也会对路径的正确识别产生影响。
飞思卡尔锁相环

备战飞思卡尔智能车大赛.开始模块总结.锁相环设置.公式: PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1),fbus=PLLCLK/2void INIT_PLL(void){CLKSEL &= 0x7f; //选用外部时钟.准备设置锁相环PLLCTL &= 0x8F; //禁止锁相环SYNR = 0xc9; //设置SYNRREFDV = 0x81; //设置REFDVPLLCTL |=0x70; //锁相环使能asm NOP; asm NOP; //两个机器周期缓冲时间while(!(CRGFLG&0x08)); //等待锁相环锁定CLKSEL |= 0x80; //设置锁相环为时钟源}飞思卡尔XS128的PLL锁相环详细设置说明——关于如何提高总线工作频率PLL锁相环就相当于超频单片机超频的原因和PC机是个一道理。
分频的主要原因是外设需要的工作频率往往远低于CPU/MEMORY这也和PC机南北桥的原理类似。
总线频率设置过程1、禁止总中断2、寄存器CLKSEL(时钟选择寄存器)的第七位置0即CLKSEL_PLLSEL=0。
选择时钟源为外部晶振OSCCLK(外接晶振频率)在PLL(锁相环)程序执行前内部总线频率为OSCCLK/23. PLLCTL_PLLON=1 打开PLL4.设置SYNR时钟合成寄存器、REFDV时钟分频寄存器、POSTDIV三个寄存器的参数5、_asm(nop) _asm(nop);加入两条空指令使锁相环稳定6、while(!(CRGFLG_LOCK==1));//时钟校正同步7、CLKSEL_PLLSEL=1; 下面详细说一下频率的计算一、时钟合成寄存器SYNR寄存器结构VCOFRQ[1:0]控制压控振动器VCO的增益默认值为00VCO的频率与VCOFRQ[1:0]对应表什么是锁相环呢?MCU的支撑电路一般需要外部时钟来给MCU提供时钟信号,而外部时钟的频率可能偏低,为了使系统更加快速稳定运行,需要提升系统所需要的时钟频率。
飞思卡尔智能车摄像头组新手指南(5)--让车跑起来篇

飞思卡尔智能车摄像头组新⼿指南(5)--让车跑起来篇舵机、电机控制策略让车跑起来彭岸辉控制器设置了快速的控制周期,在每个运算周期内,控制器即时地得到智能车车速以及传感器采样来的道路信号,经过控制算法的计算后,控制单元输出相应的前轮控制转⾓以及电机占空⽐的值,其输出值再经过函数映射关系转换为 PWM 脉宽信号传⾄前轮舵机以及驱动电机,从⽽实现⼀个周期的控制。
由于摄像头的信号是具有周期性的,可以直接采⽤摄像头采集⼀幅图像的周期作为控制周期。
舵机控制采⽤ PD 控制,控制跟随性较好,P可以及时对赛道的变化作出反应,当然舵机的 P 项值也是跟随赛道情况变化的,直道和较⼩的弯道时控制较弱,90 度弯道或 270 度⼤弯道控制量较强,D有预测道路类型的作⽤,也就是能使舵机提前打⾓。
电机控制采⽤ PID 控制,可以减⼩动态误差并且跟随性能较好。
当然也可以使⽤其他控制,很多⼈舵机采⽤P控制,电机采⽤PD或PI控制。
对⽐他们的优缺点⾃⼰选择适合⾃⼰⼩车的PID。
这⾥不进⾏深⼊讲解。
前⾯的⼯作完成后懂得基本的图像处理算法就差不多可以使⼩车跑起来了!要使⼩车跑起来其实不难的,很多初学者最希望的就是看⾃⼰的车跑起来,因为当初我也是这样的,很理解师弟师妹们此刻的想法!最基本的图像处理算法就是:图像中间往两边搜索⿊线注意:初学者在初学时不知道偏差是怎样计算的。
这⾥就提⼀下:偏差就是计算出的中线即图中赛道中的⿊线与摄像头所看到的中线即图中赛道中的竖直红线(例如采集到的图像是100列的,那么摄像头看到的中线就是50)做差得到的值就是偏差。
它表⽰车当前位置与期望位置的偏离程度。
再看个图吧:⽤两⾏来说明,其他的⼀样。
第⼀⾏左边坐标(0,1)右边坐标(0,99),得出的中线就是(0,50),那么50所在的那⼀列就是摄像头所看到的中线(就是图中竖直的红线)。
这⾥再提⼀下,很多⼈提出中线后发现上位机上或LCD上没显⽰出中线,其实显⽰出中线很简单的:根据RGB,⼀个像素点的像素值为255时显⽰出来的是⽩⾊,像素值为0时显⽰出来的是⿊⾊。
飞思卡尔单片机S12使用方法及程序

飞思卡尔单片机S12使用方法及程序单片机简介:9S12XS128MAA单片机是16位的单片机80个引脚,CPU是CPU12X,内部RAM 8KB,EEPROM:2KB,FLASH:128KB,外部晶振16M,通过内部PLL可得40M总线时钟。
9S12XS128MAA单片机拥有:CAN:1个,SCI:2个,SPI:1个,TIM:8个,PIT:4个,A/D:8个,PWM:8个下面介绍下我们项目用到的几个模块给出初始化代码1、时钟模块初始化单片机利用外部16M晶振,通过锁相环电路产生40M的总线时钟(9S12XS128系列标准为40M),初始化代码如下:view plaincopy to clipboardprint?/******************系统时钟初始化****************/void Init_System_Clock(){asm { // 这里采用汇编代码来产生40M的总线LDAB #3STAB REFDVLDAB #4STAB SYNRBRCLR CRGFLG,#$08,*//本句话含义为等待频率稳定然后执行下一条汇编语句,选择此频率作为总线频率BSET CLKSEL,#$80}}/******************系统时钟初始化****************/void Init_System_Clock(){asm { // 这里采用汇编代码来产生40M的总线LDAB #3STAB REFDVLDAB #4STAB SYNRBRCLR CRGFLG,#$08,*//本句话含义为等待频率稳定然后执行下一条汇编语句,选择此频率作为总线频率BSET CLKSEL,#$80}上面的代码是汇编写的,这个因为汇编代码量比较少,所以用它写了,具体含义注释已经给出,主函数中调用此函数即可完成时钟初始化,总线时钟为40M.2、SCI模块初始化单片机电路做好了当然少不了和PC之间的通信,通信通过单片机串口SCI链接到PC 端的COM口上去。
飞思卡尔智能小车算法介绍(个人总结)

式中,
q0
Kp
1;TTi
Td T
q1
;Kp
1
2。Td
T
q2
Kp
Td T
3.2.1 PID控制算法
由此可见,要利用 u和( k ) 得u (到k 1) ,只需u (要k )用到 , 和 e (三k 个1)历史e(数k 据 2。) 在编u (程k 过 1程) 中,这三个历史数据可以采用
平移法保存,从而可以递推使用,占用的存储单元少,编程简单, 运算速度快。增量型算法的程序流程图如图3.6所示。
25工qgz1lt70108100801nlj23456j2x013x084x105x086x01jj40108100801tj武汉科技大学信息科学与工程学院tj武汉科技大学信息科学与工程学院tj武汉科技大学信息科学与工程学院壬322模糊控制算法tj武汉科技大学信息科学与工程学院o模糊控制表可以离线求出作为文件存储在计算机中计算机实时控制时只要将ad转换得到的偏差和偏差变化ec进行量化得到相应的等级e和ec然后从文件中直接查询所需采取的控制策略
3.1 编程语言简介
在绝大多数场合,采用C语言编程即可完成预 期的目的,但是对实时时钟系统、要求执行效率高 的系统就不适合采用C语言编程,对这些特殊情况 进行编程时要结合汇编语言。汇编语言具有直接和 硬件打道、执行代码的效率高等特点,可以做到C 语言所不能做到的一些事情,例如对时钟要求很严 格时,使用汇编语言便成了唯一的选择。这种混合 编程的方法将C语言和汇编语言的优点结合起来, 已经成为目前单片机开发最流行的编程方法。关于 编程语言的详细介绍可参阅相关书籍。
第3章 智能汽车设计基础—软件
第3章 智能汽车设计基础—软件
在智能车系统的设计中,硬件是基础,没有一个好的硬 件平台,软件就无法运行。对于智能车系统来说,软件的核心 是控制算法。而完成这些任务的编程语言有汇编语言和C语言。 软件部分是整个智能车系统的灵魂,在硬件方面各参赛队之间 大同小异,真正体现各参赛队智能车的优势和最后决定比赛成 绩好坏的往往是软件部分,尤其是核心控制算法的设计。本章 首先简要介绍软件编程中使用的汇编语言和C语言各自的特点, 然后重点介绍核心控制算法的原理。
飞思卡尔智能车教程-

下面通过例题讨论正弦稳态电路的各种分析方法。
一、求解一端口的阻抗或导纳 解
§9-3 正弦稳态电路的分析
习题9-1 试求图示各电路的输入阻抗Z和导纳Y。 (c)该一端口内不含受控源,可以利用阻抗的串并联 等效变换求得其输入阻抗或输入导纳。 串联等效阻抗为
Z 40 j 40 ( ) 1
Z 40 j 40 ( ) 2
一端口的输入阻抗为
Z Z ( 40 j 40 )( 40 j 40 ) Z 12 40 Z Z 40 j 40 40 j 40 1 2
一端口的输入导纳为
1 1 Y 0 .025 S Z 40
虽然电路中含有电感和电容元件,因为阻抗的电抗分量为 零或导纳的电纳分量为零,故该一端口是阻性阻抗,即对外 呈现电阻性。
5μF
UL Us
U V R 60
UC Us
-
U
U R I 60 53 . 13 V R
U j L I 240 36 . 87 V L
1 U j I 160 ( 143 . 13 ) V C C
这种现象在实际电路中要引起注意。这种现象发生的条 件一般是电路中既有L元件,又有C元件。
+ U
+
- + U L UR
5μF
+
-
s
U
.
C
-
1 B 0 .032 S L L eq
1 1 L 6 . 25 mH eq 0 . 032 0 . 032 5000
G
Leg
并联等效电路是一个电导元件和一个电感元件 的并联组合。
Z eqZ R Z L Z C 15 j20 25 53 .13 感性阻抗
飞思卡尔 HCS12(x) memory map解说之

飞思卡尔HCS12(x) memory map解说之1[原]热16已有905 次阅读2010-01-26 14:41标签: map memory卡尔解说对于用MCU的人来说,不一定要明白HCS12(x) memory map的机制和联系。
因为如果没有系统地学习操作系统和编译原理之类的课程,确实有些难度。
并且,对于DG128 XS128这样的MCU,默认的memory分配方式已经够用了。
从这个意义上讲,搞清楚memory map似乎不必要。
但是,你有没有RAM不够用的情况?有没有想定义变量到FLASH ROM的情况?有没有因为欲提高寻址效率而定义变量到非分页区的情况?有没有写EEPROM但没写成功的情况?飞思的memory非常灵活,通过地址映射来提高效率是芯片制造商的一惯作风(当然,首先这个CPU要有这种寻址和内存映射转换机制),但是,纵观HCS12(x) memory map的东西,真是做到极限了。
用我以前的话讲是,用有限的资源获得无限的好处了。
看看DG128,64K的逻辑空间,映射之后RAM EEPROM FALSH ROM,都可以充分发挥作用,而且扩展FLASH也方便。
而XS128更高级一筹,有专门的MMC管理HCS12(x) memory map。
我大体上了解这两个片子的HCS12(x) memory map,因此就此谈谈理解和看法,如有错误,请大家不吝指出首先,说说6个概念。
1 memory map 地址映射,不要理解成内存映射,内存是RAM。
2为什么要映射?因为CPU的寻址是对物理地址操作,但是单片机的RESET之后只有相对地址。
相对地址,我理解为是一块一块的,不是连断的。
相对地址,顾名思义,是个相对的,没有映射之前,CPU 是找不到他的,也用不了相对地址的数据。
粘一句百度上的解释:为了保证CPU执行指令时可正确访问存储单元,需将用户程序中的逻辑地址转换为运行时由机器直接寻址的物理地址,这一过程称为地址映射。
飞思卡尔智能车新手入门解决方案

目录目录 (1前言 (3一、基于飞思卡尔芯片的智能循迹车 (11、智能循迹车简介 (12、摄像头组方案 (1(1CMOS模拟摄像头 (2(2CMOS数字摄像头 (33、光电组方案 (4(1红外传感器 (4(2激光传感器 (64、电磁组方案 (10(1工型电感传感器 (10(2色环电感传感器 (10(3硬件设计 (105、道路识别策略 (11(1摄像头信号采集 (12(2红外传感器信号采集 (13(3电磁传感器信号采集 (136、电机驱动 (147、速度检测 (168、调试策略 (17(1速度调试(以摄像头组为例子 (17(2综合调试 (18二、入门级别智能车方案——基于STC89C52单片机智能小车 (191、简介 (192、方案 (19(1基于红外传感器循迹方案 (19(2基于激光传感器循迹方案 (203、利用中断调制PWM占空比驱动直流电机 (23 (1直流电机的实物图片 (23(2直流电机的介绍 (23(3直流电机的驱动 (234、利于中断调制PWM占空比驱动舵机摇头 (24 1、舵机的原理及其应用 (24(1舵机的实物图片: (24(2舵机的介绍 (25(3舵机的工作原理 (255、数码管显示 (251、数码管原理 (256、LED流水灯控制 (27LED灯参考电路图 (277、液晶显示 (28(11602液晶显示 (28a主要技术参数 (28b信号接脚 (29c基本操作时序 (29d电路图接法 (29(212864液晶显示 (30a主要技术参数 (30b信号接脚 (30c基本操作时序 (30d电路图接法 (318、ADC0804 (319、DAC0832 (3210、I2C总线 (3411、矩阵控制 (3512、蜂鸣器控制 (36前言智能化是21世纪机电一体化技术发展的一个重要发展方向。
人工智能在机电一体化及自动控制领域日益得到重视,现阶段在机电一体化及自动化专业教学方式上,部分院校较重视实践而轻理论,部分院校较重视理论而轻实践,但有一个共同点就是:通过一些相关技能竞赛能够有效地提高学生的综合能力,在比赛过程中充分锻炼了参赛者理论知识和实操能力;如:飞思卡尔智能汽车竞赛,电子设计竞赛,机械创新设计竞赛,瑞萨竞赛等。
上海交大的飞思卡尔寻线算法

基于光电传感阵列和摄像头的寻线控制算法关军(上海交通大学机器人研究所上海200240)文摘本文,研究分析了分别基于光电传感器阵列和摄像头的寻线控制方案,通过评估比较两种方案各自具有的优势与不足,设计了一种基于两种传感器融合使用的寻线控制算法。
摄像头和光电传感阵列的混和使用,充分发挥了摄像头探测距离远,光电管信号可靠的特点,有效解决了摄像头在弯道行驶中丢失黑线的问题。
实践表明,该控制算法改善了赛车弯道行驶性能,提高了赛车寻线的可靠性。
关键词:摄像头;光电传感器;寻线控制;弯道识别A line-tracking control algorithm based on photoelectric sensor array and cameraGuan Jun(Research Institute of Robotics, Shanghai Jiao Tong University,Shanghai 200240, China)Abstract: In paper, we make a study on line-tracking control schemes based respectively on photoelectric sensor array and camera. Realizing that both schemes have their own advantages and disadvantages, we have designed a line-tracking control method which combines these two kinds of sensors. The use of camera and photoelectric sensor array together is able to make full advantage of the feature that camera could detect comparatively more distant and that photoelectric signal is more reliable, thus effectively solve the problem that the camera will miss the black line when turning. Experiments show that such method can improve the1performance of the vehicle when turning as well as the reliability of tracking.Key Word: Camera; Photoelectric sensor; Line-tracking control; Curve detecting寻线传感器的选择,是此次智能车竞赛需要首先考虑的问题。
飞思卡尔智能车路径算法

加和自减的步进就能很好的对速度进行控制。
北科定位算法:
某一时刻,采五个“一”字排布的电感的
感应电动势,找出一个感应电动势最大的电感(计为M),导线必然会离这个电
感最近。然后读出该电感相邻左右两个电感的值(分别计为L和R)。会有以下
三种情况:
当L值大于R值,说明导线在L和M之间;
当L值小于R值,说明导线在R和M之间;
当L值约等于R值,说明导线在M正上。
对于特殊情况,如M在最左或最后,缺相邻的L或R,可直接将导线位置
定位于M,且由M值大小得出远离程度。该情况说明传感器偏离赛道很严重。
北科弯Байду номын сангаас算法:
入弯时急减速,以得到足够的调整时间,获得正确的转向角度;在弯道内适当
提速,并保持角度不变,为出弯时的加速节约时间;出弯时,先准确判断标志,
然后加速,虽然会耗费一些时间,但是面对连续变向弯道可以减少判断出错的
概率,保证行驶状态的稳定性,而且弯道内的有限加速对后面的提速也有很大
的帮助。综合考虑用可以接收的额外时间换回行驶稳定性还是值得的。
很多学校两个就上2m了,这是真的
回想调车的点点滴滴,如果你对他好,他跑的就会特别好,绝对不会让你失望。
计算出PWMDTY—PRE之后并不是直接将数值赋值给舵机的占空比寄存器,而是保存起来,并进行PD 控制
速度控制:
一个好的速度控制就是能十分准确的给出目标速度,电机对目标速度响应迅速,系统在干扰
到底什么方法可以提前预判弯道以及算出弯道半径?
曲率用交叉45度的两个电感可以求的,但是要做一些误差修正。
飞思卡尔单片机寄存器及汇编指令详解

附录I:寄存器地址列表直接页面寄存器总结高页面寄存器总结非易失寄存器总结注:直接页面寄存器表地址的低字节用粗体显示,直接寻址对其访问时,仅写地址低字节即可。
第2列中寄存器名用粗体显示以区别右边的位名。
有0的单元格表示未用到的位总是读为0,有破折号的单元格表示未用或者保留,对其读不定。
附录II 指令接与寻址方式HCS08指令集概括运算符() = 括号种表示寄存器或存储器位置的内容← = 用……加载(读: “得到”)& = 布尔与| = 布尔或⊕= 布尔异或×= 乘÷ = 除: = 串联+ = 加- = 求反(二进制补码)CPU registersA =>累加器CCR =>条件代码寄存器H =>索引寄存器,高8位X => 索引寄存器,低8位PC =>程序计数器PCH =>程序计数器,高8位PCL =>程序计数器,低8位SP =>堆栈指针存储器和寻址M =>一个存储区位置或者绝对值数据,视寻址模式而定M:M + 0x0001 => 两个连续存储位置的16位值.高8位位于M的地址,低8位位于更高的连续地址.条件代码寄存器(CCR)位V => 二进制补码溢出指示,第7位H => 半进位,第4位I => 中断屏蔽,第 3位N => 求反指示器, 第2位Z => 置零指示器, 第1位C => 进/借, 第0位 (进位第 7位 )CCR工作性符号– => 位不受影响0 = > 位强制为01 = > 位强制为1= >根据运算结果设置或清除位U = > 运算后没有定义机器编码符号dd =>一个直接寻址0x0000–0x00FF的低8位(高字节假设为0x00)ee => 16位偏移量的高8位ff => 16位偏移量的低8位ii => 立即数的一个字节jj => 16位立即数值的高位字节kk => 16位立即数值的低位字节hh => 16位扩展寻址的高位字节ll => 16位扩展寻址的低位字节rr => 相对偏移量n —任何表达范围在0–7之间的一个有符号数的标号或表达式opr8i —任何一个表达8位立即值的标号或表达式opr16 —任何一个表达16位立即值的标号或表达式opr8a —任何一个表达一个8位值的标号或表达式.指令对待这个8位值为直接页面64K 字节地址空间(0x00xx)中地址的低8位.opr16a —任何一个表达16位值的标号或表达式.指令对待这个值为直接页面64K字节地址空间.oprx8 —任何一个表达8位无符号值的标号或表达式,用于索引寻址.oprx16 —任何一个16位值的标号或表达式.因为HCS08有一个16位地址总线,这可以为一个有符号或者无符号值.rel —任何指引在当前指令目标代码最后一个字节之后–128 to +127个字节之内的标号或表达式.汇编器会计算包括当前指令目标代码在内的8位有符号偏移量. 寻址方式隐含寻址(Inherent)如CLRA,只有操作码,无操作数,需要操作的数据一般为CPU寄存器,因此不需要再去找操作数了。
飞思卡尔 所有的算法

第1章电机控制1.1. 直流电机控制策略:针对本文所研究的智能车来说,车体速度是大惯性的被控对象。
算法输出的控制量只能对电机输出力进行控制。
而有一定负载时电机的输出力无论对车轮的转速还是车体的形式速度都是不成正比的,车在刚开始启动的时候速度是零,而电机的输出可能很大;车在匀速行驶的时候速度很快,而电机的输出可能并不是很大。
而且电池电量、车体重量都会对车速造成影响。
因此只有用闭环才能对车速进行良好的控制。
在车轮对地面不打滑的情况下车体的速度和后轮的转动速度是成正比的。
因此我们可以直接用光电码盘对后轮的转速进行控制。
对于这样一个大惯性系统,我们选用PID和鲁棒相结合的办法进行速度控制。
回路的设定值由经验值确定。
考虑到速度控制通道的时间滞后比较小,因此采用PID 控制方案,并在进行加减速控制时,引入了“棒棒控制”。
U(k + 1) = U(K) + P1 * e(k) + P2 * (e(k) – e(k - 1)) + P3 * ((e(k) – e(k-1) – (e(k-1) – e(k - 2)));公式1-1 PID的公式其中第一项为积分项;第二项为比例项;第三项为微分项。
考虑到被控对象(车体速度)本身是一个大的积分环节,公式中可以将第一项省略,即采用PD控制。
E 为误差。
同时设定误差门限,在误差比较大的时候采用大输出控制电机,将误差在最短时间内减小到所要求的范围,这就是鲁棒控制的思想。
电机控制策略,其实就是对模型车速度的控制策略,它是继路径识别之后非常重要的策略,直接关系到整个模型车比赛的性能。
速度控制得当,小车才能以最好的状态,在最短的时间完成比赛路程。
1.1.1.弯道速度控制在模型车入弯时刻出于稳定性考虑做减速控制。
减速原则是在原来直道速度设定值的基础上,减小速度设定值到低速挡,保证模型车可以安全入弯。
另一方面,入弯之后,为了过弯时模型车能够不明显的左右摆动并采用较好的姿态通过弯路,令车速与偏差成线性关系,偏差越大速度设定值越小。
飞思卡尔智能车黑线提取算法与行驶控制

飞思卡尔智能车黑线提取算法与行驶控制(摄像头组)引言按照第一届全国大学生“飞思卡尔”智能车大赛比赛规则要求:使用大赛组委会统一提供的竞赛车模,采用飞思卡尔16位微控制器MC9S12DG128作为核心控制单元,自主构思控制方案及系统设计,包括传感器信号采集处理、控制算法及执行、动力电机驱动、转向舵机控制等,以比赛完成时间短者为优胜者。
其中赛道为在白色底板上铺设黑色引导线。
根据赛道特点,主要有两种寻线设计方案:。
本文是在摄像头方案的实时图像数据已经获得的基础上,对图像进行数据处理,提取赛道中的引导黑线位置,从而以此作为舵机和驱动电机的控制依据。
图像数据信息特点摄像头的主要工作原理是:按一定的分辨率,以隔行扫描的方式采集图像上的点,当扫描到某点时,就通过图像传感芯片将该点处图像的灰度转换成与灰度成一一对应关系的电压值,然后将此电压值通过视频信号端输出。
具体而言(参见图1),摄像头连续地扫描图像上的一行,则输出就是一段连续的电压视频信号,该电压信号的高低起伏正反映了该行图像的灰度变化情况。
当扫描完一行,视频信号端就输出低于最低视频信号电压的电平(如0.3V),并保持一段时间。
这样相当于,紧接着每行图像对应的电压信号之后会有一个电压“凹槽”,此“凹槽”叫做行同步脉冲,它是扫描换行的标志。
然后,跳过一行后(因为摄像头是隔行扫描的方式),开始扫描新的一行,如此下去,直到扫描完该场的视频信号,接着就会出现一段场消隐区。
此区中有若干个复合消隐脉冲(简称消隐脉冲),在这些消隐脉冲中,有个脉冲,它远宽于(即持续时间长于)其他的消隐脉冲,该消隐脉冲又称为场同步脉冲,它是扫描换场的标志。
场同步脉冲标志着新的一场的到来,不过,场消隐区恰好跨在上一场的结尾部分和下一场的开始部分,得等场消隐区过去,下一场的视频信号才真正到来。
摄像头每秒扫描25幅图像,每幅又分奇、偶两场,先奇场后偶场,故每秒扫描50场图像。
奇场时只扫描图像中的奇数行,偶场时则只扫描偶数行。
[整理]飞思卡尔电磁组舵机实用控制算法
![[整理]飞思卡尔电磁组舵机实用控制算法](https://img.taocdn.com/s3/m/f8caaa7033d4b14e852468e1.png)
[整理]飞思卡尔电磁组舵机实用控制算法让我来告诉大家到底该怎样接吧一般普通的小干簧管在无磁力时要么不能完全阻隔电压(尤其被烙铁焊过),要么不够灵敏,得很靠近磁铁才吸合,所以通常一端接电阻再连接地(或5v 源),另一端作输出口的接法很不可靠,而大干簧管体积大且通常不充惰性气体,不够灵敏。
所以建议买灵敏的干簧管,灵敏的干簧管再外接三极管开关电路,就能使电压信号有效阻隔与导通,十分可靠。
具体接法是5v源接一个105微调再串上干簧管,干簧管输出接到三极管基极,三极管发射极串接100k可调电阻再接地,集电极串50k电阻再接到5v源。
信号输出口从集电极引出,就可以了。
调节电阻,还可调节干簧管的感应距离。
void Driver(unsigned int DJangle) //µç?ú?ØÖÆ{unsigned int qsensor;char SpError;SpError=TargetSpeed-CurrentSpeed;qsensor=Car_Data.sensor[0][0]+Car_Data.sensor[1][0]+Car_Data.sensor[ 2][0];//40if( SpError>(TargetSpeed-3) && HighSpeed()) //ÍíÉÏÊÔ×Å?ÓÉÏÕâ?ä{PWMDTY45=480;}if( PWMDTY45<500 && HighSpeed() && SpError<=(TargetSpeed-3)&&SpError>0){if(SpError>2){PWMDTY45+=SpError; //ÊÇ?Ö?Î??ÊÇÖ??Ó}else{}}if(SpError==0){}if(SpError<0 && HighSpeed()) //?õËÙ{PWMDTY45=300;PWMDTY45=300;}if( CurrentSpeed>DownSpeed && qsensor<45) //ÈëÍä?õËÙ Ã?ÓÐ?ØÖƺà {PWMDTY45=300;PWMDTY45=300;PWMDTY45=300;while( PWMDTY45>270){PWMDTY45-=10;}}}设定速度的效果没有1)确定比例系数Kp确定比例系数Kp时,首先去掉PID的积分项和微分项,可以令Ti=0、Td=0,使之成为纯比例调节。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第五章 智能汽车软件设计
值,通过增量式 PID 算法进行调节,从而控制直流电机对当前路径进行快速反应。 增量式 PID 的算式为:
u k K P e k e k 1 K I ek K D e k 2e k 1 e k 2
e(k) 车体偏离理想轨迹的当前偏差值; k1 为减速控制比例系数。
同时,通过实验发现模型车入弯之后,令模型车以某一线性规律加速运行 可以使车在不冲出轨道的前提下以更短的时间通过弯道。控制规律 如……………………………………………………………………….公式 1- 3。
vs (k) = v+Ck * Cp
………………………………………………………………………….公式 4- 4
其中:
为速度闭环设定值;
模型车全程运动平均速度设定值; 车体偏离理想轨迹的当前偏差值; 为减速控制比例系数 同时,通过实验发现模型车入弯之后,令模型车以某一线性规律加速运行可以 使车在不冲出轨道的前提下以更短的时间通过弯道。控制规律 如……………………………………………………………………….公式 4- 5。
U(k + 1) = U(K) + P1 * e(k) + P2 * (e(k) – e(k - 1)) + P3 * ((e(k) – e(k-1) – (e(k-1) – e(k - 2)));
公式 4- 3 PID 的公式
其中第一项为积分项; 第二项为比例项; 第三项为微分项。 考虑到被控对象 (车 体速度)本身是一个大的积分环节,公式中可以将第一项省略,即采用 PD 控制。E 为误差。 同时设定误差门限,在误差比较大的时候采用大输出控制电机,将误差在最短 时间内减小到所要求的范围,这就是棒棒控制的思想。 电机控制策略,其实就是对模型车速度的控制策略,它是继路径识别之后非常 重要的策略,直接关系到整个模型车比赛的性能。速度控制得当,小车才能以最好 的状态,在最短的时间完成比赛路程。
…………………………………………………………………公式 4- 6
其中:
补偿效果控制系数;
调速补偿变量。
第五章 智能汽车软件设计
为常数,初始化时设定。
出弯时刻初始化为 ,每个控制周期累加 。
1.3.3. 速度及加速度信号采集子程序 当图像数据采集处理完后,我们读取速度传感器和加速度传感器的值,采集这 两个传感器信号的频率也为 60Hz。流程图如图 4.3 所示。
……………………………………………………………………….公式 4- 5
其中:
பைடு நூலகம்
为弯道加速系数; 入弯时刻初始化为 0,每个控制周期累加 1。
弯道加速变量; 为常数,初始化时设定。
1.3.2. 直道速度控制 直道采用匀速控制方案,速度设定在此控制系统下可以控制的最大入弯速度。 在从弯道驶出进入直道后须进行加速控制,增大速度设定值。因速度控制回路有一 定的惯性,所以在提速时为了使速度迅速改变,加入了“棒棒控制” 。控制规律 如…………………………………………………………………公式 4- 6。
第五章 智能汽车软件设计
1.2. 反向制动算法
要使赛车在较短的时间完成比赛,速度自然越高越好,显然速度太高弯道是过 不去的,如果以弯道的极限速度匀速跑,又浪费了直道的时间。所以最佳的策略是 直道以较高的速度跑,到弯道时再尽快将速度降下来。在入弯减速时如果只靠赛道 的摩擦阻力效果显然是不够理想的。为此我们引入反向制动算法。 由于MC33886芯片集成的H桥驱动电路本身就具有反向制动功能,所以不需再外
U(k + 1) = U(K) + P1 * e(k) + P2 * (e(k) – e(k - 1)) + P3 * ((e(k) – e(k-1) – (e(k-1) – e(k - 2)));
公式 1- 1 PID 的公式
其中第一项为积分项; 第二项为比例项; 第三项为微分项。 考虑到被控对象 (车 体速度)本身是一个大的积分环节,公式中可以将第一项省略,即采用 PD 控制。E 为误差。 同时设定误差门限,在误差比较大的时候采用大输出控制电机,将误差在最短 时间内减小到所要求的范围,这就是鲁棒控制的思想。 电机控制策略,其实就是对模型车速度的控制策略,它是继路径识别之后非常 重要的策略,直接关系到整个模型车比赛的性能。速度控制得当,小车才能以最好 的状态,在最短的时间完成比赛路程。 1.1.1. 弯道速度控制 在模型车入弯时刻出于稳定性考虑做减速控制。减速原则是在原来直道速度设 定值的基础上,减小速度设定值到低速挡,保证模型车可以安全入弯。另一方面, 入弯之后,为了过弯时模型车能够不明显的左右摆动并采用较好的姿态通过弯路,
加硬件电路。反向制动流程图如图: 在制动时,电机反向电动势对整个系统电路造成的冲击,从而引起单片机工作 不稳定,电流过大导致电机过热、电机频繁换向导致电刷打火剧烈导致电机寿命缩 短等一系列问题都是需要考虑的。
第五章 智能汽车软件设计
1.3. 速度控制策略
1、为了达到好的速度控制效果,对速度进行闭环控制是必须的。这里所说的速度控制策略 是指设定速度的确定方法——设定速度主要由道路与直道的偏差来决定,道路越接近直道,设 定速度越高,反之越低。 车模行驶中的最低速度是这样确定的:令车模以较低的速度匀速行使,在保证无犯规行为 出现的前提下,逐渐提高匀速行使的速度,直到车模出现犯规行为,此速度再减去一个安全量, 即为所需的最低速度。简单的说,变速行使的最低速度等于匀速行使的最高速度。 车模行驶中的最高速度是这样确定的:在确定最低速度以后,加入变速策略,不断提高最 高速度的设定值,直到模型车出现犯规行为,此速度再减去一个安全量,即为所需的最高速度。 车模行驶过程中难免出现“失去道路”的情况,对此需要采取一定的安全策略,防止赛车 “盲跑”而导致犯规。
第五章 智能汽车软件设计
令车速与偏差成线性关系,偏差越大速度设定值越小。速度设定方法 如………………………………………………………………………….公式 1- 2。
vs (k) = v - k1 * e(k)
………………………………………………………………………….公式 1- 2
v (k) 为速度闭环设定值; 其中: s v 模型车全程运动平均速度设定值;
第五章 智能汽车软件设计
1.3.1. 弯道速度控制 在模型车入弯时刻出于稳定性考虑做减速控制。减速原则是在原来直道速度设 定值的基础上,减小速度设定值到低速挡,保证模型车可以安全入弯。另一方面, 入弯之后,为了过弯时模型车能够不明显的左右摆动并采用较好的姿态通过弯路, 令车速与偏差成线性关系,偏差越大速度设定值越小。速度设定方法 如………………………………………………………………………….公式 4- 4。
第五章 智能汽车软件设计
第1章
1.1. 直流电机控制策略:
电机控制
针对本文所研究的智能车来说,车体速度是大惯性的被控对象。算法输出的控 制量只能对电机输出力进行控制。而有一定负载时电机的输出力无论对车轮的转速 还是车体的形式速度都是不成正比的,车在刚开始启动的时候速度是零,而电机的 输出可能很大;车在匀速行驶的时候速度很快,而电机的输出可能并不是很大。而 且电池电量、车体重量都会对车速造成影响。因此只有用闭环才能对车速进行良好 的控制。在车轮对地面不打滑的情况下车体的速度和后轮的转动速度是成正比的。 因此我们可以直接用光电码盘对后轮的转速进行控制。 对于这样一个大惯性系统,我们选用 PID 和鲁棒相结合的办法进行速度控制。 回路的设定值由经验值确定。 考虑到速度控制通道的时间滞后比较小, 因此采用 PID 控制方案,并在进行加减速控制时,引入了“棒棒控制” 。
在增量式 PID 处理的过程中,有一个步骤需要注意,即在算完△u (k)后,需要 把它赋值给电机控制对应的 PWM 通道信号,这时要判断该△u (k)的值,如果它小 于 0,则把 PWM 信号赋值为 0,如果它大于 PWM 信号的最大值,即大于 PWM 整 个周期所对应的数值时, 要把 PWM 信号赋值为该最大值。 然后, 再存储本次△u (k), 和上次△u (k)。 error=speed_v-infrared_value7;
pwmtemp=PWMDTY23+PID_P*(error-last_error)+PID_I*(error)+PID_D*(error+pre_error-2*last_error);
由上述代码中,speed_v 表示标准速度,infrared_value7 表示 ATD1 转换的经公 式 4.5 计算出的即时速度值,通过计算它们的差值 error,再利用增量 PID 控制算法 计算出 pwmtemp,再对 pwmtemp 进行处理,最后 PID 程序处理的结果是给出一个 PWM 信号,而这个信号就是驱动电机的,当 error 大,即标准速度和即时速度相差 的比较多时,pwmtemp 的绝对值相对比较大,则给电机的 PWM 信号相对较大,这 样电机转速相对较快;反之,电机转速则相对较慢。由此可以看出,PID 算法主要 的功能是,在闭环系统中,利用即时速度的反馈,使得即时速度逼近标准速度的时 间尽量变短,这样小车就可以根据路径识别得出的速度标准值,及时调整自己的速 度,以适应各种路况。例如,小车正在直道上行进,而且直道的时速应该是各种赛 道中最快的,当系统的路径识别算法察觉到前方出现弧度大的弯道后,系统会根据 事先调试的结果,给出大弧度弯道的速度标准值,然后 PID 算法根据速度标准值 speed_v 和即时速度反馈值 infrared_value7 对电机的输入信号 PWM 进行及时调整, 反映到实际中,就是小车及时减速并顺利通过弯道。 在增量式 PID 处理的过程中,有一个步骤需要注意,即在算完△u (k)后,需要 把它赋值给电机控制对应的 PWM 通道信号,这时要判断该△u (k)的值,如果它小 于 0,则把 PWM 信号赋值为 0,如果它大于 PWM 信号的最大值,即大于 PWM 整 个周期所对应的数值时,要把 PWM 信号赋值为该最大值。