智能小车的直流电机控制
- 格式:doc
- 大小:167.00 KB
- 文档页数:7
智能小车实验报告智能小车实验报告实验目的:掌握基本的电路连接方法,熟悉智能小车的组装方法,并能通过编程控制小车的运动。
实验器材:硬件:arduino开发板、直流电机、电池盒、轮胎、线材软件:Arduino IDE实验过程:1. 将直流电机连接到arduino开发板上,其中电机的正极连接至arduino开发板的13号引脚,负极连接至地(GND)引脚。
2. 将arduino开发板连接到电脑上,并在Arduino IDE中编写程序。
通过arduino开发板的13号引脚,控制电机的正反转,实现小车的前进和后退。
3. 将arduino开发板和直流电机连接至电池盒,通过电池盒为智能小车供电。
4. 完成以上步骤后,进行小车的组装工作。
将直流电机安装在小车轮胎上,确保轮胎能够自由旋转,并将轮胎连接至arduino开发板。
5. 验证智能小车的运动情况。
在Arduino IDE中,编写程序,通过13号引脚实现小车的前进和后退运动。
6. 对小车进行优化。
例如,增加超声波传感器,通过测量距离实时控制小车的运动方向和速度。
实验结果:经过以上步骤,我们成功搭建了智能小车,并通过编程控制其运动。
小车能够前进和后退。
在进行测试时,我们发现小车的运动速度较慢,且操作不够灵活。
因此,我们对小车进行了优化,增加了超声波传感器,通过测量距离来控制小车的运动方向和速度。
优化后的小车表现更好,运动更加灵活。
在遇到障碍物时,小车能够及时停下或改变方向,避免碰撞。
实验总结:通过本次实验,我们掌握了基本的电路连接方法,熟悉了智能小车的组装方法,并能通过编程控制小车的运动。
在实验的过程中,我们不仅学习到了硬件的组装和接线方法,还通过编程实现了小车的运动控制。
通过不断的实践和优化,我们不仅提高了对电路和编程知识的掌握程度,还培养了创新和解决问题的能力。
这对我们今后的学习和工作具有很大的帮助。
RAYW永磁无刷(直流无刷)电机控制器西安仁安电控技术有限公司科技改善生活绿色开创未来
永磁无刷控制系统特点:
控制核心采用高性能DSP处理器,功率部件采用进口汽车级MOS管;
先进高效的矢量控制算法和智能控制技术;
功率部件采用贴片工艺,具有优异的散热结构设计和温度监控功能,大大提高了控制器的高温环境适应能力;
可靠完善的过热过流保护功能,采用独创的热量积算限流算法,确保运行可靠;
可调的加减速曲线,可灵活、快速调整至舒适的加减速性能;
电流再生刹车,能量回收,续航里程更长;
通过可编程操作面板可灵活调节参数,匹配不同厂家的电机;
传感器接口可适配多种位置传感器(霍尔旋转编码器、霍尔传感器、光编码器等);
具有上电自检和运行状态监测功能。
无论在启动还是运行过程中,如果异常,控制器立即停止输出,对操作者和车辆进行全面保护;
车辆启动时,控制器检测脚踏板输入信号,如果异常,将触发控制器保护功能(HPD),控制器禁止输出,防止启动时飞车。
内置电量表对电池电量进行测量。
可通过编程器设置降额电池电压、最低电池电压,电池电量不足时,限制车辆运行速度,提示用户及时充电;
支持CAN总线(可选);
控制器总成主接触器的驱动电路采用PWM软开关技术,吸合时间、吸合电压、保持电压等相关参数可根据负载特性调节,增加外围部件的使用寿命和可靠性;
针对整车的安全操作保护,如加速器低端检测、加速器位置开关检测等可选的保护功能;
支持客户定制设计;。
第一节智能小车电机驱动原理一、驱动板概述驱动板由大功率驱动芯片L298为主,加上L1117稳压芯片为整个电路板提供稳定的5V电压;驱动板能同时驱动两个直流电机;通过对六个口的控制就可以分别实现对电机正反转、加减速的控制;完成向前、向后、左转和右转等各种组合运动;每个电机用三个口控制,一个使能端EN或PWM输入端,控制电机的转动与停止,也能用于PWM控制调速;也就说,对这个输入端输入一定频率的脉冲,当为高电平时,电机转动,为低电平时,电机停止转动;一定频率的脉冲,电机一段时间内转动一段时间内停止转动,但由于直流电机的惯性特性,它不会立即停下来,只要频率高于某个值,就不会感觉到电机的停滞现象,反而是一种很连续的运动;只要改变一个周期内高低电平的时间比例,就可以改变电机的速度;另外两个输入端是为了控制方向,分别为In1和In2;In1为高电平,In2为低电平,电机按一个方向转,In1为低电平,In2为高电平,电机向相反方向转,如果他们同时为高电平或低电平,那么电机不转;二、驱动板电路原理那我们首先分析一下L298驱动板,L298驱动板原理图如图1;该驱动板需要用7.2V电源供电,但L298N的逻辑参考电平为典型的TTL电平;用了一个L1117稳压芯片提供稳定的5V输出电压和逻辑参考电压,D9、D10、D11和D12是发光二极管,指示运动方向,与它们连接的电阻都是限流电阻;R5和R8都是下拉电阻,让EnA和EnB口要么是高电平,要么是低电平,避免出现电平混乱,提高对输入信号的抗干扰能力;输出端都接有0.1uF电容,加上二极管平衡电路;他们都是为了保护L298N,电机是感性负载,当给电机突然通电与断电,因为电流的瞬变,电机两端会产生瞬时高压和大电流;如果没有保护措施,L298N就可能会被烧毁;三、恒压恒流桥式2A驱动芯片L298NL298N驱动芯片是由SGS公司的产品,比较常见的15脚Multiwatt封装,内部有4通道逻辑驱动电路;它的内部结构如图1;从内部结构图可知,用三极管组成H型平衡桥,驱动功率大,驱动能力强;同时H型PWM电路工作在晶体管的饱和状态与截止状态,具有非常高的效率;从图2看出该驱动芯片有两路H型PWM电路,上面已谈到用PWM控制直流电机调速的基本原理,现在来看电路的具体实现;In1为高电平,In2为低电平,EnA为高电平时,U1、U4输出为高电平,U2、U3输出为低电平;在OUT1、OUT2接上电机后,T1、T4管导通,T2、T3管截止,电机向一个方向转;In1为低电平,In2为高电平,EnA仍旧为高电平,T1、T4管截止,T2、T3管导通,电机向相反方向转;In1、In2同时为高电平或低电平,T1与T3同时导通或截止,T2与T4也是同时导通与截止,但与前者相反,也就是OUT1与OUT2电压相同;电机会快速停转;如果EnA端为低电平,整个H型PWM电路关闭;电机当然也就不会转;四、驱动板连线:驱动板与单片机和驱动板与直流电机的接线如图3,整个系统的总电源由L298驱动板的供电电源提供;L298驱动板的5V电源输出给单片机;L298驱动板的输入控制端与P0口相连,具体各管脚的连接的情况如图3;L298驱动板的输出直接与直流电机连接,参照图3;L298驱动板的有一个VCC和GND不用;他们是使用步进电机时,作为公共端的;要实现对电机的前后控制,只要P0^0和P0^1逻辑电平相反;假设P0^0为高,P0^1为低时是正转;那么在颠倒送数,即P0^0为低,P0^1为高,车轮就会反转;调速,控制P0^2口的高电平保持时间相对总周期长点,速度就大,短点,速度就小;图3驱动板连线图。
STM32 直流减速电机控制(来自网络,特别推荐)直流减速电机控制中,最常用的方法就是通过PWM来控制直流电机的转速。
在控制小车走直线的过程中,需要两者的转速一置(如果要走得很直,还需要在短时间内保证两者的行程大致相当,这可以用PID算法来控制,以后的文章中会专门叙述)。
因此,在检测到两者转速不一样时,需要动态调整其中一个或两个轮子的PWM的点空比(简单点的就以一个轮为基准,调整另外一个轮子即可;如果以一个固定的标准的话,需要调整两个轮子的PWM占空比)。
程序第一步:设置GPIO,略(输出PWM的管脚用Mode_AF_PP即可)程序第二步:设置定时器,(保证产生两路PWM即可,我用的是TIM4)void TIM4_Configuration(void){TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;TIM_OCInitTypeDef TIM_OCInitStructure;//时间基初始化TIM_TimeBaseInitStructure.TIM_Period=144; //18K/144=125Hz,这个是电机PWM的频率TIM_TimeBaseInitStructure.TIM_Prescaler=4000; //72000000/4000=18KTIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;TIM_TimeBaseInitStructure.TIM_RepetitionCounter=0x0000;TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStructure);//输出比较模式设置,用于4路PWM输出TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2; //输出PWMTIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable; //使能正向通道TIM_OCInitStructure.TIM_OutputNState=TIM_OutputState_Disable; //失能反向通道TIM_OCInitStructure.TIM_Pulse=PWM_L; //左轮DIR的占空比TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low; //输出极性为低电平TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCPolarity_High;//互补输出极性为高电平TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Set;TIM_OCInitStructure.TIM_OCNIdleState=TIM_OCNIdleState_Reset;TIM_OC1Init(TIM4,&TIM_OCInitStructure); //PWM_L初始化TIM_OC1PreloadConfig(TIM4,TIM_OCPreload_Disable); //改变点空比后,立即产生效应TIM_OCInitStructure.TIM_Pulse=PWM_R; //左轮PWM的占空比TIM_OC2Init(TIM4,&TIM_OCInitStructure); //PWM_R初始化TIM_OC2PreloadConfig(TIM4,TIM_OCPreload_Disable); //改变点空比后,立即产生效应//使能定时器4TIM_Cmd(TIM4,ENABLE);TIM_CtrlPWMOutputs(TIM4,ENABLE);}程序第三步:在SysTick中断中,读取两个轮子的速(具体的方法是:每0.1秒读一次,并以此人作为速度的依据),并比较,如果以右轮为基准,则调整左轮的PWM占空比。
L298N模块介绍L298N是专用驱动集成电路,属于H桥集成电路,与L293D的差别是其输出电流增大,功率增强。
其输出电流为2A,最高电流4A,最高工作电压50V,可以驱动感性负载,如大功率直流电机,(二相、三相、四相)步进电机,伺服电机,电磁阀等,特别是其输入端可以与单片机直接相联,从而很方便地受单片机控制。
当驱动直流电机时,可以直接控制两路电机,并可以实现电机正转与反转,实现此功能只需改变输入端的逻辑电平。
本模块具有体积小,控制方便的特点。
采用此模块定会使您的电机控制自如,可以应对需要大功率直流电机的题目。
直流电机使用说明:板上的EN1与EN2为高电平时有效,只有当EN1与EN2为高电平时,电机才旋转,否则电机不转,这里的电平指的是TTL电平。
EN1为IN1和IN2的使能端,EN2为IN3和IN4的使能端。
当EN1=1,IN1=1 INT2=0时电机1正转,EN1=1,IN1=0 IN2=1电机1反转。
同理,当EN2=1,IN3=1 IN4=0电机2正转,EN2=1,IN3=0 IN4=1电机2反转。
A-、B-接电机1,C-、D-接电机2。
步进电机使用说明:板上的EN1与EN2为高电平时有效,这里的电平指的是TTL电平。
EN1为IN1和IN2的使能端,EN2为IN3和IN4的使能端。
步进电机控制逻辑如下所示,其中A-、B-、C-、D-为步进电机的四个线圈,(以四相步进电机为例)。
L298N是SGS公司的产品,内部包含二个H桥的高电压大电流桥式驱动器,接收标准TTL逻辑电平信号,可驱动46伏、2安培以下的电机,工作温度范围从-25度到130度。
其内部的一个H桥原理图如图1所示。
EnA是控制使能端,控制OUTl和OUT2之间电机的停转, IN1、IN2脚接入控制电平,控制OUTl和OUT2之间电机的转向。
当使能端EnA有效,IN1为低电平IN2为高电平时,三极管2,3导通,1,4截止,电机反转。
摘要电动小车最重要的配件是电机,一辆电动小车的电机基本决定了这辆车的性能和档次。
目前电动小车所使用的电机大都是高效稀土永磁电机,其中主要又分高速有刷+齿轮减速电机、低速有刷电机和低速无刷电机三种。
本文针对无刷电机在现在电动小车中的应用,介绍了一种无刷电机的控制方法。
根据电动小车要求启动快、制动快、工作过程要求转速稳定等特点,设计了带有转速、电流双闭环的调速系统,以PI调节器为转速调节器,电流调节器也用PI调节器,以TL494为PWM脉冲产生芯片,经过综合逻辑电路加上位置反馈信号,由IR2130驱动电机的功率开关。
主要内容包括PWM生成电路和功率开关器件、综合逻辑电路的选择,以及驱动电路保护电路的设计等。
关键词:电动小车;无刷直流电机;PWM调速AbstractThe most important part of an Electric trolley is motor.It basicly decides its performance and level. At present,Electric trolleys are mostly using efficient rare earth permanent magnet as their motors, which also could be divided into three types as High speed brush+gear reduction motors,low speed brush motors and low speedIVbrushless motors. This paper aim at the Brushless DC Motor be applied in Electric trolleys, introduce a new control method of BLDC. Based on Electric trolleys’ characteristic, such as start-up rapidness, brake rapidness, work process rotate speed level off and so on, design one system with speed and current adjuster, the speed adjuster is PID and the current adjuster is PI , use the TL494 chip generate PWM pulse , pass the synthesis logic circuit and the feedback of rotor’s location through IR2130 drive the power switch . Mostly content consist of PWM generate circuit , synthesis logic circuit, power switch and drive circuit and so on .Key words: Electric trolley;brushless DC motor;modulate velocity by PWM目录摘要.......................................................................................................................... I V Abstract ........................................................................................................................ I V 目录 (V)2电动小车及电机的工作特点 (2)2.1电动小车的工作特点分析及电机选择 (2)2.2无刷直流电机的介绍、结构及工作原理 (2)V2.2.1直流无刷电机的介绍 (2)2.2.2直流无刷电机的结构原理框图 (3)2.2.3 直流无刷电机的控制原理 (3)2.3 控制方案 (5)3控制系统设计 (6)3.1调节器选择及动态参数设计 (6)3.1.1电流调节器的设计 (6)3.1.2转速调节器的设计 (9)3.2位置检测 (11)3.2.1位置间接检测原理 (12)3.2.2位置检测电路 (13)3.3转速检测 (14)3.4 转速调节器 (16)4 系统电路图 (17)4.1 PWM生成电路及电流调节器 (17)4.2综合逻辑电路 (19)4.3驱动电路 (20)4.4 各相导通信号产生电路 (23)4.5 系统整体电路图 (24)4.6系统的工作原理 (27)5 结论和展望 (28)致谢 (29)参考文献 (30)附录 (31)VI电动小车中无刷直流电机的控制系统1 绪论从1995年清华大学研制的第一台轻型电动车问世,到现在林林总总的电动车系列产品,过去的十五年中,中国电动小车事业从无到有,再发展成为目前全球最大的轻型电动车产业。
智能小车的直流电机控制作者:本站来源:转载发布时间:2009-3-6 20:21:41 [收藏] [评论]智能小车的直流电机控制【实验目的】了解以单片机为核心的直流电机控制系统掌握此系统中直流电机驱动与调速原理熟悉ICCAVR 软件编译环境,会编写控制程序【实验器材】智能小车一部,下载线一根【实验原理】直流电机驱动控制系统示意图:在本实验中所分析的是以单片机ATMEGA8515L 为核心的直流电机控制系统。
ATMEGA8515L 芯片的引脚图如下:功放驱动电路采用基于双极性H-桥型脉宽调整方式PWM 的集成电路L293D。
L293D是单块集成电路,高电压,高电流,四通道驱动,设计用来接受DTL 或者TTL 逻辑电平,驱动感性负载(比如继电器,直流和步近马达),和开关电源晶体管。
其引脚图如下:ATMEGA8515L 利用I/O 口(PD5,PE2,PD4,PD6)向驱动电路输出控制电平,这些I/O 口作为单片机控制指令的输出,连接到驱动电路中L293D 的相应管脚上。
其真值表如下:对于电机的转速调整,我们是采用脉宽调制(PWM)办法,控制电机的时候,电源并非连续地向电机供电,而是在一个特定的频率下以方波脉冲的形式提供电能。
不同占空比的方波信号能对电机起到调速作用,这是因为电机实际上是一个大电感,它有阻碍输入电流和电压突变的能力,因此脉冲输入信号被平均分配到作用时间上,这样,改变在始能端PE2 和PD5 上输入方波的占空比就能改变加在电机两端的电压大小,从而改变了转速。
此实验中用微处理机来实现脉宽调制,通常的方法有两种:(1)用软件方式来实现,即通过执行软件延时循环程序交替改变端口某个二进制位输出逻辑状态来产生脉宽调制信号,设置不同的延时时间得到不同的占空比。
(2)硬件电路自动产生PWM 信号,不占用CPU 处理的时间。
这就要用到ATMEGA8515L 的在PWM 模式下的计数器1,具体内容可参考相关书籍。
【实验步骤】(1)连接好电路,把数据线,下载线连接好,打开电源(2)进入ICCAVR 编译环境,调试程序直至没有错误,编译环境简介请参见附录一(3)下载,烧录进单片机,观察实验结果(4)反复修改调试程序,逐渐增强其功能(5)写好实验报告,实验心得体会【程序示例】1、小车前进一段——>左转一圈——>右转一圈——>前进一段——>后退一段——>停下//ICC-AVR application builder : 2005-5-19 19:12:13// Target : M8515// Crystal: 4.0000Mhz#include <iom8515v.h>#include <macros.h>unsigned int time;unsigned int yan;void port_init(void){PORTA = 0x00;DDRA = 0xFF;PORTB = 0x00;DDRB = 0x00;PORTC = 0x00;DDRC = 0x00;PORTD = 0x00;DDRD = 0xFF;PORTE = 0x00;DDRE = 0xFF;}//call this routine to initialize all peripheralsvoid init_devices(void)//stop errant interrupts until set up CLI(); //disable all interruptsport_init();MCUCR = 0x00;EMCUCR =0x00;GICR = 0x00;TIMSK = 0x00;SEI(); //re-enable interrupts//all peripherals are now initialized}void delay(unsigned int yan){while(yan>0)yan--;}void runforth(void){while(time<1000){PORTE=0x04;PORTD=0x70;delay(2000);time++;}time=0;}void zuozhuanwan(void){while(time<1000){PORTE=0x00;PORTD=0X70;delay(2000);time++;}time=0;}void youzhuanwan(void){while(time<1000){PORTE=0x04;PORTD=0x50;delay(2000);time++;time=0;}void houtui(void){while(time<1000){PORTE=0x04;PORTD=0x20;delay(2000);time++;}time=0;}void stop(void){PORTE=0x00;PORTD=0x00;}void main(void){ init_devices();time=0;runforth();zuozhuanwan();youzhuanwan();runforth();houtui();stop();}2、调速程序以下是用两定时器来控制加在两方向控制口的方波占空比,以此来对电机进行调速,而同学们可以利用对两始能端高低电平进行不同延时来实现调速功能。
//ICC-AVR application builder : 2005-5-18 16:45:27// Target : M8515// Crystal: 4.0000Mhz#include <iom8515v.h>#include <macros.h>unsigned char a;unsigned char p;unsigned char m;unsigned char n;void port_init(void){PORTA = 0x00;DDRA = 0x00;DDRB = 0x00;PORTC = 0x00;DDRC = 0x00;PORTD = 0x00;DDRD = 0x70;PORTE = 0x00;DDRE = 0x04;}//TIMER0 initialize - prescale:64// WGM: Normal// desired value: 40Hz// actual value: Out of rangevoid timer0_init(void){TCCR0 = 0x00; //stop timerTCNT0 = 0xfa /*INVALID SETTING*/; //set count valueTCCR0 = 0x03; //start timer}#pragma interrupt_handler timer0_ovf_isr:8void timer0_ovf_isr(void){TCNT0 = 0xfa /*INVALID SETTING*/; //reload counter valueif(m==a){PORTD=0x70;TCCR1B=0x03;TCCR0=0x00;n=1;}else{m++;}}//TIMER1 initialize - prescale:64// WGM: 0) Normal, TOP=0xFFFF// desired value: 40Hz// actual value: 40.013Hz (0.0%)void timer1_init(void){TCCR1B = 0x00; //stopTCNT1H = 0xff; //setupTCNT1L = 0xfa;OCR1AH = 0x06;OCR1AL = 0x1A;OCR1BH = 0x06;OCR1BL = 0x1A;TCCR1A = 0x00;}#pragma interrupt_handler timer1_ovf_isr:7 void timer1_ovf_isr(void){TCNT1H = 0xff; //reload counter high value TCNT1L = 0xfa; //reload counter low valueif(n==250-a){PORTD=0x20;TCCR0=0x03;TCCR1B=0x00;m=1;if(p==0){if(a==125){p=1;}else{a++;}}else{{if(a==1){p=0;}else{a--;}}}}else{n++;}}//call this routine to initialize all peripherals void init_devices(void){//stop errant interrupts until set upCLI(); //disable all interruptsport_init();timer0_init();timer1_init();MCUCR = 0x00;EMCUCR = 0x00;GICR = 0x00;TIMSK = 0x82;SEI(); //re-enable interrupts//all peripherals are now initialized}void main(void){a=0;p=0;m=1;n=1;init_devices();while(1){PORTE=0x04;}}。