1. CIU32F003单片机PWM功能测试概述
最近在设计一个泵箱电机驱动系统时,遇到了一个实际需求:需要同时控制一个步进电机和一个直流电机。这要求MCU能够提供两路独立的PWM信号,以及两路互补的PWM信号输出。经过选型对比,我决定使用CIU32F003这款单片机来完成这个任务,主要看中它内置的两个定时器(Timer1和Timer3)可以提供多路PWM输出通道。
在实际动手设计正式电路前,我决定先制作一个测试板来验证PWM功能是否正常。这个决定后来被证明是非常明智的,因为在测试过程中发现了一些端口配置问题,如果直接做正式电路板可能会带来不少麻烦。通过这次测试,我不仅验证了PWM功能,还积累了一些关于CIU32F003定时器配置的实用经验,这些都是在数据手册中找不到的实战技巧。
2. 测试电路设计与制作
2.1 电路板设计思路
为了快速验证PWM功能,我设计了一个简单的单面测试电路板。这个板子的核心就是CIU32F003单片机,加上必要的外围电路(电源、晶振、下载接口等),重点是把Timer1和Timer3的PWM输出引脚引出来方便测量。
在设计PCB时,我特别注意了以下几点:
- 将三路待测PWM信号(Timer1的两路和Timer3的一路)通过排针引出
- 保持信号走线尽量短且等长,减少信号完整性问题的干扰
- 为每个测试点预留了足够的空间,方便后续用示波器探头测量
提示:在设计测试电路时,建议为每个关键信号都预留测试点,这会大大方便后续的调试工作。我这次就在每个PWM输出引脚旁边都放置了一个测试焊盘,实测证明这个设计非常实用。
2.2 快速制板与焊接
为了加快验证进度,我采用了一分钟快速制板法制作这块测试板。具体步骤是:
- 使用热转印法将设计好的PCB图案转印到覆铜板上
- 用三氯化铁溶液腐蚀掉多余的铜箔
- 钻孔并清理电路板
- 焊接元器件
整个制板过程大约只用了1小时,其中腐蚀环节大约15分钟,焊接20分钟。这种快速验证方法非常适合在项目初期进行功能测试,可以大大缩短开发周期。
焊接完成后,我用酒精仔细清洗了电路板,确保没有残留的焊剂影响测试结果。这一步看似简单,但实际上很重要,因为焊剂残留有时会导致信号异常,特别是在高频信号的情况下。
3. PWM功能测试过程
3.1 测试环境搭建
测试环境包括:
- 已焊接好的测试电路板
- Keil MDK开发环境(版本5.25)
- DAP-Link下载器
- 数字示波器(100MHz带宽)
- 直流稳压电源(输出3.3V)
在开始测试前,我先检查了电路板的电源情况,确保3.3V供电稳定,纹波在可接受范围内(实测约20mVpp)。电源质量对PWM信号的稳定性有很大影响,特别是当PWM用于电机控制时。
3.2 程序设计与下载
我基于之前的项目框架修改了PWM测试程序,主要配置了以下参数:
- 系统时钟:48MHz
- Timer1配置:
- 预分频器:65536
- 自动重装载值:65535
- PWM模式1
- 通道1(PB1)和通道2(PB2)使能
- Timer3配置:
- 预分频器:65536
- 自动重装载值:65535
- PWM模式1
- 通道1(PA5)使能
编译完成后,通过DAP-Link将程序下载到单片机中。下载过程很顺利,单片机启动后通过串口发送了预期的调试信息,表明程序运行正常。
3.3 PWM信号测量与分析
3.3.1 Timer1两路PWM测试
首先测量Timer1的两路PWM输出(PB1和PB2):
- 设置PB1占空比为1/8(12.5%)
- 设置PB2占空比为1/4(25%)
用示波器测量结果如下:
| 测试项 | 理论值 | 实测值 | 误差 |
|---|---|---|---|
| PB1频率 | 734Hz | 733Hz | -0.14% |
| PB1占空比 | 12.5% | 12.4% | -0.8% |
| PB2频率 | 734Hz | 733Hz | -0.14% |
| PB2占空比 | 25% | 24.9% | -0.4% |
测量结果显示两路PWM信号都非常准确,频率误差小于0.2%,占空比误差小于1%。特别值得注意的是,PB1和PB2输出的互补信号也完全正确,这对后续的H桥电机驱动电路非常重要。
3.3.2 Timer3 PWM测试
最初的电路设计使用了Timer3的通道3(PA3),但在测试中发现该通道无法输出正确的PWM波形。经过多次尝试和寄存器检查,确认配置没有问题,但波形仍然异常。于是我将输出改为Timer3的通道1(PA5),重新测试:
| 测试项 | 理论值 | 实测值 | 误差 |
|---|---|---|---|
| PA5频率 | 734Hz | 733Hz | -0.14% |
| PA5占空比 | 50% | 49.8% | -0.4% |
修改后,PA5输出的PWM信号完全正常。关于PA3无法正常输出的问题,我怀疑可能是芯片特定批次的问题,或者是该引脚有其他复用功能冲突,这需要进一步研究。
4. 测试中发现的问题与解决方案
4.1 Timer1端口配置问题
在最初的测试中,我错误地将Timer1的通道1配置在了PA8引脚上,结果发现无法输出PWM信号。查阅数据手册后才发现,CIU32F003的Timer1通道1只能输出到PB1引脚。这个教训让我深刻认识到仔细阅读数据手册中引脚复用表的重要性。
注意:CIU32F003的定时器通道与引脚映射关系比较特殊,不是所有定时器通道都可以映射到任意引脚。在设计电路前,务必确认所选引脚确实支持所需的外设功能。
4.3 Timer3通道3异常问题
Timer3的通道3(PA3)无法正常输出PWM波形的问题比较令人困惑。我尝试了以下排查步骤:
- 检查GPIO配置(推挽输出,50MHz速度)
- 检查定时器配置(PWM模式1,通道使能)
- 检查引脚是否被其他外设占用
- 尝试不同的占空比和频率设置
- 检查硬件连接(无短路或断路)
尽管所有这些检查都通过了,PA3仍然无法输出正确的PWM波形。最终我不得不改用PA5引脚,这提醒我在设计时应该准备备用方案。
5. 测试结论与后续应用
通过这次测试,我确定了CIU32F003可用于泵箱电机驱动系统的PWM信号生成,具体配置方案如下:
可用PWM输出配置:
- Timer1:
- 通道1:PB1(正常)
- 通道2:PB2(正常)
- 互补输出功能正常
- Timer3:
- 通道1:PA5(正常)
- 避免使用通道3(PA3)
频率计算:
PWM频率 = 系统时钟 / (预分频系数 × 自动重装载值)
= 48MHz / (65536 × 65536) ≈ 734Hz
这个频率范围非常适合驱动普通直流电机和步进电机。对于需要更高频率的应用,可以适当减小预分频系数或自动重装载值。
在后续的电机驱动电路设计中,我计划:
- 使用Timer1的两路PWM(PB1和PB2)驱动H桥电路控制直流电机
- 使用Timer3的一路PWM(PA5)作为步进电机的脉冲信号
- 保留一路备用PWM通道(如Timer1的通道3)用于可能的扩展需求
这次测试还让我积累了一些关于CIU32F003的实用经验:
- 定时器通道与引脚的映射关系需要特别注意
- 某些引脚可能存在未知的功能限制
- 快速制板法非常适合功能验证阶段
- 测试点的设计对调试效率影响很大
在实际测量中,我发现当PWM占空比设置得非常小(如<5%)或非常大(>95%)时,波形边缘会出现轻微抖动。这可能与定时器的计数精度有关,在要求严格的应用中需要注意这一点。解决方法是避免使用极端占空比,或者在软件上对占空比设置进行限幅处理。
