• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

【原创】基于AT89C2051小型便携功率计设计(液晶1602显示功率)

之前老板想在老化房,实时能查看电子镇流器调光,功率,就叫我做了这个东东,现在这东西装备了几个老化架,原理很简单,程序也不难,让我慢慢道来。
全部回复(36)
正序查看
倒序查看
2014-05-07 22:47
0
回复
2014-05-07 22:54
@wangchuangwccc
[图片][图片][图片]
0
回复
2014-05-07 22:59
@wangchuangwccc
[图片][图片][图片][图片][图片]
0
回复
2014-05-07 23:08
@wangchuangwccc
[图片][图片][图片]
0
回复
2014-05-07 23:10
@wangchuangwccc
[图片][图片][图片]
描述AD7755的资料有点多,不过尽量看完,其实这个产品,最重要的不是硬件也不是软件,而是调试,调试不好精度会差很多。
0
回复
2014-05-08 11:16
@wangchuangwccc
描述AD7755的资料有点多,不过尽量看完,其实这个产品,最重要的不是硬件也不是软件,而是调试,调试不好精度会差很多。
http://wenku.baidu.com/view/80250ae8b8f67c1cfad6b8cb.html这里有对AD7755详细描述,顺便传上一张老化架的实物,有点模糊

0
回复
2014-05-08 11:17
@wangchuangwccc
http://wenku.baidu.com/view/80250ae8b8f67c1cfad6b8cb.html这里有对AD7755详细描述,顺便传上一张老化架的实物,有点模糊[图片]
这款IC是把功率转换为频率,然后通过单片机把频率转换为功率显示。也可以直接输出来控制电表转动。
0
回复
遥望
LV.1
9
2014-05-08 23:19
@wangchuangwccc
http://wenku.baidu.com/view/80250ae8b8f67c1cfad6b8cb.html这里有对AD7755详细描述,顺便传上一张老化架的实物,有点模糊[图片]
其实可以用ATT7022这种三相电能芯片来做,一个芯片可以接独立的3路单相电源,能简化不少电路。
0
回复
2014-05-08 23:32
@遥望
其实可以用ATT7022这种三相电能芯片来做,一个芯片可以接独立的3路单相电源,能简化不少电路。

嗯,谢谢,“遥望”的建议,有空我看一些这IC

0
回复
2014-05-09 13:39
@wangchuangwccc
嗯,谢谢,“遥望”的建议,有空我看一些这IC
王工对技术的钻研很深,学习!
0
回复
2014-05-09 19:51
学习
0
回复
2014-05-10 15:27
@蚂蚁电源
学习

这个是原理图

0
回复
2014-05-10 15:28
@wangchuangwccc
这个是原理图[图片]
有点模糊,所以放大

0
回复
2014-05-10 15:35
@wangchuangwccc
有点模糊,所以放大[图片][图片]

这个是程序,没进行优化,我一般写完程序了,对程序优化一遍,以便在能生成最小的HEX文件,也能加强可读性。

RS  EQU P3.0

RW  EQU P3.1

E   EQU P3.7

ORG 00H

LJMP  MAIN

ORG 0BH

LJMP  INTL0

ORG 1BH

LJMP  INTL1

MAIN:         

    MOV P1,#0  

MOV P3,#0   

        MOV R0,#0  

MOV R1,#0  

MOV R2,#0 

 MOV R3,#0 

 MOV 40H,#111

  CLR TR0 

 CLR TR1 

 CLR ET0 

 CLR ET1  

MOV TMOD,#51H 

 MOV TL0,#3CH 

 MOV TH0,#0B0H  

MOV TL1,#0FFH  

MOV TH1,#0FFH  

    LCALL   SZ1 

 MOV  DPTR,#TAB1

  LCALL  DELY 

 SETB  TR0  

SETB  TR1  

SETB  ET0

  SETB  ET1

  SETB  EA 

 LCALL XR

SZ1:   LCALL  BUSY 

 LCALL  DELY 

      MOV  50H,#38H 

 LCALL  WERZ  

   LCALL  DELY 

      MOV  50H,#38H 

 LCALL  WERZ 

 LCALL  DELY  

  MOV  50H,#38H

    LCALL  WERZ 

 LCALL  BUSY

  MOV  50H,#38H 

 LCALL  WERZ 

 LCALL  BUSY  

MOV  50H,#0CH 

 LCALL  WERZ 

 LCALL  BUSY 

 MOV  50H,#02H

  LCALL  WERZ 

  LCALL  BUSY  

MOV  50H,#06H

  LCALL  WERZ

  LCALL  BUSY   

    MOV  50H,#01H

     LCALL  WERZ 

 RETXR:         

   LCALL  BUSY    

   MOV  50H,#80H

     LCALL  WERZ 

 LCALL  BUSY 

MOV  A,R0  

MOVC A, @A+DPTR 

      MOV  51H,A

     LCALL  WERD 

 LCALL  BUSY

       MOV  50H,#81H

     LCALL  WERZ 

 LCALL  BUSY   

MOV  A,R1 

 MOVC A, @A+DPTR 

      MOV  51H,A   

  LCALL  WERD  

LCALL  BUSY  

     MOV  50H,#82H

     LCALL  WERZ  

LCALL  BUSY  

MOV  A,R2 

 MOVC A, @A+DPTR  

     MOV  51H,A

     LCALL  WERD 

 LCALL  BUSY   

    MOV  50H,#83H   

  LCALL  WERZ  

LCALL  BUSY 

 MOV  A,R3  

MOVC A, @A+DPTR 

      MOV  51H,A

     LCALL  WERD  

 LCALL  BUSY 

      MOV  50H,#84H  

   LCALL  WERZ 

 LCALL  BUSY   

    MOV  51H,#57H

    LCALL  WERD  

LJMP  XR

WERZ:

CLR  RS   

  CLR  RW

MOV  P1,50H

SETB  E

LCALL  DELY_2MS

CLR   E

LCALL  DELY_2MS

RET    

 WERD:

SETB  RS  

   CLR  RW

MOV  P1,51H

SETB  E

LCALL  DELY_2MS

CLR   E

LCALL  DELY_2MS

RET

BUSY:

CLR  RS     

SETB  RW

SETB  E

LCALL  DELY_2MS

MOV  A,P1

JB  ACC.7,BUSY

CLR  E

LCALL  DELY_2MS

RET

DELY_2MS:     

MOV  30H,#4

MS1:     MOV   31H,#250

MS2:     DJNZ  31H,MS2

DJNZ  30H,MS1

RET

DELY_US:   

  MOV  30H,#30

US:DJNZ  30H,US

RET

DELY:    

 MOV   30H,#5

Y1:  MOV  31H,#200

Y2:MOV  32H,#200

Y3:DJNZ 32H,Y3

DJNZ 31H,Y2

DJNZ 30H,Y1

RET

TAB1:       DB  "0123456789"

INTL0:        

     CLR  TR1     

    MOV TL0,#3CH   

 MOV TH0,#0B0H 

   DJNZ  40H,SL

MOV R0,#6  

  MOV A,42H   

   MOV B,#10   

      DIV AB   

 MOV R0,A  

  MOV R1,B   

 MOV A,41H  

  MOV B,#10   

 DIV AB   

 MOV R2,A  

  MOV R3,B   

 MOV 40H,#111  

       MOV 41H,#0   

 MOV 42H,#0

SL:         

SETB TR1      

   RETI

INTL1:     

  MOV  TL1,#0FFH

  MOV  TH1,#0FFH 

   INC  41H 

 MOV  A,#100 

 CJNE  A,41H,AL 

 MOV  41H,#0  

INC 42H

AL:    RETI

END 

0
回复
2014-05-10 15:40
@wangchuangwccc
这个是程序,没进行优化,我一般写完程序了,对程序优化一遍,以便在能生成最小的HEX文件,也能加强可读性。RS EQUP3.0RW EQUP3.1E EQUP3.7ORG00HLJMP MAINORG0BHLJMP INTL0ORG1BHLJMP INTL1MAIN:        MOVP1,#0  MOVP3,#0       MOVR0,#0  MOVR1,#0  MOVR2,#0  MOVR3,#0  MOV40H,#111 CLRTR0  CLRTR1  CLRET0  CLRET1  MOVTMOD,#51H  MOVTL0,#3CH  MOVTH0,#0B0H  MOVTL1,#0FFH  MOVTH1,#0FFH    LCALL SZ1  MOV DPTR,#TAB1 LCALL DELY  SETB TR0  SETB TR1  SETB ET0 SETB ET1 SETB EA  LCALLXRSZ1: LCALL BUSY  LCALL DELY     MOV 50H,#38H  LCALL WERZ   LCALL DELY     MOV 50H,#38H  LCALL WERZ  LCALL DELY  MOV 50H,#38H   LCALL WERZ  LCALL BUSY MOV 50H,#38H  LCALL WERZ  LCALL BUSY  MOV 50H,#0CH  LCALL WERZ  LCALL BUSY  MOV 50H,#02H LCALL WERZ   LCALL BUSY  MOV 50H,#06H LCALL WERZ LCALL BUSY     MOV 50H,#01H    LCALL WERZ  RETXR:        LCALL BUSY     MOV 50H,#80H    LCALL WERZ  LCALL BUSY MOV A,R0  MOVCA,@A+DPTR     MOV 51H,A    LCALL WERD  LCALL BUSY    MOV 50H,#81H    LCALL WERZ  LCALL BUSY  MOV A,R1  MOVCA,@A+DPTR     MOV 51H,A   LCALL WERD  LCALL BUSY     MOV 50H,#82H    LCALL WERZ  LCALL BUSY  MOV A,R2  MOVCA,@A+DPTR     MOV 51H,A    LCALL WERD  LCALL BUSY     MOV 50H,#83H   LCALL WERZ  LCALL BUSY  MOV A,R3  MOVCA,@A+DPTR     MOV 51H,A    LCALL WERD   LCALL BUSY     MOV 50H,#84H   LCALL WERZ  LCALL BUSY     MOV 51H,#57H   LCALL WERD  LJMP XRWERZ:CLR RS    CLR RWMOV P1,50HSETB ELCALL DELY_2MSCLR ELCALL DELY_2MSRET    WERD:SETB RS    CLR RWMOV P1,51HSETB ELCALL DELY_2MSCLR ELCALL DELY_2MSRETBUSY:CLR RS   SETB RWSETB ELCALL DELY_2MSMOV A,P1JB ACC.7,BUSYCLR ELCALL DELY_2MSRETDELY_2MS:   MOV 30H,#4MS1:   MOV 31H,#250MS2:   DJNZ 31H,MS2DJNZ 30H,MS1RETDELY_US:    MOV 30H,#30US:DJNZ 30H,USRETDELY:    MOV 30H,#5Y1: MOV 31H,#200Y2:MOV 32H,#200Y3:DJNZ32H,Y3DJNZ31H,Y2DJNZ30H,Y1RETTAB1:    DB "0123456789"INTL0:        CLR TR1      MOVTL0,#3CH   MOVTH0,#0B0H   DJNZ 40H,SLMOVR0,#6   MOVA,42H    MOVB,#10      DIVAB   MOVR0,A   MOVR1,B   MOVA,41H   MOVB,#10   DIVAB   MOVR2,A   MOVR3,B   MOV40H,#111      MOV41H,#0   MOV42H,#0SL:     SETBTR1      RETIINTL1:     MOV TL1,#0FFH MOV TH1,#0FFH   INC 41H  MOV A,#100  CJNE A,41H,AL  MOV 41H,#0  INC42HAL:  RETIEND 
其实原理很简单,只要设置好AD7755带载后,根据功率发射出不同频率的脉冲,然后用单片机外部计数器,在同一个时间,计数脉冲,在根据这个计数值转换给显示屏显示。
0
回复
2014-05-10 20:07
@wangchuangwccc
[图片][图片][图片]
过来学习学习
0
回复
2014-05-12 15:51
@wangchuangwccc
其实原理很简单,只要设置好AD7755带载后,根据功率发射出不同频率的脉冲,然后用单片机外部计数器,在同一个时间,计数脉冲,在根据这个计数值转换给显示屏显示。
,不错!~
0
回复
新月GG
LV.10
19
2014-05-15 09:04
@wangchuangwccc
这个是程序,没进行优化,我一般写完程序了,对程序优化一遍,以便在能生成最小的HEX文件,也能加强可读性。RS EQUP3.0RW EQUP3.1E EQUP3.7ORG00HLJMP MAINORG0BHLJMP INTL0ORG1BHLJMP INTL1MAIN:        MOVP1,#0  MOVP3,#0       MOVR0,#0  MOVR1,#0  MOVR2,#0  MOVR3,#0  MOV40H,#111 CLRTR0  CLRTR1  CLRET0  CLRET1  MOVTMOD,#51H  MOVTL0,#3CH  MOVTH0,#0B0H  MOVTL1,#0FFH  MOVTH1,#0FFH    LCALL SZ1  MOV DPTR,#TAB1 LCALL DELY  SETB TR0  SETB TR1  SETB ET0 SETB ET1 SETB EA  LCALLXRSZ1: LCALL BUSY  LCALL DELY     MOV 50H,#38H  LCALL WERZ   LCALL DELY     MOV 50H,#38H  LCALL WERZ  LCALL DELY  MOV 50H,#38H   LCALL WERZ  LCALL BUSY MOV 50H,#38H  LCALL WERZ  LCALL BUSY  MOV 50H,#0CH  LCALL WERZ  LCALL BUSY  MOV 50H,#02H LCALL WERZ   LCALL BUSY  MOV 50H,#06H LCALL WERZ LCALL BUSY     MOV 50H,#01H    LCALL WERZ  RETXR:        LCALL BUSY     MOV 50H,#80H    LCALL WERZ  LCALL BUSY MOV A,R0  MOVCA,@A+DPTR     MOV 51H,A    LCALL WERD  LCALL BUSY    MOV 50H,#81H    LCALL WERZ  LCALL BUSY  MOV A,R1  MOVCA,@A+DPTR     MOV 51H,A   LCALL WERD  LCALL BUSY     MOV 50H,#82H    LCALL WERZ  LCALL BUSY  MOV A,R2  MOVCA,@A+DPTR     MOV 51H,A    LCALL WERD  LCALL BUSY     MOV 50H,#83H   LCALL WERZ  LCALL BUSY  MOV A,R3  MOVCA,@A+DPTR     MOV 51H,A    LCALL WERD   LCALL BUSY     MOV 50H,#84H   LCALL WERZ  LCALL BUSY     MOV 51H,#57H   LCALL WERD  LJMP XRWERZ:CLR RS    CLR RWMOV P1,50HSETB ELCALL DELY_2MSCLR ELCALL DELY_2MSRET    WERD:SETB RS    CLR RWMOV P1,51HSETB ELCALL DELY_2MSCLR ELCALL DELY_2MSRETBUSY:CLR RS   SETB RWSETB ELCALL DELY_2MSMOV A,P1JB ACC.7,BUSYCLR ELCALL DELY_2MSRETDELY_2MS:   MOV 30H,#4MS1:   MOV 31H,#250MS2:   DJNZ 31H,MS2DJNZ 30H,MS1RETDELY_US:    MOV 30H,#30US:DJNZ 30H,USRETDELY:    MOV 30H,#5Y1: MOV 31H,#200Y2:MOV 32H,#200Y3:DJNZ32H,Y3DJNZ31H,Y2DJNZ30H,Y1RETTAB1:    DB "0123456789"INTL0:        CLR TR1      MOVTL0,#3CH   MOVTH0,#0B0H   DJNZ 40H,SLMOVR0,#6   MOVA,42H    MOVB,#10      DIVAB   MOVR0,A   MOVR1,B   MOVA,41H   MOVB,#10   DIVAB   MOVR2,A   MOVR3,B   MOV40H,#111      MOV41H,#0   MOV42H,#0SL:     SETBTR1      RETIINTL1:     MOV TL1,#0FFH MOV TH1,#0FFH   INC 41H  MOV A,#100  CJNE A,41H,AL  MOV 41H,#0  INC42HAL:  RETIEND 

这程序没写注释,看起来好累。

0
回复
2014-05-15 09:54
@新月GG
这程序没写注释,看起来好累。
呵呵,确实,这程序是我两年前写的,当时还没注释的习惯将就的先看吧,不理解的在问我
0
回复
2014-05-15 16:16
@wangchuangwccc
呵呵,确实,这程序是我两年前写的,当时还没注释的习惯[图片]将就的先看吧,不理解的在问我

0
回复
2014-05-15 16:23
@wangchuangwccc
[图片][图片]

这个是仿真图,可以看出不同的频率,计算出的功率是不一样的,也就是说,带载功率可以从显示频屏显示出来。这个方案的核心是调试,你注意看程序,就很容易看出来,AD775设置的最大频率不能超过你程序设定时间的最大计数值,一定时间内,计数脉冲太多,超过了你的程序处理个数的能力,程序就会出错。

0
回复
2014-05-15 16:28
@wangchuangwccc
这个是仿真图,可以看出不同的频率,计算出的功率是不一样的,也就是说,带载功率可以从显示频屏显示出来。这个方案的核心是调试,你注意看程序,就很容易看出来,AD775设置的最大频率不能超过你程序设定时间的最大计数值,一定时间内,计数脉冲太多,超过了你的程序处理个数的能力,程序就会出错。
为了仪器更精准,建议计数时间在1S以上
0
回复
新月GG
LV.10
24
2014-05-23 13:51
@wangchuangwccc
这个是仿真图,可以看出不同的频率,计算出的功率是不一样的,也就是说,带载功率可以从显示频屏显示出来。这个方案的核心是调试,你注意看程序,就很容易看出来,AD775设置的最大频率不能超过你程序设定时间的最大计数值,一定时间内,计数脉冲太多,超过了你的程序处理个数的能力,程序就会出错。

精度要求不用这么高,能监视正常不正常就可以了。

0
回复
2014-05-23 15:35
@新月GG
精度要求不用这么高,能监视正常不正常就可以了。
硬件都一样,就软件的程序可以控制精度,精度越高肯定越好了,自已还行,要是想做成单子,还得往高精度上靠
0
回复
小毛猴
LV.3
26
2014-05-30 11:40
@wangchuangwccc
硬件都一样,就软件的程序可以控制精度,精度越高肯定越好了,自已还行,要是想做成单子,还得往高精度上靠
感谢楼主,期待更新!
0
回复
新月GG
LV.10
27
2014-05-30 11:44
@wangchuangwccc
硬件都一样,就软件的程序可以控制精度,精度越高肯定越好了,自已还行,要是想做成单子,还得往高精度上靠

确实如此,做批量就要考虑性能和成本了。

0
回复
zoufeihu
LV.5
28
2014-06-01 22:54
@wangchuangwccc
http://wenku.baidu.com/view/80250ae8b8f67c1cfad6b8cb.html这里有对AD7755详细描述,顺便传上一张老化架的实物,有点模糊[图片]
列队般的作品,不错
0
回复
wheelzhou
LV.9
29
2014-06-05 22:13
@新月GG
确实如此,做批量就要考虑性能和成本了。
你不怕,坛子里面的高手捷足先登,做成产品出来吗?
0
回复
2014-06-06 00:56
@wheelzhou
你不怕,坛子里面的高手捷足先登,做成产品出来吗?
已经有产品了,我也是抄别人的
0
回复
飞翔2004
LV.10
31
2014-06-06 22:18
@wangchuangwccc
其实原理很简单,只要设置好AD7755带载后,根据功率发射出不同频率的脉冲,然后用单片机外部计数器,在同一个时间,计数脉冲,在根据这个计数值转换给显示屏显示。
汇编看起来好累,有C语言版本吗?现在你们都还是用汇编吗?还是说做这个汇编比较精度比较高?
0
回复