} }
void SetMotorfan()//反转与正传原理相同,只是颠倒了通电顺序。
{
switch(MotorStep) { case 7: if(TIM) { P1OUT = 0x1A; MotorStep = 0; TIM=0; }
break; case 6:// AB if(TIM)
{ P1OUT = 0x14; MotorStep = 7; TIM=0; }
break; case 5://B if(TIM) {
P1OUT = 0x15; MotorStep = 6; TIM=0; }
break; case 4://BC
if(TIM) {
P1OUT = 0x11; MotorStep = 5; TIM=0; }
break;
case 3://C if(TIM) {
P1OUT = 0x13; MotorStep = 4;
TIM=0; }
break;
case 2://CD if(TIM) {
P1OUT = 0x03; MotorStep = 3; TIM=0; }
break;
case 1://D if(TIM) {
P1OUT = 0x07; MotorStep = 2; TIM=0; } break; case 0://DA if(TIM)
{
P1OUT = 0x06; MotorStep = 1; TIM=0; }
break;
}
总之,通过不停地扫描信号是否被接收,若信号被接收就调用子函数void SetMotorzheng()或SetMotorfan(),即可完成四相步进电机的八拍方式的转动。
定时器中断:
#pragma vector=TIMER0_A0_VECTOR __interrupt void Timer_A (void) {
// Toggle P1.0 //CCR0 = 50000;// Add Offset to CCR0
CT++;//CT数值加一。
if(CT>=speed)//若CT数值大于已设定的Speed数值,则执行IF语句。
{
TIM=1;//将TIM赋值为1,即执行在Switch语句中IF
的功能,也就是说完成调速的功能。
CT=0;//将CT重新复制为0,继续在中断程序中判断。
} }
八、总结与感想
持续一年的的科研训练终于圆满完成了。首先感谢王宏波老师对我们的耐心指导和关心,给我们调整思路,指引研究方向,让我们在实验研究中少走了许多弯路。而且特别要感谢学姐在此次实验中对我们的帮助,特别是在msp430单片机方面的教导。
在实验中,我们遇到了挺多问题,例如I/O端口的输入输出设置,步进电机的转速设置过低将会出现震动,按键的高电平只有0.1V达不到要求,必须设置内部寄存器,利用上拉电阻将其电位拉至高电平,达到设置的要求。最终,还是得通过c++语言的编写使得电机进行旋转,从而满足我们的实验要求。
在编程中,我们遇到很多的问题,在实验中,我们遇到很多的困难,但是,在王老师的悉心教导下,我们静下心来去思考,最终我们仍旧能解决问题,问题是不会解决完的,留给我们的挑战是不会结束的,困难反而是我们前进的动力,反而更加能促使我们获得知识,取得进步。科研训练对于我们来说,不仅仅只是一次普普通通的实验,而是使我们学会全面地认识,处理某项任务,从搜集信息到筛选信息,从明确方向到开始着手执行,从发现问题到解决问题,中间的每一个环节我们都得到了锻炼。所以,这是在我们大学上的一堂非常重要的课,一堂与社会接轨的课。