2022年飞思卡尔小车控制程序清单 .pdf
《2022年飞思卡尔小车控制程序清单 .pdf》由会员分享,可在线阅读,更多相关《2022年飞思卡尔小车控制程序清单 .pdf(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、小车控制程序清单/* * * 工程名称: SmartCar * 功能描述:结合飞思卡尔16 位单片机MC9S12DG128B 完成小车自动寻迹,沿黑线行驶功能* IDE 环境:Metrowerks CodeWarrior 4.1 * 组成文件:* main.c * SmartCar.c/PID.c/LCD1620.c/Test.c * 说明:本版本为智能小车程序早期版本,还有待更进一步完善* 日期: 2006-5-6 * (c) Copyright 2006,Zhao Cheng * All Rights Reserved * * * By : Zhao Cheng */ /* * main.
2、c * * (c) Copyright 2006,Zhao Cheng * All Rights Reserved * * By : Zhao Cheng */ #include /* common defines and macros */ #include /* derivative information */ #pragma LINK_INFO DERIVATIVE mc9s12dg128b #define HIGHSPEED 11500 /* 速度参量,此处未使用测速模块*/ #define LOWSPEED0 12500 /* 0-24000 数值越大,速度越慢*/ #define
3、 LOWSPEED1 12000 /* used in CarMain() */ #define STABMAX 50 #define StopCar() PORTK |= 0 x80 /* stop the motor */ #define StartCar() PORTK |= 0 x04 /* start the motor */ #define BrakeCar() PORTK &= 0 xfb /* slow the speed of the SmartCar */ unsigned int SYSCLOCK =0; /* update in INT_Timer0() */ /* *
4、 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 15 页 - - - - - - - - - * FUNCTION PROTOTYPES */ /* write in SmartCar.c */ void Init_INT_RTI (void); /* initiate Real Time Interrupt */ void Init_INT_Timer (void); /* INT_Timer0 initiate */ void Init_PWMout (void);
5、 /* initiate PWM output */ void PWMout (int, int); /* output PWM */ /* write in PID.c */ void Init_PID (void); /* initiate PID parameter */ int CalculateP(void ); /* calculate parameter P */ float CalculatePID (void); /* calculate PID */ int SignalProcess(unsigned char); /* Process the signal from t
6、he sensors */ /* write in Test.c */ void IOtest(void); /* Test I/O */ void PWMtest (void); /* Test PWM output */ int SignalTest(void); /* Test the sensors */ /* write in local file */ void Init(void); /* initiate parameter */ void ProtectMoto (void); /* the function protecting the Motor */ void CarM
7、ain (void); /* SmartCar main function */ /* * * 主程序* * 程序描述 : 完成智能小车系统的初始化,通过按键可选择工作模式,有I/O 测试, PWM 输出测试* 传感器测试,以及小车正常工作模式* * 硬件连接: PORTB 接传感器* PWM 输出口(1)接舵机(2)接电机驱动芯片MC33886 * * 说明:无*/ void main(void) Init(); DDRB = 0 x00; switch(PORTB) case 0 x80: IOtest(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - -
8、 - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 15 页 - - - - - - - - - break; case 0 x40: PWMtest (); break; case 0 x20: SignalTest(); break; default: DDRA = 0 x00; DDRB = 0 xff; DDRK = 0 xff; PORTB = 0 xff; CarMain (); EnableInterrupts; for(;); break; /* * * 小车寻迹行驶函数* * 程序描述 : 通过传感器采集数据,并对其进行处理,通过 PI
9、D 算法得出小车稳定行驶所需的参数,进而调用PWM 输出函数* 控制舵机与电机的工作* * 注意:这个函数调用了SignalProcess(unsigned char),BrakeCar(),PWMout(Direction, Velocity) * * 说明:无*/ void CarMain (void) static int Direction =0, Velocity ; static unsigned char signal; static unsigned int BrakeTime = 0, BrakeControl = 0; static unsigned int Stabili
10、ty =0, StabSTABMAX , PStab=0, StabAver; int i; signal = PORTA; PORTB = signal; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 15 页 - - - - - - - - - Direction = SignalProcess( signal ); /* 稳定性系数的计算*/ Stability -= StabPStab; StabPStab = (unsigned int)Direction /
11、100; Stability += StabPStab; PStab+; if(PStab = STABMAX ) PStab=0; StabAver = 0; for(i=0;i Stabi) StabAver += Stability - Stabi; else StabAver += Stabi - Stability ; if( BrakeTime != 0) BrakeTime-; BrakeCar(); else StartCar(); if(BrakeControl 0) BrakeControl -; if(Direction 4000 ) Velocity = LOWSPEE
12、D0 ; if(BrakeControl = 0 & StabAver/STABMAX 22) BrakeTime = 20; BrakeControl = 120; else if(Direction 2500 ) Velocity = LOWSPEED1 ; else Velocity = HIGHSPEED ; PWMout (Direction , Velocity ); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 15 页 - - - - - - - - -
13、 /* * 系统初始化函数* * 程序描述 : 初始化了系统时钟,FLASH 和 EEPRO 的工作频率, PWM 输出口,定时器,以及 PID 算法中的有关参数* * 注意:这个函数调用了Init_PWMout()nit_INT_Timer()nit_PID()* * 说明:无*/ void Init(void) REFDV=0 x01; /* initiate PLL clock */ SYNR =0 x02; /* system clock 24M */ while (!(CRGFLG & 0 x08) /* wait untill steady */ CLKSEL=0 x80; /*
14、选定所相环时钟*/ FCLKDIV=0 x49; /* 使 FLASH 和 EEPROM */ /* 的擦除操作工作频率在200HZ 左右*/ ECLKDIV=0 x49; Init_PWMout (); /* 01:50Hz 45:1kHz */ Init_INT_Timer (); /* initiate ETC(Enhanced Capture Clock) */ Init_PID (); /* initiate PID caculating process */ DDRK |= 0 x80; /* Start Car - stop car */ PORTK &= 0 x7F; /* *
15、 * SmartCar.c * * (c) Copyright 2006,Zhao Cheng * All Rights Reserved * * By : Zhao Cheng * Data : 2006_5_6 * Note : Dont change this file if possible. */ #include 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 15 页 - - - - - - - - - #include extern SYSCLOCK ;
16、/* 引用全局变量,系统时钟*/ void CarMain (void); /* * * PWM 初始化函数* */ void Init_PWMout (void) PWME = 0 x22; /*01:50Hz 45:1kHz */ PWMPOL = 0 x22; PWMCTL = 0 x50; PWMCLK = 0 x02; PWMSCLA = 4; /* * * PWM 输出函数* 程序描述:输入参数为方向,速度* 方向: 4545 * 速度: 0 24000 */ void PWMout (int Direction , int Velocity ) Direction = Direc
17、tion /3 + 4500; if(Direction 6000) Direction =6000; PWMPER01 = 60000; /* Center 1500ms*3 */ PWMDTY01 = Direction +93; /* 设置舵机角度*/ if(Velocity 24000) Velocity =24000; PWMPER45 = 24000; /* 1kHz ( 10kHz ) */ PWMDTY45 = Velocity ; /* 设置电机速度*/ /* initiate Real Time Interrupt 1.0 */ void Init_INT_RTI (voi
18、d) RTICTL = 0 x74; CRGINT |=0 x80; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 15 页 - - - - - - - - - /* Real Time Interrupt 1.0 */ interrupt void INT_RTI (void) CRGFLG |= 0 x80; /* clear the interrrupt flag */ /* INT_Timer0 initiate 1.0 */ void Init_INT_Tim
19、er (void) TSCR2 =0 x07; /* 128Hz at 16M bus clok */ /* 128Hz * 2/3 at 24m bus clock */ /* in fact it is a little more than it. */ TIOS |=0 x01; /* I/O select */ TIE |=0 x01; /* Interrupt Enable */ TSCR1|=0 x80; /* TSCR1_TEN=1 /Timer Enable */ /* INT_Timer0 1.0 */ interrupt void INT_Timer0 (void) SYS
20、CLOCK +; CarMain (); TC0 = TCNT + 1874; /* 1875-1 :100Hz */ /* F = Fosc / (TC*128) */ TFLG1 |=0 x01; /* clear interrupt flag */ /* not finished EEPROM */ void EEPROM (void) ECLKDIV = 0 x4F; while(!(ECLKDIV&0 x80) /* wheather */ while(!(ESTAT&0 x80) /* wheather the command buffer is empty */ while(!(
21、EPROT&0 x80) /* wheather the eeprom is enabled to */ ECMD = 0 x41; ESTAT |= 0 x80; while(!(ESTAT&0 x80) /* wheather the command buffer is empty */ /* * * PID.c 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 15 页 - - - - - - - - - * Description: This file includ
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年飞思卡尔小车控制程序清单 2022 年飞思 卡尔 小车 控制程序 清单
限制150内