实验直流电机驱动和编码器脉冲采集_第1页
实验直流电机驱动和编码器脉冲采集_第2页
实验直流电机驱动和编码器脉冲采集_第3页
实验直流电机驱动和编码器脉冲采集_第4页
实验直流电机驱动和编码器脉冲采集_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验直流电机驱动和编码器脉冲采集内容概要学习学习1种种ATmega64资源资源 定时、计数器定时、计数器3演示演示2个实验:个实验:(1)直流电机的驱动、调速)直流电机的驱动、调速(2)上述实验的软件仿真)上述实验的软件仿真自行做自行做3个实验:个实验:(1)直流电机的驱动)直流电机的驱动(2)直流电机的)直流电机的PWM调速调速(3)光电编码器脉冲信号的读取)光电编码器脉冲信号的读取控制什么?控制什么?用到哪些单片机资源?通信模块和和PC通通信信电源模块提供动提供动力力输入输出模块按键控按键控制和状态指示制和状态指示电机驱动模块驾驭驾驭电机电机单片机模块电机控制电机控制让直流电机动起来!M+

2、和M-分别接电源和地,电机就可以转动交换M+和M-,电机就反向转动用L298驱动直流电机用L298驱动直流电机自己动手之一驱动直流电机指令的输入:通过按键指令的输入:通过按键按钮按钮Stop、F.W.、B.W.作为控制按钮作为控制按钮p Stop(PC3,可触发外部中断,可触发外部中断INT5):启动、停:启动、停止止p F.W.、B.W.( PC0、PC1,可触发外部中断,可触发外部中断4):正、反转:正、反转调试灯调试用LED灯,可表示正、反转状态,运行状态等,也可以自定义。电机控制电机控制I/OPB4、PB5与与L298的输入引脚相连的输入引脚相连注意:小心滑块撞到支架!注意:小心滑块撞

3、到支架!操作说明进行电机实验前,确保各接口连接好后,再打开电源。在使用电机模块时,先打开电源开关,再打开L298使能开关;关闭时,先关闭L298使能开关,再关闭电源开关。L298使能开关电源开关中断方式的设定标志位的设定宏定义 #define isButtonFWDown() (PINC&0B00000001)=0) #define isButtonBWDown() (PINC&0B00000010)=0) #define isButtonZERODown() (PINC&0B00000100)=0) #define isButtonSTOPDown() (PINC&a

4、mp;0B00001000)=0) #define LedFWOn() (PORTA &= 0B11111110) #define LedBWOn() (PORTA &= 0B11111101) #define LedZeroOn() (PORTA &= 0B11111011) #define LedRunOn() (PORTA &= 0B11110111) #define LedFWOff() (PORTA |= 0B00000001) #define LedBWOff() (PORTA |= 0B00000010) #define LedZeroOff()

5、(PORTA |= 0B00000100) #define LedRunOff() (PORTA |= 0B00001000)自定义函数外部中断4的处理程序举例外部中断5的处理程序举例主函数 如何改变电机的转速?对对L298的控制有单极性、双极性的控制有单极性、双极性2种方式。种方式。单极性工作方式指的是在一个单极性工作方式指的是在一个PWM周期内电周期内电机的电枢只承受单极性的电压机的电枢只承受单极性的电压;双极性工作方式是指在一个双极性工作方式是指在一个PWM周期内电机周期内电机电枢两端的电压呈正负交替变化。电枢两端的电压呈正负交替变化。电机调速(单极性) 以电机正转为例,在以电机正转为例

6、,在M+端产生端产生PWM波,波,M-接低电平。则接低电平。则M+为为高电平时,电机正转;为低电平时,电机停转。高电平时,电机正转;为低电平时,电机停转。 改变改变PWM波的占空比即可改变电机的转速,占空比越大,电机波的占空比即可改变电机的转速,占空比越大,电机转速越快。转速越快。 脉冲宽度(简称脉宽),就是高电平的时间。脉冲宽度(简称脉宽),就是高电平的时间。转动时间转动时间 停止时间停止时间M+电机正转电机正转PWM波波HLTton周期周期转动时间转动时间占空比占空比PWM(Pulse Width Modulation):脉冲宽度调制脉冲宽度调制ssondUTUtU0平平均均电电压压如何产

7、生PWM波?(T/C1)用作定时器:可以用作频率发生器等;用作定时器:可以用作频率发生器等;用作计数器:可用来对外部引脚的脉冲信号进用作计数器:可用来对外部引脚的脉冲信号进行计数;行计数;输入捕获功能:可用来测定外部信号的脉宽;输入捕获功能:可用来测定外部信号的脉宽;输出比较匹配功能:可用来产生脉宽调制信号输出比较匹配功能:可用来产生脉宽调制信号(PWM波)。波)。l16位的位的T/C 可以实现精确的程序定时可以实现精确的程序定时(事件管理事件管理)、波形、波形产生和信号测量。其主要功能如下:产生和信号测量。其主要功能如下:相关引脚T1(PD6)OC1A(PB5)OC1B(PB6)OC1C(P

8、B7)ICP1(PD4)波形产生模式有关定时有关定时/计数器的几个变量计数器的几个变量 电机调速(单极性,快速PWM模式)转动时间转动时间 停止时间停止时间M+电机正转电机正转OCR1ATOP(ICR1)TCNT1TOP比较匹配时清零比较匹配时清零溢出时置位,并进行溢出时置位,并进行电机转向控制电机转向控制OCR1ABOTTOM软件设计PWM波形产生方法: 我们采用大致20KHz以上的PWM波进行电机的调速,采用Timer1的模式14,快速PWM模式,分频为1。使能overflow interrupt 和compare A interrupt中断,选择OC1A output mode为disc

9、onnected普通模式,在匹配中断中清零PB4、PB5,溢出中断中根据方向标志置位PB4或PB5。 这样就用单极性方式产生了方向可变的PWM波形。快速PWM模式TOP:。我们要求在20kHz,采用快速PWM模式(模式14),TOP值由ICR1寄存器给定。OCR1A:输出比较寄存器,记录输出比较的脉冲数,即。这样,如果可以随时改变OCR1A的值,就可以产生可调占空比的PWM波。在模式14中,OCR1A的更新在TCNT1达到TOP时刻。输出比较中断TCNT1TCNT11OCR1A?比较匹配的标志位比较匹配的标志位OCF1A置位置位(TIFR)产生产生PWM波形可从引脚波形可从引脚OC1A输出输出

10、总开关总开关I打开?打开?(SREG)分开关分开关OCIE1A打开?打开?(TIMSK)输出比较输出比较中断服务中断服务清空清空OCF1A输出比较单元双缓冲输出比较寄存器OCR1A一直与TCNT1 的值做比较。波形发生器用比较结果产生PWM或在输出比较引脚OC1A输出可变频率的信号。比较匹配结果还可置位比较匹配标志OCF1A,用来产生输出比较中断请求。相关寄存器Bit 7 I: 全局中断使能(总开关总开关)I 置位时使能全局中断。单独的中断使能由其他独立的控制寄存器控制。如果I 清零,则不论单独中断标志置位与否,都不会产生中断。lSREG(状态寄存器)(状态寄存器)相关寄存器TIMSK(定时器

11、中断屏蔽寄存器)(分开关)(定时器中断屏蔽寄存器)(分开关) lBit 5 TICIE1: T/C1 输入捕捉中断使能lBit 4 OCIE1A:T/C1 输出比较 A 匹配中断使能lBit 3 OCIE1B:T/C1 输出比较 B 匹配中断使能lBit 2 TOIE1:T/C1 溢出中断使能相关寄存器TIFR(定时器中断标志寄存器)(定时器中断标志寄存器) lBit 5 ICF1: T/C1 输入捕捉标志输入捕捉标志lBit 4 OCF1A: T/C1 输出比较输出比较 A 匹配标志匹配标志 当当TCNT1 与与OCR1A 匹配成功时,该位被设为匹配成功时,该位被设为1”。lBit 3 OC

12、F1B: T/C1 输出比较输出比较 B 匹配标志匹配标志lBit 2 TOV1: T/C1 溢出标志溢出标志相关寄存器相关寄存器 TCCR1A(T/C1控制寄存器控制寄存器A) lTCCR1B(T/C1控制寄存器控制寄存器B) lTCCR1C(T/C1控制寄存器控制寄存器C) TCCR1A(T/C1控制寄存器控制寄存器A)TCCR1B(T/C1控制寄存器控制寄存器B)TCCR1C(T/C1控制寄存器控制寄存器C) Bit 7 FOCnA: 强制输出比较通道A Bit 6 FOCnB: 强制输出比较通道B Bit 5 FOCnC: 强制输出比较通道C相关寄存器(相关寄存器(5个个16位)位)T

13、CNT1(TCNT1H、TCNT1L) (16位的位的T/C1定时数据寄存器)定时数据寄存器)OCR1A(OCR1AH、OCR1AL) (16位的位的T/C1双缓冲输出比较寄存器双缓冲输出比较寄存器A)OCR1B(OCR1BH、OCR1BL) (16位的位的T/C1双缓冲输出比较寄存器双缓冲输出比较寄存器B)OCR1C(OCR1CH、OCR1CL) (16位的位的T/C1双缓冲输出比较寄存器双缓冲输出比较寄存器C)ICR1(ICR1H、ICR1L)()(16位的位的T/C1输入输入捕获寄存器)捕获寄存器)自己动手之二改变电机转速Q:如何改变转速?:如何改变转速?A:通过串口改变:通过串口改变O

14、CR1A的值,从而改变的值,从而改变PWM占空比。占空比。通过串口由通过串口由PC机改变机改变OCR1A的值,从而改变的值,从而改变直流电机的转速!直流电机的转速!单极性方式输入端输入端In1为为PWM信号,输入端信号,输入端In2为低电平,为低电平,电动机正转;输入端电动机正转;输入端In2为为PWM信号,输入端信号,输入端In1为低电平,电动机反转。为低电平,电动机反转。占空比为占空比为0%时制动,为时制动,为100%时达到最高速;时达到最高速;当当EnA为低电平时,驱动桥路上的为低电平时,驱动桥路上的4个晶体管个晶体管全部截止,使正在运行的电动机电枢电流反向,全部截止,使正在运行的电动机

15、电枢电流反向,电动机自由停止。电动机自由停止。但是,控制板的使能端通过按键开关接电源但是,控制板的使能端通过按键开关接电源用急停方式用急停方式双极性方式In1输入正反控制信号,输入正反控制信号, In2和和In1反相。假反相。假如如In1为高电平时电机正转,那么低电平时就为高电平时电机正转,那么低电平时就是反转。是反转。通过单片机使通过单片机使In1和和In2产生反向的产生反向的PWM信号,信号,控制电机的转速。控制电机的转速。当占空比为当占空比为50%的时候,电机制动;大于的时候,电机制动;大于50%时,电机向一个方向转动;小于时,电机向一个方向转动;小于50%的时候,的时候,向另外一个方向

16、转动。且电机的转速基本上和向另外一个方向转动。且电机的转速基本上和(占空比(占空比-50%)成一定比例关系。)成一定比例关系。ICCAVR中如何设置T/C1采用普采用普通方式。通方式。电机采电机采用单极用单极性方式性方式驱动驱动定时/计数器1的初始化举例void timer1_init(void) TCCR1B = 0 x00; /stop TCNT1H = 0 x00; /setup TCNT1L = 0 x00; OCR1AH = 0 x02; OCR1AL = 0 x27; OCR1BH = 0 x02; OCR1BL = 0 x27; OCR1CH = 0 x02; OCR1CL =

17、0 x27; ICR1H = 0 x02; / 20kHz ICR1L = 0 x27; TCCR1A = 0 x02; / OCR1A未连接,做普通端口操作未连接,做普通端口操作 TCCR1B = 0 x19; / start Timer( 0227 )H=( 551 )D定时/计数器1的比较匹配中断#pragma interrupt_handler timer1_compa_isr:iv_TIM1_COMPAvoid timer1_compa_isr(void) /compare occured TCNT1=OCR1A DC_Stop();定时/计数器1的溢出中断处理 #pragma in

18、terrupt_handler timer1_ovf_isr:iv_TIM1_OVF void timer1_ovf_isr(void) /TIMER1 has overflowed TCNT1H = 0 x00; /reload counter high value TCNT1L = 0 x00; /reload counter low value if (DC_State = RUN ) if ( dir_flag = FORWARD ) DC_Forward(); else if ( dir_flag = BACKWARD ) DC_Backward(); else DC_Stop();

19、 通信协议每帧包含3字节数据:字节0:0 xaa (帧开始标志)字节1:速度高4位(bit3bit0)字节2:速度低8位速度范围(0 x00010 x0227),参见TIMER1初始化中ICR1取值ICCAVR中如何设置USART1串口通信程序举例 unsigned char ReceivedData3; / 接收缓存接收缓存 unsigned char receive_flag=0; / 接收完成标志,接收完成标志,1表示接收一帧结束表示接收一帧结束 #pragma interrupt_handler uart1_rx_isr:iv_USART1_RXC void uart1_rx_isr(

20、void) static unsigned char rece_num=0; unsigned char data; data=UDR1; if( 0 xAA = data )&( 0 = rece_num ) | rece_num 0 ) ReceivedData rece_num = data; rece_num+; if ( 3 = rece_num ) rece_num = 0; receive_flag = 1; 主函数中修改脉冲宽度 while(1) if (receive_flag = 1) OCR1AH = ReceivedData 1 ; OCR1AL = Recei

21、vedData 2 ; DC_State = RUN; receive_flag = 0; PROTEUS仿真效果如何知道电机转多快?读取编码器的脉冲增量式编码器输出的是连续的脉冲信号,通过得到一秒钟内的脉冲个数,利用已知的编码器线数(如我们用的编码器为500线)可得到电机转速,或者直接以每秒的脉冲数作为速度,具体以计算方便为准。对此有两种较为常见的做法:测频率测频率和测脉宽法。我们采用测频率法(或测周期法),该方法是设定一个固定的采样时间T,比如秒,采样一次得到的脉冲个数N,那么速度为V=N/T ( pulse / sec )自己动手之三测得编码器脉冲数1 测得直流电机在最大的转速下,测得直流电机在最大的转速下,20ms内内的脉冲数。的脉冲数。2利用串口调试助手读取该脉冲数,并估算利用串口调试助手读取该脉冲数,并估算大致范围。大致范围。如何分配单片机资源?T/C0产生产生20ms定时定时T/C1驱动电机驱动电机T/C3采集编码器脉冲采集编码器脉冲 ,上升沿,上升沿USART1串口通信串口通信 Q:20ms内编码器脉冲有多少?内编码器脉冲有多少? A:16位的位的T/C3。(为什么?)。(为什么?) Q:何时采集编码器脉冲?:何时采集编码器脉冲? A:20ms计时溢出中断服务中。计时溢出中断服务中。串口协议的修改采用问答式发送上个采

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论