关于智能小车基于STM32和传感器码盘的测速

​​​​​​(智能小车)STM32+L298N+光电/霍尔传感器+串口/OLED屏测速,测速值通过IIC可以显示到OLED,亲测。(程序代码注释详细)_m0_54195456的博客-CSDN博客

光电传感器有遮挡时,输出高电平;无遮挡,输出低电平。我们接受到一次低电平时,把这个脉冲加一,轮子上有编码圈一圈可以让脉冲累加20次。我用了2个定时器和两个外部中断,定时器分别用来仿PWM输出和定时,外部中断分别用来光电传感器的输出(输出的高低电平会输入到单片机的IO口)和按键输入控制电机转动。现在PWM输出暂时可以不用管。定时器定时1ms秒,检测是否接受到传感器输入脉冲,计时1S后将脉冲累计的值(该值设为num)num/20返回我们的结果为每秒轮子所转的圈数。将该结果每秒的转速显示到OLED上,当然,也可以自己稍微修改代码用串口输出并显示。

下面来看测速用到的几个代码段

//触发传感器输入 void INIT_GD(void) //Key0  {     GPIO_InitTypeDef GPIO_InitStruct;  //结构体 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);  //时钟GPIO_InitStruct.GPIO_Pin  = GPIO_Pin_0;   GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPD; //下拉GPIO_Init(GPIOB, &GPIO_InitStruct);}
 //定时器4void TIM4_inIt(void){//结构体TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;NVIC_InitTypeDef NVIC_InitStructure; //时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //配置中断NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn; //TIM3通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //子优先级NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能NVIC_Init(&NVIC_InitStructure); //配置TIM_TimeBaseStructure.TIM_Period = 999; //重装载寄存器TIM_TimeBaseStructure.TIM_Prescaler =71; //预分频TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM4向上计数TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //配置 TIM4TIM_Cmd(TIM4, ENABLE); //使能TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE ); //开启定时器4,
//进入一次中断1Msvoid TIM4_IRQHandler(void)  {if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET) //1ms{TIM_ClearITPendingBit(TIM4, TIM_IT_Update );time++; //测每秒的转速,每一秒更新一次if(Key0 == 1)flag=1;if(Key0==0 && flag==1){flag=0; //清除标志num=num+1; //传感器触发次数}if(time == 1000) //计时1S,计算转速{Circle=num/20; //转速time=0; num=0;    } }}

详细代码链智能小车基于STM32的测速,亲测https://blog.csdn.net/m0_54195456/article/details/121042194

 

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值