飞思卡尔平衡车设计(原理+必要代码)

合集下载

飞思卡尔智能车dg128单片机控制程序代码

飞思卡尔智能车dg128单片机控制程序代码
}
void AD_Init(void)
{
ATD0CTL2=0xC0; //AD模块上电, 快速清零, 无等待模式, 禁止外部触发, 中断禁止
ATD0CTL3=0x44; //每次转换8个序列, FIFO, Freeze模式下继续转
ATD0CTL4=0x02; //10位精度, 采样时间为2个AD时钟周期,ATDClock=4MHz
//设置舵机
PWMCTL_CON01=1; //使得通道0,1成为16位pwm
PWMPER0 =0x75;
PWMPER1 =0x30; //舵机的频率是: 24M/8/30000=100Hz,T=10ms
PWMDTY01=4500; // 对应为4500/30000的占空比,待调整
Infrared_detect();
data_handle();
motor_ctl();
steer_ctl();
}
}
void interrupt 26 MDC_ISR(void)
{
static unsigned int number_count=0; static unsigned int start=0; static
go=2;
if(begin>=150)
go=3;
}
}
}
//-----系统初始化-----------------------
void system_init(void) //system initiat
void speed_ctl(void); //速度控制
void motor_ctl(void); //电机控制
void PACBInit(void);

飞思卡尔智能车光电源代码

飞思卡尔智能车光电源代码

1.#include <hidef.h>2.#include <mc9s12dg128.h>3.#pragma LINK_INFO DERIV ATIVE "mc9s12dg128b"4.//=========================public variable=====================5.//-----------------------turning variable------------------6.unsigned char sam_g[15]; //道路检测值7.unsigned int angle_data; //舵机转角8.int car_positn; //赛车当前位置参数9.int pre_positn;10.unsigned int black_sensor_number; //检测到黑线的传感器个数11.int positn_temp[10];12.unsigned int t=0;13.//---------------------speed variable---------------------14.unsigned char dir_flag; //方向标志,为1表示检测到有效路径,可以给驱动力15.unsigned char brake_flag; //刹车标志位判断当前是否需要刹车16.unsigned int car_driver; //驱动力控制17.unsigned int pulse_count; //速度检测统计脉冲个数18.unsigned int ideal_speed; //车的理想速度19.unsigned int times; //丢失黑线的次数20.int speed_error; //理想与实际速度偏差值21.int pre_error; //速度PID 前一次的速度误差值ideal_speed- pulse_count22.int pre_d_error; //速度PID 前一次的速度误差之差d_error-pre_d_error23.int pk; //速度PID值24.//---------------------start_line variable-------------------25.unsigned char start_line_acc; //统计检测起跑线次数26.unsigned char finish_flag; //起跑线标志位,为1表示检测到起跑线3次27.//----------------------dis_play variable--------------------28.unsigned int start_flag,start_count;29.//---------------------table-------------------------30.unsigned charspeed_table11[13]={270,260,250,240,200,180,180,180,170,140,140,100,90}; //15.0s31.unsigned char speed_table21[13]= {25,24,23,20,19,17,17,17,15,12,11,10,9}; //15.0s32.unsigned char speed_table12[13]= {29,28,27,26,25,20,20,20,19,17,15,10,9}; //15.0s33.unsigned char speed_table22[13]= {27,26,25,24,20,18,18,18,17,14,14,10,9}; //15.0s34.unsigned int circle; //控制赛车跑几圈停车35.#define kp 2000//200036.#define ki 5//537.#define kd 10//1038.#define Angle_Center 4344 //舵机中心位置39.#define lose_limit 30000 //丢失黑线后滑翔时间40.void data_init(void);41.void crg_init(void); // 锁相环初始化42.void pwm_init(void); // PWM信号初始化43.void ect_init(void); // ECT初始化44.void sam_position(void); //读结果45.void check_start(void); //起跑线检测函数46.void car_position(void); //计算car_positn47.void angle(void); //计算转角48.void speed(void); //计算速度49.void driver(void); //驱动50.void pre_start(void);51.void delay(void);52.void found_start(void);53.void stop(void);54.void pid(void);55.unsigned int absolute(int);56.//========================main loop============================57.void main(void)58.{59. data_init(); //设置基本数据60. crg_init(); //锁向环初始化61. ect_init(); //ECT62. pwm_init(); //初始化PWM63. pre_start();64. EnableInterrupts;65. for(;;)66. {67.sam_position(); //读采样值68.check_start(); //检测起跑线69.car_position(); //计算car_positn70.angle(); //计算转角71.speed(); //计算速度72.driver(); //拐弯驱动73. }74.}75.//--------------------data_init--------------------76.void data_init(void)77.{78. start_line_acc=0;79. finish_flag=0;80. DDRA=0X00;81. DDRB=0X00;82. times=0;83.}84.//-------------------pre_start------------------85.void pre_start(void)86.{87.unsigned int i;88.PWMDTY01=Angle_Center;89.PWMDTY67=0;90.for(i=0;i<10;i++) delay();91.PWMDTY23=0;92.}93.//----------------------crg_init-------------------94.void crg_init(void)95.{96.SYNR=0x02;97.REFDV=0x01;98.while((CRGFLG & 0x08)==0 );99.CLKSEL =0x80;100.}101.//--------------------pwm_init------------------------102.void pwm_init(void)103. {104.PWMCTL=0xB0; // 设置通道76、32、10级连105.PWME=0x00; // 通道禁止输出;106.PWMPRCLK=0x12;//预分频:A_CLK=busclk/2^2=6M B_CLK=BUSCLK/2^1=12M 107.PWMSCLA=0x01; //SA_CLK=A_CLK/(2*1)==3MHz108.PWMSCLB=0X01; //SB_CLK=B_CLK/(2*1)==6MHz109.PWMPOL=0x8A; //极性选择起始为高电平;110.PWMCLK=0x8A; //PWM01 选择SA_CLK PWM23 67选择SB_CLK111.PWMCNT0=0x00;112.PWMCNT1=0x00;113.PWMCNT2=0x00;114.PWMCNT3=0x00;115.PWMCNT6=0x00;116.PWMCNT7=0x00;117.PWMPER01=60000; // 周期==(1/3M)*(60000)=20ms118.PWMPER23=10000; // F=6M/10000==600Hz119.PWMPER67=10000; // F=6M/10000==600Hz120.PWMCAE=0x00; //左对齐方式121.PWME=0x82; // 通道1,7输出使能;122.}123.//-----------------------ect_init-------------------------124.void ect_init(void)125.{126.TCTL4=0x01; // Set the rising endge for PT0.127.PACN10=0x0000;128.PBCTL=0x40; //pt0 and pt1 级联成16位计数器129.MCCNT=60000; //60000*24M/16=40ms130.MCCTL=0xC7;131.TSCR1=0x10;132.}133.void sam_position(void)134.{135.sam_g[1]= PORTA_PA4;136.sam_g[2]= PORTA_PA3;137.sam_g[3]= PORTA_PA2;138.sam_g[4]= PORTA_PA1;139.sam_g[5]= PORTA_PA0;140.sam_g[6]= PORTB_PB0;141.sam_g[7]= PORTB_PB1;142.sam_g[8]= PORTB_PB2;143.sam_g[9]= PORTB_PB3;144.sam_g[10]= PORTB_PB4;145.sam_g[11]= PORTB_PB5;146.sam_g[12]= PORTB_PB6;147.sam_g[13]= PORTB_PB7;148.}149.//----------------------check_start---------------------150.void check_start(void)151.{152.unsigned char i,j=0;153.start_flag=0;154.for(i=1;i<14;i++)155.if(sam_g^sam_g[i+1])156. j++;157. if(j>=4)158. {159. if(sam_g[5] &&((!sam_g[4])&&(!sam_g[6])) &&((!sam_g[3])&&(!sam_g[7]))&&(sam_g[1]&&sam_g[10])160.) start_flag=1;161.else if(sam_g[5]&&sam_g[6] &&((!sam_g[4])&&(!sam_g[7]))&&((!sam_g[3])&&(!sam_g[8]))&&(sam_g[1]&&sam_g[10])162.) start_flag=1;163.else if( sam_g[6] &&((!sam_g[5])&&(!sam_g[7])) &&((!sam_g[4])&&(!sam_g[8])) &&(sam_g[1]&&sam_g[11])164.) start_flag=1;165.else if( sam_g[6]&&sam_g[7] &&((!sam_g[5])&&(!sam_g[8])) &&((!sam_g[4])&&(!sam_g[9])) &&(sam_g[2]&&sam_g[11])166.) start_flag=1;167.else if( sam_g[7] &&((!sam_g[6])&&(!sam_g[8])) &&((!sam_g[5])&&(!sam_g[9])) &&(sam_g[2]&&sam_g[12])168.) start_flag=1;169.else if( sam_g[7]&&sam_g[8] &&((!sam_g[6])&&(!sam_g[9]))&&((!sam_g[5])&&(!sam_g[10])) &&(sam_g[3]&&sam_g[12])170.) start_flag=1;171.else if( sam_g[8] &&((!sam_g[7])&&(!sam_g[9])) &&((!sam_g[6])&&(!sam_g[10])) &&(sam_g[3]&&sam_g[13])172.) start_flag=1;173.else if( sam_g[8]&&sam_g[9]&&((!sam_g[7])&&(!sam_g[10])) &&((!sam_g[6])&&(!sam_g[11])) &&(sam_g[4]&&sam_g[13])174.) start_flag=1;175.else if( sam_g[9] &&((!sam_g[8])&&(!sam_g[10])) &&((!sam_g[7])&&(!sam_g[11])) &&(sam_g[4]&&sam_g[13])176.) start_flag=1;177.}178.if(start_flag)179. art_count++;180.else181. art_count=0;182.if(start_count==2)183.{184.found_start();185.start_count=0;186.}187.if(start_line_acc==2)188.{189.finish_flag=1;190.}191.}192.//--------------------------car_position------------------------。

自制两轮平衡车

自制两轮平衡车
自制两轮平衡车
制作:朱兆丰
控制器:ATmega16;8MHz; 加速度传感器:MMA2260;陀螺仪: EWTS82; 传感器的融合:卡尔曼滤波; 马达:EN_2342CR(速比64)+双路12脉 冲编码器+CD40106对信号整形; 驱动板芯片:CD4001+IR2111+IRF1404 (驱动电流可以很大); 制作资料在压缩包里面,供参考;
accelgyro.initialize(); delay(500); pinMode(22,OUTPUT); pinMode(23,OUTPUT); pinMode(24,OUTPUT); pinMode(25,OUTPUT); pinMode(2,OUTPUT); pinMode(3,OUTPUT);
/********** 互补滤波器参数 *********/ //unsigned long preTime = 0; // 采样时间 //float f_angle = 0.0; // 滤波处理后的角度值
*********** PID控制器参数 *********/ //unsigned long lastTime; float Output; //;, Setpoint,Input; //double errSum, lastErr; float kp, ki, kd,kpp; //int SampleTime = 0.1; //1 sec //float Outputa = 0.0; float angleA,omega; //double Kp, Ki, Kd; float P[2][2] = {{ 1, 0 },{ 0, 1 }}; float Pdot[4] ={ 0,0,0,0}; static const double Q_angle=0.001, Q_gyro=0.003, R_angle=0.5,dtt=0.007,C_0 = 1; float q_bias, angle_err, PCt_0, PCt_1, E, K_0, K_1, t_0, t_1; float angle, angle_dot; // aaxdot,aax; float position_dot,position_dot_filter,positiono; //double Speed_Need=0; //float K_angle=2; //float K_angle_dot=0.5; //float K_position=0.1; 256对应10V; //float K_position_dot=1;

飞思卡尔 智能车设计

飞思卡尔 智能车设计

1 引言智能汽车是汽车电子、人工智能、模式识别、自动控制、计算机、机械多个学科领域的交叉综合的体现,具有重要的应用价值。

智能寻迹车是基于飞思卡尔MC9S12DG128单片机开发实现的,该系统采用CCD 传感器识别道路中央黑色的引导线,利用传感器检测智能车的加速度和速度,在此基础上利用合理的算法控制智能车运动,从而实现快速稳定的寻迹行驶。

2 硬件系统设计该系统硬件设计主要由MC9S12DG128控制核心、电源管理模块、直流电机驱动模块、转向舵机控制模块、道路信息检测模块、速度检测模块和加速度检测模块等组成,其结构框图如图1所示。

3/2!ᓍ఼ᒜ໭ෝ్智能车的控制核心为MC9S12DG128。

MC9S12DG128基于MC9S12DG128单片机的智能寻迹车设计曾 军(四川大学 电气信息学院,四川 成都 610065)摘 要: 设计了一种基于飞思卡尔MC9S12DG128单片机控制的智能寻迹车系统。

该系统以MC9S12DG128为控制核心,采用CCD 图像传感器检测路面信息,利用加速度传感器检测加速度,红外传感器检测速度,采用PID 算法控制智能车直流驱动电机和模糊控制算法控制舵机转向,从而实现智能车快速稳定地寻黑线行驶。

关键定: MC9S12DG128,单片机,智能车,模糊控制中图分类号:TP242.6 文献标识码:A 文章编号:1006-6977(2009)03-0054-03Design of an intelligent-searching track car based on MC9S12DG128 SCMZENG Jun(School of Electrical Engineering and Information, sichuan University, Chengdu 610065, China)Abstract:An intelligent-searching track car system based on MC9S12DG128 MCU is designed. The system uses MC9S12DG128 as its control core and uses CCD sensors to detect the route information, and its acceleration and speed is detected by sensors. The system adopts PID arithmetic to control the DC motor and adopts fuzzy control arithmetic to energize the steering motor. The intelligent car can track the black-guide line automatically and move forward following the line quickly and smoothly.Key words: MC9S12DG128, single-chip microcomputer, intelligent car, fuzzy control图 1系统硬件设计结构框图图 3直流电机驱动电路是飞思卡尔公司生产的一款16位单片机,片内总线时钟可达到25MHz ;片内资源包括8K RAM 、128K Flash 、2K EEP-ROM ;SCI ,SPI ,PWM 和串行接口模块;脉宽调制模块(PWM )可设置成4路8位或2路16位,逻辑时钟选择频率脉宽;2个8路10位A/D 转换器,增强型捕捉定时器并支持背景调试模式等[1]。

飞思卡尔智能车原理

飞思卡尔智能车原理

飞思卡尔智能车原理飞思卡尔智能车是一种基于嵌入式系统和人工智能技术的智能交通工具。

它通过搭载各种传感器、控制器和算法,在无人驾驶、自动泊车等场景下发挥重要作用。

本文将介绍飞思卡尔智能车的原理,并分析其在实际应用中的优势和挑战。

一、飞思卡尔智能车的硬件组成飞思卡尔智能车的硬件组成主要包括以下几个方面:1. 主控单元:主控单元是飞思卡尔智能车的核心组件,通常采用高性能的嵌入式处理器。

它负责接收来自各种传感器的信息,并根据预设的算法进行数据处理和决策。

2. 传感器:飞思卡尔智能车搭载多种传感器,如摄像头、激光雷达、超声波传感器等。

这些传感器可以实时感知周围环境的信息,包括道路状况、障碍物位置等,为智能车提供必要的数据支持。

3. 电机与驱动系统:飞思卡尔智能车搭载电机和对应的驱动系统,用于控制车辆的行驶和转向。

这些系统通常采用先进的电子控制技术,能够实现精确的转向和速度控制。

4. 通信模块:飞思卡尔智能车通过通信模块与其他车辆、交通基础设施等进行信息交互。

这种通信方式可以实现车辆之间的协同工作,提高交通系统的整体效率。

二、飞思卡尔智能车的工作原理飞思卡尔智能车的工作原理可以归结为以下几个关键步骤:1. 环境感知:飞思卡尔智能车通过搭载的传感器对周围环境进行感知。

摄像头可以捕捉到道路状况、交通标志和其他车辆的信息;激光雷达可以检测到障碍物的位置和距离;超声波传感器可以测量车辆与前方障碍物的距离等。

通过这些传感器获取到的数据,智能车可以对周围环境做出准确判断。

2. 数据处理与决策:主控单元接收传感器传来的数据,并根据预设的算法进行数据处理和决策。

它会将传感器的信息与事先建立的模型进行比对,进而判断车辆应该采取何种动作,如加速、刹车、转向等。

3. 控制指令生成:基于数据处理与决策的结果,主控单元生成相应的控制指令,通过驱动系统控制车辆的行驶和转向。

这些控制指令可以通过电机和驱动系统精确地控制车辆的运动。

4. 数据通信与协同:飞思卡尔智能车通过通信模块与其他车辆以及交通基础设施进行信息交互。

基于飞思卡尔单片机的平衡车设计

基于飞思卡尔单片机的平衡车设计

基于飞思卡尔单片机的平衡车设计
富文军;孔令超;方四明;刘新磊;王培金
【期刊名称】《电子科学技术》
【年(卷),期】2016(003)004
【摘要】本文介绍了基于MK60DN256ZVLL10单片机控制系统设计的平衡车硬
件电路及直立原理,详细阐述了平衡车直立控制、速度控制和方向控制的参数调试方法。

主要创新点为用虚拟示波器来观察速度参数的变化,使调试更为准确和直观。

试验证明:该平衡车控制系统稳定,能在直立平衡的基础上实现稳定行走。

【总页数】6页(P527-532)
【作者】富文军;孔令超;方四明;刘新磊;王培金
【作者单位】山东交通学院汽车工程学院,山东济南,250357;山东交通学院汽车工程学院,山东济南,250357;皓泰投资集团有限责任公司,新疆克拉玛依,834000;山东交通学院汽车工程学院,山东济南,250357;山东交通学院汽车工程
学院,山东济南,250357
【正文语种】中文
【中图分类】TP273
【相关文献】
1.基于飞思卡尔32位Kinetis-K60单片机的直立行驶智能车设计 [J], 杨正才;吕科;朱乐
2.基于飞思卡尔XS128单片机的双车追逐控制系统设计 [J], 黄润烨;吕海涛;舒文
江;方童童;罗世昌;雷钧
3.基于飞思卡尔单片机的智能车设计 [J], 程锦星;赵春锋;陈扬;方国好;叶超
4.基于飞思卡尔单片机智能车的设计 [J], 韩建文
5.基于飞思卡尔S12单片机的智能车系统设计与实现 [J], 刘允峰;韩建群
因版权原因,仅展示原文概要,查看原文内容请购买。

飞思卡尔直立平衡智能车的制作

飞思卡尔直立平衡智能车的制作
angle _ control _ out P *err D * angular
其中:P为比例项系数,D为微分项系数小车 Nhomakorabea速度控制
检测小车当前实际运行速度的传感 器为编码器(如右上角图片所示)。 该编码器为512线编码器,即编码 器轴每转动一圈,就会产生512个 脉冲。编码器和小车轮子通过齿轮 咬合,即车轮转动编码器轴也跟着 转动,同时产生脉冲。车轮转动得 越快,产生的脉冲也就越多。通过 主控板上的单片机捕获编码器产生 的脉冲然后计算单位时间内编码器 产生的脉冲数就可以测得小车当前 的运行速度v。
direct _ control _ out P *err D * angular
其中:P为比例项系数,D为微分项系数
对小车电机的总输出
前面分析了要想让直立小车在跑道上匀速地跑需要对小车进行三个方面的 控制,这三个方面的控制对应有三个输出,分别为直立控制输出 angle_control_out、速度控制输出V_control_out和方向控制输出 direct_control_out。这三个输出的控制目标(或控制对象)虽然不同,但是 执行机构是一样的,都是小车上的一对电机。在这里,这三个控制输出线 性地叠加在一起,合成一个总的控制输出,作用在小车电机上。叠加公式 如下:
小车的速度控制
我们要求直立小车要在跑道上匀速运动,即我们期望小车的速度是恒定的 Ve。小车的速度控制实际上就是控制小车当前的实际速度接近或者达到我 们预先设定的期望速度。这里,我们采用PID控制策略中的P(比例)I(积分) 控制来控制小车的速度。 给定一个小车的期望速度Ve,同时由编码器测得小车当前的实际速度V,小 车的期望速度与实际速度作一个比较,得到速度偏差err。其中,速度偏差 err作为PI控制中P项的输入。PID控制策略中的积分项(即I项)实际上就是 偏差的累加再乘以一个积分系数I。设integration为速度偏差err的累积结果, 则速度偏差累积结果integration作为PI控制中I项的输入。得到以下速度PI控 制的公式:

飞思卡尔智能车电路设计讲解

飞思卡尔智能车电路设计讲解

6.2.2 电源管理单元
• 同时考虑到稳压芯片L7805CV的额定输出 电流较小,故采用两片L7805CV分别对单 片机电路、车速检测电路、驱动芯片电路 和光电传感器电路供电,以保证系统正常 运行。其稳压电路如图6.8所示。
图6.8 稳压电源单元
MC34063A升压稳压电路
AD参图中的C15为输出电压稳定电容47uF。 • LM336集成电路是精密的2.5V并联稳压器,
其工作相当于一个低温度系数的、动态电 阻为0.2Ω的2.5V齐纳二极管,其中的微调 端(adj)可以使基准电压和温度系数得到微 调。
降压模块--LM1117-5
• 单片机,LCD,CS3020,74HC1G14, ZLG728,LM336的标准供电电压都是5V, 所以需要一个降压稳压芯片LM1117-5来将 电池电压降到需要的5V。考虑到单片机的 核心地位及单片机需要很大的输入电流(输 入电流过小时,单片机会重启动),拟定用 两片LM1117-5。一片单独给单片机提供电 源,一片给剩余的LCD,CS3020等供电。 设计电路图如图3.10。
CPU最小系统
连接CPU
连接CPU
实现方案和试验结果
CPU最小系统
PAD02 视频信号
IRQ
视频行同步信号
PM1 奇偶场信号
PWM2 12V 斩波升压开关信号;
PWM0,1 电极控制PWM信号;
PWM4 舵机控制信号;
PAD0,1 电池电压,12V电压监测;
7.2.2 电源管理单元
– (1)采用稳压管芯片LM2576将电源电压稳压 到5 V后,给单片机系统电路、车速检测的转角 编码器电路供电,且为后面的升压降压做准备;
– (2)经过一个二极管降至6.5 V左右后供给转 向伺服电机;

基于飞思卡尔单片机的两轮车控制系统设计

基于飞思卡尔单片机的两轮车控制系统设计

基于飞思卡尔单片机的两轮车控制系统设计
1.前言
本文以飞思卡尔的小车模型为对象,设计了以飞思卡尔单片机
MC9S12XS128 为核心,自主循迹的两轮车自平衡控制系统。

实验证明该方案在摄像头导航的两轮车系统中具有准确、快速、稳定的自主寻迹效果。

2.系统设计与原理
本系统以飞思卡尔公司生产的MC9S12XS128 单片机为控制核心,主要由电源管理模块、路径检测模块、车速检测块、加速度检测模块、角速度检测模块、直流电机驱动模块、液晶显示模块、串口调试等功能模块构成。

在电源管理模块为系统提供稳定电源的基础上,单片机把加速度和角速度检测模块获得的小车姿态信息、路径信息检测模块获得的小车前进方向信息、车速检测模块返回的车速信息通过PID 算法控制直流电机驱动模块,以使得小车在保持直立的前提下快速地行驶。

液晶显示模块可以实时地显示系统相关参数,串口调试模块把接收到单片机的数据送往上位机,方便相关参数及波形的实时观察和调试。

系统框图如图1 所示。

3.系统硬件设计
3.1 主控制器模块
本系统的主控制器是飞思卡尔公司生产的16 位MC9S12XS128 单片机,它负责对智能车所采集到的信号进行处理并向各个功能模块发送控制信号。

MC9S12XS128 单片机最高总线频率可达40MHz,片内资源包括8KRAM、8K。

飞思卡尔设计方案

飞思卡尔设计方案

飞思卡尔智能车设计方案一:项目名称:第五届飞思卡尔智能汽车。

二:设计要求:参考飞思卡尔智能车竞赛基本要求。

三:设计制作思路为了用单片机系统实现小车智能控制,本设计以MC9S12DG128为核心,附以外围电路,将摄像头传感器得到的图像信息进行综合判别和处理,并通过速度传感器获得当前车辆速度,然后发出指令给电机驱动器(包括舵机和驱动电机),控制小车,从而使小车能够快速、准确地识别特定路线行驶。

快速准确的图像分析处理、准确的实时速度控制、CPU的综合数据处理为小汽车实现自动加速、减速、限速、左转、右转提供了充分的保证。

通过组装车模、传感器的选择与布置、系统电路板的设计与安装、仿真软件的制作、安装与调试以及控制算法的调试等等,首先使智能车运行起来,由低速逐渐向高速过渡。

在实验的基础上不断发现问题,不断调试,不断解决问题,使智能车能够最大限度的沿着轨道快速、准确的行驶。

四:方案1.路径识别系统软硬件设计方案:§道路寻找软件设计由于每行搜索的是最黑点,因此可以将黑点的阈值稍稍扩大一点,即使远方的黑白不清,由于找的是最黑点因此还是可以提取出真确的黑线的.它的主要问题是,不一定每行都有符合要求的点,会造成一行丢失而失去后面的黑点.解决的方法是当发现一行丢失以后,不立即退出搜索,而是置一个丢失计数器,只有当丢失计数器的值连续累加到一定的阈值后才退出.当每次搜索到一行的黑线后看看丢失计数器是否为非零.若不是,则说明前面没有丢失行.若是,则说明前面有几行丢失了.我们可以根据这一行与上以有效行对中间的丢失行对中间的丢失行做一个线性化处理.然后清零丢失计数器.有了丢失计数器,我们可以对赛道的提取条件加以严格的限制,而不必担心黑线的漏检.比如我们可以严格限制黑线的宽度,这样我们可以很容易滤除看到大块的黑斑带来的干扰;对于上述的斜看十字交叉线的问题我们只要根据上一行的黑线严格限制下一行黑线出现范围便可轻松滤除.当然在发现丢失行以后对于下一行的搜索必需加大黑线搜索的范围,允许的连续丢失行越多则再次找回的黑线的可信度也就越低,在实际的提取过程中必须把握好这一阈值,使得即可以顺利找到前方的道路,又不至于误提取黑线.实际证明这种方法实现简单,可靠性也最高,黑线提取十分稳定。

飞思卡尔详细代码

飞思卡尔详细代码

主程序/*******************************************************************/ /* 飞思卡尔智能小车主函数/*/* 硬件平台: MC9S12XS128 晶振:12MHZ/* 软件平台: CodeWarriorIDE/* 描述:包括各个功能模块的调用/* 公司: 九江学院/* 作者日期注释 *//*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~/* 耕耘者 2012-10-16/*******************************************************************/#include <mc9s12xs128.h>#include <hidef.h>#include "derivative.h"#include"pwm.h"#include"image.h"#include"sci.h"#include"KeyScan.h"#include"nokia5110.h"#include"picture.h"#include"pid.h"unsigned char StartDelay = 0;unsigned char DelayEn = 0;unsigned int Time2s = 0;unsigned int CarTime = 0;unsigned int CarTimeTemp = 0;unsigned int CarPulse = 0;unsigned int Speed;unsigned char IsCountSpeed = 0;unsigned char IsDisplayOn = 0;unsigned char THRESHOLD = 0X7D;unsigned int PIDFlag = 0;unsigned char PIDOn = 0;unsigned char keyflag = 1;unsigned char StartLineFlag = 0;/****************************************************************************** ** 函数名称: void PWMDuo_Duty(int duo_duty)** 功能描述: 舵机控制子函数******************************************************************************/ void PWMDuo_Duty(int duo_duty){PWMDTY01 = duo_duty;PWME_PWME1 = 1; // 使能PWM3}/***************************************************************************** ** 函数名称: void PWMdian_Duty(unsigned char motorValue)** 功能描述: 控制PWMDTY23的值从而控制输出的占空比使得电机获得不同的速度正转******************************************************************************/ void PWMdian_Duty(unsigned char motorValue){PWMDTY23 = motorValue;}/****************************************************************************** ** 函数名称: void PWMdian_DutyStop(unsigned char motorValue)** 功能描述: 控制PWMDTY45的值从而控制输出的占空比使得电机获得不同的速度反转******************************************************************************/ void PWMdian_DutyStop(unsigned char motorValue){PWMDTY45 = motorValue;}/****************************************************************************** ** 函数名称: unsigned char GetSpeed(unsigned int CurSpeed)** 功能描述: 获得小车行驶时的速度大小从而反馈给PID实现PID控制******************************************************************************/ unsigned char GetSpeed(unsigned int CurSpeed){CurSpeed = CurSpeed/10;if(CurSpeed>60&&CurSpeed<80){Dianji_data = 45;}if(CurSpeed>=80&&CurSpeed<130){Dianji_data = 50;}if(CurSpeed>=130&&CurSpeed<180){Dianji_data = 55;}if(CurSpeed>=180&&CurSpeed<220){Dianji_data = 60;}if(CurSpeed>=220&&CurSpeed<235){Dianji_data = 65;}if(CurSpeed>=235&&CurSpeed<270){Dianji_data = 70;}if(CurSpeed>=270&&CurSpeed<380){Dianji_data = 40;}return Dianji_data;}/***************************************************************************** ** 函数名称: void main(void)** 功能描述: 调用功能函数******************************************************************************/ void main(void){unsigned char clearFlag = 1;unsigned int PWM_Value;PLL_Init(); // 时钟初始化锁相环TIM_Init(); //定时器初始化IO_Init(); //IO端口初始化SCI_Init(); //串口初始化Init_pwm(); //pwm初始化PIT_Init();LCD_Init(); //nokia5110初始化LCD_clear(); //nokia5110清屏EnableInterrupts; //中断使能LCD_draw_bmp_pixel(0,0,picture,84,48);for(;;){if(IsScanKeyTime == 1){IsScanKeyTime = 0;KeyPro();KeyFunction();}if(PWMFlag!=0){DelayEn = 1;if(StartDelay == 1){StartDelay = 0;PWME_PWME3 = 1;}}else{PWME_PWME3 = 0;Time2s = 0; //保证在按按键之前time2s的值一直为0 }if(IsCountSpeed == 1){IsCountSpeed = 0;CarPulse = PulseNum;Speed = CarPulse*157/10; //每圈100个脉冲转轮周长157cmPulseNum = 0;}if(IsSetMode == 0){IsSetMode = 1;LCD_clear_half();Display_Gray(36,3,3);Display_GUI(0,4,14);}Display_Speed(36,5,4);//窜口发送(注意开了窜口发送会很占用系统资源)Traver_UartValue();PWM_Value = IncPIDCalc(GetSpeed(Speed)); //pid调节语句Dianji_data += PWM_Value;Get_SideLine();Car_Cotrol();PWMDuo_Duty(Duoji_data);PWMdian_Duty(Dianji_data);}}/***************************************************************************** ** 函数名称: void interrupt 66 PIT0(void)** 功能描述: 中断服务函数产出时间片******************************************************************************/ #pragma CODE_SEG __NEAR_SEG NON_BANKEDvoid interrupt 66 PIT0(void){static unsigned char PIDData = 0;PITTF_PTF0=1;++CarTimeTemp;++PIDFlag;if(flag%10 == 0){IsScanKeyTime = 1;}if(CarTimeTemp == 20) //100ms进行一次速度计算并清除计数值{IsCountSpeed = 1;CarTimeTemp = 0;}if(flag%30 == 0){IsDisplayOn = 1;}if(++flag == 6500){flag = 0;StartLineFlag = 1;}if(PIDFlag == 2000){PIDFlag = 0;PIDOn = 1;}if(DelayEn==1){Time2s++;if(Time2s==800) //5s定时{Time2s = 0;DelayEn=0;StartDelay = 1;}}}图像处理#include "image.h"#include <mc9s12xs128.h>#include "sci.h"#include "pid.h"#include "KeyScan.h"#define ROW 40#define COLUMN 120#define ROW_START 10#define ROW_MAX 200//#define THRESHOLD 0x7Dextern unsigned char THRESHOLD;unsigned char SampleFlag=0; //奇偶场标记unsigned int m=0;unsigned int Line;unsigned int hang;unsigned char a_Temp=0,b_Temp=0;unsigned char Dianji_data = 50;unsigned int Duoji_data;unsigned char Buffer[ROW][COLUMN]={0};unsigned char image_center[40]={0};unsigned int zuo_danxian=1,you_danxian=1;unsigned long WholeRoad = 0;unsigned long Road = 0;unsigned char smallSFlage = 0;unsigned int effectLine = 0;unsigned char flagg;//定每场采哪几行。

飞思卡尔智能车各模块原理及元器件

飞思卡尔智能车各模块原理及元器件

飞思卡尔智能车各模块原理及元器件在准备比赛的过程中,我们小组成员经过分析讨论,对智能车各模块的元器件使用方面做如下说明:1、传感器模块:路径识别模块是智能车系统的关键模块之一,目前能够用于智能车辆路径识别的传感器主要有光电传感器和CCD/CMOS传感器。

光电传感器寻迹方案的优点是电路简单、信号处理速度快,但是其前瞻距离有限;CCD 摄像头寻迹方案的优点则是可以更远更早地感知赛道的变化,但是信号处理却比较复杂,如何对摄像头记录的图像进行处理和识别,加快处理速度是摄像头方案的难点之一。

在比较了两种传感器优劣之后,考虑到CCD传感器图像处理的困难后,决定选用应用广泛的光电传感器,相信通过选用大前瞻的光电传感器,加之精简的程序控制和较快的信息处理速度,光电传感器还是可以极好的控制效果的,我们使用11个TK-20型号的光电传感器。

2、驱动模块:驱动电路的性能很大程度上影响整个系统的工作性能。

电机驱动电路可以用MC33886驱动芯片或者用MOS管搭建H桥驱动电路。

MC33886体积小巧,使用简单,但由于是贴片的封装,散热面积比较小,长时间大电流工作时,温升较高,如果长时间工作必须外加散热器,而且MC33886的工作内阻比较大,又有高温保护回路,使用不方便。

采用MOS管构成的H桥电路,控制直流电机紧急制动。

用单片机控制MOS管使之工作在占空比可调的开关状态,精确调整电动机转速。

这种电路由于MOS管工作在饱和截止状态,而且还可以选择内阻很小的MOS管,所以效率可以非常高,并且H桥电路可以快速实现转速和方向控制。

MOS管开关速度高,所以非常适合采用PWM调制技术。

所以我们选择了用MOS管搭建H桥驱动电路。

3、电源模块:比赛使用智能车竞赛统一配发的标准车模用7.2V 供电,而单片机系统、路径识别的光电传感器、光电码编码器等均需要5V电源,伺服电机工作电压范围4V到6V(为提高伺服电机响应速度,采用7.2V 供电),直流电机可以使用7.2V 蓄电池直接供电,我们采用的电源有串联型线性稳压电源(LM2940、7805等)和开关型稳压电源(LM2596)两大类。

两轮自平衡小车毕业设计

两轮自平衡小车毕业设计

慧净电子单片机技术学习网址: 本科毕业设计(论文)题目两轮自平衡小车的设计学院电气与自动化工程学院年级2011专业自动化班级*******学号 **********学生姓名罗本指导教师王刚职称论文提交日期慧净电子单片机技术学习网址:两轮自平衡小车的设计摘要近年来,两轮自平衡车的研究与应用获得了迅猛发展。

本文提出了一种两轮自平衡小车的设计方案,采用陀螺仪ENC-03以及MEMS加速度传感器MMA7260构成小车姿态检测装置,使用卡尔曼滤波完成陀螺仪数据与加速度计数据的数据融合。

系统选用飞思卡尔16 位单片机MC9S12XS128为控制核心,完成了传感器信号的处理,滤波算法的实现及车身控制,人机交互等。

整个系统制作完成后,各个模块能够正常并协调工作,小车可以在无人干预条件下实现自主平衡。

同时在引入适量干扰情况下小车能够自主调整并迅速恢复稳定状态。

小车还可以实现前进,后退,左右转等基本动作。

关键词:两轮自平衡陀螺仪姿态检测卡尔曼滤波数据融合IDesign of Two-Wheel Self-Balance VehicleAbstractIn recent years, the research and application of two-wheel self-balanced vehicle have obtained rapid development. This paper presents a design scheme of two-wheel self-balanced vehicle. Gyroscope ENC-03 and MEMS accelerometer MMA7260 constitute vehicle posture detection device. System adopts Kalman filter to complete the gyroscope data and accelerometer data fusion.,and adopts freescale16-bit microcontroller-MC9S12XS128 as controller core. The center controller realizes the sensor signal processing the sensor signal processing, filtering algorithm and body control, human-machine interaction and so on.Upon completion of the entire system, each module can be normal and to coordinate work. The vehicle can keep balancing in unmanned condition. At the same time, the vehicle can be adjusted independently then quickly restore stability when there is a moderate amount of interference. In addition, the vehicle also can achieve forward, backward, left and right turn and other basic movements.Key Words: Two-Wheel Self-Balance; Gyroscope; Gesture detection; Kalman filter; Data fusionII目录1.绪论 (1)1.1 研究背景与意义 (1)1.2 两轮自平衡车的关键技术 (2)1.2.1 系统设计 (2)1.2.2 数学建模 (2)1.2.3 姿态检测系统 (2)1.2.4 控制算法 (3)1.3 本文主要研究目标与内容 (3)1.4 论文章节安排 (3)2.系统原理分析 (5)2.1 控制系统要求分析 (5)2.2 平衡控制原理分析 (5)2.3 自平衡小车数学模型 (6)2.3.1 两轮自平衡小车受力分析 (6)2.3.2 自平衡小车运动微分方程 (9)2.4 PID 控制器设计 (10)2.4.1 PID 控制器原理 (10)2.4.2 PID 控制器设计 (11)2.5 姿态检测系统 (12)2.5.1 陀螺仪 (12)2.5.2 加速度计 (13)2.5.3 基于卡尔曼滤波的数据融合 (14)2.6 本章小结 (16)3.系统硬件电路设计 (17)3.1 MC9SXS128 单片机介绍 (17)3.2 单片机最小系统设计 (19)3.3 电源管理模块设计 (21)3.4 倾角传感器信号调理电路 (22)33.4.1 加速度计电路设计 (22)3.4.2 陀螺仪放大电路设计 (22)3.5 电机驱动电路设计 (23)3.5.1 驱动芯片介绍 (24)3.5.2 驱动电路设计 (24)3.6 速度检测模块设计 (25)3.6.1 编码器介绍 (25)3.6.2 编码器电路设计 (26)3.7 辅助调试电路 (27)3.8 本章小结 (27)4.系统软件设计 (28)4.1 软件系统总体结构 (28)4.2 单片机初始化软件设计 (28)4.2.1 锁相环初始化 (28)4.2.2 模数转换模块(ATD)初始化 (29)4.2.3 串行通信模块(SCI)初始化设置 (30)4.2.4 测速模块初始化 (31)4.2.5 PWM 模块初始化 (32)4.3 姿态检测系统软件设计 (32)4.3.1 陀螺仪与加速度计输出值转换 (32)4.3.2 卡尔曼滤波器的软件实现 (34)4.4 平衡PID 控制软件实现 (35)4.5 两轮自平衡车的运动控制 (37)4.6 本章小结 (39)5. 系统调试 (40)5.1 系统调试工具 (40)5.2 系统硬件电路调试 (40)5.3 姿态检测系统调试 (41)5.4 控制系统PID 参数整定 (44)5.5 两轮自平衡小车动态调试 (44)45.6 本章小结 (45)6. 总结与展望 (46)6.1 总结 (46)6.2 展望 (46)参考文献 (47)附录 (48)附录一系统电路原理图 (48)附录二系统核心源代码 (49)致谢 (52)5慧净电子单片机技术学习网址:1.绪论1.1 研究背景与意义近年来,随着电子技术的发展与进步,移动机器人的研究不断深入,成为目前科学研究最活跃的领域之一,移动机器人的应用范围越来越广泛,面临的环境和任务也越来越复杂,这就要求移动机器人必须能够适应一些复杂的环境和任务。

飞思卡尔智能车竞赛设计方案

飞思卡尔智能车竞赛设计方案

飞思卡尔智能车竞赛设计方案清晨的阳光透过窗帘,洒在书桌上那厚厚一摞方案草稿上。

我泡了杯咖啡,打开电脑,准备着手写这个“飞思卡尔智能车竞赛设计方案”。

10年的方案写作经验告诉我,这是一个充满挑战的任务,但也是展示自己才华的舞台。

一、项目背景飞思卡尔智能车竞赛是一场针对大学生的科技竞赛,旨在培养创新精神和实践能力。

参赛队伍需要设计一款智能车,通过传感器、控制器、执行器等部件,使车辆在规定的赛道上自主行驶,完成各种任务。

这场比赛既考验技术,也考验团队协作。

二、设计方案1.车辆整体设计车辆整体设计要兼顾美观、实用和稳定性。

外观上,我们采用流线型设计,减少空气阻力;内部结构紧凑,降低重心,提高稳定性。

车辆尺寸符合比赛规定,确保在赛道上行驶自如。

2.传感器配置(1)激光雷达:用于实时获取车辆周围环境信息,绘制三维地图。

(2)摄像头:用于识别赛道标志、障碍物等。

(3)超声波传感器:用于检测前方障碍物距离,避免碰撞。

(4)红外传感器:用于检测赛道边缘,防止车辆出轨。

3.控制器设计(1)路径规划:根据传感器信息,实时规划车辆行驶路径。

(2)速度控制:根据赛道状况,调整车速,确保稳定行驶。

(3)避障策略:当检测到前方有障碍物时,及时调整行驶方向。

4.执行器设计(1)电机驱动:驱动车辆前进、后退、转向。

(2)舵机:用于调整摄像头角度,获取更多赛道信息。

(3)电磁阀:用于控制车辆制动。

三、团队协作一个优秀的团队是项目成功的关键。

我们团队成员各司其职,密切配合:1.项目经理:负责整体进度把控,协调各方资源。

2.硬件工程师:负责车辆整体设计和传感器、执行器选型。

3.软件工程师:负责控制器设计和程序编写。

4.测试工程师:负责车辆调试和性能测试。

四、项目实施1.初期准备:收集比赛相关信息,了解赛道状况,确定设计方案。

2.设计阶段:根据设计方案,绘制图纸,选型采购。

3.制作阶段:组装车辆,调试传感器、控制器和执行器。

4.测试阶段:进行多次试验,优化控制策略,提高车辆性能。

基于线性CCD双轮平衡车系统的设计

基于线性CCD双轮平衡车系统的设计

(Jilin Railway Vocational and Technical College,Jilin,Jilin 132001,China)
Abstract:The control system adopts the single chip microcomputer freescale MC9SXS128 as its control core,it collect road information with a 128*1 linear CCD;Kalman filtering algorithm is adopted to integrate the information about gyroscope and accelerometer calculate the angle and angular velocity of the model,adjust and balance the model.The whole system composed three closed loops,including road information acquisition system,vertical control system and speed control system,which helps to models to erect,speed up,slow down,pass roadblock and cross bridges and carry out other complex motions.PC monitoring system would receive the data and information uploaded by wireless modules,after processing and analysis,it would make models track guide lines rapidly,accurately and stablely.

两轮小车,陀螺仪,PID

两轮小车,陀螺仪,PID

学号:***********毕业设计说明书两轮自平衡小车的设计Design of self balancing two wheeled vehicle学院计算机与电子信息学院专业电子信息科学与技术摘要摘要近年来,两轮自平衡车研究和应用获得了快速的发展,但是存在陀螺仪漂移及加速度计的动态响应慢的问题。

针对这个问题,本文提出了一种改进的两轮平衡车设计方案,采用陀螺仪以及MEMS加速度传感器构成小车姿态检测模块,使用卡尔曼滤波算法完成陀螺仪与加速度计的数据融合。

系统选用飞思卡尔32位单片机Kinetis K10为控制核心,完成各种传感器的信号放大处理,滤波算法的研究实现以及车身的状态控制等。

整个系统完成后,各个模块能够正常协调工作,小车可以在无人干预的情况下实现直立平衡的功能。

同时两轮平衡小车能够在引入适量干扰的情况下,自动地调整小车的姿态并恢复稳定的状态,基本实现本文设计的要求。

关键词:两轮自平衡飞思卡尔姿态检测陀螺仪卡尔曼滤波广东石油化工学院本科毕业设计:两轮自平衡小车的设计AbstractIn recent years, the research and application of two-wheels self-balanced vehicle have an obtained rapid development, but there is the problem of slow response of dynamic drift and acceleration gyrometer. To solve this problem, this paper presents a design schemes of two-wheels self-balanced vehicles. Gyroscopes and MEMS accelerometer constitute vehicle posture detection device. System adopts to Kalman filters to complete the gyroscope‘s data and accelerometer data fusion, and adopts freescale32-bit microcontroller-Kinetis K10 as core controller. The center controller realize the sensor signal processing and the sensor signal processing, filtering algorithm and body control and so on. Upon completion of the entire system, the each modules can normal and to coordinate work. The vehicles can keep balancing in unmanned condition. At the same time, the vehicle can be adjust independently and then quickly restores stabilitly when there is a moderates amount of interference, basic to meet the design requirements.Key Words: Two-Wheel Self-Balance; Freescale; Gesture detection; Gyroscope; Kalman filter目录目录摘要 (I)目录 ................................................................................................................................................. I II 第1章绪论. (1)1.1研究背景及意义 (1)1.2两轮自平衡小车的发展概况 (1)1.2.1国外的研究成果 (2)1.2.2国内的研究成果 (2)1.3研究目的与内容 (3)1.4本章小结 (3)第2章系统原理分析 (4)2.1平衡控制原理分析 (4)2.2 自平衡车数学模型 (5)2.2.1 两轮平衡车的受力分析 (5)2.2.2两轮自平衡小车运动微分的方程 (8)2.3 PID控制器 (9)2.3.1 PID控制器原理 (9)2.3.2 PID控制器设计 (10)2.4 倾角检测系统 (11)2.4.1 陀螺仪 (12)2.4.2 加速度计 (12)2.4.3 基于卡尔曼滤波的数据融合 (13)2.5 本章小结 (15)第3章系统硬件设计 (16)3.1飞思卡尔Kinetis K10单片机介绍 (16)3.2 单片机最小系统设计 (17)3.3 电源管理模块设计 (18)3.4 倾角传感器信号调制电路 (19)3.4.1 加速度计电路设计 (19)3.4.2 陀螺仪电路设计 (19)广东石油化工学院本科毕业设计:两轮自平衡小车的设计3.5 直流无刷电机 (21)3.5.1 直流无刷电机特性 (21)3.5.2 直流无刷电机工作原理 (21)3.5.3 直流无刷电机调速 (21)3.6 电机驱动电路设计 (22)3.6.1 驱动芯片介绍 (22)3.6.2 驱动电路设计 (23)3.7 速度检测模块设计 (24)3.7.1 编码器介绍 (25)3.7.2 编码器的电路设计 (26)3.8 硬件设计中的抗干扰措施 (26)3.9 本章小结 (27)第4章系统软件设计 (28)4.1 单片机初始化软件设计 (29)4.1.1 延时初始化 (29)4.1.2 通用输入输出口(GPIO)初始化 (29)4.1.3 模数转换模块(ADC)初始化 (29)4.1.4 脉冲宽度调制模块(PWM)初始化 (29)4.2 姿态检测软件设计 (30)4.2.1 陀螺仪与加速度计输出值处理 (30)4.2.2 卡尔曼滤波器的软件实现 (31)4.3 PID控制算法软件实现 (32)4.4 运动控制 (33)4.5 本章小结 (34)第5章系统调试 (35)5.1 硬件调试 (35)5.2 软件调试 (35)5.3 串口调试 (36)5.4 本章小结 (37)全文总结与展望 (38)致谢 ...................................................................................................................错误!未定义书签。

飞思卡尔比赛平衡车资料

飞思卡尔比赛平衡车资料
D:\final\Sources\main.c 2013年10月5日 / 22:40 #include "Includes.h" volatile signed int PWML,PWMR; volatile uint T0Count,TaskStep,BattV;//T0定时器计数,任务时钟,电池电压 volatile uchar TaskSpeed,TaskUart,TaskME,TaskME_Ct,T_LCD,Key,StartRun=0,Screen=1,RoadStateCount, RoadState;//速度控制任务定时,串口任务定时,液晶刷新定时,按键值 volatile int ReadSpeedL,ReadSpeedR,T_Sec,SpeedAdjust;//左编码器速度,右编码器速度 volatile uint Dis_SpeedL,Dis_SpeedR;//显示用速度缓存 volatile int AD[16],AD_Count,AD_Count2,OFFSET_GYRO_X=1710; volatile int Acc_Z,Acc_X,GYRO_Y,PWM_Balance,MEL,MER,MEE; //Z, X加速度,Y轴陀螺仪,平衡输出PWM,左右磁传感器,磁强度差值 volatile float ME_Out_New,ME_Out_Old,ME_Out; volatile uint OFFSET_Acc_Z=2500,OFFSET_Acc_X=1610,OFFSET_GYRO_Y=1590;//传感器零点,偏移值 volatile signed int OutData[8];//串口输出缓存 volatile double Angle,Angle_dot,Angle_Acc; //角度,角速度,加速度计所得角度 volatile float K_Angle=2600,K_Angle_dot=26,K_ME=5,fMEE,K_Batt=1,OFFSET_ANGLE=-4,D_Diretion=1.2, angle_dot_X; //角度系数,角速度系数,整体角度偏移量 volatile float K_ME_AD,S_P_AD,S_I_AD,K_Batt_AD,D_Diretion_AD,K_Angle_AD,K_Angle_dot_AD; volatile int S_Tar_AD; volatile float S_P=80,S_I=5; //速度控制比例,积分系数 volatile int S_Sum,S_Err,S_Tar=700,S_Now_Start=0,S_Out,S_Out_New,S_Out_Old; volatile float S_Err_Fliter; volatile uchar Mode=SHUT_DOWN; //整车工作模式 volatile int MEE_Last,Out_Tra¬

智能车制作全过程(飞思卡尔)

智能车制作全过程(飞思卡尔)

智能车制作全过程(飞思卡尔)如果我写得好,请顶我一下,我将再接再厉!(本人在很久以前做的一辆用来比赛的智能车--获得华北一等奖,全国二等奖,有许多可改进地方.)下面我们来立即开始我们的智能车之旅:首先,一个系统中,传感器至关重要."不管你的CPU的速度如何的快,通信机制如何的优越,系统的精度永远无法超越传感器的精度" .是的,在这个系统中,传感器的精度,其准确性就显得至关重要.如果你问我传感器的电路,呵呵,我早就和大家分享了,在我发表的日志中,有一篇<<基于反射式距离传感器>>的文章就详细的说明了传感器的硬件电路以及可以采取的信号采样方式.传感器安装成一排,如上面排列.(就是个一字排列,没有什么特别)接下来,看看我们如何处理传感器得到的信息:大家看到了.结构很简单,我们已经搞定了传感器通路.下面我们来看看多机的控制方面的问题:其实,不管是便宜还是比较贵的舵机,都是一样的用法.舵机的特点就是不同的占空比方波就对应着舵机的不同转角.当然不同的舵机有不同的频率要求.比如我用的这个舵机:方波频率50HZ.怎么改变占空比?这个不就是PWM模块的功能嘛.PWM模块可以输出任意占空比的方波.只要你控制其中的占空比寄存器,就可以直接控制舵机的转角.你只要将传感器的状态和这个占空比对应上,不就OK了?就这么简单,做到这里,你就可以让你的车在跑道上跑了!接下来,我们的工作是让智能车更加完善:速度要稳定.在当前的系统结构中,要使一个系统更稳定更可靠,闭环系统是一个选择.(如果你不知道什么是闭环系统,可以参照我的文章里面的一篇"基于单片机的PID电机调速"),既然是一个闭环系统,速度传感器是必不可少的,用什么样的传感器做为速度反馈呢:仔细看,和后轮之间有一条皮带的这个貌似电机的东西,就是我的速度传感器,它的学名叫"旋转编码器".这个器件的特点就是:每转一圈,就会从输出端输出一定的脉冲,比如我这个旋转编码器是500线的,就是转一圈输出500个脉冲.因此,我只要在单位时间内计数输出端输出的脉冲数,我就可以计算出车辆的速度.显然,这个速度可以用来作为PID速度调节的反馈.现在有了反馈,我们需要的是调节智能车驱动电机的速度了,如何来调速,就成了必须解决的问题了.我用的是驱动芯片MC33886. 其实,这个芯片就是一个功率放大的模块.我们知道,单片机输出的PWM信号还是TTL信号,是不能直接用来驱动电机的.非要通过功率模块的放大不可.这个道理其实很简单,就像上次我给大家画的哪个电子琴电路的放大电路一样:看上面的那个三极管,就是将TTL电路的电流放大,才能够来驱动蜂鸣器.其实这里的这个MC33886就是这样的一个作用.而且我们自己也完全可以用三极管自己搭建一个这样的功率放大电路,当然,驱动能力肯定不如这里的这个MC33886(如我们用三极管就搭建了超过MC33886的电路,摩托罗拉就不会卖几十块钱一个了.呵呵.)知道了这个MC33886的工作原理,就好说了,一句话,通过PWM来调节电机的速度.当方波中高电平占的比例大,电机的平均电压肯定高,转速肯定快.也就是说,PWM的占空比越大,电机转速越高.看,就这么简单,这个智能车就做好了.接下来,我们就把我们知道的PID知识放到舵机和直流驱动电机的控制中去.就可以达到一个比较好的控制效果.如果要达到更高的水平,肯定机械方面的改造也少不了.当然,这不属于本文的讨论范围.呵呵.智能车制作全过程(飞思卡尔---舵机篇发表于 2008/11/28 10:00:55感谢大家的支持!如果我写得好,请顶我一下!智能车的制作中,看经验来说,舵机的控制是个关键.相比驱动电机的调速,舵机的控制对于智能车的整体速度来说要重要的多.PID算法是个经典的算法,一定要将舵机的PID调好,这样来说即使不进行驱动电机的调速(匀速),也能跑出一个很好的成绩.机械方面:从我们的测试上来看,舵机的力矩比较大,完全足以驱动前轮的转向.因此舵机的相应速度就成了关键.怎么增加舵机的响应速度呢?更改舵机的电路?不行,组委会不允许.一个非常有效的办法是更改舵机连接件的长度.我们来看看示意图:从上图我们能看到,当舵机转动时,左右轮子就发生偏转.很明显,连接件长度增加,就会使舵机转动更小的转角而达到同样的效果.舵机的特点是转动一定的角度需要一定的时间.不如说(只是比喻,没有数据),舵机转动10度需要2ms,那么要使轮子转动同样的角度,增长连接件后就只需要转动5度,那么时间是1ms,就能反应更快了.据经验,这个舵机的连接件还有必要修改.大约增长0.5倍~2倍.在今年中,有人使用了两个舵机分别控制两个轮子.想法很好.但今年不允许使用了.接下来就是软件上面的问题了.这里的软件问题不单单是软件上的问题,因为我们要牵涉到传感器的布局问题.其实,没有人说自己的传感器布局是最好的,但是肯定有最适合你的算法的.比如说,常规的传感器布局是如下图:这里好像说到了传感器,我们只是略微的一提.上图只是个示意图,意思就是在中心的地方传感器比较的密集,在两边的地方传感器比较的稀疏.这样做是有好处的,大家看车辆在行驶到转弯处的情况:相信看到这里,大家应该是一目了然了,在转弯的时候,车是偏离跑道的,所以两边比较稀疏还是比较科学的,关于这个,我们将在传感器中在仔细讨论。

飞思卡尔智能车程序汇总

飞思卡尔智能车程序汇总

1.流水灯程序:#include <>/* common defines and macros */ #include ""/* derivative-specific definitions */ void delay(unsigned int ms){unsigned int i;unsigned char j;for(i=0;i<ms;i++){for(j=0;j<100;j++);}}void main(void) {/* put your own code here */EnableInterrupts;DDRA=0x00;DDRB_DDRB0=1;for(;;){delay(25000);PORTB_PB0=1;delay(25000);PORTB_PB0=0;}}2.液晶屏按键程序#include <>/* common defines and macros */ #include ""/* derivative-specific definitions */ #include ""#include ""#include ""void delay(unsigned int ms){unsigned int i;unsigned char j;for(i=0;i<ms;i++){for(j=0;j<100;j++);}}/******************************倍频*****************************************/void vPLLInit(void){unsigned char refdv;refdv=3;CLKSEL=0X00;机程序#include <>/* common defines and macros */ #include ""/* derivative-specific definitions */ #include ""#include ""#include ""#define servo_period 20盘控速#include <>/* common defines and macros */#include ""/* derivative-specific definitions */#include ""#include ""#include ""#define servo_period 20 PACTL_PEDGE=1;PACTL_PAEN=1; }磁车程序#include <>/* common defines and macros */#include <>#include ""/* derivative-specific definitions */#include ""#include ""#include ""PACTL_PEDGE=1;PACTL_PAEN=1;}5.);}5.;for(i=0;i<8000;i++){for(j=0;j<4;j++){AD_wData[j]=ReadATD(i)/255.*5.;if(AD_wData[j]>max_v[j]) max_v[j]= AD_wData[j];}delayms(1);}5.;if(AD_wData[i]>=min_v[i]){AD_wData[i]=(AD_wData[i]-min_v[i])*5./(max_v[i]-min_v[i]); //if(AD_wData[i]>100)AD_wData[i]=100;}elseAD_wData[i]=0;if(AD_wData[i]>miny) ////{miny=AD_wData[i];minx=i;}//printp("%03d,",AD_wData[i]);sumxy1+=dif_x[i]*AD_wData[i];sumy1+=AD_wData[i];}servo_change=(sumxy1/sumy1)*K1 ; set_servo(servo_change);//////增添电机 //////////增添电机 ////}}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

直立控制电压 行走控制电压 转向控制电压 +
+ +
直立 运行
虚拟拆解 形成三组 不同功能 的驱动电机
图 2.1 车模运动控制பைடு நூலகம்解示意图
转向
线性叠加形成一组 驱动电机
直流电机的力矩最终来自于电机驱动电压产生的电流。 因此只要电机处于线性状态, 上述拆解可以等效成三种不同控制目标的电压叠加之后,施加在电机上。
6
在上述三个任务中保持车模直立是关键。由于车模同时受到三种控制的影响,从车 模直立控制的角度,其它两个控制就成为它的干扰。因此在速度、方向控制的时候,应 该尽量平滑,以减少对于直立控制的干扰。三者之间的配合如图 2.1 所示。
2
3
一、前言
为了提高全国大学生智能汽车竞赛创新性和趣味性, 激发高校学生参与比赛的兴趣, 提高学生的动手能力、创新能力和接受挑战能力,智能汽车竞赛组委会将电磁组比赛规 定为车模直立行走(如图 1.1 所示) ,其它两个组别的车模行走方式保持不变。
图 1.1 电磁组车模直立运行模式
车模直立行走比赛是要求仿照两轮自平衡电动车的行进模式,让车模以两个后轮 驱动进行直立行走。近年来,两轮自平衡电动车以其行走灵活、便利、节能等特点得到 了很大的发展。国内外有很多这方面的研究,也有相应的产品。在电磁组比赛中,利用 了原来 C 型车模双后轮驱动的特点,实现两轮自平衡行走。相对于传统的四轮行走的车 模竞赛模式,车模直立行走在车体检测、控制算法等方面提出了更高的要求。为了能够 帮助参赛同学尽快制作车模参加比赛, 竞赛秘书处编写了 C 型车模直立行走的参考设计 方案。参赛队员可以在此基础上,进一步改进硬件和软件方案,提高竞赛水平。 为了适应初学者,方案介绍过程中,尽可能减少公式推导,使用通俗科学的语言介 绍控制原理和方法,给出 C 型车模制作过程中的核心环节。本文的主要内容如图 1.2 所 示。
4
电磁组直立行走任务分解 车模直立控制 车模速度控制
原理篇
车模方向控制 车模倾角测量 控制算法总框图 整体电路框图 DSC最小系统 倾角传感器电路
电路设计篇
电机驱动电路 速度传感器电路 电磁检测电路 车模简化与修改
机械设计篇
传感器安装 其它注意事项 软件功能框架 DSC资源配置
软件编写与调试篇
主要算法以及实现 程序调试与参数整定 运行测试
第七届全国大学生 “飞思卡尔” 杯智能汽车竞赛
电磁组直立行车参考设计方案
(版本 1.0)
直立控制 速度控制 方向控制
竞赛秘书处
2011-12-22
1


一、前言 .................................................................................................................................... 4 二、原理篇 ................................................................................................................................ 6 2.1 直立行走任务分解 .............................................................................................................. 6 2.2 车模直立控制 ...................................................................................................................... 7 2.3 车模速度控制 .................................................................................................................... 11 2.4 车模方向控制 .................................................................................................................... 14 2.5 车模倾角测量 .................................................................................................................... 15 2.6 车模直立行走控制算法总图 ............................................................................................ 19 三、电路设计篇 ...................................................................................................................... 21 3.1 整体电路框图 .................................................................................................................... 21 3.2 DSC 介绍与单片机最小系统 ........................................................................................... 22 3.3 倾角传感器电路 ................................................................................................................ 25 3.4 电机驱动电路 .................................................................................................................... 27 3.5 速度传感器 ........................................................................................................................ 28 3.6 电磁线检测电路 ................................................................................................................ 29 四、机械设计篇 ...................................................................................................................... 30 4.1 车模简化改装 .................................................................................................................... 30 4.2 传感器安装 ........................................................................................................................ 31 4.3 注意事项 ............................................................................................................................ 33 五、软件编写与调试篇.......................................................................................................... 34 5.1 软件功能与框架 ................................................................................................................ 34 5.2 DSC 的资源配置 ............................................................................................................... 37 5.3 主要算法及其实现 ............................................................................................................ 38 5.4 程序调试与参数整定 ........................................................................................................ 46 5.5 现场运行测试 .................................................................................................................... 47 六、结束语 .............................................................................................................................. 47 附录: ...................................................................................................................................... 48
相关文档
最新文档