STM32智能小车实验-Encoder原理与应用

需积分: 10 8 下载量 116 浏览量 更新于2024-07-11 收藏 531KB PPT 举报
"该资源是一份关于智能小车实验的精讲PPT,重点讲解了Encoder的使用。实验中使用的智能小车基于STM32处理器,具有红外光电传感、霍尔编码反馈和直流电机伺服驱动等功能,可用于学习嵌入式处理器开发和高级算法设计。实验内容包括ADC_DMA、ADC_Temperature、Encoder等多个方面,其中Encoder实验介绍了如何通过电机的码盘脉冲计算小车的行驶路程和速度,并利用Encoder1A和Encoder1B的相位差判断电机的正反转。" STM32处理器在智能小车中的应用 STM32是由意法半导体公司推出的基于ARM Cortex-M3内核的32位微控制器,广泛应用于各种嵌入式系统。在这个智能小车实验中,采用的是STM32F103CBT6型号,它拥有48个引脚,128KB的闪存,适用于工业级温度范围,支持多种功能如ADC、DMA、TIMERS和USART等,能够满足智能小车所需的复杂控制需求。 Encoder在智能小车中的作用 Encoder,也称为编码器,常用于精确测量旋转角度和速度。实验中提到的电机配备码盘,每转360度会产生3个脉冲,通过监测Encoder1A和Encoder1B的脉冲数量,可以准确计算出小车的行进距离。此外,由于这两路信号存在相位差,可以轻松判断电机的转动方向。例如,当电机正转时,Encoder1A为高电平,Encoder1B为低电平;反转时,两者状态相反。通过将这些信号连接到D触发器,可以得到一个Direction1信号,根据其高低电平变化,实时判断电机的正反转状态。 其他实验介绍 除了Encoder实验,这个系列还包括ADC_DMA、ADC_Temperature等实验。ADC_DMA实验涉及直接存储器访问(DMA),它允许数据在内存和外设之间直接传输,无需CPU干预,提高了数据处理的效率。ADC_Temperature实验利用STM32内置的温度传感器,将模拟温度信号转换为数字值,以获取环境温度。 通过这些实验,学生可以深入理解STM32处理器的基本资源和工作原理,同时学习如何编写相关算法,实现智能小车的避障、巡线等智能化功能。这些实验不仅有助于掌握嵌入式系统设计,也为未来更高级的物联网应用打下坚实基础。

void S1mmeSession::CtEncodeKqi(S1MMEKQI* kqi, S1APNode* p_node, uint8_t worker_id) { MsgCommonInfo& common = p_node->GetCommonInfo(); SPUserInfo& sp_user_info = p_node->GetUserInfo(); //获取 buf TlvEncoder* p_encoder_cur = g_p_encoder_[worker_id]; YdCDR_T* p_dst_data = (YdCDR_T*)malloc(sizeof(YdCDR_T)); if (p_dst_data == NULL) { return; } p_dst_data->not_associate = 0; if ((common.not_associate & 0x03) == 0x03) p_dst_data->not_associate = 1; p_encoder_cur->Set(p_dst_data->cdr_data,kMaxOneCdrBufLen); uint64_t imsi = sp_user_info->GetIMSI(); if(common.eci == 0) { common.eci = sp_user_info->GetEci(); } uint16_t tmp_enbid = common.tac;//>>8; //uint32_t tmp_enbid = (common.eci >> 8)&0xfffff; char xdrid_str[32]={0}; #ifdef OPEN_NEW_HUISU convert_xdrid_to_string(xdrid_str, kqi->xdrid, s_xdr_id_len); #else #ifdef OPENCTPR g4sigtran::pr::ProcBlock* p_blk = kqi->binary_block_in_xdr_.GetBlock(); p_blk->SerializeXid(xdrid_str, sizeof(xdrid_str)); #else uint64_t subcdrid = g_ct_xdr_id.GetXid(); //reverse subend; if(::is_open_reverse) { SetReverseSubend(p_node, subcdrid); } #ifdef ONE_THIRD_YUNNAN_MRO g_ct_xdr_id.Serialize((uint8_t*)xdrid_str, s_xdr_id_len, imsi); #else g_ct_xdr_id.Serialize((uint8_t*)xdrid_str, s_xdr_id_len); #endif #endif #endif struct timespec start_time = kqi->request_time_, end_time = kqi->response_time_; if (kqi->request_time_.tv_sec == 0) { if (!(kqi->response_time_.tv_sec == 0)) { start_time = kqi->response_time_; } else if (!(kqi->complete_time_.tv_sec == 0)) { start_time = kqi->complete_time_; } } if (!(kqi->complete_time_.tv_sec == 0)) { end_time = kqi->complete_time_; } if (end_time.tv_sec == 0) { end_time = start_time; } p_encoder_cur->SetHdr(kEncoderCdr, kqi->kqi_type_, current_time_.tv_sec, worker_id); //child_kqi //p_encoder_cur->Add("0", kExportTagChildKqi);什么意思

2023-06-11 上传