2011年全国电子设计大赛
基于自由摆的平板控制系统(
2011年9月4日
目 录
B 题)
1 方案的设计与论证 …………………………………………………………………………2
1.1控制芯片的选择…………………………………………………………………………3 1.2电机的选择………………………………………………………………………………3 1.3角度传感器的选择……………………………………………………………………3 2 实际电路设计 ………………………………………………………………………………3
2.1最小系统………………………………………………………………………………4 2.2系统组成原理……………………………………………………………………………4 2.3角度移位传感器…………………………………………………………………………4 2.4电机控制和驱动…………………………………………………………………………5 2. 5显示模块………………………………………………………………………6 2. 6按键模块………………………………………………………………………6 2. 7电源模块………………………………………………………………………6 3 实际软件设计…………………………………………………………………………………5
3.1软件程序功能描述 ……………………………………………………………6 3.2程序流程图 ……………………………………………………………………………5 4 实际系统的测试结果………………………………………………………………………… 6
4.1 测试仪器………………………………………………………………………………6 4.2测试数据………………………………………………………………………………6 4.3误差分析………………………………………………………………………………7 5 创新部分……………………………………………………………………………………7 6 设计总结…………………………………………………………………………………7 7 附录…………………………………………………………………………………………8 附1:部分元器件清单 ……………………………………………………………………8 附2:原理图 ……………………………………………………………………8
附3:部分程序清单……………………………………………………………………8
摘要:为了对自由摆的平板控制系统的要求,我们进行了各方面的精
细筛选最终我们选择了TI 公司的MSP430F149单片机作为我们的系统控制核心, 它具有16位的处理数据,处理数据快,内含8个12位高精度AD 。在电机驱动方面应用了TA8435H 来驱动双直流的步进电机来控制平板。系统的显示是采用了12864,,显示清晰可观,美观大方。在采集数据方面我们应用了高精度的角位移传感器WDD35D4。我们的系统的软硬件设计都是采用了模块化的设计思想。. 最终实验证明,系统完全可以达到设计的要求,完成了基本部分和发挥部分的要求。本系统在设计当中还力求了低功耗高性价比等。
关键字:MSP430F149 TA8435H
WDD35D4 12864
1. 方案的设计与论证
本系统主要由单片机最小系统、步进电机驱动模块、角度传感器模块,电源模
块等组成下面分别论证这几个模块的选择。 1.1控制芯片的选择
方案一:采用高性能的嵌入式,如arm 。若用此方案,处理能力强且很快,但是arm 价格昂贵且在我们本科阶段用起来也比较困难。
方案二:采用大规模的逻辑器件,比如FPGA,CPLD 等,处理速度很快,可是我们选择的是控制类比较注重与控制,并且我们用起来也不够得心应手。
方案三:采用一片高精度低功耗的且价格一般的16位的单片机来实现,我们应用起来也容易实现控制。
经过比较论证我们采用了方案三,我们应用了msp430f149单片机,此单片机功耗低运行速度快,采用了16位的处理数据,内部还有12位AD, 乘法器,内存空间大,性价比高。 1.2电机的选择
方案一:选择普通直流电机,容易控制,但是精度不够。
方案二:选择伺服电机,控制精度高可是不容易在低速系统实现控制。并且价格昂贵。 方案三:选择步进电机。步进电机的特点是可以精确控制电机选择步数和角度,就是有一点点失步但在在频率达到400HZ 以上失步较少。
考虑到题目要求性能要高,所以我们选择步进电机,通过优良的控制算法,达到高精度定位。控制方便精确高。 1.3角度传感器的选择
方案一:采用一款芬兰的SCA100T 加速度角度传感器来反应平板的倾斜角度,它的反馈的精度很高可以达到0.01度,但是它是加速度传感器在摆动过程中它的加速度在变化使得它的读角度也变了不精确。
方案二:采用角位移传感器,精确度高,不受加速度的影响。且易于控制。 考虑到精度的问题我们采用了方案二。控制精确高和容易控制。 本系统主要是用量角器来测量摆杆的角度,放开摆杆让其运动我们通过安装在摆杆上方的角位移传感器来测量摆杆的角度,由角度传感器通过单片机的来控制电机驱动从而控制电机使得平板实时与摆杆垂直才能使得硬币不会再平板上滑下。在电机转轴我们也安装了一个角位移传感器来反馈作用,因此构成了闭环控制系统。
2. 实际电路设计
2.1单片机最小系统如附图2.1。含有JTAG 仿真模块,电源模块。 2.2系统组成原理
本系统由摆杆摆动时,由单片机的AD 采样角度传感器1后,再由单片机来控制电机驱动驱动电机,电机就使得摆板转一定的角度来满足题目的要求使得硬币不会掉落。电机后面再有角度传感器2来反馈信号由单片机的AD 采样控制从而构成一个闭环控制系统,在摆杆摆动时就实时采样控制摆板。达到题目给出的要求。
2.3角位移传感器WDD35D4
角位移传感器实际上就是高精度滑动变阻器,它可以转动360度。通过基准电压芯片MC3403P1角位移传感器来对电压的分压后通过单片机的AD 的采样后进行数据处理。
图2.3
2.4电机控制和驱动
由摆杆摆动时通过单片机采样角位移传感器进来的信号,单片机发出指令后控制电机驱动电路进而控制平摆使得平摆上的物体保持平衡,进而达到控制精度。如附图2.4
2.5显示模块,可以更好的进行人机交流。
图2.5
2.6 按键模块我们选择了独立按键模块,程序简单,易于控制系统,可为其他程序提供一些程序空间。
图2.6
2.7电源模块由变压部分、滤波部分、稳压部分组成。电源有+12V、- 12V、+5V、-5V 、可调电源0~+15V, 可调电源-15V~0V. 如附图2.7。
3. 实际软件设计
3.1软件程序功能描述
由题目要求软件部分主要是实现键盘的设置和显示的功能,控制电机转动和内部AD 采样。
1)键盘实现功能:
按键1:校验两个AD 的数据,用来当为基准值。
按键2:控制基本部分一:摆杆摆动5周且平板转的角度误差小于45度,的电机启动。
按键3:控制电机:在平板上放硬币的电机启动按钮。
按键4:控制发挥部分的电机启动:在平板上安装一激光笔在单片机控制电机使得激光笔可以实时射统一条中心线上。 2)显示部分功能:
采样的角度值和运行准备显示。
3.2程序设计思路:
通过AD 采样的信号,进行数字滤波单片机处理控制。
3.3程序流程图主程序图如图3.3。为实现了赛题基本的功能。
图3.3主程序流程图
3.4基准点校正程序,为单片机提供基准的参考点。流程图如3.4
图3.4
3.5旋转程序流程图为实现基本部分1. 流程图如图:
图3.5旋转程序流程图:
3.6硬币单摆程序流程图实现了基本部分2和3:如图3. 6:
图3.6 硬币单摆程序
3.7激光笔程序流程图实现了发挥部分如图3.7:
如图3.7激光笔程序
4. 实际系统的测试结果.
4.1测试的仪器:
数字万用表,双踪示波器,计算器,秒表,量角器。 4.2测试的结果
B. 摆杆至60度时摆动5个周期时硬币与平板的接触个数。
D. 激光实时射到靶子的次数。
根据上述测试数据,我们基本上可以完成基础部分和一些的发挥部分。
5. 创新部分:
我们增加的了1730PY 语音芯片模块,它具有语音播报功能从而使得我们的系统可以更好的加强人机交接功能。如图5
如图5
6. 设计总结
经过为期四天的设计,感触颇深的是解决问题的方法、技巧。在这四天中,
我们遇到过许许多多的问题,对待问题要多方法、多角度处理。通过这几天的设计竞赛,我们不但增强了实践能力和团队协作精神,而且懂得了联系实际的重要性,这对我们以后的学习和工作不无裨益。当然,我们的设计还存在着一些缺陷,有待于在将来设计中进一步提高,在此恳请各位老师批评指正
6. 附录
附1:部分元器件清单
芯片:msp430f149 电机驱动TA8435H 一片 角位移传感器WDD35D4*2 电机42BYG 一个
基准源MC3403P1 7805 7812 若干电容电阻导线 一块12864 附2:原理图
图
2.1
图2.4
图2.7
附3:
unsigned int filter_jq_f(unsigned int fai_buf) {
unsigned int i; unsigned int dat[10];
unsigned char coe[10] = {0,0,0,0,1,2,3,4,5,16}; unsigned char sum_coe = 1+2+3+4+5+16; unsigned char count; unsigned int sum_sita=0;
for(i=1;i
fai[i-1]=fai[i]; }
fai[9]=fai_buf;
if((fai[9]-fai[8])>K3) {
fai[9]=fai[8]; }
if((fai[8]-fai[9])>K3) {
fai[9]=fai[8]; }
return (int)(fai[9]); }
void kenerl_light() {
int set_avlue; int difs;
int pwm_temp; get_mid_aulve();
//Curr_Zhou_angle=Trans_Angle(AccessResult[0],1); //Curr_ban_angle=Trans_Angle(AccessResult[1],2);
set_avlue=AccessResult[1]-Curr_Zhou_angle;//当前的轴的角度. set_avlue=0-set_avlue; if(set_avlue>300) {
set_avlue=set_avlue+100; }
difs=set_avlue/K1-AccessResult[0]+Curr_ban_angle; pwm_temp=K2*difs; if(pwm_temp>=0) {
pwm_aulve=pwm_temp; if(pwm_aulve>3000) {
pwm_aulve=3000; }
if(pwm_aulve
pwm_aulve=0; }
pwm_change1(pwm_aulve,1); } else {
pwm_aulve=65536-pwm_temp; if(pwm_aulve>3000) {
pwm_aulve=3000; }
if(pwm_aulve
pwm_aulve=0; }
pwm_change1(pwm_aulve,0); } }
unsigned int Trans_Angle(unsigned int Hex_Val,unsigned char y) {
int adc_dif=0;
//unsigned long caltmp=0,Curr_Volt=0; unsigned long Angle=0; if(y==1) {
//Zhou_Zero_Adc为轴不动在中点的寄存器内为转换为电压值的值 adc_dif=Hex_Val-Zhou_Zero_Adc; zhou_angle_dir=0;//大于零度方向 if(adc_dif
adc_dif=65536-adc_dif; zhou_angle_dir=1;
Angle=adc_dif/zhou_0_1_Fu; }
Angle=adc_dif/zhou_0_1_Zhe; }
if(y==2) {
adc_dif=Hex_Val-Ban_Zero_Adc; ban_angle_dir=0; if(adc_dif
adc_dif=65536-adc_dif; ban_angle_dir=1;
Angle=adc_dif/ban_0_1_Fu; }
Angle=adc_dif/ban_0_1_Zhe; }
return (Angle) ; }
void get_angle_temps() {
Zhou_Zero_Adc=x_ad[0]; Ban_Zero_Adc=y_ad[0];
zhou_0_1_Zhe=x_ad[1]-x_ad[0]; zhou_0_1_Zhe=zhou_0_1_Zhe/6; zhou_0_1_Fu=x_ad[0]-x_ad[2];
zhou_0_1_Fu=zhou_0_1_Fu/6;
ban_0_1_Zhe=y_ad[0]-y_ad[1]; ban_0_1_Zhe=ban_0_1_Zhe/6; ban_0_1_Fu=y_ad[2]-y_ad[0]; ban_0_1_Fu=ban_0_1_Fu/6; }
2011年全国电子设计大赛
基于自由摆的平板控制系统(
2011年9月4日
目 录
B 题)
1 方案的设计与论证 …………………………………………………………………………2
1.1控制芯片的选择…………………………………………………………………………3 1.2电机的选择………………………………………………………………………………3 1.3角度传感器的选择……………………………………………………………………3 2 实际电路设计 ………………………………………………………………………………3
2.1最小系统………………………………………………………………………………4 2.2系统组成原理……………………………………………………………………………4 2.3角度移位传感器…………………………………………………………………………4 2.4电机控制和驱动…………………………………………………………………………5 2. 5显示模块………………………………………………………………………6 2. 6按键模块………………………………………………………………………6 2. 7电源模块………………………………………………………………………6 3 实际软件设计…………………………………………………………………………………5
3.1软件程序功能描述 ……………………………………………………………6 3.2程序流程图 ……………………………………………………………………………5 4 实际系统的测试结果………………………………………………………………………… 6
4.1 测试仪器………………………………………………………………………………6 4.2测试数据………………………………………………………………………………6 4.3误差分析………………………………………………………………………………7 5 创新部分……………………………………………………………………………………7 6 设计总结…………………………………………………………………………………7 7 附录…………………………………………………………………………………………8 附1:部分元器件清单 ……………………………………………………………………8 附2:原理图 ……………………………………………………………………8
附3:部分程序清单……………………………………………………………………8
摘要:为了对自由摆的平板控制系统的要求,我们进行了各方面的精
细筛选最终我们选择了TI 公司的MSP430F149单片机作为我们的系统控制核心, 它具有16位的处理数据,处理数据快,内含8个12位高精度AD 。在电机驱动方面应用了TA8435H 来驱动双直流的步进电机来控制平板。系统的显示是采用了12864,,显示清晰可观,美观大方。在采集数据方面我们应用了高精度的角位移传感器WDD35D4。我们的系统的软硬件设计都是采用了模块化的设计思想。. 最终实验证明,系统完全可以达到设计的要求,完成了基本部分和发挥部分的要求。本系统在设计当中还力求了低功耗高性价比等。
关键字:MSP430F149 TA8435H
WDD35D4 12864
1. 方案的设计与论证
本系统主要由单片机最小系统、步进电机驱动模块、角度传感器模块,电源模
块等组成下面分别论证这几个模块的选择。 1.1控制芯片的选择
方案一:采用高性能的嵌入式,如arm 。若用此方案,处理能力强且很快,但是arm 价格昂贵且在我们本科阶段用起来也比较困难。
方案二:采用大规模的逻辑器件,比如FPGA,CPLD 等,处理速度很快,可是我们选择的是控制类比较注重与控制,并且我们用起来也不够得心应手。
方案三:采用一片高精度低功耗的且价格一般的16位的单片机来实现,我们应用起来也容易实现控制。
经过比较论证我们采用了方案三,我们应用了msp430f149单片机,此单片机功耗低运行速度快,采用了16位的处理数据,内部还有12位AD, 乘法器,内存空间大,性价比高。 1.2电机的选择
方案一:选择普通直流电机,容易控制,但是精度不够。
方案二:选择伺服电机,控制精度高可是不容易在低速系统实现控制。并且价格昂贵。 方案三:选择步进电机。步进电机的特点是可以精确控制电机选择步数和角度,就是有一点点失步但在在频率达到400HZ 以上失步较少。
考虑到题目要求性能要高,所以我们选择步进电机,通过优良的控制算法,达到高精度定位。控制方便精确高。 1.3角度传感器的选择
方案一:采用一款芬兰的SCA100T 加速度角度传感器来反应平板的倾斜角度,它的反馈的精度很高可以达到0.01度,但是它是加速度传感器在摆动过程中它的加速度在变化使得它的读角度也变了不精确。
方案二:采用角位移传感器,精确度高,不受加速度的影响。且易于控制。 考虑到精度的问题我们采用了方案二。控制精确高和容易控制。 本系统主要是用量角器来测量摆杆的角度,放开摆杆让其运动我们通过安装在摆杆上方的角位移传感器来测量摆杆的角度,由角度传感器通过单片机的来控制电机驱动从而控制电机使得平板实时与摆杆垂直才能使得硬币不会再平板上滑下。在电机转轴我们也安装了一个角位移传感器来反馈作用,因此构成了闭环控制系统。
2. 实际电路设计
2.1单片机最小系统如附图2.1。含有JTAG 仿真模块,电源模块。 2.2系统组成原理
本系统由摆杆摆动时,由单片机的AD 采样角度传感器1后,再由单片机来控制电机驱动驱动电机,电机就使得摆板转一定的角度来满足题目的要求使得硬币不会掉落。电机后面再有角度传感器2来反馈信号由单片机的AD 采样控制从而构成一个闭环控制系统,在摆杆摆动时就实时采样控制摆板。达到题目给出的要求。
2.3角位移传感器WDD35D4
角位移传感器实际上就是高精度滑动变阻器,它可以转动360度。通过基准电压芯片MC3403P1角位移传感器来对电压的分压后通过单片机的AD 的采样后进行数据处理。
图2.3
2.4电机控制和驱动
由摆杆摆动时通过单片机采样角位移传感器进来的信号,单片机发出指令后控制电机驱动电路进而控制平摆使得平摆上的物体保持平衡,进而达到控制精度。如附图2.4
2.5显示模块,可以更好的进行人机交流。
图2.5
2.6 按键模块我们选择了独立按键模块,程序简单,易于控制系统,可为其他程序提供一些程序空间。
图2.6
2.7电源模块由变压部分、滤波部分、稳压部分组成。电源有+12V、- 12V、+5V、-5V 、可调电源0~+15V, 可调电源-15V~0V. 如附图2.7。
3. 实际软件设计
3.1软件程序功能描述
由题目要求软件部分主要是实现键盘的设置和显示的功能,控制电机转动和内部AD 采样。
1)键盘实现功能:
按键1:校验两个AD 的数据,用来当为基准值。
按键2:控制基本部分一:摆杆摆动5周且平板转的角度误差小于45度,的电机启动。
按键3:控制电机:在平板上放硬币的电机启动按钮。
按键4:控制发挥部分的电机启动:在平板上安装一激光笔在单片机控制电机使得激光笔可以实时射统一条中心线上。 2)显示部分功能:
采样的角度值和运行准备显示。
3.2程序设计思路:
通过AD 采样的信号,进行数字滤波单片机处理控制。
3.3程序流程图主程序图如图3.3。为实现了赛题基本的功能。
图3.3主程序流程图
3.4基准点校正程序,为单片机提供基准的参考点。流程图如3.4
图3.4
3.5旋转程序流程图为实现基本部分1. 流程图如图:
图3.5旋转程序流程图:
3.6硬币单摆程序流程图实现了基本部分2和3:如图3. 6:
图3.6 硬币单摆程序
3.7激光笔程序流程图实现了发挥部分如图3.7:
如图3.7激光笔程序
4. 实际系统的测试结果.
4.1测试的仪器:
数字万用表,双踪示波器,计算器,秒表,量角器。 4.2测试的结果
B. 摆杆至60度时摆动5个周期时硬币与平板的接触个数。
D. 激光实时射到靶子的次数。
根据上述测试数据,我们基本上可以完成基础部分和一些的发挥部分。
5. 创新部分:
我们增加的了1730PY 语音芯片模块,它具有语音播报功能从而使得我们的系统可以更好的加强人机交接功能。如图5
如图5
6. 设计总结
经过为期四天的设计,感触颇深的是解决问题的方法、技巧。在这四天中,
我们遇到过许许多多的问题,对待问题要多方法、多角度处理。通过这几天的设计竞赛,我们不但增强了实践能力和团队协作精神,而且懂得了联系实际的重要性,这对我们以后的学习和工作不无裨益。当然,我们的设计还存在着一些缺陷,有待于在将来设计中进一步提高,在此恳请各位老师批评指正
6. 附录
附1:部分元器件清单
芯片:msp430f149 电机驱动TA8435H 一片 角位移传感器WDD35D4*2 电机42BYG 一个
基准源MC3403P1 7805 7812 若干电容电阻导线 一块12864 附2:原理图
图
2.1
图2.4
图2.7
附3:
unsigned int filter_jq_f(unsigned int fai_buf) {
unsigned int i; unsigned int dat[10];
unsigned char coe[10] = {0,0,0,0,1,2,3,4,5,16}; unsigned char sum_coe = 1+2+3+4+5+16; unsigned char count; unsigned int sum_sita=0;
for(i=1;i
fai[i-1]=fai[i]; }
fai[9]=fai_buf;
if((fai[9]-fai[8])>K3) {
fai[9]=fai[8]; }
if((fai[8]-fai[9])>K3) {
fai[9]=fai[8]; }
return (int)(fai[9]); }
void kenerl_light() {
int set_avlue; int difs;
int pwm_temp; get_mid_aulve();
//Curr_Zhou_angle=Trans_Angle(AccessResult[0],1); //Curr_ban_angle=Trans_Angle(AccessResult[1],2);
set_avlue=AccessResult[1]-Curr_Zhou_angle;//当前的轴的角度. set_avlue=0-set_avlue; if(set_avlue>300) {
set_avlue=set_avlue+100; }
difs=set_avlue/K1-AccessResult[0]+Curr_ban_angle; pwm_temp=K2*difs; if(pwm_temp>=0) {
pwm_aulve=pwm_temp; if(pwm_aulve>3000) {
pwm_aulve=3000; }
if(pwm_aulve
pwm_aulve=0; }
pwm_change1(pwm_aulve,1); } else {
pwm_aulve=65536-pwm_temp; if(pwm_aulve>3000) {
pwm_aulve=3000; }
if(pwm_aulve
pwm_aulve=0; }
pwm_change1(pwm_aulve,0); } }
unsigned int Trans_Angle(unsigned int Hex_Val,unsigned char y) {
int adc_dif=0;
//unsigned long caltmp=0,Curr_Volt=0; unsigned long Angle=0; if(y==1) {
//Zhou_Zero_Adc为轴不动在中点的寄存器内为转换为电压值的值 adc_dif=Hex_Val-Zhou_Zero_Adc; zhou_angle_dir=0;//大于零度方向 if(adc_dif
adc_dif=65536-adc_dif; zhou_angle_dir=1;
Angle=adc_dif/zhou_0_1_Fu; }
Angle=adc_dif/zhou_0_1_Zhe; }
if(y==2) {
adc_dif=Hex_Val-Ban_Zero_Adc; ban_angle_dir=0; if(adc_dif
adc_dif=65536-adc_dif; ban_angle_dir=1;
Angle=adc_dif/ban_0_1_Fu; }
Angle=adc_dif/ban_0_1_Zhe; }
return (Angle) ; }
void get_angle_temps() {
Zhou_Zero_Adc=x_ad[0]; Ban_Zero_Adc=y_ad[0];
zhou_0_1_Zhe=x_ad[1]-x_ad[0]; zhou_0_1_Zhe=zhou_0_1_Zhe/6; zhou_0_1_Fu=x_ad[0]-x_ad[2];
zhou_0_1_Fu=zhou_0_1_Fu/6;
ban_0_1_Zhe=y_ad[0]-y_ad[1]; ban_0_1_Zhe=ban_0_1_Zhe/6; ban_0_1_Fu=y_ad[2]-y_ad[0]; ban_0_1_Fu=ban_0_1_Fu/6; }