基于stm8测压力2
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
研究生项目报告
基于STM8的压力测量的项目
报告
燕山大学
2014年12月
第1章压力测量原理
第1章压力测量原理
压力测量传感器的种类繁多,例如电阻应变片压力传感器、半导体应变片压力传感器、压阻式压力传感器、电感式压力传感器、电容式压力传感器、谐振式压力传感器及电容式加速度传感器等。
而在本次在压力测量环节中我们采用了压阻式压力传感器,因为它具有极低的价格和较高的精度以及较好的线性特性。
金属电阻应变片的内部结构:电阻应变片由基体材料、金属应变丝或应变箔、绝缘保护片和引出线等部分组成。
根据不同的用途,电阻应变片的阻值可以由设计者设计,但电阻的取值范围应注意:阻值太小,所需的驱动电流太大,同时应变片的发热致使本身的温度过高,不同的环境中使用,使应变片的阻值变化太大,输出零点漂移明显,调零电路过于复杂。
而电阻太大,阻抗太高,抗外界的电磁干扰能力较差。
一般均为几十欧至几十千欧左右。
金属电阻应变片又有丝状应变片和金属箔状应变片两种。
通常是将应变片通过特殊的粘和剂紧密的粘合在产生力学应变基体上,当基体受力发生应力变化时,电阻应变片也一起产生形变,使应变片的阻值发生改变,从而使加在电阻上的电压发生变化。
这种应变片在受力时产生的阻值变化通常较小,一般这种应变片都组成应变电桥,并通过后续的仪表放大器进行放大,再传输给处理电路(通常是A/D转换和CPU)显示或执行机构。
将金属丝电阻应变片贴在承载梁的侧面,承载梁在压力的作用下发生形变,而电阻应变片也随着承载梁一起变形,这将导致电阻应变片电阻的变化。
承载梁受到的压力越大,形变也就越大,电阻应变片电阻的变化也就越大,测量出电阻的变化,就可以计算出承载梁受力的大小。
第2章硬件部分
第2章硬件部分
2.1 STM8芯片的简介
STM8S150S4是意法半导体公司生产的8位单片机,它提供了容量为16k~32k字节的Flash程序存储器,集成真正的数据EEPROM。
由于其内部集成真正的EEPROM数据存储器(可以达到30万次的擦写周期)并且高度集成了内部时钟震荡器、看门狗和掉电复位功能,所以它具有更低的系统成本。
16MHz CPU时钟频率与强大的I/O功能,拥有分立时钟源的独立看门狗以及时钟安全系统使STM8具有高性能和高可靠性。
每种MCU都有自身的优点与缺点,与其它8-bit MCU相比,STM8 8-bit MCU最大的特点是:
∙内核:
o最高fcpu频率,可达24MHz,当fcpu≤16MHz时0等待的存储器访问
o高级STM8内核,基于哈佛结构并带有3级流水线
o扩展指令集
o最高20 MIPS @ 24 MHz
∙时钟、复位和电源管理:
o 2.95V到5.5V工作电压
o灵活的时钟控制,4个主时钟源
o带有时钟监控的时钟安全保障系统
∙电源管理:
o低功耗模式(等待、活跃停机、停机)
o外设的时钟可单独关闭
o永远打开的低功耗上电和掉电复位
∙通信接口:
o高速1Mbit/s CAN 2.0B接口
o带有同步时钟输出的UART — LIN主模式
o UART兼容LIN2.1协议,主/从模式和自动重新同步
o SPI接口最高到10Mbit/s
o I2C接口最高到400Kbit/s
∙I/O端口:
o带有高吸收电流输出的GPIO脚
o非常强健的GPIO设计,对倒灌电流有非常强的承受能力
∙开发支持:
o单线接口模块(SWIM)和调试模块(DM),可以方便地进行在线编程和非侵入式调试
∙性价比:
第3章软件部分
3.1压力测量的C语言主程序
# include "stm8s.h"
#define setEN() GPIO_WriteHigh(GPIOD, GPIO_PIN_3)
#define rstEN() GPIO_WriteLow(GPIOD, GPIO_PIN_3)
#define setRW() GPIO_WriteHigh(GPIOD, GPIO_PIN_4)
#define rstRW() GPIO_WriteLow(GPIOD, GPIO_PIN_4)
#define setRS() GPIO_WriteHigh(GPIOD, GPIO_PIN_5)
#define rstRS() GPIO_WriteLow(GPIOD, GPIO_PIN_5)
#define HX711_DOUT0 GPIO_WriteLow(GPIOC, GPIO_PIN_1) #define HX711_DOUT1 GPIO_WriteHigh(GPIOC, GPIO_PIN_1) #define HX711_SCK0 GPIO_WriteLow(GPIOC, GPIO_PIN_2) #define HX711_SCK1 GPIO_WriteHigh(GPIOC, GPIO_PIN_2) #define GapValue 210
unsigned char KEY_NUM = 0;
unsigned long HX711_Buffer = 0;
unsigned long Weight_Maopi = 0;
long Weight_Shiwu = 0;
void main ()
{
KEY_NUM =0;
GPIO_Configuration();
Init_LCD1602();
LCD1602_write_com(0x80);
LCD1602_write_word("Welcome to use!");
Get_Maopi();
Get_Maopi();
delay_ms(200);
Get_Maopi();
Get_Maopi();
while(1)
{
Scan_Key();
if(KEY_NUM ==1)
{
GPIO_WriteLow(GPIOD, GPIO_PIN_1);
Get_Weight();
}
LCD1602_write_com(0x80+0x40);
LCD1602_write_data(Weight_Shiwu%100000/10000 + 0x30);
LCD1602_write_data(Weight_Shiwu%10000/1000 + 0x30);
LCD1602_write_data('.');
LCD1602_write_data(Weight_Shiwu%1000/100 + 0x30);
LCD1602_write_data(Weight_Shiwu%100/10 + 0x30);
LCD1602_write_data(Weight_Shiwu%10 + 0x30);
LCD1602_write_word("Kg");
}
}。