ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

STM32按摩椅毕设实战:从原理图到源码全解析

STM32按摩椅毕设实战:从原理图到源码全解析 每年毕业设计选题季都有学弟学妹来问我STM32单片机项目到底做什么既能学到东西又好过审我一般会推荐按摩椅这个方向。它涵盖了电源、电机驱动、传感器采集、人机交互属于典型的运动控制系统项目又不至于复杂到一个人做不完。这篇文章就基于我反复带过的“基于STM32单片机的按摩椅原理图源码”方案把从选题、画原理图、写源码到调试答辩的完整链路拆开讲希望能帮正在准备毕设的你少走几个月的弯路。按摩椅这类项目的最大优点是“看得见、摸得着”老师一眼能看出你做了实物演示效果又直观整个系统的知识点密度也比单纯的智能家居、温湿度监测高不少。尤其是当你用STM32F103C8T6作为主控把揉捏、敲击、加热、过流保护这些功能一个个跑通之后你会发现自己对单片机的理解完全上了一个台阶。下面我按实际开发顺序展开尽量把每一步的“为什么”也讲清楚。1. 做按摩椅毕设为什么我从51叛逃到STM321.1 按摩椅不是一个“电机转起来”的小项目很多人一听按摩椅觉得不就是让电机转吗51单片机点个灯、转个电机也会那直接上51不就行了其实真不是这么回事。你去拆一个正经按摩椅会发现背后是一个完整的机电系统背部揉捏头要沿着导轨上下移动敲击机构用偏心轮产生高频捶打还有振动电机、加热垫、限位开关、过流检测、按键或遥控器交互。这些东西要同时工作而且动作之间还有时序配合。简单算一下需求以一套基础版按摩椅为例通常需要4路直流减速电机揉捏、敲击、行走、振动每路电机要有正反转和PWM调速需要3到4个限位开关去检测揉捏头的上下极限位置需要1路ADC去采样电机电流做堵转过流保护还要有加热控制、OLED显示、按键输入。这样一个系统对单片机的外设数量和实时性要求都不低。51单片机你仔细看会发现资源非常紧张。以经典的STC89C52为例主频12MHz没有硬件PWM你要输出多路PWM只能靠定时器中断软件翻转IO口。软件模拟一路PWM还好四路同时模拟CPU占有率直接爆表电机稍微一转按键响应就和喝了假酒一样迟钝更别提还要处理ADC采样和状态机。这不是代码水平问题是硬件资源根本不够用。1.2 单片机的选型对比为什么F103C8T6是性价比之王我做过几次方案对比最终每次都会回到STM32F103C8T6这颗芯片上。它有一个很明显的优势外设资源丰富价格却只比51贵几块钱。给学弟学妹选型时我习惯做一张对比表对比项STC89C52STM32F103C8T6STM32F030C8T6主频12MHz72MHz48MHz核心8位 805132位 Cortex-M332位 Cortex-M0Flash/RAM8KB / 512B64KB / 20KB64KB / 8KB硬件PWM无多路16位定时器PWM多路16位定时器PWMADC8位12位多通道12位多通道通信接口1路UART3路UART SPI I2C USB CAN多路UART SPI I2C参考价格3-5元10-15元8-12元开发资料丰富度很好极好一般F103C8T6有3个通用16位定时器加1个高级定时器这意味着你可以快速输出多路独立PWM2个12位ADC采样电流和NTC温度完全够用72MHz的主频跑一个多任务状态机绰绰有余。有人问为什么不上F407VET6或者干脆用ESP32我的观点是毕设项目讲究“够用且能讲清楚”。F407性能溢出价格和开发复杂度也上去了ESP32更偏物联网方向对电机控制的硬件资源反而不如F103顺手。F103C8T6资料全、例程多就算做到一半卡住了上网搜问题的成功率也高得多。买一个蓝丸开发板十几块钱搭配自制的驱动板或者模块成本完全在可控范围内。当然近几年STM32价格波动比较大F103系列在某些渠道已经涨了不少如果预算更紧张也可以用国产GD32E103C8T6或者MM32替代引脚基本兼容代码只需要改芯片头文件和启动文件原理图几乎不用动。不过对初学者来说资料最多的还是ST原厂我建议第一次做还是先用最经典的F103C8T6。2. 原理图设计的模块化拆解电源、驱动、采集各管一摊2.1 先画电源树220V到3.3V的每一级都要算清楚按摩椅是强电和弱电混合的系统原理图设计的第一步不是画STM32最小系统而是先把电源树想清楚。我这里说的强电主要是指220V进线到适配器就结束了。你不要自己去画一个220V转直流的开关电源裸板那是电源专业的毕设工作量而且安全风险大。最稳妥的做法是买一个3C认证的24V开关电源适配器把220V隔离在成品模块之外你画的电路板上只出现安全直流电压。市面上的按摩椅电机大多是24V直流减速电机功率从几十瓦到上百瓦不等。基础版方案用24V 5A适配器120W比较稳如果只在导轨上做少量动作24V 3A也能带得动。电源树大概是这样的链路220V交流输入 → 24V直流适配器 → 24V母线直接给电机驱动板供电 → 24V经DC-DC降压到5V给主控板 → 5V经LDO输出3.3V给MCU和外设画原理图时24V母线上建议并联一个大电解电容比如1000uF/50V因为电机启动瞬间电流可能是额定电流的3到5倍没有大电容撑着母线电压会瞬间跌落可能把主控的ADC采样值都带偏。电机驱动电源入口再放一个自恢复保险丝比如额定电流3A的电机堵转时能自动切断冷却后恢复比一次性保险丝方便得多。5V降压我推荐MP1584或者LM2596模块输入都能承受24V输出5V/2A以上。要注意MP1584这类DC-DC模块的纹波比LDO大如果直接给MCU的ADC参考供电采样会有抖动。所以我一般这么分DC-DC先出5V5V经过磁珠或一个小电感后进AMS1117-3.3给MCU供电ADC参考电压直接接到3.3V稳压输出上。这样电机大电流波动不会轻易干扰到模拟采样。2.2 最小系统和电机驱动部分别踩L298N的坑STM32F103C8T6的最小系统原理图很简单核心是这几个要素8MHz无源晶振加两颗22pF负载电容NRST复位引脚接10k上拉电阻和一颗100nF去耦电容BOOT0引脚通过10k电阻接地保证从主Flash启动SWD调试四个引脚SWDIO、SWCLK、GND、3.3V引出来。电源引脚每个VDD/VDDA都放一颗100nF的陶瓷电容并在靠近芯片的地方加一颗10uF钽电容。很多同学画完板子发现程序下载不了查来查去多半是BOOT0悬空或者晶振负载电容算错这两个问题要先排查。电机驱动部分是整个原理图里最容易翻车的地方。很多教程会让用L298N理由是便宜、资料多、网上一堆模块。我确实用过但每次都被它折磨得不行L298N用的是达林顿管结构饱和压降高达2V以上当电机电流到2A时芯片本身功耗到4到5W发热严重手都不敢碰而且PWM频率稍高一点效率就不行。对按摩椅这种要长时间连续运行的场景L298N真心不合适。我建议改用集成MOSFET的H桥驱动芯片比如TI的DRV8873或东芝的TB6612FNG。DRV8873支持6.5V到38V宽电压峰值电流3.6A导通电阻只有0.4欧左右发热量比L298N小一个量级而且自带电流检测输出IPROPI引脚实现过流保护非常方便。如果你不想画PCB直接买DRV8873模块焊接杜邦线也能跑通功能等验证完再画进板子。画驱动电路时有几个细节必须处理电机两端要并联续流二极管或者用芯片内置的续流能力否则PWM关断瞬间的反向电动势会打坏芯片驱动芯片的电源引脚要放100nF加10uF的去耦电容吸收电机换相引起的尖峰STM32给驱动芯片的PWM信号线串联一颗330欧到1k欧的电阻防止高频振铃和过冲。还有个容易被忽略的点驱动芯片的使能引脚不要悬空必须通过一个10k电阻下拉到地。这个我后面会在调试章节专门讲因为它是上电瞬间电机猛冲的常见元凶。2.3 限位、过流和温度采集反馈电路决定了成品率按摩椅的揉捏机构一定要有导轨和上下极限限位不然揉捏头走到头了还不知道电机硬顶轻则烧驱动重则损坏机械结构。限位开关可以用微动开关或者光电开关原理图很简单开关一端接3.3V另一端接STM32的GPIO且GPIO内部配置为下拉输入。开关断开时读到低电平触发闭合时读到高电平。如果机械结构震动大建议在开关输出端加一颗100nF电容对地做硬件滤波再配合软件消抖。过流检测是按摩椅实现安全保护的关键。如果用DRV8873它的IPROPI引脚会输出一个与负载电流成比例的电流通常比例系数在3000到5000左右把这个电流通过一个电阻转换成电压信号再送进STM32的ADC采样就能实时读到电机电流。我的做法是选一个1k欧的采样电阻让电流信号电压落在0到3.3V范围内然后在ADC引脚前加一个RC低通滤波器比如1k欧电阻加100nF电容滤掉电机换相产生的噪声。硬件上还可以在24V母线正极串一个采样电阻用运算放大器比如LM358或LMV321放大后送ADC但这个方案需要小心共模电压和放大倍数的设计对毕设来说直接用驱动芯片的电流检测输出更省事。温度采集用NTC热敏电阻最简单10k B值3950的贴片NTC加一个10k固定电阻做分压中点接STM32 ADC。这个分压值查表就能得到温度主要监测加热垫附近的温度防止加热失控。如果嫌查表麻烦也可以用DS18B20数字温度传感器单引脚读数据原理图更简洁程序上多花一点时间。我个人还是偏好NTC因为分压电路本身就是一个很好的答辩知识点老师爱问。3. 源码里最核心的几块逻辑状态机、PWM调速与过流保护3.1 工程架构与主循环别急着上RTOS很多新手一上来就想跑个RTOS觉得系统复杂跑FreeRTOS才显得高级。但实际上按摩椅这种项目执行机构就这么几个逻辑量不大用经典的前后台架构反而更清晰一个while(1)超级循环负责处理按键扫描、状态机切换、OLED刷新定时器中断负责产生PWM和定时采样。代码复杂度低答辩时也能把每一块逻辑讲得明明白白。我推荐用STM32CubeMX初始化工程勾选需要的引脚、定时器和ADC自动生成初始化代码然后在用户代码区填写业务逻辑。不是说不让你用标准外设库而是CubeMX能减少一大堆初始化代码的笔误尤其是引脚复用这种很容易犯错的地方。我见过太多自己手写初始化把AFIO配错、引脚锁死的情况调试一下就浪费一整天。你用CubeMX生成初始代码再加Keil MDK5编译效率会高很多。Keil5有一点要注意C51和STM32两个包不要装在同一个工程目录下最好分开。我之前见过学弟电脑上装了C51的Keil又装了MDK结果打开STM32工程编译报一堆莫名其妙的错误后来发现是魔术棒里的Device型号选错了。解决办法很简单卸载C51的包或者建立两个完全独立的Keil安装路径不要混着用。3.2 用定时器输出多路PWM正反转切换逻辑按摩椅每个电机都需要一路PWM调速加两个方向控制IO。以揉捏电机为例PWM用TIM2_CH1输出到PA0方向控制用PB0和PB1接H桥的IN1和IN2。PB0输出高、PB1输出低电机正转反过来反转两个都低或者都高电机停止。PWM初始化我习惯这样写void TIM2_PWM_Init(uint32_t freq, uint16_t duty_percent) { GPIO_InitTypeDef gpio_init {0}; TIM_TimeBaseInitTypeDef tim_base {0}; TIM_OCInitTypeDef tim_oc {0}; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); /* PA0、PA1复用为TIM2通道输出 */ gpio_init.GPIO_Pin GPIO_Pin_0 | GPIO_Pin_1; gpio_init.GPIO_Mode GPIO_Mode_AF_PP; gpio_init.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOA, gpio_init); /* 72MHz主频预分频72-1得到1MHz计数频率 */ tim_base.TIM_Prescaler 72 - 1; tim_base.TIM_CounterMode TIM_CounterMode_Up; tim_base.TIM_Period 1000000 / freq - 1; tim_base.TIM_ClockDivision TIM_CKD_DIV1; TIM_TimeBaseInit(TIM2, tim_base); /* PWM1模式占空比由TIM_Pulse决定 */ tim_oc.TIM_OCMode TIM_OCMode_PWM1; tim_oc.TIM_OutputState TIM_OutputState_Enable; tim_oc.TIM_Pulse (1000000 / freq - 1) * duty_percent / 100; tim_oc.TIM_OCPolarity TIM_OCPolarity_High; TIM_OC1Init(TIM2, tim_oc); TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable); TIM_ARRPreloadConfig(TIM2, ENABLE); TIM_Cmd(TIM2, ENABLE); }PWM频率这里有个讲究直流减速电机的PWM频率一般选10kHz到20kHz。低于10kHz电机运行时会发出尖锐的啸叫那是PWM频率落在人耳可听范围内听起来很刺耳高于20kHz则会增大驱动MOS的开关损耗驱动芯片会明显发热。我习惯取16kHz兼顾噪音和发热。频率确定后预分频72-1得到1MHz计数时钟重载值设为1000000/16000-161这样ARR比较小调节占空比的粒度还够用。正反转切换要注意死区逻辑。先做一件事把当前PWM输出设为0延时几个毫秒等电机真正停稳再切换方向引脚。如果不延时直接切换电机由于惯性还在转H桥瞬间换向会产生很大的冲击电流轻则触发过流保护重则损坏机械齿轮。我在代码里加了一个简单的换向函数每次切换都先调用MOTOR_STOP然后再延时20ms实测非常稳。3.3 过流保护是用ADC读出来的不是靠保险丝保险丝只是最后一道物理防线程序里的过流保护才是反应最快的保护机制。DRV8873的IPROPI引脚输出与负载电流成比例的电流信号经过采样电阻变成电压送进STM32的ADC1通道。初始化ADC为扫描模式定时器每隔10ms触发一次采样连续采8次取平均避免电机电流噪声导致误判。uint16_t get_motor_current_adc(void) { uint32_t sum 0; for (uint8_t i 0; i 8; i) { sum ADC_GetConversionValue(ADC1); } return (uint16_t)(sum / 8); }过流的判定逻辑不要太简单粗暴。电机正常运行时电流可能波动堵转瞬间电流才会直线上升。我设定的阈值是额定电流的1.5倍比如正常揉捏电流1A换算到ADC值后阈值设在1.5A对应的电压。每20ms检查一次连续3次连续超过阈值才判定为堵转这样既能及时响应又不会因为偶尔的电流毛刺误停。判定堵转后执行急停程序PWM输出立刻清零方向引脚全部拉低并点亮一个故障指示灯按键按下才能复位。这个判断思路在答辩时很受老师喜欢因为它是典型的工程思维不能只看单次瞬时值要给动作留出合理的响应时间和抗干扰窗口。3.4 按摩模式状态机的参数表设计按摩椅的多功能其实可以通过一张参数表来管理。我把每个模式定义为一个结构体里面包含电机动作顺序、每路PWM占空比、运行时间和换向逻辑。这样主程序只需要维护一个二维状态表代码逻辑非常整齐可读性也高。typedef struct { uint8_t mode_id; /* 模式编号 */ uint8_t motor_index; /* 参与动作的电机编号 */ uint8_t direction; /* 正转/反转/停 */ uint16_t duty; /* PWM占空比百分比 */ uint16_t run_time_ms; /* 该状态运行时间 */ } MassageStep; const MassageStep knead_table[] { {1, 1, DIR_FORWARD, 60, 5000}, {2, 1, DIR_BACKWARD, 60, 5000}, {3, 2, DIR_FORWARD, 40, 3000}, {4, 1, DIR_STOP, 0, 2000}, {0, 0, DIR_STOP, 0, 0}, };主循环里一个状态机根据定时器计数自动跳转到表格的下一行。这样加一个新的按摩模式只需要在数组里多填几行数据主逻辑代码一行都不用改。机械上揉捏和敲击通常是两个不同电机一个控制揉捏头往返一个控制偏心轮敲击参数表里把它们的时间错开就能实现“边揉捏边敲击”的组合效果。状态机主循环的骨架大概是读取当前时间判断当前步骤是否执行完毕如果执行完就切换指针到表格下一项更新电机的PWM和方向。按键按下则切换整张表也就是切换模式。函数实现上很常规但是因为数据驱动整个程序看起来特别清爽老师翻代码的时候也容易看懂。4. 从零到整机联调我碰到过的三类反馈问题4.1 排查PWM引脚复用导致的速度失控第一次把驱动板焊好上电测试时发现一个奇怪现象电机能转但速度完全不受占空比控制PWM设成10%和90%电机转速几乎一样。我用示波器测PWM引脚发现波形一直是满幅方波占空比没变过。检查代码逻辑没有问题最后发现是工程初始化时PA0被CubeMX默认配成了GPIO输出模式而TIM2_CH1的复用功能没有正确使能。也就是说IO口被普通输出模式占用了PWM信号根本输出不到引脚上。排查过程给后来人一个思路PWM调速不生效先量引脚波形波形正常再查驱动芯片波形不对就回头查复用配置。PA0要配置为GPIO_Mode_AF_PP复用推挽输出不是普通输出也不是开漏输出。而且使能了GPIOA时钟还不够如果用到TIM1这类高级定时器还要额外使能TIM_CtrlPWMOutputs别的定时器则不需要。4.2 限位开关在震动下误触发软件和硬件一起治按摩椅运行时整机震动非常大尤其是敲击电机高速旋转的时候揉捏机构上装的微动开关会跟着一起抖。实测波形发现开关闭合的那一瞬间信号线上会产生一连串几十毫秒的毛刺这些毛刺会让单片机误以为触发了限位然后整个揉捏头没走几步就停在半路。这个问题我给出的解决方案分两层。硬件上在微动开关的机械触点两端并联一颗100nF的陶瓷电容组成RC低通滤波物理上把高频毛刺滤掉一部分软件上GPIO检测到限位触发后连续读3次每次间隔5ms三次都是高电平才认为真的到极限位置了。两层叠加之后敲击电机全速运转加揉捏头往复运动的情况下再没出现误触发。这种思路也适合用在按键消抖上道理一模一样。4.3 上电瞬间电机猛冲原因在主控醒来之前这个坑是特别多新手会遇到的程序还没下载进去或者刚上电复位电机突然自己猛力转动一下然后停下来。最开始我以为是电源问题后来用示波器抓了驱动芯片的使能引脚和IN引脚的波形才发现上电瞬间主控还没开始运行GPIO默认是浮空状态而驱动芯片的使能引脚如果悬空芯片内部逻辑可能把它视为高电平使能H桥的IN引脚又由于外部干扰被拉到高阻抗电平导致电机在复位阶段就通电转动。解决办法很干脆原理图阶段就要处理驱动芯片的使能引脚通过10k电阻下拉到地让默认状态是低电平禁用IN方向引脚也同样下拉。程序里上电第一件事立即把所有的方向引脚拉低、PWM输出设0然后再延时100ms初始化外设。这样无论主控跑没跑起来电机都不会在上电瞬间乱动。我试过同时写软件和硬件的双保险现在哪怕反复断电上电电机都纹丝不动。4.4 联调顺序建议整机联调不建议一上来就把所有模块拼在一起出了问题根本不知道是谁的锅。我习惯按这个顺序来先刷一个最小系统的点灯例程确认晶振启动、SWD下载都正常然后单独初始化一路PWM用示波器或逻辑分析仪看波形是否正确接着接上一个电机测试正转、反转、变速是否正常再验证过流保护用手抓住电机轴制造堵转看是否能在0.5秒内停机最后再把限位开关、温度采样、OLED和按键全部接入跑整机时序。每增加一个模块都单独验证一遍排查范围永远控制在一小块这种调试节奏会让整个开发过程顺畅很多。5. 毕设收尾最容易被扣分的三件事5.1 原理图的页面注释与页码管理很多同学的原理图画完了但是老师一打开文件密密麻麻的元器件连成一片没有任何模块分栏、没有任何说明文字页码也乱。这种情况就算电路画对了答辩效果也要打折扣。画原理图的时候把电源部分、主控最小系统、电机驱动、传感器采集、人机交互各自放到独立的分区每个分区用矩形框框起来标注“24V电源输入”“STM32最小系统”“揉捏电机驱动”“限位采输入”等说明文字。还有一个细节特别容易踩坑如果用OrCAD画多页原理图画完一定记得用Annotate的页码重编号功能把每一页的Page Number统一更新。我之前遇到过一个报错提示“有2张或以上原理图页面Page Number都设成了1”导出PDF的时候页码重复查了半天是因为复制页面时没改页码属性。嘉立创EDA虽然会自动管理页面但你也应该检查每个页面的标题栏确保绘制日期、设计者等信息完整。这些小细节老师都会看它们代表你的工程素养。5.2 源码注释和Readme写法让老师一眼看懂源码不是写完就完事了毕设源码最重要的目标是让人能看懂。我的习惯是每个源文件头部写一段文件说明包含作者、日期、文件功能、硬件连接表。每个函数定义前用几行话描述输入输出和逻辑要点。有些同学嫌注释麻烦后来答辩老师问代码自己都忘了某个变量的含义特别尴尬。Readme文件强烈建议写它直接决定了老师评审资料的效率。我一般会包含开发环境版本Keil MDK5.3x、STM32CubeMX的版本、芯片型号、引脚分配表、下载方法ST-LINK接SWDIO和SWCLK、操作说明哪些按键控制哪些模式、可能出现的故障和处理办法。不要让老师在代码里翻半天才找到下载地址在哪那是自己给自己扣分。如果是用Keil编译代码里顺便标清楚工程文件路径。很多同学习惯直接把Project目录丢到桌面路径带中文编译报错“cannot open source file”这种问题在答辩现场最容易出洋相。工程路径最好全英文编译工程和调试记录都单独保存。5.3 答辩前要准备的问题清单和演示视频答辩前一定要把几个核心问题的答案梳理清楚。我整理一份高频问题清单基本每个项目都会被问到为什么选STM32F103C8T6而不是别的芯片PWM频率为什么取16kHz过流保护的阈值是怎么算出来的限位开关为什么需要硬件滤波和软件消抖如何防止上电瞬间电机猛冲电机正反转切换时为什么要加延时这些问题在本文前面都有对应解释你要做到不看PPT也能说清楚“为什么这么设计”。演示环节要准备一段完整的演示视频。按摩椅的实物在答辩现场不一定方便带就算带了演示的时候电机一响整个教室都是噪音老师也听不清你讲解。提前录一段清晰的视频包含上电、选择模式、电机正反转、限位触发、过流保护这几个关键画面答辩现场播放视频配合实物讲解效果会好很多。视频里我建议加一个局部特写专门展示揉捏头在导轨上的往复运动和敲击动作让老师直观看到机械结构和控制逻辑的关系。我当时还额外拍了一小段用手捏住揉捏头模拟堵转的画面电机立刻停机这个画面给老师留下的印象非常深。5.4 成本估算和可扩展方向老师常问的另一个问题是成本。我做一个基础版本的物料清单供你参考STM32F103C8T6最小系统板15元DRV8873驱动模块两个约20元24V直流减速电机两个约60元限位开关5元24V 3A适配器30元DC-DC降压模块5元再加上按键、OLED屏、NTC、线材和PCB打样整机物料成本在200元上下。如果你有同学一起拼单打板PCB几块钱就能搞定。这个成本在毕设项目里属于中等偏低老师听了也认可。扩展到产品级按摩椅的方向其实很多加蓝牙或WiFi模块用手机App控制模式加压力传感器根据使用者体重智能调节按摩力度加个陀螺仪检测坐姿自动调整揉捏幅度甚至跑一个简单的模糊PID让电机转速在负载变化时保持稳定。这些方向可以作为“创新点”写在论文最后的展望部分但毕设正文不建议展开太多能把自己做出来的功能解释清楚才是第一要务。说到底按摩椅这个题目的核心不是机械结构多精妙而是你能否把一个“电机转起来”的小事真正做成一件“有反馈、有保护、有状态管理”的工程事。我个人实际带了几轮项目后最大的体会是分数拉开差距的地方从来不是代码量或者原理图面积而是你对每个设计选择能否给出让人信服的理由。毕竟我见过太多代码写得很炫、但一问三不知的学生也见过原理图很朴素、但每个引脚为什么这么接都讲得头头是道的学生后者往往拿了更高的分。最后再分享一个小技巧联调阶段给每个电机贴上标签纸写上PWM通道、两个方向引脚的编号和对应模式名称。按摩椅有好几个电机接口长得又一模一样不贴标签接错线之后排查问题的时间可能比写代码还久。这个小习惯我之前吃过亏后来每次带项目都让学弟学妹先做这件事后面省下来的时间绝对值得。
返回列表