洛阳理工学院毕业设计(论文)
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;