2023电赛参赛感悟+H题思路+给萌新的建议

感悟分享 

    2023电赛终于落下了帷幕,经历了四天三夜的奋战,我们小组也取得了一个比较满意的成果——省二。这对于刚接触电赛的我们来说已经是一个很不错的结果了,虽然有一点小遗憾,不过大家整体都很满意。

(评论区有人问FFT怎么实现,可以参考2023电赛H题详解1 - FFT算法_高速adc fft-优快云博客

 

2023H题思路

    我们组选择的是H题:信号分离装置。据我所知,这道题我们学校选的人挺多的,别的学校选的人似乎也不少,所以竞争还是比较激烈的。

    这道题的难点在于,分离出的两路信号需要连续稳定同频显示。由于要实现的是随机频率的信号分离,所以完全的模电方案是不现实的。而数电方案需要用到FPGA,但我们不会用,所以只能将两者结合,用stm32实现。

    相信了解相关算法的同学应该能猜到我们的思路了。没错,就是先AD采样,然后用FFT算法得到A和B的频率。再根据实部和虚部求得幅度,以此判断信号是正弦波还是三角波。最后用DDS模块发出两路信号。

    如果你之前联系过2021年A题,那么FFT算法不是难点(如果不懂的可以在评论区里问我,问的人多的话我专门写一篇介绍FFT)。这道题的难点在于“同频显示”,即必须控制DDS模块发出信号A' B' 与输入信号A B 的频率差控制在一个很小的范围

    举个例子。输入信号A的频率为50000.01Hz,输出信号A'的频率为50001.01Hz,那么二者的频率差就是1Hz,同频显示时每1s会步进一个周期,那就是频漂相当严重了,基本算是寄了。

    我们使用的DDS模块为AD9833,它的工作范围为1k~1MHz,满足题目要求(20k~100k)。但它的步进为0.14Hz(商家给的,实际应该也差不多),不考虑信号源的误差,那么我们人为调整的话,能把频率差控制在0.07Hz以内,对应的就是14s漂一个周期。虽然没那么严重,但也是挺漂的,哈哈。

    所以本题的难点就是要提高DDS模块的精度。试想,如果我们把频漂控制在100s一个周期,那是不是跟本没法看出来?毕竟测评时间是有限的,老师不可能盯着你的信号看上一分钟。如果频漂控制在300s一个周期,那不就是没有漂移?

    总而言之,如果你找到了控制A与A'、B与B'的频率差的好办法,你基本上就能拿到省二了。当然,除了频漂,信号也不能有明显失真呦。

    至于具体的方案,我这里就不细说了。等我哪天有时间再发一章,感兴趣的可以去我的投稿里找一找,毕竟这是我第一次写这种类型的博客,哈哈。

一点建议

    之后就是给萌新的一些小建议了。毕竟两个月前,我们组三个人也是纯纯的萌新,既没接触过电赛,也没碰过stm32,数电没学过,模电还稀烂。在这样槽糕的条件下,靠着大家的相互鼓励和顽强毅力,硬是创出了一片天,说出去还是挺自豪的。

    1、要培养自学能力。据我了解,大多数学校在电赛备战期间能给大家提供的帮助真的很有限,所以绝对不能什么都指望老师和学长。像我们学校,这次的国赛的集训是没有集中培训的。学校只给你提供实验室,然后有一两个学长能给你答疑解惑,学长大部分时间还有事,基本全都得靠自己。这就需要你能熟练运用互联网,从网上找到各种教学。

    2、找到适合自己的教程。现在B站有很多教你嵌入式开发的视频,什么正点原子、野火之类的,优快云上也有很多教学,但不一定适合你。我们学校一开始给我们推荐了正点原子的视频,emmm,说真的,我只建议你们看前三集。这玩意对初学者来说已经不是依托答辩了,而是依托陈年答辩。都啥年代了还在教你别用cube...说真的,我们组跟着正点原子的视频浪费了一个礼拜的时间,现在想想都后悔。

    那有没有适合初学者的教学呢?有的,我这里分享几个链接,适合新入坑的小白学习。也欢迎大家在评论区里分享自己认为不错的教学。

电控入门教程/STM32系列教程.md · pocket/RoboWalker战队信息汇总 - Gitee.com

这是我初学stm32看的教程,非常棒。手把手教你怎么用cube配置ADC、DAC、PWM、串口通信、定时器中断等等。自己跟着他的教学过一遍,你就算入门stm32了。

[10-1] I2C通信协议_哔哩哔哩_bilibili

基础搞定了,下面就是进阶了。如果你是做小车的,那你学会串口通信、定时器什么的就够了。但如果你想做信号题,那你还得学复杂一点的通信协议:I2C 和 SPI 。这俩的话看江协科技的教学会比较好。不过他的教学是没用cube的,所以我建议你先学一学cube怎么配置,然后用cube完成I2C和SPI的配置。

STM32CUBEMX配置教程(十二)STM32的定时器触发的固定频率ADC采样(使用DMA)_stm32的adc采样的dma模式开启次数_怡步晓心l的博客-优快云博客

     至于其他的教程其实都是直接在优快云上搜的,我没保存,就用这个做个例子。我建议小白不要上来直接用Keil写所有代码,试着学一学Cube会方便很多。如果没用过Keil但是学过C语言编程的,可以试试CLion,也可以用cube配置,在代码补全方面比Keil好很多。

    3、确定研究方向。在对stm32有了初步了解后,小组成员就应该确定你们的选题方向了。电赛的类型主要有四类:自控信号电源其他

     自控主要是小车和无人机,信号分为两类:高频和低频。低频主要是仪器仪表类,难度适中,适合新手入门;高频主要是无线电,即信号的调制与解调,需要有数电基础,且能熟练运用FPGA,难度较大。电源要看你们学校有没有相关资源,据我所知是有难度的。其他包括机器学习、物联网之类的,今年应该没考。

     最后,祝所有参加电赛的同学们取得好成绩!

### 目分析 2023全国大学生子设计竞中,气垫悬浮小车的目是高职高专组的I。该目要求设计并实现一辆基于气垫悬浮技术的小车,能够完成基本的悬浮、寻迹运行任务,并具备避障和语音播报功能。目对小车的外形尺寸、池更换时间以及寻迹线宽度等细节进行了详细规定[^2]。 #### 1. **基本功能要求** - **悬浮控制**:启动后车辆应缓慢升起并悬停。 - **寻迹运行**:完成逆时针方向的道寻迹运行一周,并在标识线A和B之间往返运行。 - **路径识别**:使用合适的传感器(如红外或摄像头)进行路径识别,确保小车沿预定路线运行。 #### 2. **发挥部分** - **避障功能**:在道上设置障碍物,小车需具备避开障碍物的能力。 - **语音播报**:当遇到障碍物时,系统需发出提示音,并在停车后进行定位检测。 #### 3. **硬件设计方案** - **主控芯片**:采用STM32F103作为核心控制器,负责整体逻辑控制与数据处理。 - **驱动模块**:使用L293D机驱动芯片来驱动风机和运动机。 - **传感器模块**: - **高度检测**:通过压力传感器或超声波传感器检测悬浮高度。 - **路径识别**:使用红外线传感器阵列或摄像头进行图像识别。 - **障碍物检测**:使用超声波传感器或激光雷达进行前方障碍物检测。 - **语音模块**:集成语音合成模块(如TTS模块),用于播放提示信息。 - **源管理**:使用锂池供,并配备低量检测路以确保续航能力。 #### 4. **软件控制策略** - **PID 控制**:用于悬浮高度的稳定控制,通过反馈调节风机转速。 - **路径识别算法**:采用图像处理算法(如边缘检测、霍夫变换)或红外信号强度分析来判断路径偏差。 - **避障算法**:结合超声波传感器的数据,使用简单的避障逻辑(如绕行或停止等待)。 ### 示例代码 以下是一个简单的STM32控制程序示例,用于控制机驱动模块和读取传感器数据: ```c #include "stm32f10x.h" void Delay_ms(uint32_t nTime); int main(void) { // 初始化系统时钟 SystemInit(); // 初始化GPIO RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; // 假设PA0和PA1连接到L293D的输入端 GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化定时器用于延时 SysTick_Config(SystemCoreClock / 1000); // 设置SysTick为1ms中断 while (1) { // 控制机正转 GPIO_SetBits(GPIOA, GPIO_Pin_0); GPIO_ResetBits(GPIOA, GPIO_Pin_1); Delay_ms(1000); // 停止机 GPIO_ResetBits(GPIOA, GPIO_Pin_0); GPIO_ResetBits(GPIOA, GPIO_Pin_1); Delay_ms(1000); } } // 简单的毫秒级延时函数 void Delay_ms(uint32_t nTime) { for (; nTime > 0; nTime--) { for (volatile uint32_t i = 0; i < 1000; i++); } } ``` ### 相关问 1. 气垫悬浮小车的传感器选型有哪些推荐? 2. 如何实现气垫悬浮小车的避障功能? 3. STM32如何与L293D机驱动芯片进行通信? 4. 在气垫悬浮小车的设计中,如何优化PID控制参数? 5. 气垫悬浮小车的源管理系统应该如何设计?
评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值