课设记录

该项目是基于stc89c52的51内核设计的。
分为以下几部分:
1. 传感器模块
2.MCU
3.动作模块

传感器是使用现成的模块,即,压力传感器。它里面的原理细节就不深究了。总的来说,就是
压力使传感器产生形变,其实这个传感器是个应力电阻,每个压力就对应一个电阻,每个电阻
就对应一个电压,也就是传给AD模块的是电压,至于怎么设计才能更合理,精度更大,那么
这个就不是我所研究的了。我们只需要知道,每个压力对于一个电压,那么AD就可以采集
电压这个模拟量,进行采集,最后可以读取到这个电压值,然后这个电压值和压力有个常数
的关系,这个根据电路和已知条件都是可以计算的。OK,这就可以了。
当然,这个AD模块的驱动函数也是现成的,不用自己写,不然也不可能一个白天就可以OK的,
当然,基本上看这个芯片的手册,照着时序写,简单的也是可以写的,只是测试得要很长的
时间,有点麻烦。
好了,有了驱动函数,也就是说我们可以通过某种协议(规则)读取这个的D值,即为数字值
D值和测的A值有个常数的关系,必然存在误差。
误差主要存在有几方面:
1.必然的,AD的转换误差,使用的芯片是HX711是24bit,开发板上的是8bit A/D D/A的芯片
  位数越高,精度越高,这是一方面的误差。

2.计算时的误差,计算常数的时候,会约等于,以求简便。

3.常数时理论上计算的值,为理想值,有时传感器不一定时理想的,比如这时达不到比较理想
的压力和电阻的线性关系,那么得出的常数是没有意义的。

我们可以得到D值了,那么我们就可以和MCU“交流”了。
我们可以显示出来,但是我们学校发的开发板感觉有点low,它的定时器T0和T1居然和lcd的
引脚是共用的,也就是说,我使用定时器的话,那么引脚是在计数的,即时钟脉冲给引脚响应
以给它的寄存器计数,那么就会给lcd产生影响。
然后就够就是产生乱码了。那么现在的解决方案有:
1. 自己接一个外设液晶,不用它板子上带的接口
2. 换板子
3. 改一个显示方式

那么最直接想到的就是,换一种显示了,当然,它历程给的挺全的。液晶,数码管,串口
都有。可是,数码管会与我之后要用的一个电机驱动的引脚冲突,那么先放弃吧。
串口感觉是可以的了,那么很好,那就用吧。

然后加上动作模块,课设要求是通过读取压力的值来调整电机的转速,来模拟电梯的动作。
那么我们就要用到pwm这个东西来达到调速的目的,当然我现在是写不了驱动代码了,因为
有点懒。。。。所以历程看看有没有,好,也有,那就很海皮。移植过来,它里面使用的是
两个定时器来达到方波脉冲的变化,好,那就用吧。单独测试的时候,果真也能调速。
继续,移植过去,然后就gg了,奔溃了。好,移植嘛,这很正常,那就找原因。
最后发现,串口使用的是工作方式0,使用定时器1产生波特率,那么这就冲突了。
好,发现问题了,怎么解决?
1 . 换一种实现pwm的方式
2 . 增加时钟

我看原理图的时候发现,at89c52有T2,那么贪图方便就加个定时器吧,换pwm的方法就没研究
其实用T2还是有点麻烦的,感觉,有个坑就在于它的定时器的标志位不是硬件复位的,而是
需要软件复位,即在中断服务函数里:TF2=0;有点小坑。
设计的是,分为五个重量等级,每个等级对应一个速度。
以上就实现了,但是,这只是为了完成而完成。
我觉得吧:
1.如果lcd不冲突,用液晶更好。
2.使用了三个时钟是不是有点多了,有没有更好的pwm实现方案?好像stc12c5a可以有直接
用来做pwm的输出引脚,这个是不是更方便呢?

猜你喜欢

转载自blog.csdn.net/qq_38960899/article/details/79438071