基于单片机的智能停车场管理系统毕业论文设计 下载本文

洛阳理工学院毕业设计(论文)

4.2 设计要点

1. 振荡电路是由电感和电容组成的,在每次检测完毕后,由于振荡频率的变化,在电容上可能有多余的电荷存在,经过若干次检测后,积累的电荷将击穿电容,使设备不能正常工作。所以在设计电路时应该考虑振荡电路的保护电路。

2. 上述设计思想只是就一个检测器连接一个地感线的情形。而在实际应用中,一般检测要连接2~4个地感线圈,可以同时检测多个车道。这些线圈分别埋在相邻车道下。因此,振荡电路起振后,线圈之间可能会引入干扰,另外,电感或电容元件老化也会引起工作误差。

3. 根据试验结果,各种干扰和有车通过时都会引起中心频率的偏移。为了保证系统不会因为干扰而发生误操作,据干扰和锁引起中心频率偏移的程度不同,预先设定一个阈值,作为判断有车无车的界限,当中心频率f偏移大于该阈值时,为有车通过,反之认为无车通过[18]。

4.3 编制软件程序

车位诱导程序: 系统初始化:

一般情况,直接调用此函数将单片机系统时钟设置在72MHz SystemInit();

程序中经常要用到延时函数,在这里为了提高CPU工作效率,不再使用死等待的演示方式,而是采用定时器作延时。

void Delay_Configuration(u8 SYSCLK) {

RCC_APB1PeriphClockCmd(Delay_RCC_APB1Periph_TIMx,

SYSCLK,

ENABLE);

TIM_PrescalerConfig(Delay_TIMx,

TIM_PSCReloadMode_Update);

}

超声波检测模块初始化

26

洛阳理工学院毕业设计(论文)

//超声波软件系统初始化 void Sonic_Init(void) {

Sonic_RCC_Configuration(); Sonic_GPIO_Configuration(); Sonic_NVIC_Configuration(); Sonic_TIM_Configuration();

}:

//打开超声波需要使用的系统资源的时钟 void Sonic_RCC_Configuration(void) {

RCC_APB2PeriphClockCmd(SONIC_RCC_APB2Periph_GPIOx_OU

T|SONIC_RCC_APB2Periph_GPIOx_IN,ENABLE);//打开时钟

BLE);

}

//这里设置超声波检测所需要的引脚的相应功能 void Sonic_GPIO_Configuration(void) {

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB1PeriphClockCmd(SONIC_RCC_APB1Periph_TIMx,ENA

/*············波形输出 驱动超声波···········*/

GPIO_InitStructure.GPIO_Pin = SONIC_GPIO_Pinx_IN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

27

GPIO_InitStructure.GPIO_Pin=SONIC_GPIO_Pinx_OUT; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//!!!!!!!!!! GPIO_Init(SONIC_GPIOx_OUT,&GPIO_InitStructure);

洛阳理工学院毕业设计(论文)

}

GPIO_Init(SONIC_GPIOx_IN, &GPIO_InitStructure);

//打开中断,设置中断优先级 void Sonic_NVIC_Configuration(void) { 优先级

NVIC_InitStructure.NVIC_IRQChannel=SONIC_TIMx_IRQn;//使能NVIC_InitTypeDef NVIC_InitStructure;

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

//设置

外部中断线1(IRQ通道)

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0; //

先占优先级

先级

}

//定时器的初始化配置

void Sonic_TIM_Configuration(void) {

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; TIM_ICInitTypeDef TIM_ICInitStructure;

/*通用定时器配置*/

TIM_TimeBaseStructure.TIM_Period =65535;

//TIMx->ARR 设

NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; NVIC_Init(&NVIC_InitStructure);

NVIC_InitStructure.NVIC_IRQChannelSubPriority=0; //从优

置自动装载值

TIM_TimeBaseStructure.TIM_Prescaler =72;

//TIMx->PSC 设

置预分频器值

28

洛阳理工学院毕业设计(论文)

TIM_TimeBaseStructure.TIM_ClockDivision =TIM_CKD_DIV1;//设

置时钟频率

TIM_TimeBaseStructure.TIM_CounterMode

=

TIM_CounterMode_Up; /选择计数器模式

TIM_OCStructInit(&TIM_OCInitStructure); //默认参数 TIM_TimeBaseInit(SONIC_TIMx, & TIM_TimeBaseStructure);

TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;//模式1设置输出比较3模式

TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //设置为输出

TIM_OCInitStructure.TIM_Pulse =21; //设置捕获比较寄存

器4值即占空长度

TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;//置输出极性-高电平

TIM_OC4Init(SONIC_TIMx, &TIM_OCInitStructure); //初始化TIMx通道4.

TIM_OC4PreloadConfig(SONIC_TIMx,

TIM_OCPreload_Enable);

//TIMx->CCMR2 OC4PE 输出比较4的预加载使能位

TIM_PWMIConfig(SONIC_TIMx, &TIM_ICInitStructure); /* Select the TIM3 Input Trigger: TI2FP2 */

TIM_SelectInputTrigger(SONIC_TIMx, TIM_TS_TI2FP2); /* Select the slave Mode: Reset Mode */

29

TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;

TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; TIM_ICInitStructure.TIM_ICFilter = 0x0;