2019电赛a题资源整合

自启动方案
本程序仅涉及电动小车的自启动方案,不涉及其它功能。

思路
利用一个单独的单片机控制一个LED灯,LED灯的亮灭由题目给定的时间控制,当时间到达时,LED灯熄灭。电动小车上装有光敏传感器,一旦发现LED灯熄灭,即可启动。

题目
一、任务
设计并制作一个无线充电电动小车及无线充电系统,电动小车可采用成品车 改制,全车重量不小于 250 g,外形尺寸不大于 30cm×26cm,圆形无线充电装置 发射线圈外径不大于 20cm。无线充电装置的接收线圈安装在小车底盘上,仅采用 超级电容(法拉电容)作为小车储能、充电元件。
二、要求

  1. 基本要求
    (1) 小车能通过声或光显示是否处在充电状态。
    (2) 小车放置在 A 点,接通电源充电,60 秒时断开电源,小车检测到发射线 圈停止工作自行起动,沿引导线行驶至 B 点并自动停车。
    (3) 小车放置在 A 点,接通电源充电,60 秒时断开电源,小车检测到发射线 圈停止工作自行起动,沿引导线行驶直至停车(行驶期间,4 个发射线 圈均不工作),测量小车行驶距离 L1,L1 越大越好。
  2. 发挥部分
    (1) 小车放置在 A 点,接通电源充电并开始计时;60 秒时,小车自行起动 (小车超过 60 秒起动按超时时间扣分),沿引导线单向不停顿行驶直至 停车(沿途由 4 个发射线圈轮流动态充电);180 秒时,如小车仍在行驶, 则断开电源,直至停车。测量小车行驶距离 L2,计算 L=L2-L1,L 越大越 好。
    (2) 在发挥部分(1)测试中,测量直流稳压电源在小车开始充电到停驶时间 段内输出的电能 W,计算 K= L2/W,K 越大越好。
    (3) 其他。
#include "driverlib.h"

#define KEY1 GPIO_getInputPinValue( GPIO_PORT_P2, GPIO_PIN1)
#define GPIO1 GPIO_getInputPinValue( GPIO_PORT_P3, GPIO_PIN0)
#define GPIO2 GPIO_getInputPinValue( GPIO_PORT_P3, GPIO_PIN1)

/*
#include  "msp430f5529.h"

#define CPU_F ((double)25000000)
int count=0;
void Time_Init(void)
{
  TA1CTL=TACLR+TAIE+MC_1+TASSEL_1;//3W2768HZ
  TA1CCR0=32767;
  _EINT();
}
#pragma vector=TIMER1_A1_VECTOR
__interrupt void Timer1_A1(void)
{
  switch(TA1IV)
  {
  case TA1IV_TACCR1:break;
  case TA1IV_TACCR2:break;
  case TA1IV_TAIFG:P1OUT^=BIT0;break;
  }
}
*/

void Delay_ms(int nr){
  for(short i=0;i<nr; i++){
       __delay_cycles(8000);
    }
}

void Delay_s(int nu)
{
  for(int i=0; i<nu; i++)
  {
    Delay_ms(63);
  }
}

void main(void)
{
    //Stop watchdog timer
    
    WDT_A_hold(WDT_A_BASE);

    //Set P1.0 to output direction
    GPIO_setAsOutputPin( GPIO_PORT_P1, GPIO_PIN0 );
    GPIO_setOutputLowOnPin( GPIO_PORT_P1, GPIO_PIN0 );//灭灯
	
//    //Set P1.4 to input direction
//    GPIO_setOutputHighOnPin(
//        GPIO_PORT_P2,
//        GPIO_PIN1
//        );
    
    //GPIO_setAsInputPinWithPullUpresistor(GPIO_PORT_P2, GPIO_PIN1);
    GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P2, GPIO_PIN1);
    GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P3, GPIO_PIN0);
    GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P3, GPIO_PIN1);
	
    while(1)
    {
	  	if(GPIO1)	//常亮1x
		{
			GPIO_setOutputHighOnPin( GPIO_PORT_P1, GPIO_PIN0 );
			break;
		}
		else	//非常亮
		{
			if(GPIO2)//直接60s 01
			{
				GPIO_setOutputHighOnPin( GPIO_PORT_P1, GPIO_PIN0 );//亮灯
				Delay_s(125);//本来应该是60,不知为何120,实际时间57s

				GPIO_setOutputLowOnPin( GPIO_PORT_P1, GPIO_PIN0 );//灭灯
				break;
			}
			else//按键按下后60s 00
			{
			  	while(1)//按键管脚默认高电平
				{
					if(KEY1==0)//按下
					{
					  	Delay_ms(10);
						while(KEY1 == 0);//没松开
						break;
					}
				}				
				GPIO_setOutputHighOnPin( GPIO_PORT_P1, GPIO_PIN0 );//亮灯
				Delay_s(125);
				GPIO_setOutputLowOnPin( GPIO_PORT_P1, GPIO_PIN0 );//灭灯
				
//				Delay_s(1);
//				GPIO_setOutputHighOnPin( GPIO_PORT_P1, GPIO_PIN0 );//亮灯
				break;
				
			}
		}
	}
	while(1);

}

//        //Test P1.4
//        if(GPIO_INPUT_PIN_HIGH == GPIO_getInputPinValue( GPIO_PORT_P2, GPIO_PIN1 ))
//        {
            //if P1.4 set, set P1.0
//            Delay_s(10);
//            GPIO_setOutputLowOnPin( GPIO_PORT_P1, GPIO_PIN0 );
//            Delay_s(10);
//            GPIO_setOutputHighOnPin( GPIO_PORT_P1, GPIO_PIN0 );
//        }
//        else
//        {
            //else reset
            
//        }
    
  
  /*    
  WDTCTL=WDTPW+WDTHOLD;
  P1DIR=0XFF;
  P1OUT=0X00;
  Time_Init();
  while(1)
  {
  }
  */ 
————————————————
版权声明:本文为CSDN博主「走南闯北声东击西」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/I_LOVE_MCU/article/details/99238831

————————————————
版权声明:本文为CSDN博主「走南闯北声东击西」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/I_LOVE_MCU/article/details/99238831

硬件篇

小车的硬件循迹电路:

使用光敏电阻,它能够检测外界光线的强弱,外界光线越强光敏电阻的阻值越小,外界光线越弱阻值越大,当红色LED光投射到白色区域和黑色跑道时因为反光率的不同,光敏电阻的阻值会发生明显区别,便于后续电路进行控制。

芯片LM393随时比较着两路光敏电阻的大小,当出现不平衡时(例如一侧压黑色跑道)立即控制一侧电机停转,另一侧电机加速旋转,从而使小车修正方向,恢复到正确的方向上,整个过程是一个闭环控制,因此能快速灵敏地控制。
在这里插入图片描述
小车的硬件自启动电路:

上图右边VCC与GND为接收线圈的正负极,用来给电路供电,在充电时间内,二极管正向供电导通,使继电器工作,接收线圈直接供电给超级电容,60s过后当接收线圈停止供电时,继电器停止工作,超级电容直接给小车进行供电,且因为有二极管反向不导通的特性,所有的电全部流入小车,使之进行工作
在这里插入图片描述
在这里插入图片描述

软件篇


#include "msp430f5529.h"

#include"I2C_OLED.H"

#include"zimo.h"

#define CPU_F ((double)1000000)

#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))  //定义宏,延时

void GO0(void) //oled显示 “准备充电”

{

    I2C_OLED_Init();

    OLED_P16x16Ch(26,3,32);

    OLED_P16x16Ch(46,3,33);

    OLED_P16x16Ch(66,3,34);

    OLED_P16x16Ch(86,3,35);

}

void GO1(void) //oled显示  “充电完成”

{

    I2C_OLED_Init();

    OLED_P16x16Ch(26,3,34);

    OLED_P16x16Ch(46,3,35);

    OLED_P16x16Ch(66,3,36);

    OLED_P16x16Ch(86,3,37);

}

void OFF(void)     //继电器全断

{



    P2OUT&=~BIT3;

    P2OUT&=~BIT6;

    P8OUT&=~BIT1;

    P8OUT&=~BIT2;

}

void ONB(void)     //继电器开b

{



    P2OUT|=BIT3;

    P2OUT&=~BIT6;

    P8OUT&=~BIT1;

    P8OUT&=~BIT2;

}

void ONA(void)      //继电器开a

{



    P2OUT&=~BIT3;

    P2OUT|=BIT6;

    P8OUT&=~BIT1;

    P8OUT&=~BIT2;

}

void ONC(void)       //继电器开c

{



    P2OUT&=~BIT3;

    P2OUT&=~BIT6;

    P8OUT|=BIT1;

    P8OUT&=~BIT2;

}

void OND(void)       //继电器开d

{



    P2OUT&=~BIT3;

    P2OUT&=~BIT6;

    P8OUT&=~BIT1;

    P8OUT|=BIT2;

}



int main(void)

{

    WDTCTL = WDTPW+WDTHOLD;                 //关闭看门狗

    P2DIR|=(BIT0+BIT3+BIT6+BIT5+BIT7);      //定义引脚为输出方向

    P8DIR|=(BIT1+BIT2);

    P1DIR|=BIT6;

    P2OUT|=BIT7;                            //定义引脚为高电平输出

    P1OUT|=BIT6;

    int a;

    a=60;

    OLED_CLC();                             //oled清屏

    GO0();



    OFF();

   while(P2IN & BIT4);                      //启动开关被触发

  {

       P1OUT&=~BIT6;                      / /蜂鸣器模块响一下

       delay_ms(100);

       P1OUT|=BIT6;

       OLED_CLC();

       ONB();

      for (a; a>=0; a--)                    //60s倒计时 同时oled显示时间

   {

       show_Num(55,3,a,2,30);

       delay_ms(1000);

   }

       OFF();

       P1OUT&=~BIT6;

       delay_ms(100);

       P1OUT|=BIT6;

       OLED_CLC();

       GO1();

  }

       while (1)

       {



             if(P3IN & BIT7);     //五个霍尔传感器的检测程序,当有信号时,打开相应的继电器

                 else{

                  ONA();

                 }

              if(P1IN & BIT3);

                 else{

                  ONB();

                     }

              if(P7IN & BIT4 );

                else{

                  ONC();

                     }

             if(P1IN & BIT4);

                  else{

                  ONC();

                      }

             if(P1IN & BIT5);

                  else{

                  OND();

                      }



          }





}
  • 5
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
2019电赛C是关于仿真的目,要求设计电动车运动模型并进行仿真分析。仿真技术是一种通过计算机模拟实现对真实世界问的解决方案的方法,可以减少实物实验的时间和成本,提高实验的稳定性和可复制性。 对于电动车运动模型的设计,我们首先需要考虑车辆的动力学方程。根据牛顿第二定律,电动车的加速度与推力和质量成正比,与阻力和质量成反比。因此,我们可以建立如下的电动车动力学方程: ma = T - R - Fm 其中,m为电动车质量,a为加速度,T为电动机输出的推力,R为滚动阻力,Fm为空气阻力。 为了模拟电动车在不同道路条件下的运动表现,我们还需要考虑电动车的角度和速度对其稳定性和操控性的影响。为此,我们可以在基本的动力学方程上增加角度和速度项,得到更完整的电动车运动模型。 通过以上的模型,我们可以进行仿真分析。根据具体问的设定,我们可以通过改变电机推力、不同道路条件下的阻力以及车辆质量等参数,来模拟电动车在不同工况下的行驶情况。我们还可以考虑其他因素,如电池电量、驱动控制策略等对电动车性能的影响。 通过仿真分析,我们可以得到电动车的加速性能、制动性能、续航里程等各项指标的数据。这些数据可以为电动车的设计和优化提供参考,也可以为电动车的驾驶和维护提供指导。 综上所述,2019电赛C要求设计电动车运动模型并进行仿真分析。通过建立电动车的动力学方程,考虑角度和速度对其运动性能的影响,我们可以进行仿真分析,得到各项指标的数据,为电动车的设计和优化提供参考。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值