B平板控制系统.docx
- 文档编号:30712121
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:31
- 大小:158.59KB
B平板控制系统.docx
《B平板控制系统.docx》由会员分享,可在线阅读,更多相关《B平板控制系统.docx(31页珍藏版)》请在冰豆网上搜索。
B平板控制系统
2011年全国大学生电子设计竞赛
基于自由摆的平板控制系统(B题)
【本科组】
2011年9月3日
摘要
设计了基于自由摆的平板控制系统,主要由角度信息采集、主控板、步进电机驱动系统、数据显示四大部分构成。
通过分辨率较高的旋转编码器E6B2-C来采集摆杆在不同时刻的角度信号,然后将信号送入LM3S811单片机进行数据处理,再通过基于集成芯片THB6128的细分驱动电路驱动步进电机控制平板转动。
整个设计采用闭环方式对平板的转角进行精确控制,实现了整个系统的自动平衡。
实验结果表明,实现了自由摆上的平板控制,完成了作品的基本部分和发挥部分要求。
关键字:
自由摆平板控制单片机步进电机
目录
1系统方案1
1.1系统方案的实现方法1
1.2模块方案比较和论证1
1.2.1控制器模块方案分析与比较1
1.2.2角度检测模块方案分析与比较1
1.2.3步进电机驱动模块方案分析与比较1
1.2.4显示模块方案分析与比较2
2系统理论分析与计算2
2.1测量与控制方法2
2.2理论计算2
3系统电路与程序设计2
3.1系统电路的实现实现2
3.1.1角度检测电路的实现2
3.1.2步进电机驱动电路是实现2
3.1.3电源电路的实现2
3.2.软件设计3
4测试方案与测试结果3
4.1测试方案3
4.2测试条件与仪器3
4.3测试结果及分析3
4.3.1测试结果(数据)3
4.3.2测试分析与结论4
5总结5
1系统方案
1.1系统方案实现方法
根据题目任务要求,为了准确地达到基本要求并能体现设计的创新性,很好地实现发挥部分的效果。
我们拟采用如下设计方法:
1)调节步进电机,使平板水平,让硬币在平板上能够稳定。
2)采用旋转编码器检测平板与摆杆的角度,用软件方法进行闭环反馈误差修正,来实现步进电机及配重情况下的平衡控制。
3)为系统配置控制处理中心,实现全程自动控制和管理。
4)最优化电机驱动,细分驱动,使电机能平稳的正反转自如控制。
5)软硬件模块化设计,分工协作,使系统运行稳定;6)测试中,运用干扰法,调试系统到最佳状态。
整个系统结构如图1所示。
图1系统结构框图
1.2模块方案的比较和论证
1.2.1控制器模块方案分析与比较
控制器主要用于各种传感器信号的接收和辨认、控制步进电机动作、控制显示角度等。
对于控制器的选择有以下几种方案。
方案一:
采用FPGA的SOPC片上可编程嵌入式系统作为系统的控制器。
但由于本设计对数据处理的速度要求高,FPGA的高速处理的优势虽然得到了充分体现,但成本偏高,硬件电路板布线复杂,加重了电路设计和实际焊接的工作。
方案二:
采用单片机作为系统的控制器。
单片机软件编程灵活、自由度大,功耗低,体积小,技术成熟和成本低等优点。
在本系统中通过各传感器检测信号送单片机进行处理,由单片机控制步进电机正反转,能够实现设计任务的要求。
基于上述分析,选择方案二。
1.2.2角度检测模块方案分析与比较
倾角检测模块主要是用来检测平板与摆杆的倾斜角,送单片机处理倾斜角信息来让步进电机来寻找平衡点,以致硬币不从步进电机上的平板上掉下来。
对传感器的选择有以下几种方案。
方案一:
采用自制水银倾角传感器。
水银倾角传感器,由支架、水银储槽、U型连通管、水银检测电路组成。
其原理在于当步进电机的平板发生倾斜时,用红外对管检测出水银流动信息,经比较器比较后送单片机控制步进电机的正反转,让步进电机上的平板从新平衡,以致让硬币不从平板上掉下来。
此方案具有结构简单、使用方便、安全、成本低等优点。
但由于制作工艺原因无法达到精确测量与平衡的目的。
方案二:
采用旋转编码器来检测杆的摆动角度,当旋转编码器转动一个最小角时,旋转编码器A相会产生一个脉冲信号,B会产生高低电平,单片机检测到A,B信号后迅速作出反应。
综合以上两种方案,选择方案二。
1.2.3步进电机驱动模块方案分析与比较
步进电机的驱动电路主要是控制电机的正转和反转以及转动的角度,对步进电机驱动的选择有以下几种方案。
方案一:
采用继电器对步进电机的开和关进行控制,通过输入步进电机的脉冲数对步进电机的转速进行调整。
这个方案的优点是电路较为简单,实现容易,缺点是继电器的响应时间慢,机械结构易损坏,寿命较短,可靠性不高。
方案二:
采用专用于电机驱动的专用集成芯片THB6128对步进电机进行功率驱动,THB6128集成芯片具有驱动能力强,最多可进行128细分,这样使得步进电机的转动更为平稳,显著降低步进电机转动时的抖动。
基于上述分析,选择方案二。
1.2.4显示模块方案分析与比较
根据题目任务,系统需对步进电机转动的角度做准确的显示。
对显示模块我们拟有两种方案进行选择。
方案一:
采用传统的数码管显示。
数码管显示亮度高,但这种方案耗电量大,不节能,而且只能显示有限的符号和数码字符,另外还需要动态扫描电路不断刷新显示,电路占用空间大。
方案二:
采用液晶显示屏显示。
液晶显示屏具有轻薄短小,低耗电量,可视面积大,画面效果好,分辩率高,抗干扰能力强等优点。
设计中采用串行显示,只需占用4个I/O口,节省资源。
相对而言,能更好地实现友善的人机交互界面。
基于上述分析,选择方案二。
2系统理论分析与计算
2.1测量与控制方法
图2是步进电机与摆杆的平衡点控制系统框图。
图中被控对象为步进电机,其输出为被控参数平衡点,作用于步进电机上的扰动是指步进电机惯性等产生的内外扰动;检测角度器件为旋转编码器,用来检测平板与摆杆的夹角并转化成一定信号输至调节器;调节器是单片机控制器,在控制器内将检测值与给定平衡值进行比较,得出偏差值,然后根据偏差情况按比例-积分-微分(PID)控制发出相应的输出信号给调整电路。
图2平衡点控制系统方框图
2.2理论计算
摆杆允许最大夹角
,当摆杆第一次从最高点到达最低点时,步进电机要迅速的调整姿态,让硬币与摆杆一起运动,当步进电机的速度与摆杆的速度一样时,步进电机要迅速抱死,这样平板上的硬币才能与摆杆一起运动,而不会从平板上掉下来。
于是有:
,在最高点时
,所以当摆杆摆到最低点时最低点的最大速度
,当
时,摆杆到达最低点的最大速度
。
所以步进电机的转动速度一定要在前
内得到迅速调整,否则硬币就会从平板上掉下来。
通过理论计算发现电机的线速度与摆杆的线速度有一定的关系,通过多次试验发现当在最高点时,平板不能是完全水平的,而是与水平面有一定的夹角。
对于发挥部分,激光笔发出的激光要始终对应在白纸上的同一点,通过计算发现,摆杆与垂直方向的夹角
与激光笔需要偏转的角度
有一个对应关系,即:
,所以在理论上,当摆杆转动一定角时,激光笔的转动角是一定的。
在工程上需要对理论值进行修正,以得到比较好的结果。
3.系统电路与程序设计
3.1系统电路设计
3.1.1角度检测电路的实现
角度检测电路,采用的是旋转编码器,它的分辨率为
,当检测到角度时,旋转编码器会向单片机控制器发出脉冲信号,当检测到脉冲信号和方向信号后,单片机迅速动作,从而调整硬币姿态,让硬币不冲平板上掉下来。
3.1.2电机驱动电路的实现
为求硬件电路简化,电机驱动没有自行设计经典的H型桥式电路,而是采用专用电机驱动芯片THB6128集成芯片功率输出实现。
电路工作过程:
旋转编码器检测到摆杆转动的角度,它的A,B相会向单片机发出脉冲信号和高低电平,从而得知步进电机的转动方向及转动角度。
3.1.3电源电路的实现
电源由变压部分、滤波部分、稳压部分组成。
为整个系统提供
5V或者
12V电压,确保电路的正常稳定工作。
这部分电路比较简单,都采用三端稳压管实现。
3.2软件设计
主程序主要起导向和决策作用,决定步进电机在什么环境下该做什么。
实现了步进电机对角度的查询,,步进电机方向的确定等功能。
步进电机各项功能通过调用具体的子程序来实现。
系统主程序流程图如图3所示。
图3主程序流程图
4测试方案与测试结果
4.1测试方案
1、硬件测试
采用函数发生器产生1kHz~40kHz的方波信号分别输入驱动电路,然后用示波器的探头探测驱动电路各输出点的信号,观察示波器中的波形是否正确,如果出现异常,马上寻找故障原因,即用示波器观测THB6128芯片各个引脚的信号,然后各个排错,直到找出故障原因。
2、软件仿真测试
采用单步调试的方法,寻找软件编译过程中出现的错误,并逐个排错。
编译成功后下载到M3单片机,并用示波器观测单片机输出单口的信号是否正确。
然后认真分析各条语句,看是否符合逻辑功能。
3、硬件软件联调
先关闭电源,将硬件与M3单片机连接起来,然后检查各信号线是否连接正确,确定正确后。
打开电源开关,观察步进电机的运动方向,思考步进电机的运动方向与软件设计的要求是否一致,如果不一致,则认真修改软件设计,直到满足步进电机运转的规律为止。
使软件与硬件能够更好的协同工作。
4.2测试条件与仪器
表1仪器设计备清单
序号
名称、型号及规格
主要技术指标
数量
备注
1
WD-5稳压电源
输出正12V/0.5A、负12V/0.5A、正5V/3A、负5V/0.5A。
1台
启东计算机厂
2
FDPS-24A开关稳压电源
1个
3
TDS1012示波器
通道数2
带宽100MHz
取样率1.0GS/s
1台
UNITRODE公司(美国)
5
秒表
0.01s
1个
6
量角器
180
1把
7
支架
1个
表2元器件明细表
序号
名称、型号
数量
备注
1
单片机LM3S811
1个
主板
2
晶体振荡器12MHz
1个
主板
3
旋转编码器E6B2-C
1个
主板
4
集成稳压电源LM7805
1个
主板
5
液晶显示器12864
1个
主板
6
电阻、电容
若干
主板
7
插接件类
若干
主板
8
发光二极管
若干
主板
9
THB6128集成芯片
1个
驱动板
10
光电耦合器4N25
4个
驱动板
4.3测试结果及分析
4.3.1测试结果(数据)
表3平板随电机转动
平板随电机转动(周数)
4
4
5
5
5
4
5
5
5
4
摆杆一个周期,平板旋转误差(°)
10
15
18
11
10
14
16
18
20
17
表4仍在平板上的硬币数
度数(°)
30
31
32
33
34
35
36
37
38
49
硬币数(个)
1
1
1
1
1
1
1
1
1
1
度数(°)
40
41
42
43
44
45
46
47
48
49
硬币数(个)
1
1
1
1
1
8
8
7
8
6
度数(°)
50
51
52
53
54
55
56
57
58
60
硬币数(个)
8
8
7
8
6
8
8
7
8
8
表5激光笔在不同角度时的偏离值
度数(°)
30
31
32
33
34
35
36
37
38
49
偏离值(cm)
0.1
0.0
0.3
0.1
0.1
0.3
0.7
0.8
0.0
0.4
度数(°)
40
41
42
43
44
45
46
47
48
49
偏离值(cm)
0.5
0.6
0.0
0.0
0.6
0.6
0.3
0.2
0.0
0.4
度数(°)
50
51
52
53
54
55
56
57
58
60
偏离值(cm)
0.0
0.3
0.0
0.0
0.1
0.3
0.6
0.0
0.4
0.0
表6激光笔跟踪靶纸中心线测试结果
度数(°)
30
31
32
33
34
35
36
37
38
49
偏离值(cm)
4
3
2
5
4
6
5
4
7
5
度数(°)
40
41
42
43
44
45
46
47
48
49
偏离值(cm)
7
9
8
12
8
6
9
11
9
7
度数(°)
50
51
52
53
54
55
56
57
58
60
偏离值(cm)
8
10
11
10
13
11
17
12
15
13
4.3.2测试分析与结论
通过数据分析表明:
系统要能够稳定且精确的运行,必须要在短时间内,调整步进电机上的水平板,使其加入摆杆的运动状态,从实验结果可以看出,只要在一个固定的时间左右(偏差不能大),都可以马上加入摆杆的运动状态,从而达到了设计要求。
附录1:
电路原理图
步进电机驱动电路原理图
步进电机驱动原理图
系统总原理图
附录2:
源程序
#include"systemInit.h"
#include"timer.h"
#include"12864.h"
#defineucharunsignedchar
#defineuintunsignedint
#defineulongunsignedlong
//端口定义
//EN
#defineEN0_PERIPHSYSCTL_PERIPH_GPIOD
#defineEN0_PORTGPIO_PORTD_BASE
#defineEN0_PINGPIO_PIN_0
//CW0方向
#defineCW0_PERIPHSYSCTL_PERIPH_GPIOD
#defineCW0_PORTGPIO_PORTD_BASE
#defineCW0_PINGPIO_PIN_1
//CLOCK0脉冲信号
#defineCLOCK0_PERIPHSYSCTL_PERIPH_GPIOD
#defineCLOCK0_PORTGPIO_PORTD_BASE
#defineCLOCK0_PINGPIO_PIN_2
#defineLED_PERIPHSYSCTL_PERIPH_GPIOD//LED
#defineLED_PORTGPIO_PORTD_BASE
#defineLEDGPIO_PIN_3
#defineGAOGPIO_PIN_4
//PB0:
检测脉冲个数
#defineKEY_PERIPHSYSCTL_PERIPH_GPIOB
#defineKEY_PORTGPIO_PORTB_BASE
#defineKEY_PINGPIO_PIN_0
//PB1:
检测高低电平
#defineKEY1_PERIPHSYSCTL_PERIPH_GPIOB
#defineKEY1_PORTGPIO_PORTB_BASE
#defineKEY1_PINGPIO_PIN_1
ucharXW_8[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};//八拍运行方式
ucharucVal=0;
ucharflag,t;
longp;
voidinit()
{
jtagWait();
clockInit();
SysCtlPeriEnable(CW0_PERIPH);//步进电机方向
GPIOPinTypeOut(CW0_PORT,CW0_PIN);
SysCtlPeriEnable(LED_PERIPH);//步进电机方向
GPIOPinTypeOut(LED_PORT,LED|GAO);
GPIOPinWrite(LED_PORT,LED,LED);//点亮led
GPIOPinWrite(LED_PORT,GAO,GAO);
SysCtlPeriEnable(EN0_PERIPH);//步进电机使能
GPIOPinTypeOut(EN0_PORT,EN0_PIN);
SysCtlPeriEnable(CLOCK0_PERIPH);//步进电机时钟端口
GPIOPinTypeOut(CLOCK0_PORT,CLOCK0_PIN);
//PB0:
检测脉冲个数
//PB1:
检测高低电平
SysCtlPeriEnable(KEY_PERIPH);//
GPIOPinTypeIn(KEY_PORT,KEY_PIN);//
GPIOIntTypeSet(KEY_PORT,KEY_PIN,GPIO_RISING_EDGE);//上升沿触发中断
SysCtlPeriEnable(KEY1_PERIPH);
GPIOPinTypeIn(KEY1_PORT,KEY1_PIN);
GPIOPinIntEnable(KEY_PORT,KEY_PIN);//使能所在管脚的中断
IntEnable(INT_GPIOB);//使能GPIOB端口中断
IntMasterEnable();//使能处理器中断
GPIOPinWrite(EN0_PORT,EN0_PIN,EN0_PIN);//开步进电机使能端
}
voiddelay_us(uintnum)
{
SysCtlDelay(num*(SysCtlClockGet()/3000000));
}
voidrun(uintj,uintk,ucharflag)//二者同步转
{
uinti;
if(flag==1)//左转
{
GPIOPinWrite(CW0_PORT,CW0_PIN,~CW0_PIN);//可认为编码盘向左转
}
else//右转
{
GPIOPinWrite(CW0_PORT,CW0_PIN,CW0_PIN);//可认为编码盘向右转
}
for(i=0;i { for(ucVal=0;ucVal<8;ucVal++)//查表各拍电机脉冲信号 { GPIOPinWrite(CLOCK0_PORT,CLOCK0_PIN,XW_8[ucVal]); delay_us(k); } } voidtimer1init() { SysCtlPeriEnable(SYSCTL_PERIPH_TIMER1);//使能Timer模块 TimerConfigure(TIMER1_BASE,TIMER_CFG_16_BIT_PAIR|//配置Timer为16位周期定时器 TIMER_CFG_A_PERIODIC); TimerPrescaleSet(TIMER1_BASE,TIMER_A,99);//预先进行100分频 TimerLoadSet(TIMER1_BASE,TIMER_A,6000);//设置Timer初值,定时500ms TimerIntEnable(TIMER1_BASE,TIMER_TIMA_TIMEOUT);//使能Timer超时中断 IntEnable(INT_TIMER1A);//使能Timer中断//使能处理器中断 TimerEnable(TIMER1_BASE,TIMER_A); } intmain(void) { init(); lcd_init(); timer1init(); //run(400,150,1);//120丢包,150no丢包 //delay(5000000); //GPIOPinWrite(LED_PORT,LED,LED); //run((0.4*p),200,0); while (1) { display1(0.36*p); } } voidGPIO_Port_B_ISR() { unsignedlongulStatus; ulStatus=GPIOPinIntStatus(KEY_PORT,true);//读取中断状态 GPIOPinIntClear(KEY_PORT,ulStatus);//清除中断状态,重要 if(ulStatus&KEY_PIN)//如果中断状态有效 { if(GPIOPinRead(KEY1_PORT,KEY1_PIN)==0x00)//B组低电平左转 { p++; flag=1; } else { p--; } } } voidTimer1A_ISR(void) { unsignedlongulStatus; ulStatus=TimerIntStatus(TIMER1_BASE,true);//读取中断状态 TimerIntClear(TIMER1_BASE,ulStatus);//清除中断状态,重要! if(ulStatus&TIMER_TIMA_TIMEOUT)//如果是Timer超时中断 { t++; if(t==120) { t=0; GPIOPinWrite(LED_PORT,LED,~LED); delay(130000); run((0.4*p),200,0); TimerDisable(TIMER1_BASE,TIMER_A); } } } //注意lcd_init()函数的调用 #include"systemInit.h" #defineucharunsignedchar #defineuintunsignedint #defineulongunsignedlong /******************************************************************************* *LCD12864管脚定义 *GPIOD(0-1)为控制管脚,依次为SID,CLK *******************************************************************************/ #defineLCDGPIO_PORTC_BASE #defineLCD_PERIPHSYSCTL_PERIPH_GPIOC #defineLCD_SIDGPIO_PIN_6 #defineLCD_CLKGPIO_PIN_7 #defineSID_LGPIOPinWrite(LCD,LCD_SID,0x00) #define
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 平板 控制系统