智能小车速度控制程序
- 格式:doc
- 大小:26.00 KB
- 文档页数:10
智能小车速度测量控制系统设计1.引言在现代工业和交通领域,智能小车被广泛应用于自动化物流、智能仓储以及移动机器人等场景。
为了保证智能小车的正常运行和安全性,速度测量和控制是至关重要的一环。
本文将重点介绍智能小车速度测量控制系统的设计原则和实现方法。
2.设计原则2.1精度和稳定性智能小车速度的精确测量和控制是保证小车运行安全和稳定的基础。
因此,在设计速度测量控制系统时,应优先考虑精度和稳定性的要求。
为了提高精度,可以采用高精度的传感器来测量小车的实时速度;为了提高稳定性,可以采用滤波算法对速度信号进行平滑处理。
2.2实时性和响应性智能小车的速度测量和控制必须具备良好的实时性和响应性。
实时性是指系统能够及时获得小车的速度信息,响应性是指系统能够迅速对速度变化作出调整。
在设计时,可以采用高频率的采样和控制周期来提高实时性和响应性。
2.3可扩展性和灵活性智能小车的需求和环境可能发生变化,因此,速度测量控制系统必须具备良好的可扩展性和灵活性。
可扩展性是指系统能够方便地扩展和添加新的功能;灵活性是指系统能够适应不同的小车和场景。
在设计时,可以采用模块化和接口化的设计方法,并使用可编程的控制器,以便系统可以方便地进行功能升级和扩展。
3.系统组成3.1速度传感器智能小车的速度测量需要使用速度传感器。
常用的速度传感器包括编码器和激光测距仪。
编码器可以通过检测轮轴的旋转来测量速度,激光测距仪可以通过测量激光到达和返回的时间来计算速度。
在选择速度传感器时,需要根据具体的应用场景和要求来确定。
3.2控制器智能小车的速度控制可以使用PID控制器或者模糊控制器。
PID控制器是一种经典的控制方法,通过调节比例、积分和微分参数来实现控制;模糊控制器则是一种基于模糊逻辑的控制方法,通过对输入和输出之间的关系进行模糊化和解模糊化来实现控制。
在选择控制器时,需要根据系统要求和控制效果来确定。
3.3控制算法智能小车的速度控制需要使用合适的控制算法。
基于单片机的多功能智能小车设计论文(摘要(关键词:智能车单片机金属感应器霍尔元件 1602LCD)智能作为现代的新发明,是以后的发展方向,他可以按照预先设定的模式在一个环境里自动的运作,不需要人为的管理,可应用于科学勘探等等的用途。
智能电动车就是其中的一个体现。
本次设计的简易智能电动车,采用AT89S52单片机作为小车的检测和控制核心;采用金属感应器TL-Q5MC来检测路上感应到的铁片,从而把反馈到的信号送单片机,使单片机按照预定的工作模式控制小车在各区域按预定的速度行驶,并且单片机选择的工作模式不同也可控制小车顺着S形铁片行驶;采用霍尔元件A44E检测小车行驶速度;采用1602LCD实时显示小车行驶的时间,小车停止行驶后,轮流显示小车行驶时间、行驶距离、平均速度以及各速度区行驶的时间。
本设计结构简单,较容易实现,但具有高度的智能化、人性化,一定程度体现了智能。
目录1 设计任务 (3)1.1 要求 (3)2 方案比较与选择 (4)2.1路面检测模块 (4)2.2 LCD显示模块 (5)2.3测速模块 (5)2.4控速模块 (6)2.5模式选择模块 (7)3 程序框图 (7)4 系统的具体设计与实现 (9)4.1路面检测模块 (9)4.2 LCD显示模块 (9)4.3测速模块 (9)4.4控速模块 (9)4.5复位电路模块 (9)4.6模式选择模块 (9)5 最小系统图 (10)6 最终PCB板图 (12)7 系统程序 (13)8 致谢 (46)9 参考文献 (47)10 附录 (48)1. 设计任务:设计并制作了一个智能电动车,其行驶路线满足所需的要求。
1.1 要求:1.1.1 基本要求:(1)分区控制:如(图1)所示:(图1)车辆从起跑线出发(出发前,车体不得超出起跑线)。
在第一个路程C~D区(3~6米)以低速行驶,通过时间不低于10s;第二个路程D~E区(2米)以高速行驶,通过时间不得多于4秒;第三个路程E~F区(3~6米)以低速行驶,通过时间不低于10s。
关键词:智能小车;控制系统;设计和实现1智能小车控制系统概述智能小车控制系统是一个综合、复杂的系统,其既有多种技术,也含有嵌入式的软件设备和硬件设备、图像识别、自动控制和电力传动、机械结构等技术知识,智能小车的控制系统主要是围绕嵌入式控制系统进行的,将其作为操控的中心,并借助计算机系统,最终完成自动造作和控制的过程[1]。
智能小车的控制系统流程图见图1所示。
2智能小车的设计和实现2.1智能小车的硬件设计硬件设计是保证智能小车平稳运行的必要条件,它关系着控制系统的精度和稳定性,因此在设计时需要用在模块化设计思想,该研究是通过采取硬件系统K60芯片作为核心控制器,并通过图像采集模块和电机、舵机驱动模块、测速模块、电源模块等组成硬件设计系统图,见图2。
首先,电源电路设计,该设计时智能小车的动力来源,为小车运行提供不断的电力,一般采取7.3V、容量为2000mAh的可充电型的镍铬电池作为电源,但是其不能直接为控制器传输电力,需要在转变电路后才可以进行传输。
转变电路可以保证控制器直接对电池内的电压进行调节,保证不同模块可以正常工作和运行,智能小车主要是依靠控制电力和电机驱动进行转变的。
其次是K60最小系统板,在设计时需要将K60的管脚部分做成最小系统的单独电路板,这样可以简化电路板的设计,促使调试更加顺利,K60系统板主要由K60芯片、复位电路、时钟电路、JTAG下载电路、电源滤波电路组成。
再其次是电机驱动电路,该电路是在集成芯片的驱动下进行的,可以为控制器更其他模块提供较大的电流最终集成电机驱动芯片,但是要特别注意这部分因为在电机驱动过程中有较大的分功率,会导致小车在进行调试时因为过大的电流导致小车电路发生堵塞现象,而使小车电路被烧毁,因此需要设计者避免这种现象,可以将驱动电路做成驱动板[2]。
最后是舵机接口电路。
在智能小车设计中,舵机主要保证小车可以顺利转向,因此舵机的运行电压、转向动作、转向速度都是需要考虑的因素,一般选择舵机时主要选择Futaba3010,选择供电电压为6V。
//智能小车避障、循迹、红外遥控 C 语言代码// 实现功能有超声波避障, 红外遥控智能小车, 红外传感器实现小车自动循迹, 1602 显示小 车的工作状态,另有三个独立按键分别控制三种状态的转换 // 注:每个小车的引脚配置都不一样,要注意引脚的配置,但是我的代码注释比较多,看起 来比较容易一点 #include <> #include <> #include"" #include <> #define uchar unsigned char #define uint unsigned int uchar ENCHAR_PuZh1[8]=" uchar ENCHAR_PuZh2[8]=" uchar ENCHAR_PuZh3[8]=" ucharENCHAR_PuZh4[8]=" uchar ENCHAR_PuZh5[8]=" run back stop left right "; ";//1602 显示数组 H. H. H. uchar ENCHAR_PuZh6[8]=" xunji "; uchar ENCHAR_PuZh7[8]=" bizhang"; uchar ENCHAR_PuZh8[8]=" yaokong"; #define HW P2 #define PWM /****************************** P1 //红外传感器引脚配置 P2k 口 /* L298N 管脚定义 */ 超声波引脚控制 ******************************/ sbit ECHO=P3A2; sbit TRIG=P3A3;///// 红外控制引脚配置 sbit sbituchar KEY2=P3A7; KEY 仁 P3M;state_total=3,state_2=0;// 2 为红外遥控 ucharuchar time_1 uchar 局变量 // 超声波接收引脚定义 // 超声波发送引脚定义// 红外接收器数据线 // 独立按键控制 总状态控制全局变量 state_1,DAT; // 红外扫描标志位time_1=0,time_2=0;// 定时器 1 中断全局变量 控制转弯延时计数也做延时一次 time,timeH,timeL,state=0;// 超声波测量缓冲变量 count=0;//1602 显示计数 兼红外遥控按键 state_total =2 兼循迹按键 state_total= 0 自动避障 state_total=10 为自动循迹模块 1 为自动避障模块 time_ 2 控制 PWM 脉冲计数 state 为超声波状态检测控制全 uint /**************************/ unsigned char IRC0M[7]; // 红外接收头接收数据缓存 unsigned char Number,distance[4],date_data[8]={0,0,0,0,0,0,0,0}; /********* voidvoid voidIRC0M[2 ]存放的为数据 // 红外接收缓存变量 **/ IRdelay(char x); //x* 红外头专用 delay run(); back();void stop(); void left_90(); void left_180(); void right_90(); void delay(uint dat); //void init_test();void delay_100ms(uint ms) ;void display(uchar temp); void bizhang_test(); void xunji_test(); void hongwai_test();void Delay10ms(void);void init_test()// 定时器 0{ 1 外部中断 // 超声波显示 驱动 0 1 延时初始化 TMOD=0x11; TH1=0Xfe; TL1=0x0c; TF0=0; TF1=0; ET0=1; ET1=1; EA=1;// 设置定时器 0 1 // 装入初值定时一次为工作方式 1 16 位初值定时器2000hz// 定时器 // 定时器 // 允许定时器// 允许定时器 0 方式 1 计数溢出标志 1 方式 1 计数溢出标志 0 中断溢出 1 中断溢出//开总中断 if(state_total==1)// 为超声波模块时初始化 {TRIG=0; ECHO=0; EX0=0; IT0=1;}if(state_total==2)// 发射引脚低电平 // 接收引脚低电平 // 关闭外部中断// 由高电平变低电平,触发外部中断 0// 红外遥控初始化{ IT1=1; EX1=1;TRIG=1;}del ay(60);} void main(){ uint i; delay(50); init_test(); TR1=1; LCD1602_Init() ; delay(50); while(state_2==0)// 外部中断 1 为负跳变触发 // 允许外部中断 1 // 为高电平 I/O 口初始化// 等待硬件操作// 开启定时器 1{if(KEY1==0){Delay10ms(); // 消除抖动 if(KEY1==0) {state_total=0; // 总状态定义 0 为自动循迹模块 1 为自动避障模块2 为红外遥控while((i<30)&&(KEY1==0))// 检测按键是否松开{Delay10ms(); i++;}i=0;}}if(TRIG==0){while((i<30)&&(TRIG==0))// 检测按键是否松开{Delay10ms(); i++;}i=0;}if(KEY2==0){while((i<30)&&(KEY2==0))// 检测按键是否松开{Delay10ms(); i++; }i=0;// 检测按键 s1 是否按下//检测按键s2是否按下障模块Delay10ms(); // 消除抖动 if(TRIG==0) {state_total=1; 2 为红外遥控//总状态定义 0 为自动循迹模块 1 为自动避// 检测按键 s3 是否按下障模块Delay10ms(); // 消除抖动 if(KEY2==0) {state_total=2; 2 为红外遥控// 总状态定义 0 为自动循迹模块1 为自动避}}} init_test();delay(50); // 等待硬件操作50us TR1=0; // 关闭定时器 1 if(state_total==1) {//SPEED=90; bizhang_test();} if(state_total==0) {// SPEED=98; 电平// 自动循迹速度控制// 自动循迹速度控制高电平持续次数占空比为10 的低电平高电平持续次数占空比为40 的低xunji_test(); }if(state_total== 2){//SPEED=98; // 自动循迹速度控制高电平持续次数占空比为40 的低电平hongwai_test(); }void 断号init0_suspend(void)2 外部中断0 4 串口中断外部中断 1timeH=TH0;timeL=TL0;state=1;EX0=0;}void 断号0{if(state_total==1) { TH0=0X00;TL0=0x00;}if(state_total==0) { TH0=0Xec;TL0=0x78;time_1++;interrupt 0 //3 为定时器 1 的中断号 1 定时器0 的中// 记录高电平次数//// 标志状态为// 关闭外部中断1,表示已接收到返回信号//3 为定时器 1 的中断号2 外部中断0 4 串口中断time0_suspend0(void) interrupt 1外部中断 1// 自动避障初值装入// 装入初值// 自动循迹初值装入// 装入初值定时一次200hz// 控制转弯延时计数1 定时器0 的中}}void IR_IN(void){unsigned char j,k,N=0;EX1 = 0; IRdelay(5); if (TRIG==1) { EX1 =1; return;}//确认IR 信号出现//等IR 变为高电平,跳过 9ms 的前导低电平信号。
/***********************************************************************************************///////////////////////////////////////////////////////////////////////////////////////////////////////////////遥控智能小车,可以实现的功能有:遥控前进后退,停止,二档速度切换1,2,微左转,微右转,大左转,大右转, ////同时伴随转向灯闪烁,实现简单的发动机声音和喇叭声,还有刹车声,引擎声,后退警报,开启发动声,////小车发动时会伴随一次发动机发动声音,可以鸣笛,高速时和低速时伴随的引擎声不同,刹车时有短暂的刹车声音////后退时有后退警报声。
////避障方面,左前或右前有障碍物时会右转或左转,当两边都有障碍物时会右转后退再左转前进////同时如果之前为高速会自动变为低速,直到没有障碍物。
////有前进避障功能////////声音控制模式:开启声,脉冲不可重复触发;大小引擎声,电平保持可循环;刹车声,脉冲不可重复触发;//// 倒车警报,电平保持可循环//////////////////////////////////////////////////////////////////////////////////////////////////////////////#include<reg52.h>#define uint unsigned int#define uchar unsigned charbit EN=P2^0; //速度使能pwm控制bit pwm_direction=P2^3; //方向pwm控制bit INA=P2^1;bit INB=P2^2; //P2.0为使能口,2.1,2.2为方向控制口bit left_led=P2^4; //左转向灯bit right_led=P2^5; //右转向灯bit soundf; //快速引擎声状态暂存器bit sounds; //慢速引擎声状态暂存器bit v; //速度标志位,0为低速bit brake_sound=P1^0; //刹车声bit bing_sound=P1^1; //鸣笛声bit engine_sound_min=P1^2; //引擎声小bit engine_sound_max=P1^3; //引擎声大bit begin_sound=P1^4; //开启声音uint num0=0; //用于定时器0的计数uint num1=0; //用于定时器1的计数uchar control_num=P0; //遥控接收到的数据uchar deriction_num=0; //控制方向的数据uchar speed_num=0; //控制速度的数据uchar left_led_num=0; //左转向灯控制数uchar right_led_num=0; //右转向灯控制数bit left_led_en=0; //左转向灯使能bit right_led_en=0; //右转向灯使能bit begin_control=0; //开启控制信号bit left_control=P1^5; //左边传感器控制信号bit right_control=P1^6; //右边传感器控制信号/*中断初始化子函数,定时器0控制转向,定时器1控制速度*/ void InitialTimer(void){TMOD |= 0x11; //定时器0,1都用方式1 TH0 = ( 65535 - 500 ) / 256;TL0 = ( 65535 - 500 ) % 256; //定时器0初值0.25msTH1 = ( 65535 - 500 ) / 256;TL1 = ( 65535 - 500 ) % 256; //定时器1初值0.25msEA=1; //开总中断ET0=1; //允许定时0 中断ET1=1; //允许定时1 中断TR0=1; //启动定时0 中断TR1=1; //启动定时1 中断uchar control_num=0x0f; //关闭P0的无用的口INA=0; //INB=1; //转向默认向前brake_sound=1; //关刹车声bing_sound=1; //关鸣笛声engine_sound_min=1; //关引擎声小engine_sound_max=1; //关引擎声大begin_sound=1; //关开启声音control_num1=control_num;}/*延时函数,单位ms*/void delay(uint x){uint i,j;for{i=x;i>0;i--}for{j=122;j>0;j--};}/*鸣笛函数*/void bing() //脉冲可重复触发{soundf=fast_sound;sounds=slow_sound; //提取状态fast_sound=1; //slow_sound=1; //关引擎声delay(1);bing_sound=0; //鸣笛负脉冲delay(50);bing_sound=1;delay(?);fast_sound=soundf;slow_sound=sounds; //归还状态,引擎声依旧}/*前进函数*/void front(){INA=1;INB=0; //电机正转back_sound=1;delay(1);fast_sound=soundf;slow_sound=sounds; //归还状态,引擎声依旧}/*后退函数*/void back(){INA=0;INB=1; //电机反转soundf=fast_sound;sounds=slow_sound; //提取状态fast_sound=1; //slow_sound=1; //关引擎声delay(1);back_sound=0; //开倒退警报电平保持可循环}/*快速函数*/void fast(){speed_num=? //还要改if(back_sound!=0) //如果此时在倒退则不用引擎声{slow_sound=1;delay(1);fast_sound=0; //关小引擎声,开大引擎声}soundf=0;sounds=1; //记住速度声音状态}/*慢速函数*/void slow(){speed_num=? //还要改if(back_sound!=0) //如果此时在倒退则不用引擎声{fast_sound=1;delay(1);slow_sound=0; //关大引擎,开小引擎}soundf=1;sounds=0; //提取状态}/*停止函数*/void stop(){INA=0;INB=0;back_sound=1;delay(1);fast_sound=soundf;slow_sound=sounds; //归还状态,引擎声依旧}/*刹车函数*/void brake(){INA=~INA;INB=~INB; //反转刹车back_sound=1; //关倒车声(如果是倒退时刹车就必须关了)fast_sound=1; //slow_sound=1; //关闭引擎声delay(5);brake_sound=0; //刹车声负脉冲delay(50);brake_sound=1;delay(1000); //延时一段时间达到刹车效果INA=0;INB=0; //停转}/*左微转控制函数*/void left_min(){direction_num=5; //暂时的!!right_led_en=0; //关闭右转向灯使能right_led=0; //关闭右转向灯left_led_en=1; //左转向灯使能开启}/*左大转控制函数*/void left_max(){direction_num=4; //暂时的!right_led_en=0; //关闭右转向使能right_led=0; //关闭右转向灯left_led_en=1; //开启左转向使能}/*直走控制函数*/void straight(){direction_num=6; //暂时right_led_en=0; //关闭右转向使能right_led=0; //关闭右转向灯left_led_en=0; //关闭左转向使能left_led=0; //关闭左转向灯}/*右微转控制函数*/void right_min(){direction_num=7; //暂时的!left_led_en=0; //关闭左转向使能left_led=0; //关闭左转向灯right_led_en=1; //开启右转向使能}/*右大转控制函数*/void right_max(){direction_num=8; //暂时的!left_led_en=0; //关闭左转向使能left_led=0; //关闭左转向灯right_led_en=1; //开启右转向使能}/*定时器0处理(方向)*/void Timer0 ( void ) interrupt 1{TH0 = ( 65535 - 500 ) / 256;TL0 = ( 65535 - 500 ) % 256; //0.5msnum0++;left_led_num++;right_led_num++;if( num0 <=direction_num){pwm_direction = 1;}else{pwm_direction = 0;} //PWM控制舵机转向信号if(left_led_en==1) //左转向灯闪{if(left_led_num>=1000) //0.5秒闪烁一次{left_led=~left_led;left_led_num=0;}}if(right_led_en==1) //右转向灯闪{if(right_led_num>=1000) //0.5s{right_led=~right_led;right_led_num=0;}}if( num0 == 40 ) //周期20ms(理论值),比较可靠,最好不要修改{num0 = 0;}}/*定时器1处理(速度)*/void Timer1 ( void ) interrupt 3{TH0 = ( 65535 - 200 ) / 256;TL0 = ( 65535 - 200 ) % 256;num1++;if(num1<=speed_num){EN=1;}else{EN=0;}if(num1==10) //周期1ms{num1=0;}}/*避障程序*/void bizhang(){if((left_control==0)&&(right_control==1)) //如果左边有障碍物右边没有则右转0.1S{right_max();delay(100);}if((right_control==0)&&(left_control==1)) //如果右边有障碍左边没有则左转0.1S{left_max();delay(100);}if((left_control==0)&&(right_control==0)) //如果两边都有{if(speed_num==?){slow(); //如果此时为高速则变为低速v=0;}back();right_max();delay(500);front();left_max();delay(500);}if((left_control==1)&&(right_control==1)) //两边都没障碍了直走{straight();if(v=0){speed_num=?; //如果避障前为高速则恢复高速v=1;//调整状态标志}}}/*遥控检测函数*/void yaokong(){switch(control_num&0x0f) //遥控器检测{case 0x0?: //前进void front();break;case 0x0?: //后退void back();break;case 0x0?: //高速void fast();break;case 0x0?: //低速void slow();break;case 0x0?: //左大转void left_max();break;case 0x0?: //左微转void left_min();break;case 0x0?: //右大转void right_max();break;case 0x0?: //右微转void right_min();break;case 0x0?: //刹车void brake();break;case 0x0?: //直走void straight();break;case 0x0?: //鸣笛void bing();break;default:break;}}/**********************************************主程序************************************************/void main(){void InitialTimer(void); //初始化while(1) //循环嵌套,主程序在一个大程序里循环,开关,开关地循环{while(1) //关车小循环{if(control_num==?) //还要改//不断检测开启信号break;}begin_sound=0; //开启声音delay(50); //开启声持续时间begin_sound=1; //一个50ms的负脉冲engine_sound_min=0; //开启时小引擎声while(1){if(control_num==?) //关闭信号break;void bizhang(); // 避障检测void yaokong(); //遥控检测}engine_sound_min=1; //关闭时关小引擎声}}。
51单片机智能小车PWM调速前进程序源代码、电路原理图、电路器件表从控制电路角度划分,智能小车电路板分为核心板和驱动板。
核心板上的处理器的芯片型号是:STC15W4K56S4,这是一款51单片机。
驱动板上有电源电路、电机驱动电路以及一些功能模块接口。
智能小车前进只要控制智能小车四个轮子向前转动就可以了。
智能小车四个轮子由四个直流减速电机驱动。
直流减速电机驱动芯片采用L293D,一片电机驱动芯片L293D可以驱动两个直流减速电机,智能小车用到4个直流减速电机,需要用到两片L293D电机驱动芯片。
但有时候我们需要控制智能小车的速度,不希望智能小车全速前进。
比如在“智能小车循迹实验”中,如果智能小车速度过快,来不及反应做出方向的调整,智能小车会很容易跑离轨迹,这样就需要调整控制智能小车的速度了。
那么怎么样实现智能小车前进速度的调节呢?调节智能小车的速度,实际上是调节电机的运转速度,PWM调速是目前电机的主流调速方式。
智能小车采用脉宽调制(PWM)的办法来控制电机的转速,从而控制智能小车的速度。
在此种情况下,电池电源并非连续地向直流电机供电,而是在一个特定的频率下为直流电机提供电能。
不同占空比的方波信号,调节对直流电机的通断电,能起到对直流电机调速作用。
这是因为电机实际上是一个大电感,它有阻碍输入电流和电压突变的能力,因此脉冲输入信号被平均分配到作用时间上。
这样,改变L293D使能端EN1和EN2上输入方波的占空比就能改变加在电机两端的电压大小,从而改变了直流电机转速。
智能小车PWM调速前进程序如下:首先,定义了2个变量,这2个变量用于设置智能小车的速度。
unsigned char pwmval_left_init=6; //调节此值可以调节小车的速度。
unsigned char pwmval_right_init=6; //调节此值可以调节小车的速度。
通过以下函数初始化定时器0,每1毫秒中断一次。
void Timer0_Init(void) //定时器0初始化{TMOD=0x01;TH0=0xf8;TL0=0xcd;TR0=1;ET0=1;EA=1;}下面我们看定时器0的中断处理函数。
51单片机智能小车顶顶电子设计的这款简易智能小车,采用STC89C51/52单片机作为小车的检测和控制核心;采用光电开关、声控传感器、光敏传感器、温度传感器、红外接收器等来检测和感应各种外界情况,从而把反馈到的信号送单片机,使单片机按照预定的工作模式控制小车在各区域按预定的速度行驶;智能小车既可以采用LED数码管来显示有关信息,也可以采用1602LCD实时显示小车行驶的距离。
机器小车主要由底盘(含2个带电机的驱动轮、2个从动轮,底板)、电路板和6节5号电池盒三部分组成,其正面和底面外形如图所示:下图是51单片机智能小车的电路组成框图:`下图是智能小车中主要元件在小车中的位置实物图:二、产品配置智能小车产品配置如下:1.小车底板1块、车轴插片4片2.车轮4只3.车轴2根,垫片2只,铜螺帽2只》4.带齿轮箱的电机及104电容各2只5.智能小车开发板1块(除DS18B20外,板上集成电路配备完整)6.避障光电传感器1只(TCR T5000)、循迹光电传感器2只(RPR220)、速度光电传感器1只(RPR220)7.双向插头排线4根8.串口线1根)9.红外遥控器1只10.固定电路板与底板的长螺丝、橡皮垫圈各2只节5号电池盒(因电池属易燃易爆物品,故不配送,请自行购买)12.丰富的源程序、电路原理图和操作使用手册(用户购买后,只需要再另外购502胶水(1元左右)、双面胶(1元左右)和6节5号电池(采用普通的华太电池即可,6节约元)即可进行组装与实验了。
需要说明的是,小车的组装非常简单,有关详细的组装方法,我们将在智能小车操作使用手册上,采用图解的形式进行说明。
三、选配件用户购买产品后,可进行小车的基本实验,如果用户想进行一些特殊的实验,需要购买以下产品,说明如下:1.温度传感器DS18B20,价格6元。
链接:配置DS18B20后,可进行温度显示的实验。
液晶显示器,价格16元。
\链接:配置1602液晶显示器后,可进行液晶显示方面的实验。
实验二:树莓派平台-------小车前进实验1、实验前准备图1-1 树莓派主控板图1-2 4个直流减速电机2、实验目的S SH登录树莓派后./运行之后,先延时2s,一直循环前进1s。
3、实验原理对于4路直流减速电机的控制我们采用的是TB6612FNG驱动芯片来驱动电机。
通过控制驱动芯片的AIN1,AIN2,BIN1,BIN2,PWMA,PWMB的电平高低来控制电机的正转,反转,停止。
本次实验主要是控制AIN1为高电平,AIN2为低电平,BIN1为高电平,BIN2为低电平,进而通过控制PWMA,PWMB在0-255之间控制小车的速度。
一路PWM控制小车一侧电机的速度。
4、实验步骤4-1.看懂原理图图4-1 树莓派电路图图4-2 电机驱动芯片TB6612FNG图4-3 树莓派40PIN引脚对照表4-2 由电路原理图可知AIN1,AIN2,PWMA,BIN1,BIN2,PWMB分别接在树莓派主控板上的40,38,36,37,35,33物理引脚上。
AIN1-----40----29(wiringPi编码)AIN2-----38----28(wiringPi编码)PWMA-----36----27(wiringPi编码)BIN1-----37----25(wiringPi编码)BIN2-----35----24(wiringPi编码)PWMB-----33----23(wiringPi编码)图4-4 引脚控制逻辑表4-3 程序代码如下:注:因为树莓派的40pin均可作为普通的GPIO口来使用,想用到PWM,则需要用到wiringPi中的软件PWM库。
可以在任意的树莓派GPIO上输出PWM信号。
使用前需包含相应的头文件:#include <wiringPi.h>#include <softPwm.h>当编译程序时,必须加上pthread库,如下:gcc advance.c -o advance -lwiringPi -lpthread具体详情见树莓派软件与文档文件夹中的wiringPi用户手册!输入:gcc advance.c -o advance -lwiringPi -lpthread ./advance即可看到小车前进的现象。
基于STM32的智能小车课程设计功能模块的划分随着科技的不断发展,智能小车作为一种智能化的机器人设备,已经在教学实验和科研领域得到了广泛的应用。
基于STM32的智能小车课程设计是一门将理论知识与实践相结合的课程,通过对STM32单片机的功能模块进行划分,学生可以在实际操作中深入了解单片机控制原理和应用。
本文将基于STM32的智能小车课程设计功能模块进行详细的划分,以便于教师和学生更好地理解课程的内容与结构。
一、硬件模块的划分1. 控制模块1.1 STM32单片机1.2 驱动电路1.3 传感器接口2. 传感器模块2.1 光电传感器2.2 红外传感器2.3 超声波传感器3. 执行模块3.1 电机驱动3.2 舵机控制3.3 无线通信二、软件模块的划分1. 系统初始化1.1 端口初始化1.2 定时器设置1.3 中断配置2. 运动控制2.1 速度控制2.2 转向控制2.3 路径规划3. 传感器数据处理3.1 传感器数据采集3.2 数据滤波处理3.3 数据解析与显示4. 无线通信4.1 通信协议4.2 信号传输4.3 数据接收与发送三、课程设计模块的划分1. 实验前准备1.1 实验器材准备1.2 软件环境搭建2. 硬件电路设计2.1 控制模块设计2.2 传感器模块设计2.3 执行模块设计3. 软件程序设计3.1 系统初始化编程3.2 运动控制程序设计3.3 传感器数据处理程序设计3.4 无线通信程序设计4. 系统集成测试4.1 硬件连接测试4.2 软件功能测试4.3 整体性能测试基于STM32的智能小车课程设计功能模块的划分,可以帮助学生系统地学习和掌握单片机控制的原理和方法,培养学生的动手能力和创新意识。
教师可以根据功能模块的划分,有针对性地进行教学安排和指导,提高教学效果和学习效率。
基于STM32的智能小车课程设计功能模块的划分,对于促进学生对单片机控制技术的理解和应用具有重要意义,同时也有利于提高教学质量和学术水平的提升。