找回密码
 注册
关于网站域名变更的通知
查看: 515|回复: 3
打印 上一主题 下一主题

51单片机数控电源 tlc5615+tlc1543程序

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-1-17 09:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
51单片机数控电源 tlc5615+tlc1543程序
* b( S0 S7 B! A- C, o0 p" g1 {, R2 O& r
0 R8 J+ U! ?4 r5 `5 T
数控电源,51单片机+tlc5615+tlc1543$ m' g/ V; i" j0 E; @
& r' K( g) X0 g6 p8 k
源程序:

( D5 G4 G: \+ e1 q0 m/*最大电流为6A,最大电压为40V*/
: @6 o& K/ }: y#include<reg52.h>
' m4 i/ M1 @' E' F# |5 E3 @sbit sclk5615=P1^0;                                                                                                                                /*dac tlc5615串行时钟*/
  X" A$ O; Y4 E0 z; U+ j; l6 ~5 `sbit din5615=P1^1;                                                                                                                                 /*dac tlc5615串行数据输入*/& b5 M2 l6 J1 ]- b
sbit cs5615=P1^2;                                                                                                                                  /*dac tlc5615片选*/6 T2 g3 J, j  Y( ]- ?
sbit dout5615=P1^3;                                                                                                                                /*dac tlc5615串行数据输出*/
- P. e  I2 `: a& D9 Fsbit eoc1543=P3^0;
  l' g* y! l; R$ \4 Xsbit sclk1543=P3^1;
3 v3 }* C" d* h& h" l' J, s' e' lsbit addr1543=P3^2;7 B  b! S( }1 q& Y
sbit dout1543=P3^3;
( ^' g" \6 M8 F) D9 d/ d5 osbit cs1543=P3^4;
. M# \% A  S' T1 B/ l% s6 K4 bvoid Delayms(unsigned int t)                                                                                                    //延时毫秒函数:
2 r, X2 A8 k0 ^# x! `{1 I" o4 |2 N1 n! x
        unsigned int x,y;9 U$ q' ^: M" I- g& i" R+ X0 N9 T
        for(x=t;x>0;x--)9 {  ^2 c1 C% n* S  ?7 d
                for(y=120;y>0;y--);) X5 }- p1 H) b
}. G! q4 [4 z& I$ \+ G8 f) u% S
void TLC1543_init(void)
! [* a1 t9 ^3 Q! v{, J" I8 [$ y% D
    cs1543=1;' x  P/ r7 k: e6 f9 w# L
    sclk1543=0;
$ X: d0 ?" ]" f/ W6 ^}
( ^0 A% ~: z+ k: u' K5 vunsigned int ReadADC_TLC1543(unsigned char ch)
) f$ ]8 l8 Q  _7 I{  q' z. [1 {1 T4 j; }
    unsigned char temp;2 R( q( p; Y( C8 x/ l8 }
    unsigned int adc_value=0;. `/ ^/ z1 M% q2 A, Q. ^
    ch<<=4;$ s0 e! `8 S3 t
    cs1543=0;
2 A5 [% H( {  R7 ]  t) x: e    for(temp=0;temp<10;temp++)         // 将判断语句改为 temp<12
6 R0 ]" b4 j% i* M    {                                       // 程序可移殖至 TLC2543.
% r' t" l9 Y& _        adc_value<<=1;
! g3 Z6 L1 G/ d' n/ [, r        ch<<=1;
# e' N5 d5 N2 n6 w        addr1543=CY;( p$ k7 d' a, O) D" U7 P3 X
        if(dout1543)   " D2 m* N6 Y9 N1 L3 z
                        adc_value+=1;
( t9 @! v& |' G% q3 S        sclk1543=1;
% n6 c5 g5 E& Q/ B: S        Delayms(1);! T1 A  l3 m) L
        sclk1543=0;4 W; {  J& [5 i6 f9 ^  f  k
    }   ~  t3 M5 T; C- P
    cs1543=1;
2 _8 S6 Q* o1 ]$ o  d    return adc_value;+ d$ k, Z5 Z, f3 ^4 A
}# {% @/ n0 g5 I- W% Z* ?/ p( ]
void WriteTLC5615(unsigned int wdata)                                                                                //写TLC5615数据函数:9 d, u. @4 W9 y2 J6 I
{# o2 L- T( M, j
        unsigned char i;
# M- J2 t: D" [& @        cs5615=0;                                                                                                                                        //片选使能
2 R- X. b( n  T0 D) R* l        wdata<<=2;                                                                                                                                //将数据左移两位,补两位扩展位,组成12位数据写入
& p3 f* M- w/ L) Q$ J! E8 [% j        for(i=0;i<12;i++)                                                                                                                //写入12位数据
% w! `) D8 r, V        {
# a. v! h: S5 V; r" x2 [                sclk5615=0;
, D# I+ F% j8 ]- ?. D) V                din5615=(wdata&0x0800)?1:0;                                                                                                //取出最高位(第11位)写入
, k, |, u5 K+ n' ^3 M                sclk5615=1;                                                                                                                                //上升沿送数据# F3 D8 X! o% e
                wdata<<=1;                                                                                                                        //下一位移到最高位
  o+ E% H0 K6 N: Z% u        }/ N6 t( ^5 }! A1 H. O+ o0 @9 e
        cs5615=1;                                                                                                                                        //片选禁止
* ^* t& p' V% b% l& b2 x' A7 U}
3 I" v, ^+ n% T+ h# O- D) `+ d2 j/ y# ~float get_average(unsigned char ch,unsigned char time)
7 ~' k# a1 Y* U) `. V7 M  X% c{+ q4 f- N" d7 v) D8 ?+ I7 Q# P
        unsigned char i;
6 I6 Y9 @/ [+ L# X0 I3 ~        float v;
, k; @* T6 h0 }5 M        v=ReadADC_TLC1543(ch);
; d/ }; m0 A8 K" Z" {+ f( A9 q        for(i=0;i<time;i++)
, i* P* \* k$ k        {* q) z" i. l) U% H
                v+=v;3 z7 e. I* E' g
                Delayms(5);
+ j1 Y, Z& P- S! l! `; P& Q9 a% w% p        }: V; z( N8 G/ l8 @* A
        return v/time;  t4 B: M+ T0 |4 f. H
}! y1 C/ q* r) F1 d. F% r
/*unsigned char KEY_Scan()
2 R- Y  v, i* B  ?! l2 C" y6 C& @{$ Y. k  c/ m3 O# m- P
        unsigned char temp=0;: [5 A% `; |# F
        unsigned char com=0x55,com1=0,com2=0;6 v4 H! Y5 ~- T* }1 [
        P2=0xf0;
3 ^; h) ]/ y: ]. }: i4 [        if(P2!=0xf0)+ Z  f* n6 |) u& L2 J5 w
        {3 c- l9 s  D1 V9 }' N  C9 Y7 ^( Q
                com1=P2;
! [% B& \  V% }0 e$ y0 |                P2=0x0f;
2 n4 X5 j# Z+ P) B; i* s                com2=P2;        
( c4 |) ?! i; m        }0 _* p( \* X7 x+ G0 N+ |  C
        P2=0xf0;* {5 t/ O8 [- k* C! F7 p
    while(P2!=0xf0);         
+ [! C* d( P# M& F. ~2 p        temp=com1|com2;
- R, E/ n4 d- D/ ~9 r4 n        switch(temp)
) A& q. g4 d  }/ h1 A- F( }: A        {: G. y5 o" B5 v  V
                case 0xee:com=0;break;
1 M7 L" X3 l" @& l& M" s                case 0xed:com=1;break;
  y9 A0 C; W. }0 ?' ^- }8 ^$ D                case 0xeb:com=2;break;
3 O7 C' a( @* E- M' m2 \# Y* g: C: t                case 0xe7:com=3;break;
& W& W' v4 r9 h                case 0xde:com=4;break; 2 T' P& ^9 J' c$ C! s) m2 d; Y
                case 0xdd:com=5;break;
% y8 \5 r! ]( [" E3 z3 ^                case 0xdb:com=6;break;- p' y0 P) _9 P( ~
                case 0xd7:com=7;break;3 Z: m7 R& _6 c6 Y9 t
                case 0xbe:com=8;break;
) k5 Y* S2 G  C2 E8 A  [                case 0xbd:com=9;break;* p; ~$ X3 [0 w9 ?9 C0 I) x, c
                case 0xbb:com=10;break;; c8 |" C4 P8 y# `; f2 x' V& ^: q
                case 0xb7:com=11;break;
$ z) a5 a. P4 A                case 0x7e:com=12;break;
6 K! U4 A. c/ S                case 0x7d:com=13;break;$ o( f5 ^4 t. ?$ y/ W  c
                case 0x7b:com=14;break;        
' p7 @7 }& U0 ?% y( O3 b                case 0x77:com=15;break;                                  ( o5 Z6 [. j6 s( k" c
        }6 B, x- u& }/ {+ a* J7 c
        return(com);
# k( y% q# y/ S+ J# p2 D}*/
! T7 T2 Y- b1 E8 s; jvoid main(void)                                                                                                                        1 B* t6 e$ J% d
{
5 b4 g, \. O  M6 b        float dat1,dat2,volt,current;
. T6 _5 o0 v: y9 j! N+ ?        TLC1543_init();                                                                                                                ) H) @. p: m# {" r9 ~2 k7 X) j
        while(1)% e. A2 s$ ^+ s' P$ W8 `
        {
! |/ u; ^4 x. g: K+ D5 M& |                WriteTLC5615(100);/*向dac写入数据*/
) @# R( W, M4 f8 z                dat1=get_average(0,10);/*通道0测电压*/
& p8 a9 }3 W& T; l% K1 n+ E# k                dat2=get_average(1,10);/*通道1测电流*/
5 @: N  A' [+ I9 ~6 o                volt=dat1*8;/*最大电压为40v,分压为5v,分压倍数为8倍*/* }" z2 `: R5 ?' W
                current=dat2*6/5;/*最大电流6A,采样电阻为1mΩ,采样电阻上面最大电压为6mv,差分放大100倍,即最大电压为6v,分压电阻分压后变成5v*/
: H$ A- S6 P; X2 {) _: t+ c( J9 J( q
; Z7 h5 [; c2 L0 j$ z$ G: X: H
! n: A2 @2 X! E2 }0 ~7 T' v' k( ]
…………余下代码请下载附件…………
% U& v' S" z* j, ^8 G4 u5 ^: ]* c3 N8 N; u+ K
下载:$ R7 l4 X0 J" L; u  I* d
游客,如果您要查看本帖隐藏内容请回复
" O  t' k" J3 z, @, h
7 Z1 m, }0 Q- ~8 K

该用户从未签到

4#
发表于 2021-9-6 00:37 | 只看该作者
0P0000000688
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-1 03:23 , Processed in 0.156250 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表