谷动谷力

 找回密码
 立即注册
查看: 1082|回复: 0
打印 上一主题 下一主题
收起左侧

[经验] 【东微半导体DT5M4765R8L6 开发板试用体验】搭建环境...

[复制链接]
跳转到指定楼层
楼主
发表于 2022-12-6 11:44:02 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
[经验] 【东微半导体DT5M4765R8L6 开发板试用体验】搭建环境以及体验高精度ADC


我们是做传感器相关产品的, 芯片缺货以来,我们试用了很多国产MCU,也基本全部切换到国产MCU的技术平台上来. 但是目前MCU行业同质化非常严重, 为了受众多,基本上都集成了各种通讯口,支持LED,LCD,等等,没有个性. 直到接触到东微的MCU,从产品的主要功能上就能看到24BIT ADC这个超亮眼的参数, 细看规格书后,发现它还集成有1-2级运放. 这不就是为我们传感器行业定制的吗.
拿到DT5M4756R8L6的开发板后,我们开始了尝试.但是整个尝试过程曲折而有趣.
拿到手上直接复制了一个GPIO的点灯程序,编译通过,但下载不了,经过了多次群内沟通,终于能下载程序并点灯. 在KEIL内部,要注意调试工具选JLINK,以及编程用的地址空间.相关的图片,我看前面分享的同学已经贴了,我就不贴图了.
我们公司主要的用途是将模拟信号转为数字量,然后通过数字接口提供给用户,所以我们重点关注了一下它的ADC工作流程.
东微的ADC空有24位,但其实它也并没有拿它当主要卖点, 这颗芯片更像是为仪器仪表行业或者医疗器械行业做的量身定作,它花了不少的资源在UI这一块,支持LED,LCD段码屏等. 真正留给ADC用的资源并不多. 对于信号源不多的应用还是能用的.
我们这次测试的本来是PH传感器,但因为PH传感器的接口是BNC的,我们没有找到合适的转接头来连到开发板上, 临时用一个TDS探头代替了PH探头.
因为只是测试,所以并没有从头开始写软件, 在官方的DEMO上修改.
这个MCU的资料和STC看齐,所有信息都弄在一个文件里面, 参考代码也是直接地址操作, 着实费了点时间看源码.
首先是系统时钟,它外部的时钟源只有一个32K晶振,其它的应该是内部时钟源, 没有去动它的时钟主频, 默认时钟是64M,默认的分频是4分频, 所以系统时钟是64/4=16M.
那么ADC的时钟频率,用了这两句代码
#define CLK_ADC (uint32_t)0x00000080
CLK_Enable(CLK_ADC);//enable ADC CLK =4MHz
//0x04000014ul是个ADC操作非常重要的寄存器
*(vu32 *)(0x04000014ul) = 0x00000000+(offset<<7)+(osr<<4)+(4<<12); //CLK_SELECT=0, adc tst bias_amp1=adc_tst[18:17] bias_amp0=adc_tst[16:15] bias_adc2=adc_tst[24:23] bias_adc1=adc_tst[22:21] bias_adc0=adc_tst[20:19]
与ADC控制的控制设置基本全在这个寄存器内
关于ADC还有一个初始化寄存器, 0x04000010ul, 同样的也没有名字,我暂且叫它ADC信号源配置寄存器.
原文档无法复制,花了点时间手码到代码里面了. 发出来,如果你们需要可以直接复制过去.
bit31-30: Reservedbit29: ADC ENABLE 1:enable, 0:disablebit28:        RESET IP复位 0:复位 1:工作bit27-26:Reservedbit25: gain 1x  1:1x 第1级前置放大器跟随器bit24-22: adc_chop_sel                ADC斩波模式bit21-20: adc_chop_freq                ADC斩波频率bit19:Reservedbit18-16: amp_gain2 前置放大器第2级选择bit15-14:        amp_gain1        前置放大器第1级选择bit13-11:        amp_chop_sel前置放大器斩波波形选择bit10-9:        amp_chop_freqbit8:                        amp_chop_en  前置放大器斩波使能bit7-0:                输入通道选择//切换ADC通道参数  ch_p:正端输入位选择ch_n:负端输入位选择,是选择ADC信号源的意思gain:放大系数
这上源码里ADC初始化里面的3个参数, 同样的,没有注释, 靠见名知义,猜.
好了,那源码起了个头,要连硬件. 我们是有传感器的转接板,全部引出2.54的排针出来,用杜邦线连到开发板上
条件简陋,先接了TDS中的NTC部分, 原来我们是用的单端接法,这次先尝试了一下差分接法, 用到了P19以及P25两个器件,在板子上压力传感器的旁边. 压力传感器找不到我就没有办法了,压力传感器有个气咀样的东西.
继续魔改源码
void switch_channel(vu8 ch_p,vu8 ch_n,vu8 gain){        vu8 gain1,gain2;        if (gain==1)        {                gain1=0;                gain2=0;                //ch_n<<4 是负端输入选择, ch_p是正端输入选择, negative ,postive的意思,                 //0x32是 00110010, 0 0 enable work,0000, 0010表示 00  1级放大                         *(vu32 *)(0x04000010ul) = 0x32000000 + (ch_n<<4) + (ch_p) + (gain2<<16) + (gain1<<14);        }        //0x30是 00110000 0 0 enable, work,0000 表示无放大        else if (gain==10)        {                gain1=0;                gain2=0;                *(vu32 *)(0x04000010ul) = 0x30000000 + (ch_n<<4) + (ch_p) + (gain2<<16) + (gain1<<14);        }}
目前还没改源码里的信号源, 可以看到源码里面,用一个gain配置了两种情况,一种有一级放大,一种无放大. 信号源分正端和负端, 我们用了ANN8以及ANP8这两路,所以都配置为1000, 对照表我就不贴了,在规格书底部区域.
先改源码再测试
adc_max= -8388607;adc_min= 8388607;
源码里 这两数对应的整数部分是,011111111111111111111111,所以其实有效的分辨精度是23位,并且实际ENOB只有19位,采样频率是1KHZ,并不算快.
NTC的分压法测试是非常简单的,它的分压电阻是100K,我们用的的 10K 3950的NTC, 这个分压还是不太合理的,勉强测了一下, 精度不怎么好,不过稳定性非常不错.
TDS部分也是分压法测试,但是供电就不能用恒流供电了,需要用到变化的电源以及精选的分压电阻.这个在开发板上不太好接线,全部引到我们的转接板上面. 这个渗及到公司的一些细节,不太好直接贴出来. 测试的结论是ADC非常稳定, 但是操控过程有些繁琐,建议封装成不同的库函数, 以提高用户的开发效率.
总结一下就是这颗DT5M4765非常适合有ADC要求,并且有传统UI要求的应用. 有一个非常非常非常人性化的功能,就是它本身可以对外输入3.3,甚至1.8V. 要知道现在的传感器,绝大多数都开始了3.3V供电,甚至1.8V供电, 如果MCU本身对外可以供这几个电压,那么省了很多LDO的工作
需要提高的是开发环境以及开发工具上的适配性. 并且文档完全没有按功能模块分类整理,没有目录,这些都对开发者是个极大的挑战, 上下翻文档非常费时间. 源码里面需要给寄存器命名,要有适当的注释,否则有如锦衣夜行, 让好的国货不能传递到非常需要它的行业当中去.

+10
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|深圳市光明谷科技有限公司|光明谷商城|Sunshine Silicon Corpporation ( 粤ICP备14060730号|Sitemap

GMT+8, 2024-6-29 22:10 , Processed in 0.095365 second(s), 43 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表