新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 传感器课程设计心得

传感器课程设计心得

作者:时间:2012-08-16来源:网络收藏
经过半个月的奋斗,终于完成,虽然跟自己开始的想法差了不少,总体上还过得去,这个过程中解接触了一些新的东西,也无意中看到了一些,总结如下,以便查看:

1、C51编程:C语言在进入main函数前会有一个对单片机内存单元的初始化,另外运用浮点乘除运算时程序庞大,使用循环加或者循环减时会大大的减少程序,对于浮点数的显示可以将其乘以10的整数幂(这个乘是人编程时设定计算的参数是设好的,并不需要单片机去计算),这样就可以将浮点运算转化为整数运算,进一步简化程序,对于它的显示可以在固定位置设置小数点(利用或者||,由数码管类型决定),这个方法同样适用于汇编,且可以使汇编更简单。在涉及到对硬件的控制时,可以使用C语言的赋值语句,根据外围硬件的工作时序设定赋值的顺序,不过由于C编译后的具体指令组成并不清楚,很可能出现意想不到的情况(只是设想,还需证实),由于C语言对硬件的控制并不是很强,所以可以使用嵌套或调用汇编的方法,不过这种方法不够好,可以根据C生成 SRC文件,对其进行改变,从而变成汇编。用C编程的时候注意不要受汇编的干扰,注意指针的使用(这次用C编写出错的一个最重要的原因)

2、AD的使用:一般单片机的时钟输出并不能满足AD的时钟频率要求,通常需要进行分频,利用计数器(例如74LS192)可以做出分频器,首先计数器进制应为分频器分频数的二倍,或门(或非门)的一段接分频数的输出端,另一端接计数器的清除端(MR),这样门输出即为分频后的时钟频率。在锁存通道、启动AD 转换、允许AD输出转换值时,在汇编中通常使用MOVX指令,但是由于使用MOVX时WR、RD变化时间是很短的,可能会在数据没有准备好时就已经操作了,从而造成数据错误,也有可能MOVX的电平维持时间不够长,从而造成并不能使AD进入我们需要的状态。解决的办法是我们按照AD的工作时序,对特定的引脚进行电平变换,即可控制电平的时间,从而保证数据传输的正确性。在使用中断(定时器或者其他)启动AD转换后,要在尽可能短的时间内退出该中断,因为为了保证对AD的操作不被中断(中断后可能不能再继续),在对AD进行操作的中断中不允许其他中断,这样我们必须尽快开启中断允许并退出中断,当然也可以在启动AD后打开中断允许,这样也可以保证转换值能够及时被读取,不过会出现中断嵌套,可能对程序的运行不利。

3、Keil与proteus的联调:使用Keil和proteus联调,可以单步运行Keil,通过proteus即可观察到每一条程序的运行结果,同样可以了解到每一句C语言对应的汇编以及运行的结果。

4、数码管的显示时,尤其是多个时,要使用驱动电路,因为数码管的驱动电流一般为10mA,单片机输出驱动不够,驱动电路可以是三极管,也可以使用专门的数码管驱动芯片,可以减少对单片机资源的占用,例如LM8186,MAX7219等。

5、压电蜂鸣器的信号输出阻抗很高,使用一般的信号采集电路并不能将信号采集进来。可以使用电荷放大器,一是输入阻抗大,二是灵敏度较高,不过由于电荷放大器的频响较高,如果没有好的屏蔽措施极容易引进干扰。另一个办法是,可以使用高输入阻抗运放接成电压跟随器形式,既可以作为前置放大器的输入端提高输入阻抗,又可以起到隔离电路的作用。运放可以选用LM102,输入阻抗高达1012欧姆,不过供电电源为 正负12到15,并不是很好,不过可以选用其他运放,例如CA3130(高达1.5T)等。

6、气压表压指示灯部分是无意中发现的现象,具体原理还需要进一步找答案

7、还有一点忘了,数码管动态显示的操作顺序:关地址,赋段码,打开地址,每个的刷新时间间隔为1ms左右,时间越长,数码管亮度越高,不过使用延时时间较长的话,一是可能会闪烁,二是单片机灌电流较大,对单片机不利,这次使用的是400微秒的刷新时间,120欧姆的限流电阻,显示稳定,亮度也好,不过感觉限流电阻小了一些,耗电功率较大。
分频器相关文章:分频器原理
蜂鸣器相关文章:蜂鸣器原理


评论


相关推荐

技术专区

关闭