iND87501使用指南(随缘更新)
本芯片使用笔记仅为个人学习、经验总结与技术交流使用,不构成专业设计指导、工程方案或官方推荐。内容基于公开资料与实操经验整理,可能存在疏漏或更新不及时情况。进行设计、开发、生产等操作请以原厂技术支持为准。
一、定时器使用
1、软件定时器使用
iND87501触摸中断的优先级最低,硬件定时器频繁中断可能会打断触摸读取,优先使用sdk内的软件定时器(sdk1.07版本已可正常使用TIMER0定时器)。
使用方式
直接调用定时器函数
传入自定义的结构体
.mode——选择执行模式:只执行一次/循环执行
.interval——设定定时时间,单位ms
.handler——设定回调函数,每次定时完成时执行
软件定时器不会触发中断,也不怎么准(定时越短越不准,比如10ms),会被中断或其他任务阻滞。
2、硬件定时器使用
定时器初始化:
1处选择要开启的定时器,87501只有TIMER0可以选。
2处选择单次/循环,一般都用循环模式HW_TIMER_PERIODIC_MODE。
3处配置溢出值,87501sdk默认时钟为48MHz,配置479999定时10ms中断一次。
4处配置回调函数,中断时要执行的程序写在这个函数里(函数名自定义)。
二、触摸配置/调试
基于英迪芯的默认sdk配置:
在systeminit.c中初始化触摸,1处选择想要开启的软件通道,2处选择实际使用的硬件通道。软件通道不与硬件通道强关联,想用哪个用哪个。
applicationTask.c文件中有默认的读取函数,图中已经被修改。
实例化一个KeyState_t结构体,调用Touch_GetTouchKeyState()函数获取通道的触摸状态,1处填入软件通道。
Touch_GetTouchKeyState()读取的是sdk经过滤波时间后判断出的按键状态。
触摸调试:
appConfig.h文件中配置触摸参数:
初始化触摸通道时使用的阈值宏定义,最好满足触摸笔3N的力能触发↑
滑条与轮盘的触摸阈值↑
检测阈值的百分比,一般不修改↑
充电次数,修改此项会影响触摸原始值rawdata。这个数值的高低会影响EMC辐射发射的高低,根据RE余量调整,一般不低于30,数值如果再低就要用示波器采触摸电容和电阻的充电波形与原厂沟通确认。↑
最大手指触摸值MAX、最小手指触摸值MIN、最大值异常判断时间HOLD,最大值最好设置为手指触摸最大值的两倍,HOLD判断取决于触摸斜率,斜率值默认为阈值的平方/5,要修改斜率最好先与原厂确认↑
触摸按键按下滤波与按键释放滤波(单位:ms)↑
上电后读取基线时间↑
充放电时间,原厂要求最大不超过127,调整此项会影响原始触摸值rawdata,rawdata值最好在1000左右,尽量不要超过700~1200的范围()。↑
充电频率最好在500Hz ->时钟(48MHz) / CLOCK(99) + 1 = 480Hz
此数值也会影响EMC辐射发射,
数值越高充电频率越低,辐射发射波形会左移,
数值越低充电频率越高,辐射发射波形会右移。
一般设置为99。
例外:
ADC_SIG_GAIN(在上位机里叫Signal Gain):触摸值的计算倍率,不影响EMC,调整1~4影响底层算法计算出的raw_data值,盲目开太高可能会使raw_data波形噪声变大,影响基线更新响应速度。
关于Guard
Guard用于一个抗干扰保护,软件中不需要读
如果线路板没有Guard,则需要在初始化中关闭Guard,否则可能影响触摸EMC试验
关于Signal Gain
此参数用于调整sdk计算触摸值的倍率,可配置1/2/3/4,会影响触摸噪声,在触摸初始化时配置,而不是在appconfig.h中:
关于削顶
MAX_THRES配置最大触摸值,一般为手指最大触摸值的2倍,最好能满足包含手掌完全按在触摸按键上面的工况;MIN_THRES配置最小触摸值(一般情况下无需修改默认-100),HOLD_TIME配置削顶异常处理时间。触摸值大于MAX或小于MIN触发削顶后一段时间内不会响应触摸,HOLD_TIME配置这个时间。
关于触摸异常复位
在主循环中配置触摸异常检测:
注意,如果启用的触摸通道不止一个,在某些clock配置下TKBUS会一直为1导致程序卡死,这是不同触摸通道的扫描在这个clock下同时进行造成的,在初始化中激活原本应该注释的Touch_SetHardWareTrigPeriod(2)将触摸扫描改为2ms扫描周期即可解决。(真要碰到这种情况最好还是call一下英迪芯的工程师(T_T))
三、Touch Studio Pro使用
需要正确连接LIN GATEWAY硬件:
读取/写入当前代码的触摸参数,Read读取,编辑后点击Write即可
读取/写入当前通道的触摸参数,点击Sync List From Device读取,编辑后点击ok即可
查看波形,通道ch0~3对应代码中数组touchKeyCount0~3,可配置成想看的值
烧录界面,1处用于jlink烧录,2处用于合成bootloader项目
使用bootloader更新程序,勾选Enabled,默认NAD为01
四、ADC配置
读取VBAT引脚电压
iND87501是LDO、LIN、MCU三合一芯片,默认sdk支持直接读芯片VBAT电源引脚电压,读取接口位于measureTask.c文件内,返回一个u16型数值,单位为mV:
电压更新函数默认sdk设定50ms执行一次(原厂要求不能随意修改此循环时间,如需更快速的更新时间需要额外布置联通电源的ADC检测电路),下图注释掉的部分为无触摸底层不包含的功能,正常触摸底层不会注释:
注意事项:
触摸版sdk读取VBAT依赖于触摸功能,关闭触摸通道后会导致无法读取到电压,如无必要情况不要进行DisableKey操作,低电压6V时触摸异常的问题可通过关闭基线自动更新规避:
软件实际读到的VBAT值经过了其他元器件分压,与实际值会有出入。
五、GPIO输入、输出
在systeminit.c文件goios_init()函数初始化gpio和pwm,使用gpio_read()读取io电平,使用gpio_set()和PWMAUX_SetMatchVAlue()输出。PWM部分详见"PWM输出"。
六、看门狗配置
注意!SDK的看门狗功能默认为关闭,生成量产程序时一定要打开!
sdk初始化看门狗时间为9216ms,默认为关闭(开启后,debug程序暂停太久会使芯片复位),需要在appConfig.h中配置参数1打开
看门狗时间有多种选择,在初始化时选择
看门狗可能会影响后续烧程序,建议时间配长点(1152ms)方便后面重复烧程序。
七、PWM输出
初始化:
PWMAUX_CLK_DIV_1配置时钟分频,有1/2/4三种选择,分别对应输出频率732Hz/366Hz/183Hz
PWM_VALUE_MAX配置最大计数,sdk默认为65535
PWM频率 = 时钟 / (时钟分频 * 最大计数) = 48000000 / (1 * 65535) ≈ 732Hz
输出PWM:
matchRisingValue配置65535 时,matchFaillValue与65535的比值即为输出的负占空比,所以matchFaillValue配置65535时为全低电平,配置0时为全高电平。
八、PWM输入捕获
捕获输入的占空比:
初始化输入捕获配置
DET_NUM_8为读取次数配置,有1/2/4/8/16/32/64/128八种选项,在捕获400Hz占空比的情况下,使用DET_NUM_8约需要22.3ms才能触发一次中断,进入捕获完成处理函数(名称可自定义)UserDoorDetectDutyDoneHandler(),捕获200Hz占空比时约需要44.6ms,捕获完成需要的时间近似与占空比频率成反比。
捕获完成后通过接读取高电平和低电平计数,计算出占空比。
UserDoorDetectDutyOverFlowHandler()函数与计算占空比无关,可不做处理。
注意,占空比捕获的范围为1%~99%,在占空比为0%(低电平)和占空比为100%(高电平)时不会触发捕获完成中断。如果要囊括0%~100%的情况,可以考虑使用定时器计时,每次触发捕获完成中断时在UserDoorDetectDutyDoneHandler()中清零,定时器溢出时说明没有捕获到占空比,这时候通过读取IO口的高低电平来判断占空比是0%还是100%。
九、LIN
1、配置LIN模块要响应的报文
LIN报文表索引
USER_DATA_REPORT用于发送触摸调试状态(用Touch Studio Pro读取),带LIN的项目建议关闭,以免与其他节点冲突。
LIN帧id
LIN报文表
.frame_id配置报文id
.msg_type配置报文 接收/发送
.checksun配置报文校验方式 标准/增强
.length一个数据的长度(默认8)
.frameIsValid报文收发是否有效,置false时不响应该报文id
2、接收报文处理
接收完一段完整报文帧后触发中断,进入处理函数,在这里根据收到的报文id和data做相应处理。
3、发送报文处理
接收完一段完整报文帧后触发中断,进入处理函数,在这里根据收到的报文id做相应处理。
4、休眠唤醒
触发LIN休眠后进入这个函数处理,type参数用于获取触发睡眠的原因(总线timeout或3C休眠帧)。
通过底层接口可获取总线活跃状态,在芯片不进入低功耗的状态下,timeout休眠后可通过轮询该接口判断是否唤醒,但是3C休眠时,必须等待总线上一个timeout周期的静默,该接口才会更新为0。如果发送3C休眠后总线不静默,将会一直触发不了timeout状态,导致接口始终返回1。
在lin_device.c文件中修改timeout计时
5、诊断帧
lin模块有默认的诊断帧处理函数,如不做修改的话,该函数用于Touch Studio Pro读取触摸配置数据。(详见:三、Touch Studio Pro使用)
NAD节点在linSlaveTask.h中修改,默认为1
还有一个7F节点也能使用,可用于bootloader更新程序,也可用于发诊断帧。
