AD转换基准电压总结(飞思卡尔电磁组)
- 格式:wps
- 大小:102.00 KB
- 文档页数:3
小车代码源程序RouteTest.c#include <hidef.h> /* common defines and macros */#include <MC9S12XS128.h> /* derivative information */#include "main.h"#define uint unsigned intuint AD0,AD1,AD2,AD3,AD4,AD5,AD6,AD7,AD8,AD9,ADFULL=0; uint A0=0,A1=0,MAXTEMP0,MINTEMP0,MAXTEMP1,MINTEMP1; uint A2=0,A3=0,MAXTEMP2,MINTEMP2,MAXTEMP3,MINTEMP3; uint A4=0,A5=0,MAXTEMP4,MINTEMP4,MAXTEMP5,MINTEMP5; uint A6=0,A7=0,MAXTEMP6,MINTEMP6,MAXTEMP7,MINTEMP7; uint A8=0,A9=0,MAXTEMP8,MINTEMP8,MAXTEMP9,MINTEMP9;void RouteTest(void){while(!ATD0STAT2_CCF0); //判断通道0是否转换完成AD0=ATD0DR0;if(A0==0){MAXTEMP0=AD0;MINTEMP0=AD0;}else{if(MAXTEMP0<AD0) MAXTEMP0=AD0;if(MINTEMP0>AD0) MINTEMP0=AD0;}A0++;if(A0==LENGTH) {MAXTEMP0=MAXTEMP0-MINTEMP0;}while(!ATD0STAT2_CCF1); //判断通道1是否转换完成 AD1=ATD0DR1;if(A1==0){MAXTEMP1=AD1;MINTEMP1=AD1;}else{if(MAXTEMP1<AD1) MAXTEMP1=AD1;if(MINTEMP1>AD1) MINTEMP1=AD1;}A1++;if(A1==LENGTH) {A1=0;MAXTEMP1=MAXTEMP1-MINTEMP1;}while(!ATD0STAT2_CCF2); //判断通道2是否转换完成 AD2=ATD0DR2;if(A2==0){MAXTEMP2=AD2;MINTEMP2=AD2;}else{if(MAXTEMP2<AD2) MAXTEMP2=AD2;if(MINTEMP2>AD2) MINTEMP2=AD2;}if(A2==LENGTH) {A2=0;MAXTEMP2=MAXTEMP2-MINTEMP2;}while(!ATD0STAT2_CCF3); //判断通道3是否转换完成 AD3=ATD0DR3;if(A3==0){MAXTEMP3=AD3;MINTEMP3=AD3;}else{if(MAXTEMP3<AD3) MAXTEMP3=AD3;if(MINTEMP3>AD3) MINTEMP3=AD3;}A3++;if(A3==LENGTH) {A3=0;MAXTEMP3=MAXTEMP3-MINTEMP3;}while(!ATD0STAT2_CCF4); //判断通道4是否转换完成 AD4=ATD0DR4;if(A4==0){MAXTEMP4=AD4;MINTEMP4=AD4;}else{if(MAXTEMP4<AD4) MAXTEMP4=AD4;if(MINTEMP4>AD4) MINTEMP4=AD4;}A4++;if(A4==LENGTH) {A4=0;MAXTEMP4=MAXTEMP4-MINTEMP4;}while(!ATD0STAT2_CCF5); //判断通道5是否转换完成 AD5=ATD0DR5;if(A5==0){MAXTEMP5=AD5;MINTEMP5=AD5;}else{if(MAXTEMP5<AD5) MAXTEMP5=AD5;if(MINTEMP5>AD5) MINTEMP5=AD5;}A5++;if(A5==LENGTH) {A5=0;MAXTEMP5=MAXTEMP5-MINTEMP5;}while(!ATD0STAT2_CCF6); //判断通道6是否转换完成 AD6=ATD0DR6;if(A6==0){MAXTEMP6=AD6;}else{if(MAXTEMP6<AD6) MAXTEMP6=AD6;if(MINTEMP6>AD6) MINTEMP6=AD6;}A6++;if(A6==LENGTH) {A6=0;MAXTEMP6=MAXTEMP6-MINTEMP6;}while(!ATD0STAT2_CCF7); //判断通道7是否转换完成 AD7=ATD0DR7;if(A7==0){MAXTEMP7=AD7;MINTEMP7=AD7;}else{if(MAXTEMP7<AD7) MAXTEMP7=AD7;if(MINTEMP7>AD7) MINTEMP7=AD7;}A7++;if(A7==LENGTH) {A7=0;MAXTEMP7=MAXTEMP7-MINTEMP7;}while(!ATD0STAT2_CCF8); //判断通道8是否转换完成if(A8==0){MAXTEMP8=AD8;MINTEMP8=AD8;}else{if(MAXTEMP8<AD8) MAXTEMP8=AD8;if(MINTEMP8>AD8) MINTEMP8=AD8;}A8++;if(A8==LENGTH) {A8=0;MAXTEMP8=MAXTEMP8-MINTEMP8;}while(!ATD0STAT2_CCF9); //判断通道9是否转换完成 AD9=ATD0DR9;if(A9==0){MAXTEMP9=AD9;MINTEMP9=AD9;}else{if(MAXTEMP9<AD9) MAXTEMP9=AD9;if(MINTEMP9>AD9) MINTEMP9=AD9;}A9++;if(A9==LENGTH) {A9=0;MAXTEMP9=MAXTEMP9-MINTEMP9;}ADFULL=ADFULL+1;}CarControl.c#include <hidef.h> /* common defines and macros */ #include <MC9S12XS128.h> /* derivative information */ #include "SetPwm.h"#include "main.h"#include "RouteTest.h"#define uint unsigned int#define uchar unsigned char#define value01L -43#define value23L -94#define value45L -90#define value67L -120#define value89L -60#define value01R 43#define value23R 90#define value45R 110#define value67R 130#define value89R 60//#define bentspeed 45//#define dirspeed 45#define valueDL -220#define valueDR 220uint SPEED;//小车速度int CARREL01=0,CARREL23=0,CARREL45=0,CARREL67=0,CARREL89=0; //小车偏移量int ERROR=4050,D_ERROR=0,LASTERROR=4050,E_ERROR=4050,ERRORREL=0; int speedrel=0;uint setspeed=60,realspeed=0;void Delay10us(uint m) //延时10us{uint u;for(;m>0;m--)for(u=0;u<38;u++);}void CarControl(void){//采样100个数据if(ADFULL==LENGTH) {ADFULL=0;//***********************************************CARREL01=MAXTEMP0-MAXTEMP1;CARREL23=MAXTEMP2-MAXTEMP3;CARREL45=MAXTEMP4-MAXTEMP5;CARREL67=MAXTEMP6-MAXTEMP7;CARREL89=MAXTEMP8-MAXTEMP9;if(CARREL01>value01R)//01右转处理{ERROR=4050+CARREL01-value01R;if(ERROR>=4100)ERROR=4100;setspeed=dirspeed;}if(CARREL23>value23R)//23右转处理{ERROR=4100+2*(CARREL23-value23R);if(ERROR>=4264)ERROR=4264;setspeed=dirspeed;}if(CARREL45>value45R)//45右转处理{ERROR=4264+6*(CARREL45-value45R);if(ERROR>=4411)ERROR=4411;setspeed=40;}if(CARREL67>value67R)//67右转处理{ERROR=4411+6*(CARREL67-value67R);if(ERROR>=4600)ERROR=4600;setspeed=bentspeed;}//以上是右转弯处理//******************************************************************* ******//以下是左转弯处理if(CARREL01<value01L)//01{ERROR=4050+CARREL01-value01L;if(ERROR<=4000)ERROR=4000;setspeed=dirspeed;}if(CARREL23<value23L)//23{ERROR=4000+3*(CARREL23-value23L);if(ERROR<=3886)ERROR=3886;setspeed=dirspeed;}if(CARREL45<value45L)//45{ERROR=3886+4*(CARREL45-value45L);if(ERROR<=3794)ERROR=3794;setspeed=(dirspeed+bentspeed)/2;}if(CARREL67<value67L){ERROR=3794+8*(CARREL67-value67L);if(ERROR<=3600)ERROR=3600;setspeed=bentspeed;}D_ERROR=D_ERROR+ERROR-LASTERROR; //误差累积计算 if(D_ERROR>valueDR || D_ERROR<valueDL ) {ERRORREL=D_ERROR;}LASTERROR=ERROR; //保存前一次误差E_ERROR=ERROR+ERRORREL; //叠加误差累计值if(E_ERROR>4600) E_ERROR=4600;if(E_ERROR<3600) E_ERROR=3600;PWMDTY23=E_ERROR;ERRORREL=0;//PWMDTY01=bentspeed;//**************速度控制*************************realspeed=(xishu+1)*speed;speedrel=setspeed-realspeed;if(speedflag==0){if(speedrel<=-10 && (E_ERROR>4400 ||E_ERROR<3800)){PWMDTY45=90; //反转迅速减速PWMDTY01=0;}else{PWMDTY45=0;PWMDTY01=setspeed;}}else{PWMDTY01=setspeed;PWMDTY45=0;}}}Main.c#include <hidef.h> /* common defines and macros */#include <MC9S12XS128.h> /* derivative information */#include "RouteTest.h"#include "CarControl.h"#include "SetPwm.h"#define uint unsigned int#define uchar unsigned char//#define dirspeed 60uint STOPCAR=0,speed,speedsum=0,xishu=0,flag=0,jishi=0; uint bentspeed=0,dirspeed=0;uint speedflag=0;void Delay10(uint m) //延时10us{uint u;for(;m>0;m--)for(u=0;u<38;u++);}void Delay(int k) //延时k*1ms{int u;for(;k>0;k--)for(u=0;u<3998;u++);}//总线时钟设置void setbusclock(void){SYNR = 0x02;REFDV = 0x01;while (!(CRGFLG&0x08));CLKSEL =0x80;}/*****************************************************功能:时基中断初始化,实现5ms中断500us进行一次测速。
第七届“飞思卡尔”杯全国大学生智能汽车竞赛技术报告学校:华南理工大学队伍名称:Crusader参赛队员:施尚军陈迪王艺霖带队老师:陈安关于技术报告和研究论文使用授权的说明本人完全了解第七届“飞思卡尔”杯全国大学生智能汽车竞赛关保留、使用技术报告和研究论文的规定,即:参赛作品著作权归参赛者本人,比赛组委会和飞思卡尔半导体公司可以在相关主页上收录并公开参赛作品的设计方案、技术报告以及参赛模型车的视频、图像资料,并将相关内容编纂收录在组委会出版论文集中。
参赛队员签名:带队教师签名:日期:目录第一章引言 (1)1.1 概述 (1)1.2 系统框架图及车模 (1)第二章硬件设计 (3)2.1 电源模块 (3)2.2 K10最小系统模块 (4)2.2.1 电源稳压电路 (4)2.2.2 J-TAG调试接口 (4)2.2.3 单片机外部接口 (5)2.2.4 其他外围电路 (5)2.3 加速度及陀螺仪模块 (6)2.4 电磁传感器运放电路 (7)2.5 电机驱动模块 (8)2.6 速度检测模块 (9)2.7 调试模块 (10)2.7.1 无线调试模块 (10)2.7.2 液晶调试模块 (10)2.7.3 拨码开关 (11)第三章软件设计 (12)3.1 程序流程图 (12)3.2 自平衡环节 (12)3.3 赛道检测 (15)3.4 软件滤波 (17)3.5 PID控速 (18)3.6 上位机分析数据 (19)第四章车模主要技术参数 (21)第五章结论 (22)参考文献 (23)第一章引言1.1 概述“飞思卡尔”全国大学生智能车比赛今年进行到第七届,比赛规则完善,为广大同学提供了一个良好的学习提高的平台。
第七届比赛,在原来电磁组的基础上要求车子只用两个轮子直立前进,这使得参赛选手对传感器的使用有更高的要求。
两轮直立车是一个倒立摆的模型,如何通过加速度计、陀螺仪控制车子稳定直立,这个早已有研究,大赛秘书处也给出了参考方案,这使得参赛队员比较容易入门,大赛的门槛很低。
山东大学(威海)飞思卡尔知识竞赛初赛试题(样题)姓名:年级:学号:手机号:一填空题(每空2分,共22分)(1)HCS12微控制的工作电压为()(2)飞思卡尔智能车竞赛最初起源于哪个国家()(3)摄像头组一般使用的摄像头是CCD和()(4)第七届全国飞思卡尔智能车山东赛区在哪个学校举办()(5)飞思卡尔智能车赛要求使用的传感器不能超过()个(6)伺服电机不超过几个()(7)PWM即()(8)第八届全国飞思卡尔智能车赛中电磁组中如果选用陀螺仪,则必须选择()公司的()系列的陀螺仪。
(两空可选答一空,如果两空均答对则得4分但本题最多不超过20分)(9)AD转换中A表示的是()信号,D表示的是()信号。
(10)如果有一车模通过连续扫描赛道反射点的方式进行路径检测的属于()组车模。
二选择题(每题2分,共20分)(请勿在A、B、C、D上打勾否则不得分)1、以下学校中哪所学校是第七届飞思卡尔智能车全国总决赛举办地()A.南京师范大学B.北京科技大学C.常熟理工学院D.杭州电子科技大学2、请问CCD摄像头的额定工作电压是()A.3.3VB.5VC.7.2VD.12V3、程序的灵魂是()A.算法B.函数C.数据结构D.表达式4、以下哪种软件是用来绘制PCB(电路板)的?()A. KeilB.ProteusC.Visual C++D.Altium Designer5、请问二进制数100101011110011110是()A.奇数B.偶数6、请把十六进制数5A1D转化为二进制()A.1000100011000110B.110101********* C101101001011101 D.1011010000111017、飞思卡尔是()制造商。
A.汽车B.半导体C.汽车芯片D.手机8、第六届与第七届比赛规则变动最大的是以下哪个组()A.摄像头组B.光电组C.电磁组D.光电平衡组9、第七届比赛规则中要求摄像头组用()车模,光电组用()车模,电磁组用()车模。
飞思卡尔智能车电磁组分区算法介绍写在之前的话:1、⽬前我是⼀名在校学⽣,这也是我第⼀次写博客,不周之处,请多谅解;2、此算法并⾮原创,借鉴⾃⼭东德州学院第⼋届⽩杨队(PS:个⼈看法,对于⼀些⼈把别⼈的开源东西改头换⾯⼀下就说是⾃⼰的原创⾏为⼗分鄙视);3、对于此算法的理解和说明并⾮纸上谈兵,算法已经被我运⽤到了⼩车⽐赛中并取得好的成绩(具体就不多说了,⽐赛时车莫名其妙坏了,⽐赛前调试的速度绝对能进国赛,⽐较遗憾),总之这算法是我尝试过的最好的算法;4、这⼀次所介绍的只是路径算法和⼀些知识普及,后⾯有时间会介绍其余部分算法及许多好的思路(舵机电机控制思路(不只是简单的PID),双车策略);5、希望对于这⽅⾯有涉及的⼈能与我联系并交流或指出不⾜之处。
---------------------------------------------------------------分割线-----------------------------------------------------------------------------⼀、没有这⽅⾯了解的可以看看 飞思卡尔智能车分为三组:摄像头、光电、电磁,我做的是电磁车,三种车队区别在于传感器的不同,所以获得路径信息的⽅法也不⼀样,摄像头和光电识别的是赛道上的⿊线(⽩底赛道),⽽电磁车则是检测埋在赛道下的通⼊100mh电流的漆包线,摄像头和光电采⽤的是摄像头和ccd作为传感器,电磁则是⽤电感放在漆包线周围,则电感上就会产⽣感应电动势,且感应电动势的⼤⼩于通过线圈回路的磁通量成正⽐,⼜因为漆包线周围的磁感应强度不同,因此不同位置的电感的感应电动势就不同,因此就可以去确定电感位置;因此在车⼦前⾯设置了50cm的前瞻,电感布局如下(怎么发不了图⽚):分为两排,前排3个,编号0,1,2(前期还加了两个竖直电感⽤来帮助过直⾓弯,后来改为了⼋字电感);后排2个,编号3,4;现在车⼦获得了不同位置的感应电动势的⼤⼩了,但这些值是不能处理的:1、感应电动势太微弱;2、是模拟信号,信号太微弱就放⼤它;这就涉及到模拟电路的知识了,就不多说了(因为要把这讲完到PCB绘制的篇幅就⾜够写另开⼀号专门写这些⽅⾯来(PS:题外话(我的题外话⽐较多)):放⼤部分外围你设计的再好也抵不过⼀个更好的芯⽚,有两个例⼦,⼀个是我⾃⼰的:之前⽤的是NE5532,但是效果不理想,加了好多什么滤波,补偿,都⽤上,没⽤,软件⾥处理后⾯再说,后来⼀狠⼼换了AD620,感觉像是春天来了,因为它是仪⽤放⼤器,还有就是贵。
飞思卡尔H12系列AD(模数转换)模块总结————下面对CodeWarrior IDE中生成的有关AD的函数做个总结一、函数用法。
1.void ADC_PE_Init(void){。
}初始化函数,在主函数中PE_low_level_init();语句中执行,不用用户调用。
初始化中EnUser=1。
2.ISR(ADC_PE_Interrupt){。
}AD中断入口函数,AD中断时系统自行调用,用户可忽略。
3.static void HWEnDi(void){ }使能或禁止AD转换。
系统调用4byte ADC_PE_Enable(void){if (EnUser) { /* Is the device enabled by user? */return ERR_OK; /* If yes then set the flag "device enabled" */}EnUser = TRUE; /* Set the flag "device enabled" */HWEnDi(); /* Enable the device */return ERR_OK; /* OK */}有事件发生时,使能AD5.byte ADC_PE_Disable(void){if (!EnUser) { /* Is the device disabled by user? */return ERR_OK; /* If yes then OK */}EnUser = FALSE; /* If yes then set the flag "device disabled" */ HWEnDi(); /* Enable the device */return ERR_OK; /* OK */}没有事件发生时,禁止AD6.byte ADC_PE_Start(void){if (!EnUser) { /* Is the device disabled by user? */return ERR_DISABLED; /* If yes then error */}if (ModeFlg != STOP) { /* Is the device in running mode? */return ERR_BUSY; /* If yes then error */}ModeFlg = CONTINUOUS; /* Set state of device to the continuos mode */HWEnDi(); /* Start measurement */return ERR_OK; /* OK */}调用这个函数可让所有在bean中设置的AD通道,连续转换一次,每次转换的数据存储在文件开头定义的ADC_PE_OutV [ ]数组中。
第七届全国大学生“飞思卡尔”杯智能汽车竞赛电磁组直立行车参考设计方案(版本2.0)目 录目录 (2)图表索引 (3)一、前言 (7)二、原理篇 (9)2.1直立行走任务分解 (9)2.2车模直立控制 (11)2.3 车模角度和角速度测量 (19)2.3车模速度控制 (26)2.4车模方向控制 (33)2.6车模直立行走控制算法总图 (36)三、电路设计篇 (37)3.1整体电路框图 (37)3.2 DSC介绍与单片机最小系统 (39)3.3倾角传感器电路 (42)3.4电机驱动电路 (44)3.5速度传感器电路 (45)3.6电磁线检测电路 (46)3.7 角度计算电路 (50)3.8 车模控制电路全图 (55)四、机械设计篇 (57)4.1车模简化改装 (57)4.2传感器安装 (59)4.3注意事项 (63)五、软件开发篇 (64)5.1软件功能与框架 (65)5.2 DSC的硬件资源配置 (68)5.3主要算法及其实现 (69)六、车模调试篇 (82)6.1 调试参数 (82)6.2调试条件 (85)6.3 桌面静态参数调试 (91)6.4 现场动态参数调试 (101)6.5 方案改进与车模整体水平提高 (101)七、结束语 (102)附录: (103)图表索引第一章图1- 1 电磁组车模直立运行模式 (7)图1- 2参考设计方案内容 (8)图1- 3 车模制作路线图 (9)第二章图2- 1 车模控制任务分解 (10)图2- 2 车模倾角会引起车速速度变化 (10)图2- 3 三层控制之间相互配合 (11)图2- 4 保持木棒直立的反馈控制 (12)图2- 5 通过车轮运动保持车模直立 (12)图2- 6 车模简化成倒立的单摆 (13)图2- 7 普通单摆受力分析 (13)图2- 8 不同阻尼力下的单摆运动 (14)图2- 9 在车轮上的参照系中车模受力分析 (14)图2- 10 车模控制两个系数作用 (16)图2- 11 车模运动方程 (16)图2- 12 加入比例微分反馈后的系统框图 (17)图2- 13 电机在不同电压下的速度变化曲线 (18)图2- 14 加速度传感器原理 (19)图2- 15 MMA7260三轴加速度传感器 (20)图2- 16 车模运动引起加速度信号波动 (21)图2- 17 实际测量MMA7260Z轴信号 (21)图2- 18 车模运动引起加速度Z轴信号变化 (22)图2- 19角速度传感器及参考放大电路 (22)图2- 20 角速度积分得到角度 (23)图2- 21 角速度积分漂移现象 (23)图2- 22 通过重力加速度来矫正陀螺仪的角度漂移 (24)图2- 23 双加速度传感器获得车模角加速度 (25)图2- 24 角度控制框图 (25)图2- 25 电机速度检测 (26)图2- 26 车模倾角给定 (27)图2- 27 车模倾角控制速度中的正反馈 (28)图2- 28 车模倾角控制分析 (29)图2- 29 车模运动速度控制简化模型 (29)图2- 30 增加微分控制后的系统 (30)图2- 31 改进的微分控制 (30)图2- 32 车模角度和速度控制框图 (31)图2- 33 速度角度控制方案的改进 (32)图2- 34 改进后的速度和角度控制方案 (32)图2- 35 检测道路中心电磁线方式 (33)图2- 36 通过电机驱动电压的差动控制控制车模方向 (34)图2- 37 检测车模转动速度的陀螺仪 (34)图2- 38 电感线圈的偏角影响感应电动势 (35)图2- 39 车模方向控制算法 (35)图2- 40 车模运动控制总框图 (36)第三章图3- 1 直立车模控制电路整体框图 (39)图3- 2 56F8013内部资源示意图 (40)图3- 3 F8013最小系统电路 (41)图3- 4 F8013最小系统电路实物 (42)图3- 5 陀螺仪、加速度传感器电路 (43)图3- 6 车模倾角传感器电路实物图 (43)图3- 7 双电机驱动电路 (44)图3- 8单极性PWM、双极性PWM (45)图3- 9 两片33886组成的电机驱动电路 (45)图3- 10 速度传感器电路 (46)图3- 11 基于三极管的电磁信号放大检波电路 (47)图3- 12 基于三极管的电磁放大检波电路实物图 (48)图3- 13 使用R-R运放进行电磁信号放大检波 (49)图3- 14 LMV358放大检波输出波形 (49)图3- 15 基于LMV358放大检波电路实物图 (50)图3- 16 双加速度测量角速度电路 (51)图3- 17 双加速度计测量角度波形图 (51)图3- 18 简化角速度电路 (52)图3- 19 实测车模角速度信号波形 (52)图3- 20 角度信号处理电路 (53)图3- 21 不同角速度比例情况下输出波形 (53)图3- 22 角度计算环节的传递函数 (54)图3- 23 一个运算放大器实现角度计算 (54)图3- 24 不同P1阻值对应的输出波形 (55)图3- 25 简化的角度和角速度处理电路 (55)图3- 26 车模控制电路全图 (56)第四章图4- 1 完整的C型车模底盘 (57)图4- 2 简化后的C型车模底盘 (57)图4- 3 使用热熔胶固定电机支架与车模底盘 (58)图4- 4 去掉后轮之后的车模底盘 (58)图4- 5 电机引线转接板 (59)图4- 6 使用复合胶水固定光电编码盘 (59)图4- 7 固定好的光电码盘和光电检测管 (60)图4- 8 电磁传感器支架 (61)图4- 9 车模组装全图 (64)第五章图5- 1 主程序框架 (65)图5- 2 中断服务程序 (66)图5- 3 任务中断时间波形 (67)图5- 4 算法框图中与控制相关的软件函数 (70)图5- 5 控制函数调用与参数传递关系 (71)图5- 6 程序中变量命名规范 (72)图5- 7 电机死区补偿 (78)第六章图6- 1 调试车模参数复杂而关键 (82)图6- 2 需要调整的参数和相关的单位 (84)图6- 3 车模运动坐标定义 (85)图6- 4 电源检查 (86)图6- 5 单片机串口通信 (86)图6- 6 PWM信号输出 (87)图6- 7 采集电机光电码盘信号 (87)图6- 8 陀螺仪、加速度传感器AD采集信号 (88)图6- 9 车模静态参数调整桌面 (88)图6- 10车模动态参数调试场地 (89)图6- 11 监控软件界面 (89)图6- 12 无线遥控开关 (90)图6- 13 无线通信模块进行参数监控 (90)图6- 14 F8013内部FLASH应用划分 (91)图6- 15 需要整定的传感器参数 (91)图6- 16 车模保持垂直静止 (92)图6- 17 测量加速度传感器的极值 (92)图6- 18测量陀螺传感器比例因子,角度补偿回路断开 (93)图6- 19 几种不同陀螺仪比例因子角度输出 (94)图6- 20 车模控制参数 (95)图6- 21 角度参数调整过程 (96)图6- 22 速度参数调整过程 (97)图6- 23 方向参数调整过程 (98)图6- 24 角度补偿时间常数调整 (99)图6- 25 Z轴附加信号分析 (100)图6- 26 死区常数调整 (100)附录图7- 1 参考设计方案视频截图 (103)图7- 2 参数整定与调试指南 (104)图7- 3 软件控制算法全图 (106)图7- 4 参考方案电路全图 (107)第一章、前言为了提高全国大学生智能汽车竞赛创新性和趣味性,激发高校学生参与比赛的兴趣,提高学生的动手能力、创新能力和接受挑战能力,智能汽车竞赛组委会将电磁组比赛规定为车模直立行走,如图1- 1所示。
第10章模拟到数字转换器(ADC12B16CV1)修订历史10.1介绍该ADC12B16C是一个16通道,12位,多路输入的逐次逼近模拟到数字转换器。
请参考设备的电气规范ATD准确性。
10.1.1特点8 - ,10 - ,或12位分辨率。
在停止模式转换使用内部产生的时钟自动返回到低电源转换后序列自动比较打断高于或更少/可编程值同比可编程的采样时间。
左/右对齐结果数据。
外部触发控制。
序列完成中断。
模拟输入通道的16个模拟输入多路复用器。
特别转换为VRH造型,VRL,(VRL + VRH造型)/ 2。
1至16的转换序列的长度。
连续转换模式。
多通道扫描。
可配置的任何广告或增设4个通道触发任何外部触发功能投入。
四个额外的触发输入可以芯片外部或内部。
请参考设备规范的可用性和连接。
通道周围包裹配置位置(当转换序列中的多个频道)。
10.1.2操作模式10.1.2.1转换模式有软件性能的单间,或连续转换一个可编程的选择单通道或多通道。
10.1.2.2MCU的运行模式停止模式- ICLKSTP = 0 ATDCTL2寄存器()进入停止模式中止任何正在进行的转换序列,如果一个序列已中止退出后重新启动它停止模式。
这有同样的效果为出发1 /后果转换序列与写入ATDCTL5。
因此,从停止模式退出后,与一以前中止顺序等所有标志都清零- ICLKSTP = 1 ATDCTL2登记()A / D转换序列的基础上无缝继续在国内产生的停止模式时钟ICLK作为ATD时钟。
转换过渡期间从运行到停止模式或副相反的结果是不写入结果登记,没有国家合作框架的标志设置,也没有做比较。
当在停止模式(转换ICLKSTP = 1)一停止ATD是恢复时间tATDSTPRCV要切换到基于ATDCLK总线时钟停止模式时离开。
不要访问在此期间ATD寄存器。
等待模式ADC12B16C行为在运行相同,等待模式。
为了降低功耗连续性转换之前,应中止进入等待模式。
冻结模式在冻结模式下ADC12B16C要么继续或完成或停止转换根据FRZ1和FRZ0位。
3.6 A/D和D/A转换编程A/D转换模拟量转换为数字量需标准的电压参考输入电压应小于或等于参考电压D/A转换数字量转换为模拟量需标准的电压参考输出电压小于或等于参考电压430内部2.5或1.5伏参考外部输入电压参考,小于3.3伏(VCC)ADCl2可以对8个外部模拟信号之一或4个内部电压之一作转换。
4个内部通道用于温度测量、Vcc测量、正参考电平VeRE+测量及负参考电平VREF—/VeREF—测量。
ADCl2工作时可以用内部参考电平,或者外部参考电平,也可以是两者的组合。
ADCl2具有通用的采样/保持电路,给用户提供了对采样时序的各种选择。
采样时序可以通过控制位用软件直接控制,也可以用3种内部或外部的信号来控制。
通常,内部时序信号来自于MSP430的定时器,例如Timer_A。
此外,采样时序也可以编程为ADCl2转换时钟周期的倍数。
用户对ADCl2的转换时钟,有多种选择来形成采样时序。
ADCl2可以选择所有有效的MSP430片内时钟,也可以选择一个外围模块所含的时钟,对于选择的时钟源可以引入一个1~8的分频因子。
ADCl2有4种工作模式。
可以在单通道上实现单次转换或多次转换,在序列通道上实现单次转换或重复转换。
对于序列通道转换,采样顺序完全由用户来定义。
例如,用户可以定义采样通道的顺序为:a1一a3一a1一a6一a2…,同时每个通道可以独立配置转换所需的参考电平。
转换结果保存在16个转换存储寄存器中。
每个寄存器有各自相应的配置及控制寄存器,让用户为准备存储的转换结果选择采样通道和转换所需参考电平。
ADCl2的主要特性归纳如下:●转换为12位精度,1位差分非线性(DNL),1位积分非线性(1NL)。
●内装采样/保持电路,可选择软件、采样定时器或其他片内定时器来控制采样周期。
●内装的RC振荡器,可以用于产生采样时序。
●内装的用作温度测量的热敏二极管。
●8个可配置的外部信号采样通道。
●4个内部通道,用于温度、AVcc及外部参考电平的采样。
01 电压基准及时间基准所有模数转换器(ADC)和数模转换器(DAC)都需要一个基准信号,通常为电压基准。
ADC的数字输出表示模拟输入相对于它的基准的比率;DAC的数字输入表示模拟输出相对它的基准的比率。
有些转换器有内部基准,有一些转换器需要外部基准。
不管怎样所有转换器都必须有一个电压(或电流)基准。
数据转换器的最早应用是用于缓慢变化信号的直流测量。
在这种情况下,测量的精确定时并不重要。
当今大多数数据转换器是应用在数据采集系统,在这种系统中必须处理大量等间隔的模拟采样值,而且频谱信息与幅度信息同样重要,这里涉及到的采样频率或时间基准(采样时钟或重建时钟)与电压基准一样重要。
电压基准问:一个电压基准怎样才算好?答:电压基准与系统有关。
在要求绝对测量的应用场合,其准确度受使用基准值的准确度的限制。
但是在许多系统中稳定性和重复性比绝对精度更重要;而在有些数据采集系统中电压基准的长期准确度几乎完全不重要,但是如果从有噪声的系统电源中派生基准就会引起误差。
单片隐埋齐纳基准(如AD588和AD688)在10 V时具有1 mV初始准确度(001 %或100 ppm),温度系数为1 5 ppm/°C。
这种基准用于未调整的12位系统中有足够的准确度(1 LSB=244 ppm) ,但还不能用于14或16位系统。
如果初始误差调整到零,在限定的温度范围内可用于14位和16位系统(AD588或AD688限定40℃温度变化范围,1 LSB=61 ppm)。
对于要求更高的绝对精度,基准的温度需要用一个恒温箱来稳定,并对照标准校准。
在许多系统中,12位绝对精度是不需要这样做的,只有高于12位分辨率才可能需要。
对于准确度较低(价格也会降低)的应用,可以使用带隙基准。
问:这里提到的“隐埋齐纳”和“带隙”基准是什么意思?答:这是两种最常见的用于集成电路中的精密基准。
“隐埋”或表层下齐纳管比较稳定和精确。
它是由一个具有反向击穿电压修正值的二极管组成,这个二极管埋在集成电路芯片的表层下面,再用保护扩散层覆盖以免在表面下击穿,见图11。
ad采样基准电压
AD采样基准电压是指在模拟信号转换为数字信号的过程中,用于参考和比较模拟信号电平的电压值。
在AD转换器中,基准电压的稳定性和精度对转换结果的准确性和可靠性有着至关重要的影响。
在AD转换器中,基准电压的作用是将模拟信号转换为数字信号。
当模拟信号进入AD转换器时,它会被与基准电压进行比较,然后将其转换为数字信号。
因此,基准电压的稳定性和精度对转换结果的准确性和可靠性有着至关重要的影响。
基准电压的稳定性是指在一定时间内,基准电压的变化范围。
如果基准电压的稳定性不好,那么在转换过程中,数字信号的精度和准确性就会受到影响。
因此,在AD转换器中,基准电压的稳定性是非常重要的。
基准电压的精度是指基准电压与其标称值之间的差异。
如果基准电压的精度不好,那么在转换过程中,数字信号的精度和准确性也会受到影响。
因此,在AD转换器中,基准电压的精度也是非常重要的。
为了保证AD转换器的准确性和可靠性,需要采用高精度、高稳定性的基准电压。
一般来说,基准电压可以通过外部参考电压源或内部参考电压源来提供。
外部参考电压源可以提供更高的精度和稳定性,但需要外部电路的支持。
内部参考电压源则更加方便,但精度
和稳定性相对较低。
AD采样基准电压是AD转换器中非常重要的一个参数,它的稳定性和精度对转换结果的准确性和可靠性有着至关重要的影响。
为了保证AD转换器的准确性和可靠性,需要采用高精度、高稳定性的基准电压。
第十届“飞思卡尔”杯全国大学生智能汽车竞赛技术报告摘要本文以第十届全国大学生智能车竞赛为背景,介绍了基于电磁导航的智能赛车控制系统软硬件结构和开发流程。
该系统以Freescale半导体公司32 位单片机MK60DV510ZVLQ100为核心控制器,使用IAR6.3程序编译器,采用LC选频电路作为赛道路径检测装置检测赛道导线激发的电磁波来引导小车行驶,通过增量式编码器检测模型车的实时速度,配合控制器运行PID控制等控制算法调节驱动电机的转速和转向舵机的角度,实现了对模型车运动速度和运动方向的闭环控制。
同时我们使用集成运放对LC选频信号进行了放大,通过单片机内置的AD采样模块获得当前传感器在赛道上的位置信息。
通过配合Visual Scope,Matlab等上位机软件最终确定了现有的系统结构和各项控制参数。
实验结果表明,该系统设计方案可使智能车稳定可靠运行。
关键字:MK60DV510ZVLQ100,PID控制,MATLAB,智能车第十届全国大学生智能汽车邀请赛技术报告目录第一章引言 (5)第二章系统方案设计 (6)2.1系统总体方案的设计 (6)2.2系统总体方案设计图 (6)电磁传感器模块 (7)控制器模块 (7)电源管理模块 (7)编码器测速模块 (7)舵机驱动模块 (8)起跑线检测模块 (8)人机交互模块 (8)测距模块 (8)第三章机械结构调整与优化 (8)3.1智能车前轮定位的调整 (8)主销后倾角 (9)3.1.2主销内倾角 (9)3.1.3 前轮外倾角 (10)3.1.4 前轮前束 (10)3.2 舵机的安装 (11)3.3编码器安装 (12)3.4车体重心调整 (12)3.5传感器的安装 (13)3.6测距模块的安装 (14)第四章硬件电路设计 (15)4.1单片机最小系统 (15)4.2电源管理模块 (16)4.3电磁传感器模块模块 (17)4.3.1 电磁传感器的原理 (17)4.3.2 信号的检波放大 (18)4.4编码器接口 (19)4.5舵机驱动模块 (20)4.6电机驱动模块 (20)4.7人机交互模块 (21)第五章控制算法设计说明 (22)5.1主要程序流程 (22)5.2赛道信息采集及处理 (23)5.2.1 传感器数据滤波及可靠性处理 (23)5.2.2 位置偏差的获取 (25)5.3 控制算法实现 (27)5.3.1 PID算法原理简介 (27)5.3.2基于位置式PID的方向控制 (31)5.3.3 基于增量式PID和棒棒控制的速度控制 (31)5.3.4 双车距离控制和坡道处理 (33)第六章系统开发与调试 (34)6.1开发环境 (34)6.2上位机显示 (35)6.3车模主要技术参数 (36)第七章存在的问题及总结 (37)7.1 制作成果 (37)7.2问题与思考 (37)7.3不足与改进 (37)参考文献 (38)附录A 部分程序代码 (39)第十届全国大学生智能汽车邀请赛技术报告第一章引言随着科学技术的不断发展进步,智能控制的应用越来越广泛,几乎渗透到所有领域。
基准电压总结
通常AD/DA芯片都有两个电压输入端,一个是Vcc,一个是Vref,上图所示的芯片是DAC0832,Vcc是芯片的工作电压,Vref是DA转换的基准电压,AD/DA芯片对Vcc 的要求不是很高,但对基准电压Vref的要求就比较高。
S12的VRH引脚就是AD转换的基准电压输入端,在最小系统板上通过0Ω电阻和Vcc连在了一起。
一、什么叫基准电压
我们知道,AD/DA转换时需要一个电压参考值,而且要求这个参考值要稳定,这个稳定的电压参考值就叫做基准电压。
比如AD(8位)转换时,假设参考电压时5V,输入量是2V,则转换后得到的数字量就是(2/5)*255=102。
二、智能车制作过程中遇到的问题
最开始我们组是利用LM2940稳压芯片输出的5V电压作为S12芯片内部AD转换的电压参考值,但采集回来的电磁信号AD值时常出现跳变,为什么?经过排除其他原因后,我们发现原因就在于基准电压不稳定,夸张地举个例子(8位AD),假设参考电压是5V,采集到的电磁模拟信号是2V,那么得到的数字量是102,但是由于某种原因参考电压突然变为4V,那么得到的数字量就突变为127,转换不准确,使得S12单片机产生误动作,要是时常发生这类突变,后果可想而知,车子根本跑不了!!!
三、LM2940与MC1403芯片
通过上面举的例子,我想说的是,LM2940输出的5V电压并非稳定,因为LM2940属于功率型稳压芯片,就是说其输出的电压会受流过LM2940的电流的影响,电流短时间发生较大变化时,其输出电
压也会相应发生变化(1V以内,典型值是0.5V),由于挂在LM2940上的负载较多,电流值变化较大,也就是说输出电压也会变化,而AD转换需要的却是一个稳定的参考电压,显然LM2940无法满足这个条件,因此AD值跳变是肯定的;
那么用哪个芯片作为基准电压更为恰当呢,答案肯定是有很多的,我们后来采用的芯片是MC1403,其输出电压很稳定,输出电压值为2.5V,关键在于即使输入电压变化较大,MC1403的输出误差也在1%以内,显然这可以满足我们AD转换所需基准电压的要求。
下图是MC1403芯片的一个简介。
但是,2.5V作为基准电压显然是太低啦,因此我们需要对其进行升压,利用运算放大器的放大功能,采用的运算放大器是LMV358,电路图如下:
图中VRH为S12芯片的AD转换参考电压输入引脚,在最小系统板上通过0欧姆电阻与S12芯片的电源输入端VCC相连,把0欧姆电阻去掉就可以使用LMV358输出的精准电压啦。
那么升压后的电压多少才合适呢?升为5V?
肯定是不能升为5V的,升到5V的话就跟使用LM2940作为基准电压的效果是一样的,我们知道,运算放大器工作分为线性放大区和饱和区,工作在线性放大区时,VRH=(1+R11/R10)*2.5,输出电压与LMV358工作电压VCC无关,工作在饱和区时,VRH=VCC=DC5V,此时LMV358也就失去了线性放大的作用,VRH 还是会跟随LM2940输出电压变化,所以我们把VRH定为4V (LM2940的输出电压不会低于4V),也可以定为4V以下,这样LMV358就工作在线性放大区,AD转换的基准电压VRH就精准啦,也就消除了AD值跳变。
电磁组:李旺旺。