- UID
- 124450
- 性别
- 男
|
本帖最后由 wjckzdh 于 2011-8-5 23:22 编辑
XEP100(XEQ512)也摸了大概1个月了,基本上各功能模块都用过(总线设置、端口、串口、D_Flash、PWM、ECT、RTI、AD、PIT等,所有中断由XGATE完成,CAN因为还没用到,暂时没管),今天大概讲一下一般人用不到的AD的两个额外功能,那就是AD测量芯片电压和片温。
其实这两个功能手册里提到,但没具体讲怎么用,手册里提到这两个都是通过Channel[17]测量的,但如何测量,结果如果读,读到的结果怎样转换成芯片电压和芯片温度,都没有详细的提及(某个角落里点到了),今天大概讲一讲。
一、需要测量这两个量吗?一般不需要,片温用不着,而且可以用里面的高温中断采取措施,而电源电压一般系统都能保证+5V吧,但不幸的是,我用到的系统必须用到。我系统电源是由电瓶供的,电瓶电压较高时都能保证最终到芯片电压+5V,但电瓶电压降低到6~7伏(亏电或极冷时)以后,芯片电压降低到了3.5~5V也就是5V以下了,这时单片机还能运行,但AD参考电压基本也是用的芯片电源,你如果还用5V来计算显然就不对了,这时必须要准确地测量出芯片的电源电压,我结合当初用DZ60经验,经实验确认可以。
二、普通的轮循转换16路(channel0~channel15)AD0,这个不用我说,大家都知道一般用下面的设置,中断里一次性读出16路结果即可,这个资料很多:
ATD0CTL0=0x0F; //多通道连续转换时,从AIN15返回AIN0
ATD0CTL1=0x40; //D7:0-AN0触发(不外部触发),D65:10-12位精度,D4:放电,D3210:External Trigger Channel
ATD0CTL2=0x42; //禁止外部触发, 序列转换完成中断使能
ATD0CTL3=0x80; //1 0000 0 00右对齐无符号,每次转换16个序列, No FIFO, Freeze模式下继续转
ATD0CTL4=0x0F; //D765:采样时间为4个AD时钟周期,PRS[D4:0] ATDClock=[BusClock*0.5]/[PRS+1]=50MHz/32=1.5625 (范围0.25~8.3MHz,参见手册<MC9S12XEP100 Reference Manual>1217)
ATD0CTL5=0x30; //00110000 D6:0不指定特殊启动通道 D5:1连续转换 ,D4:1多通道轮流采样 D3210:从AIN0开始转换
ATD0DIEN=0x00; //禁止数字输入
三、测量芯片电压和芯片温度必须转换channel[17],那么怎样测量channel[17]的内容呢?需要改变AD设置中的下面两个
ATD0CTL3=0x88; //每次转换1个序列
ATD0CTL5=0x61; //要单独触发,否则结果按顺序存到ATD0DRn,而期望是对于单独特殊通道,始终放在ATD0DR0
但是在启动channel[17]转换之前,必须将芯片电压或温度对应电压信号接通到channel[17],关键的是要设置一个寄存器VREGHTCL
四、怎样通过结果计算芯片电压和片温?
片温:
//见英文手册5.25 mV/℃ //理论上还必须考虑芯片电压
芯片电压(其实也是准确测量AD参考电源VRH的实际准确电压):
其实单片机里有一个所谓的带隙电压VBG,一般是1.2V(这个手册压根没提多少V,我是结合DZ60经验),我通过实验验证准确是1.21V,其实说白了,不管你单片机芯片电压多少,只要能正常工作,这个电压始终是这么多。测量芯片电压就是利用这个。 |
|