1. 项目概述与核心思路拆解
最近在做一个家电控制面板的项目,客户要求用触摸按键替代传统的机械按键,一来提升产品档次,二来也方便做防水设计。选型时看中了瑞萨的RL78/F22系列MCU,它内置了电容触摸感应单元(CTSU),性价比很高,特别适合这种对成本敏感的家电类应用。官方推荐用CS+(Code Generator+)这套IDE来开发,里面集成了Smart Configurator图形化配置工具和QE for Capacitive Touch触摸调优工具,号称能大幅简化开发流程。但说实话,刚开始接触这套工具链时,感觉步骤有点多,文档虽然全但比较分散,新手容易懵。所以,我把自己从零开始,在CS+里创建一个触摸应用样例工程,并实现按键控制LED闪烁的完整过程梳理了一遍。这个样例工程麻雀虽小五脏俱全,涵盖了工程创建、外设驱动配置、触摸参数自动调优、应用代码集成等关键环节,非常适合作为RL78触摸功能的入门和参考模板。无论你是刚接触瑞萨MCU的工程师,还是想快速验证触摸方案,跟着这个流程走一遍,基本就能把路跑通了。
2. 开发环境与硬件平台准备
2.1 软件工具链详解
工欲善其事,必先利其器。开发RL78/F22的触摸应用,主要需要以下软件,建议按顺序安装,避免版本冲突:
- CS+ for CC (Code Generator+): 这是瑞萨官方的集成开发环境,基于Eclipse,集成了编辑器、编译器、调试器和我们后面要用到的几个关键插件。务必从瑞萨官网下载对应版本,我使用的是V8.08.00。
- CC-RL编译器: 通常包含在CS+的安装包中,是瑞萨RL78系列的专用C编译器,优化做得不错。
- Smart Configurator插件: 这是一个图形化的外设驱动配置和代码生成工具。在CS+的Help -> Install New Software中,通过官方仓库链接在线安装。它的作用是把我们从繁琐的寄存器配置中解放出来,通过勾选和下拉菜单就能完成时钟、端口、串口、触摸单元等驱动的初始化代码生成。
- QE for Capacitive Touch (Standalone Version): 这是触摸功能开发的核心工具,一个独立的图形化应用程序。它负责触摸按键的通道配置、灵敏度自动调优以及参数生成。我使用的是Ver4.20版本。它不和CS+绑定,单独运行,通过生成头文件和源文件与你的工程交互。
注意:软件版本兼容性非常重要。务必确认你下载的QE for Capacitive Touch版本支持你所使用的RL78/F22具体型号(例如R7F125xxx)。不匹配的版本可能导致配置项缺失或调优失败。安装后,建议将QE的快捷方式放在顺手的地方,后续会频繁切换使用。
2.2 硬件平台连接与要点
这次演示使用的硬件是瑞萨官方的RL78/F22 Target Board (RTK7F125FPC01000BJ)。这块板子设计得很贴心,已经把MCU、触摸电极、LED、调试接口都集成好了,省去了自己画板子的麻烦。
硬件连接的核心就三步:
- 供电与调试接口:使用瑞萨的E2 Lite仿真器。用其附带的10pin排线连接仿真器的“TOOL”端到目标板的CN3接口。E2 Lite既负责程序下载、调试,也通过这个接口给目标板供电(我们后面会配置为3.3V)。
- 触摸调优数据通道:触摸调优过程需要PC上的QE工具与MCU实时通信,以调整和读取触摸参数。这通过一个USB转串口(UART)模块实现。将模块的TX引脚连接目标板的CN2(P16/RXD0),RX引脚连接CN1(P15/TXD0),GND共地。模块的USB端插入电脑。
- 触摸电极保护:板载的触摸电极是裸露的铜箔。严禁直接用手触摸!手指的汗液和油脂会导致测量值严重漂移甚至短路。调试时,必须使用一块绝缘介质覆盖,官方建议用2mm厚的亚克力板。我实测下来,即使是普通的塑料片或者手机贴膜的离型膜也能临时顶用,但为了数据稳定,最好还是用规定厚度的亚克力板。
连接好后,硬件框图可以简单理解为:PC通过USB连接了E2 Lite(调试/供电)和USB转串口模块(数据通信),这两者再分别连接到目标板,形成一个完整的闭环。
3. 基于CS+创建工程与驱动配置
3.1 创建新工程与基础设置
打开CS+,点击File -> New -> Create New Project。这里有几个关键设置点:
- Project Name:起个有意义的名字,比如
RL78_F22_Touch_Sample。工程路径不要有中文或特殊字符,避免一些工具链的潜在问题。 - Microcontroller:在下拉列表中准确选择你的芯片型号,例如
R7F125Gxxx。选错了会导致后续的驱动库和头文件不匹配。 - Tool Chain:选择
CC-RL。 - Project Type:选择
Executable (Binary)。 - Use Smart Configurator:这个一定要勾选!这是我们使用图形化配置的前提。 点击Create后,工程就生成了。你会看到左侧工程目录下除了
main.c,还有一个.scfg文件,这就是Smart Configurator的配置文件。
接下来配置调试工具。在左侧“Project”视图中,找到RL78 Simulator (Debug Tool),右键选择Using Debug Tool,然后在列表里选择你实际使用的硬件调试器,这里我们选RL78 E2 Lite。这个步骤是告诉IDE用什么工具来下载和调试程序。
3.2 使用Smart Configurator添加驱动
双击工程中的.scfg文件,启动Smart Configurator。界面主要分为几个区域:左侧是组件树,中间是图形化配置面板,右侧是属性窗口。
第一步:配置时钟(Clocks)在“Clocks”选项卡,我们需要根据硬件设置系统时钟。RL78/F22支持多种时钟源。在这个样例中,我们使用内部高速振荡器(HIOC)。找到“Main Clock Source”选择HIOC, “Main Clock Frequency”设置为32 MHz。下面的“VDD Setting”根据你的供电电压选择,由于我们使用E2 Lite供电,通常为3.3V,所以选择2.7V ≤ VDD ≤ 5.5V这个范围。时钟是MCU运行的脉搏,这里设错了,后续所有定时相关的功能(包括触摸扫描)都会出问题。
第二步:添加电容触摸驱动组件(r_ctsu)这是触摸功能的核心驱动。点击“Components”选项卡,再点击左上角的“+”按钮,在弹出的“New Component”对话框中,找到Capacitive Sensing Unit driver. (r_ctsu)并添加。添加后,在组件树中选中它,在右侧属性面板进行配置:
Channel Selection: 这里要配置实际硬件连接的触摸通道。根据RL78/F22 Target Board的原理图,板载的两个触摸按键“Touch Button1”和“Touch Button2”分别连接到了TS2和TS3通道。因此,我们需要勾选TSCAP(这是触摸传感器的参考电容通道,必须启用)、TS2和TS3。Dedicated Port Setting: 保持默认即可,工具会自动分配TS2/TS3对应的IO引脚。
第三步:添加触摸中间件(rm_touch)再次点击“+”按钮,添加Touch Middleware. (rm_touch)。这个中间件在底层驱动r_ctsu之上,提供了更易用的API,比如按键状态检测、滤波算法等。它的配置相对简单,通常保持默认设置就能工作。它会自动与之前添加的r_ctsu组件关联。
第四步:添加UART驱动用于调优通信QE工具需要通过UART与MCU通信来发送调优命令和接收数据。点击“+”添加UART Communication组件。在属性面板中:
Channel: 选择UART0。Baud Rate: 设置为115200(这是QE工具的默认通信波特率,务必一致)。Transmission/Reception: 在子选项卡中,使能发送和接收。数据格式通常为8位数据位,无校验,1位停止位(8N1)。 配置完成后,切换到“Pins”选项卡,可以看到工具自动将UART0的TXD0分配给了P15,RXD0分配给了P16。这和我们之前硬件连接CN1(P15)、CN2(P16)是对应的。这里一定要核对一遍,如果引脚分配不对,需要手动修改。
第五步:添加Port驱动控制LED最后,添加Ports组件来控制板载的LED。在属性面板中,找到对应的端口。根据板子原理图,LED1连接P0.0,LED2连接P14.0。我们将这两个引脚的模式设置为“Output Mode (CMOS)”,初始输出电平设为高电平(因为LED是低电平点亮,初始高电平让其熄灭)。
第六步:生成驱动代码所有组件配置完毕后,在组件树顶部找到r_bsp组件,确保其属性中的Initialization of peripheral functions by Code Generator/Smart Configurator选项是Enable状态。最后,点击工具栏上的“Generate Code”按钮(一个齿轮图标)。Smart Configurator会根据你的图形化配置,自动生成所有外设的初始化代码(r_开头的.c/.h文件)和引脚定义,并集成到你的工程中。这个过程替代了手工编写大量底层寄存器配置代码,效率提升非常明显。
4. 使用QE for Capacitive Touch配置与调优
4.1 工程准备与触摸按键配置
关闭CS+中的Smart Configurator(代码已生成),我们打开独立的QE for Capacitive Touch软件。
- 新建/打开配置:点击
File -> New Project。在弹出的对话框中,Project Folder选择你CS+工程所在的目录。MCU Configuration这里要特别注意,需要选择与你的芯片型号匹配的配置文件(通常是一个.mtc文件),这个文件可以在瑞萨官网或QE的安装目录下找到。加载正确的配置文件是后续所有配置的基础。 - 添加触摸按键:配置加载后,主界面是一个画布。从左侧的组件栏拖拽一个“Button”控件到画布上。双击这个Button进行配置。
Channel Assignment: 为这个按键分配触摸通道。我们第一个按键对应硬件TS2,所以选择TS02。Damping Resistor: 设置阻尼电阻值。这个电阻串联在触摸电极和MCU引脚之间,用于抑制ESD和噪声。根据RL78/F22 Target Board的电路图,这个值是560欧姆。这个值必须按照实际硬件填写,填错了会影响灵敏度和稳定性。Button Name: 可以命名为“Button00”以便识别。 用同样的方法,再添加一个Button,分配通道TS03,阻尼电阻同样为560欧姆,命名为“Button01”。
4.2 生成调优文件并集成到CS+工程
配置好两个按键后,点击菜单栏的Tuning -> Output Tuning Files。工具会提示你选择一个输出目录。我们在CS+工程根目录下新建一个名为qe_gen的文件夹,并选择它。这个文件夹将存放所有QE工具生成的、需要被CS+工程引用的文件。 点击确定后,QE会弹出一系列对话框,让你确认一些参数:
Peripheral Clock Frequency: 输入32(单位MHz),这与我们在Smart Configurator中设置的时钟一致。VDD Voltage: 输入3.3(单位V),这是我们使用的供电电压。- 后续还有一些关于电极电容范围、调优模式的选项,初次使用可以保持默认。 文件生成后,我们需要把这些文件集成到CS+工程中:
- 添加头文件路径:在CS+的工程属性中,找到CC-RL编译器的设置。在
Common Options -> Additional include paths里,添加./qe_gen这个相对路径。这样编译器才能找到QE生成的头文件。 - 添加宏定义:在同一个编译器设置页面的
Macro definition里,添加一个宏:QE_TOUCH_CONFIGURATION。这个宏是QE生成代码的开关,必须定义。 - 导入生成的文件:直接从Windows文件浏览器中,将
qe_gen文件夹拖拽到CS+左侧的工程目录“File”区域下。CS+会自动将这些文件添加到工程管理中。 - 修改主程序:打开
main.c文件,在main()函数的主循环while(1)之前,添加触摸主处理函数的调用:qe_touch_main();。同时,需要在文件顶部声明这个函数:extern void qe_touch_main(void);。 - 修改UART回调:为了让触摸数据能通过UART发送给PC端的QE工具,需要打开
Config_UART0_user.c文件(这是Smart Configurator生成的UART中断回调文件),在发送完成或接收完成的中断回调函数里,调用QE提供的UART回调函数。具体是添加touch_uart_callback();到相应位置。这一步是打通MCU与QE工具通信的关键,很多初学者调不通就是因为漏了这里。
4.3 自动调优(Tuning)实操流程
这是整个触摸开发中最“神奇”也最关键的一步,QE工具通过自动化的流程帮你测定最优参数。
- 硬件准备:确保亚克力板已覆盖触摸电极,E2 Lite和USB转串口模块连接正确。
- 供电设置:在CS+的调试配置中,找到E2 Lite的设置,确保选择的是“Power Target from the Emulator”(使用仿真器供电)。
- 编译与下载:在CS+中编译工程,确认无误后,将程序下载到目标板并运行。
- 启动QE调优:回到QE工具,点击主界面的
Start Tuning按钮。在弹出的连接对话框中,选择正确的串口号(在Windows设备管理器中查看USB-Serial转换板对应的COM口)和波特率(115200),点击Connect。 - 跟随向导操作:连接成功后,QE会启动一个多步骤的自动调优向导:
- 寄生电容测量:工具会自动测量每个触摸通道的基准电容值(无触摸时的电容)。这个过程无需干预。
- 偏置电流调整:工具会优化CTSU模块的内部驱动电流,以获取最佳的信号质量。
- 灵敏度测量(需用户参与):这是唯一需要手动操作的步骤。工具会提示你“Press and hold the sensor”。此时,你需要用正常、均匀的力度按压对应的触摸按键(比如Button00),并保持按住状态,然后在PC键盘上按任意键。工具会记录按压状态下的电容变化量,并据此计算出一个推荐的触发阈值(Threshold)。对每个配置的按键重复此操作。
- 完成与参数输出:所有步骤完成后,QE会显示调优结果摘要,包括每个通道的寄生电容、最终驱动频率、计算出的阈值、单次扫描时间等。点击
Output Parameter Files,再次选择./qe_gen文件夹,将最终调优好的参数(特别是qe_touch_config.c中的阈值参数)覆盖写入。至此,触摸传感器的硬件特性就被“学习”并固化到参数文件里了。
实操心得:调优时按压的力度和姿势要尽量模拟最终用户的正常操作。按得太轻或太重,都会导致阈值设置不合理,要么不灵敏,要么容易误触发。建议重复调优2-3次,取稳定值。另外,调优环境(温度、湿度)应尽量接近产品实际使用环境,环境变化可能导致电容基准漂移。
5. 应用代码实现与功能验证
5.1 在触摸应用中添加LED控制逻辑
调优完成后,我们就得到了一套能够稳定检测触摸状态的软件框架。接下来,我们要实现“按下触摸按键,点亮对应LED”的功能。
QE工具生成的应用程序接口主要在qe_gen文件夹下的qe_touch_sample.c文件中。我们需要修改这个文件。 首先,找到或添加LED的宏定义。因为我们的LED连接在P0.0和P14.0,且低电平点亮,所以可以这样定义:
#define LED1 (P0_bit.no0) // P0.0 #define LED2 (P14_bit.no0) // P14.0 #define LED_ON (0U) // 低电平点亮 #define LED_OFF (1U) // 高电平熄灭然后,在这个文件中找到一个名为qe_touch_sample_task的函数,或者类似的周期性任务函数。在这个函数里,通常会有一个button_status变量来标识哪个按键被按下。我们需要添加状态判断逻辑:
/* TODO: Add your own code here. */ switch(button_status) { case CONFIG01_MASK_BUTTON00: // 只有Button00被按下 LED1 = LED_ON; LED2 = LED_OFF; break; case CONFIG01_MASK_BUTTON01: // 只有Button01被按下 LED1 = LED_OFF; LED2 = LED_ON; break; case (CONFIG01_MASK_BUTTON00 | CONFIG01_MASK_BUTTON01): // 两个键同时按下(如有需要) LED1 = LED_ON; LED2 = LED_ON; break; default: // 没有按键按下 LED1 = LED_OFF; LED2 = LED_OFF; break; }这段代码的意思很直观:根据button_status这个状态掩码,判断是哪个按键被触发了,然后控制对应的LED点亮,其他LED熄灭。
5.2 编译运行与实时监控
- 断开调试器连接:在CS+中停止程序运行,并断开E2 Lite与目标的连接(有时不断开会影响UART通信)。
- 重新编译运行:修改代码后,重新编译整个工程,然后再次下载并运行程序。
- 使用QE监控:此时不需要重新调优。在QE工具中,点击
Board Monitor标签页,然后点击Enable Monitoring。同样设置正确的串口号和波特率并连接。 - 观察与调试:连接成功后,你可以看到多个图形化监控窗口。例如,“Touch Signal”窗口会实时显示每个通道的原始电容值波形;“Button Status”窗口会显示按键的ON/OFF状态。当你用手指按压亚克力板覆盖的触摸按键时,应该能看到对应通道的信号出现明显跳变,Button状态改变,同时板子上的LED也被点亮。松开手指,LED熄灭。
通过这个监控界面,你可以非常直观地观察触摸系统的运行状态,如果发现信号噪声大、响应不灵敏,可以结合监控数据,回到QE的配置中微调滤波参数、阈值裕量等,进行二次优化。
6. 常见问题排查与进阶技巧
6.1 调优与通信类问题
即使按照步骤操作,也可能会遇到一些问题。下面是一些常见故障的排查思路:
| 问题现象 | 可能原因 | 排查步骤与解决方案 |
|---|---|---|
| QE工具无法连接(Connect失败) | 1. 串口号选择错误。 2. 波特率不匹配(非115200)。 3. MCU程序未运行或UART未正确初始化。 4. USB转串口模块驱动未安装或损坏。 | 1. 检查设备管理器,确认USB-Serial模块的COM口,并重新选择。 2. 确认CS+工程中UART的波特率设置为115200,与QE一致。 3. 检查程序是否成功下载并运行,确认 Config_UART0_user.c中的回调函数已正确添加touch_uart_callback()。4. 重新拔插模块,或重新安装其驱动程序。 |
| 自动调优过程中断或报错 | 1. 按压按键时操作不符合提示(如未按住就按键)。 2. 寄生电容测量值异常(如电极短路或开路)。 3. 供电不稳定或噪声干扰大。 | 1. 严格遵循提示:先按住按键,再按PC键盘任意键。 2. 检查硬件:确保电极无短路(如焊锡桥连),与MCU引脚连接可靠,且覆盖了绝缘介质。 3. 尝试用示波器检查板子供电电压是否平稳,尤其在触摸扫描时是否有毛刺。确保E2 Lite供电能力足够。 |
| 调优后触摸不灵敏或误触发 | 1. 调优时按压力度与正常使用差异大。 2. 环境变化(温湿度)导致基准电容漂移。 3. 阈值(Threshold)设置不合理。 | 1. 重新进行调优,使用模拟最终用户的正常力度。 2. 在产品预期的典型环境中进行调优。对于环境变化大的应用,可以考虑在代码中增加动态基准更新算法。 3. 在QE的Board Monitor中观察按下/释放时的信号差值。通常阈值设为差值的60%-70%比较稳健。可以在 qe_touch_config.c中手动微调threshold值。 |
| LED不受控制或行为异常 | 1. LED引脚宏定义错误。 2. 端口驱动未正确生成或初始化。 3. 触摸状态判断逻辑有误。 | 1. 核对原理图,确认LED引脚号及点亮电平。用万用表测量按压时引脚电平是否变化。 2. 检查Smart Configurator中Ports组件的配置,确认引脚模式为输出,并重新生成代码。 3. 在CS+中启用调试,单步运行查看 button_status变量的值是否按预期变化。 |
6.2 稳定性与抗干扰设计要点
完成了基础功能,如果要投入实际产品,还需要考虑稳定性和抗干扰能力:
- 软件滤波:QE生成的中间件
rm_touch本身已经包含了一些数字滤波算法(如多次采样取平均、状态去抖)。你可以在其配置中调整滤波系数。对于要求高的场合,可以在应用层再做一次滑动平均滤波或状态机判断,避免因瞬时干扰导致的误触发。 - 动态阈值:上述调优生成的是固定阈值。在一些环境缓慢变化的场景(如昼夜温差),可以定期(例如每分钟)采样无触摸时的基准值,动态更新阈值,以适应环境漂移。
- 硬件布局与走线:
- 触摸电极:形状和面积影响灵敏度。通常面积越大越灵敏。电极应尽量采用实心覆铜,避免细长走线。
- 感应走线:从MCU引脚到触摸电极的走线应尽量短,并用地线包围(Guard Ring)以抵抗噪声干扰。走线宽度要一致,且不要靠近高频或大电流信号线。
- 阻尼电阻:务必靠近MCU引脚放置。它不仅能抑制ESD,还能和走线寄生电容构成低通滤波,减缓信号边沿,降低辐射噪声。
- 电源去耦:在MCU的VDD和VSS引脚附近,放置一个0.1uF和一个1-10uF的电容,并尽量靠近引脚。稳定的电源是电容检测精度的基础。
整个流程走下来,从新建工程到最终实现触摸控制LED,虽然步骤不少,但瑞萨这套工具链(CS+ + Smart Configurator + QE)确实把很多底层复杂工作封装好了。对于初次接触的开发者,最关键的是理解每个环节的目的:Smart Configurator管硬件资源分配和驱动初始化;QE管触摸传感器本身的特性学习和参数优化;而我们自己的应用代码,则是在它们搭建好的稳定框架上,实现具体的业务逻辑。把这三者的边界和接口理顺了,开发起来就会顺畅很多。