飞思卡尔平衡车设计(原理+必要代码)
- 格式:pdf
- 大小:6.17 MB
- 文档页数:49
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------------------------。
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], 刘允峰;韩建群
因版权原因,仅展示原文概要,查看原文内容请购买。
基于飞思卡尔单片机的两轮车控制系统设计
1.前言
本文以飞思卡尔的小车模型为对象,设计了以飞思卡尔单片机
MC9S12XS128 为核心,自主循迹的两轮车自平衡控制系统。
实验证明该方案在摄像头导航的两轮车系统中具有准确、快速、稳定的自主寻迹效果。
2.系统设计与原理
本系统以飞思卡尔公司生产的MC9S12XS128 单片机为控制核心,主要由电源管理模块、路径检测模块、车速检测块、加速度检测模块、角速度检测模块、直流电机驱动模块、液晶显示模块、串口调试等功能模块构成。
在电源管理模块为系统提供稳定电源的基础上,单片机把加速度和角速度检测模块获得的小车姿态信息、路径信息检测模块获得的小车前进方向信息、车速检测模块返回的车速信息通过PID 算法控制直流电机驱动模块,以使得小车在保持直立的前提下快速地行驶。
液晶显示模块可以实时地显示系统相关参数,串口调试模块把接收到单片机的数据送往上位机,方便相关参数及波形的实时观察和调试。
系统框图如图1 所示。
3.系统硬件设计
3.1 主控制器模块
本系统的主控制器是飞思卡尔公司生产的16 位MC9S12XS128 单片机,它负责对智能车所采集到的信号进行处理并向各个功能模块发送控制信号。
MC9S12XS128 单片机最高总线频率可达40MHz,片内资源包括8KRAM、8K。
飞思卡尔智能车设计方案一:项目名称:第五届飞思卡尔智能汽车。
二:设计要求:参考飞思卡尔智能车竞赛基本要求。
三:设计制作思路为了用单片机系统实现小车智能控制,本设计以MC9S12DG128为核心,附以外围电路,将摄像头传感器得到的图像信息进行综合判别和处理,并通过速度传感器获得当前车辆速度,然后发出指令给电机驱动器(包括舵机和驱动电机),控制小车,从而使小车能够快速、准确地识别特定路线行驶。
快速准确的图像分析处理、准确的实时速度控制、CPU的综合数据处理为小汽车实现自动加速、减速、限速、左转、右转提供了充分的保证。
通过组装车模、传感器的选择与布置、系统电路板的设计与安装、仿真软件的制作、安装与调试以及控制算法的调试等等,首先使智能车运行起来,由低速逐渐向高速过渡。
在实验的基础上不断发现问题,不断调试,不断解决问题,使智能车能够最大限度的沿着轨道快速、准确的行驶。
四:方案1.路径识别系统软硬件设计方案:§道路寻找软件设计由于每行搜索的是最黑点,因此可以将黑点的阈值稍稍扩大一点,即使远方的黑白不清,由于找的是最黑点因此还是可以提取出真确的黑线的.它的主要问题是,不一定每行都有符合要求的点,会造成一行丢失而失去后面的黑点.解决的方法是当发现一行丢失以后,不立即退出搜索,而是置一个丢失计数器,只有当丢失计数器的值连续累加到一定的阈值后才退出.当每次搜索到一行的黑线后看看丢失计数器是否为非零.若不是,则说明前面没有丢失行.若是,则说明前面有几行丢失了.我们可以根据这一行与上以有效行对中间的丢失行对中间的丢失行做一个线性化处理.然后清零丢失计数器.有了丢失计数器,我们可以对赛道的提取条件加以严格的限制,而不必担心黑线的漏检.比如我们可以严格限制黑线的宽度,这样我们可以很容易滤除看到大块的黑斑带来的干扰;对于上述的斜看十字交叉线的问题我们只要根据上一行的黑线严格限制下一行黑线出现范围便可轻松滤除.当然在发现丢失行以后对于下一行的搜索必需加大黑线搜索的范围,允许的连续丢失行越多则再次找回的黑线的可信度也就越低,在实际的提取过程中必须把握好这一阈值,使得即可以顺利找到前方的道路,又不至于误提取黑线.实际证明这种方法实现简单,可靠性也最高,黑线提取十分稳定。