基于单片机的数字安匝仪的制作方法_6

文档序号:9373595阅读:来源:国知局
是 LCD 的 sclk*/ ?define LCD_SCLK_DIR DDRP_DDRPO /* 字库 IC 接口方向定义 */ ?define LCD_SDA PTP_PTP1 /* 接口定义:LCD_SDA 就是 LCD 的 sid*/ ?define LCD_SDA_DIR DDRP_DDRP1 /* 字库 IC 接口方向定义 */ ?define LCD_RS PTP_PTP2 /* 接口 定义:LCD_RS 就是 LCD 的 rs*/ ?define LCD_RS_DIR DDRP_DDRP2 /* 字库 IC 接口方向定义 */ ?define LCD_RES PTP_PTP3 /* 接口 定义:LCD_RES 就是 LCD 的 reset*/ ?define LCD_RES_DIR DDRP_DDRP3 /* 字库 IC 接口方向定义 */ ?define LCD_CS PTP_PTP4 /* 接口 定义:LCD_CS 就是 LCD 的 csl*/ ?define LCD_CS_DIR DDRP_DDRP4 /* 字库 IC 接口方向定义 */ Sdefine BIT_SET(bit, Register) ((Register) |= (1〈〈(bit))) Sdefine BIT_CLR(bit, Register) ((Register) &= ~(1<<(bit))) Sdefine BIT_GET(bit, Register) (((Register) >> (bit)) & I) ?define EnableSCIReIntO SCI0CR2 |= 0x20 //开放SCIO 接收中断 ?define DisableSCIReIntO SCI0CR2 &= OxDF //禁止SCIO接收中断 ?define EnableSCIReIntl SCI1CR2 |= 0x20 //开放SCIl 接收中断 ?define DisableSCIReIntl SCI1CR2 &= OxDF //禁止SCIl 接收中断 ?define ReSendStatusRO SCI0SR1 //SCIO 状态寄存器 ?define ReSendDataRO SCIODRL //SCIO 数据寄存器 ?define ReSendStatusRl SCIISRl //SCIO 状态寄存器 ?define ReSendDataRl SCI IDRL //数据寄存器 ?define ReTestBit 5 //接收缓冲区满标志位 Sdefine SendTestBit 7 //发送缓冲区空标志位 ?define BUS_CLOCK (80000000) //总线频率,改变总线频率直接在此处修改 ?define LED_STATUS PTT_PTT2 ?define LED_STATUS_DIR DDRT_DDRT2 Sdefine READword(address) ((unsigned int) (*(volatile unsigned int *- near)(address))) ?define DFLASH_LOWEST_START_PAGE 0x00 // 定义 data flash 的起始页 ?define DFLASH_START 0x00100000 //定义 data flash 的起始地址 ?define DFLASH_PAGE_SIZE 0x0400 //定义 data flash 的大小为 IK. ?define DFLASH_PAGE_WIND0ff_START 0x0800 typedef unsigned char u8; typedef unsigned short int ul6; typedef unsigned long int u32; typedef signed char s8; typedef signed short int sl6; typedef signed int s32;typedef volatile u8 vu8; typedef volatile ul6 vul6; typedef volatile u32 vu32; typedef volatile s8 vs8;typedef volatile sl6 vsl6; typedef volatile s32 vs32; void ControlInit (void) ;void DA_SetData(ul6 dat) ; float Average (u8 num, float 氺dat); unsigned int GetSmoothADValueO(unsigned int original_ad_value) ;float CalculatePressure(unsigned int ad-value); float CalculateCurrent(unsigned int ad-value);float CalculateVacuumDegree(unsigned int ad-value); ul6 CalculateDAOutData(float at);float CalculateSensitivity(u8 mod,unsigned int DA-Data); void System_Init (void) ;float CalculateDAOutVoltage (ul6 dat) ; float MedianFilter(u8 num,float *value-buf); void SampleInit (void) ;unsigned int CRC16_Calculate (unsigned char 5^ptrj unsigned char len,unsigned int weight); void SerialProtoco I Send(unsigned char* SendDataj unsigned char Length,unsigned char Mode); void transfer_command_lcd (int datal) ; void lcd_address(unsigned int page,unsigned int column); void transfer-data-IcdQnt datal) ; void display_128x64(unsigned char 氺dp); void LCD-Init (void); void LCDPort_Init (void); void send_command_to_ROM( unsigned char datu );void clear-screen(void); static unsigned char get_data-from-ROM( ); void SCISendString(u8 SCINoj s8 木p); void PLL-Init(void); void display_graphic_16xl6(unsigned int page, unsigned int column, unsigned char *dp); void PWM-Init(void); void display_graphic_8xl6(unsigned int page, unsigned char column, unsigned char 木dp); void PIT_Init(void); void display_graphic_5x7(unsigned int page, unsigned char column, unsigned char 木dp); void GPIO-Init(void); void get_n_bytes_data_from_ROM(unsigned char addrHigh,unsigned char addrMid,unsigned char addrLow,unsigned char 5^pBuffj unsigned char DataLen ); extern float SensitivityNow; void LED_Init(void); void display-GB2312_string(unsigned char y, unsigned char x, unsigned char 木text); void DFlash_Init(void); void display_string_5x7(unsigned char y,unsigned char x,unsigned char 氺text); void DisplayFloatVariable5x7(u8 row, u8 col, const s8 氺format,float dat) ; u8 SCIRcvNByte (u8 SCINo,u8 n,u8 dat []); void DisplayFloatVariable2312 (u8 row,u8 col,const s8 ^format, float dat); void PWM-Set(u8 ch,float duty); extern unsigned char bmpI[];extern unsigned char jiongl[];extern unsigned char Ieil []; extern u8 MeasureStep;extern ul6 DA-OutData;extern u8 ErrorCode; extern u8 ActuationFlag; extern u8 ActuationRecordFlag;extern ul6 ActuationDAData; extern u8 ReleaseFlag; extern float ActuationSensitivity[SAMPLE_TIMES];extern float ActuationSensFinal; extern u8 ReleaseRecordFlag;extern ul6 ReleaseDAData; extern float ReleaseSensFinal; extern float ReleaseSensitivity[SAMPLE_TIMES];extern u8 MeasureCounter; void SCIInit(u8 SCINo, u8 sysclk, u32 baud);void SCISendByte(u8 SCINo, u8 dat); void SCISendNByte (u8 SCINoj u8 n, u8 dat[]);u8 SCIRcvByte (u8 SCINoj u8 ^p); extern unsigned long T_lMS_Counter;void DFlash-EraseSector(unsigned short int ADDR16); void DFlash_ffrite4fford (unsigned short int ADDR16,unsigned short int dat []); unsigned short int DFlash_Readfford(unsigned short int ADDR16); void DelayUs (unsigned int i); void DelayMs(unsigned int i) ; unsigned int AD_Sample(unsigned char channel); typedef struct CanFrame {u32 m-ID;u8 m-IDE; u8 m-RTR; u8 m_data[8]; u8 m-dataLen; u8 m-priority; } CANFrame; extern u8 CANDataBuffer[8]; extern u8 sendDataLength;extern CANFrame sendFrame, rcvFrame; extern u8 CANSendErrorFlag; extern u32 CANSendErrorCounter;extern u8 CANRcvErrorFIag; extern u32 CANRcvErrorCounter;extern u8 CANRcvDataUpdateFlag; void CANInit(void); extern u32 CANSendErrorlCounter;extern u32 CANSendError2Counter; void CANDataInit(void); extern u32 CANSendError3Counter;extern u32 CANSendError4Counter; void AD- Init (void); extern u32 CANRcvDataCounter;extern u32 CANSendDataCounter; u8 CANSendFrame(CANFrame ^sendFrame);u8 CANRcvFrame(CANFrame 5^receiveFrame); u8 CANFillFrame( CANFrame ^framej u32 id,u8 ide, u8 rtr, u8 氺data,u8 Ienj u8 priority); #endif〇
【主权项】
1. 一种基于单片机的数字安匝仪,其特征在于:是由CPU处理器、丝杠电机、图像采集 单元、键盘单元、图像存储单元、电压调节单元组成: CPU处理器:采用MC9SXS128最小系统; 丝杠电机:通过步进电机驱动,将电机连接到CPU处理器的主控芯片上;电机的 0UT1~0UT4 接到 ULN2003 的 16~13 脚; 图像采集单元:通过主控芯片的控制来切换摄像机,摄像头0V7620的11~18脚连接到 CPU处理器的24~31脚,3、4接CPU处理器的8、7脚;摄像头NV628电源接升压电路的12V 输出端,视频输出端接到PDS模块,然后经过AV转USB模块连接到USB转SCI中的USB端; 键盘单元:4X4键盘的PA0~PA7接到CPU的57~64脚; 图像存储单元:将采集到的图像存储在存储工具中,为了以后的图像融合,SD卡中的 1、2、7、8、9脚经电阻接VCC,2脚接CPU处理器的96脚,5脚接CPU的95脚,7脚接CPU的 93脚,8脚接CPU的94脚; 电压调节单元:5V端接供电电源的5V,12V端接nv628的电源端; 其具体流程是: 1、 系统初始化阶段:锁相环初始化函数、模数转换初始化函数、PIT定时器初始化函 数、SCI串口通信初始化函数、IXD显示屏初始化函数、GPIO 口初始化函数、SAMPLE采样初 始化函数; 2、 系统检测阶段: ① 等待干簧管的插入,如果没有干簧管插入,处于一直扫描状态,直到有干簧管插入; 当有干簧管插入时,等待100毫秒,再次检测是否有干簧管插入; ② 处于吸合状态,通过提高电压值来促使干簧管内部导通,当增加的叫压使干簧管导 通时,将当前的DA输出电压值赋给变量ActuationDAData,此时的吸合标志位被置位,通过 公式计算吸合时的AT值,公式: ActuationSensitivity[MeasureCounter] = 0? 9544*ActuationDAData/4096* 供电电 压值八线圈电阻+限流电阻1+限流电阻2)*线圈匝数; ③ 定时器每0.1 ms扫描下是否释放,由于释放时的AT值比吸合时大,因此在减少电压 时,是增加电压的2倍,当释放完时,定时器将释放标志置位,同时将当前的DA输出值赋给 ReleaseDAData,这些都是在PIT定时器中完成; ④ 测量完成,检测干簧管是否拔出,即判断测量是否结束了,将DA的输出值清零; 3、 显示阶段:设置固定时间,将测量的结果送到显器显示。
【专利摘要】一种基于单片机的数字安匝仪,属于电子检测仪器领域。本发明的目的是通过单片机利用多路AD将基准电压分成多份,从而提高了干簧管检测精度的基于单片机的数字安匝仪。本发明是由CPU处理器、丝杠电机、图像采集单元、键盘单元、图像存储单元、电压调节单元组成。本发明解决了以往的干簧管检测设备检测周期长和检测精度低的问题,设计了一套由单片机和显示单元组成的检测系统。解决了检测设备检测周期长的问题,而且将各个单元集成在一起,节省了空间,并且线路连接简单方便,操作比较简单。本数字安匝仪的突出特点是将单片机与高精度AD结合,提高了检测精度,同时程序的优化,降低了检测周期,提高了检测效率。
【IPC分类】G01R31/327, G01R31/02
【公开号】CN105093106
【申请号】CN201510565511
【发明人】康冰, 任丽莉, 陈龙冬, 潘康康, 闫冬梅, 姜守坤, 姜良旭, 柳文章, 陈华, 张晓拓
【申请人】吉林大学
【公开日】2015年11月25日
【申请日】2015年9月8日
当前第6页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1