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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
51单片机数控电源 tlc5615+tlc1543程序* I! K: d" @5 a# s8 Q& c

& n" C! N6 e, D# j3 o/ ]9 Y
1 R3 a8 z$ Y0 x0 w
数控电源,51单片机+tlc5615+tlc1543+ |, [3 a) W+ v- [# \* |! L( [- X
# w4 p2 Z  h* m( S
源程序:

+ k9 g6 W; W4 E& d/*最大电流为6A,最大电压为40V*/
8 }0 X0 \6 H% Z) J2 ~5 i' ^#include<reg52.h>
1 ]  i. s) j, s2 m2 K6 fsbit sclk5615=P1^0;                                                                                                                                /*dac tlc5615串行时钟*/: ]' s  [9 U0 o& [/ @8 [3 b
sbit din5615=P1^1;                                                                                                                                 /*dac tlc5615串行数据输入*/9 N$ {+ q0 O  A: B5 n$ n0 b, ^+ A
sbit cs5615=P1^2;                                                                                                                                  /*dac tlc5615片选*/
7 ?/ p# w& L; R& J" w0 [sbit dout5615=P1^3;                                                                                                                                /*dac tlc5615串行数据输出*/
' ~! V) F. e( c: }- \* g# V8 D  ~2 }sbit eoc1543=P3^0;
% r# G! n# T5 U0 u: \sbit sclk1543=P3^1;) ]5 B" H/ H" |( w( x
sbit addr1543=P3^2;5 w9 ~' d  K4 x7 k$ I, _3 Y
sbit dout1543=P3^3;
- u* p& _5 X( Osbit cs1543=P3^4;
( @0 f0 e* M- [7 yvoid Delayms(unsigned int t)                                                                                                    //延时毫秒函数:7 |" Q' @+ J+ Y8 ^* V3 _! m0 v# O
{, X! p6 m7 [! a" d( Q8 m' t8 j
        unsigned int x,y;
+ e! [9 Q9 _- a0 w7 a        for(x=t;x>0;x--)
9 R2 P6 d4 T4 U                for(y=120;y>0;y--);( k, ?! c2 B' H
}+ \! S& C* B" l) ]* D* }; l! p
void TLC1543_init(void)
5 E2 q5 u, ]: M- {" R{2 N2 @! K  t7 r' q5 I
    cs1543=1;& W, G, j' {9 X2 B
    sclk1543=0;
) D) X9 N( ]4 [, q, W  a}
$ _7 l( {; J6 ^- U1 m$ B$ Dunsigned int ReadADC_TLC1543(unsigned char ch)
+ M2 ?, p$ S- ^{2 [: i5 n; P9 H, G- d  q
    unsigned char temp;$ f1 {$ C7 k& @8 h& B: }
    unsigned int adc_value=0;% S$ k( c' X9 d1 g; N8 _. O
    ch<<=4;) N2 h. s/ {9 B9 a( L
    cs1543=0;+ N2 Q& Q7 {6 o: }" i- w
    for(temp=0;temp<10;temp++)         // 将判断语句改为 temp<12
. R& F0 ^5 z$ l4 X2 E9 H) V0 ]    {                                       // 程序可移殖至 TLC2543.
+ `9 M- }: G+ O' I+ _' \        adc_value<<=1;& j: r, S% E7 W& Q' R  c1 o2 [& M
        ch<<=1;; U! ?+ `, J% R$ V
        addr1543=CY;
) Q6 G( F9 a& [# r- a& U        if(dout1543)   7 b! M! r& M* Y) ]+ I3 y2 X, w, T: ^
                        adc_value+=1;
' q8 |) @% p8 x% b  {$ |        sclk1543=1;
7 y* f0 }, |9 c7 V5 J7 m        Delayms(1);
* {/ V. e$ K6 c9 S: ^! A" `        sclk1543=0;9 f3 B3 v/ u$ D. q) w6 Q
    }
) B8 z% k3 U. U2 n& H( [    cs1543=1;
$ B- {  x& g$ G( u. K8 Y    return adc_value;
- j5 H8 ]& @( J& g$ {* {4 h}& h# A% s! {' ]+ s
void WriteTLC5615(unsigned int wdata)                                                                                //写TLC5615数据函数:, y9 M9 S+ A- `' _2 s
{" O( @$ I* w! z1 R" D* q: E
        unsigned char i;
% h- e( z, k) ~        cs5615=0;                                                                                                                                        //片选使能
% K0 Y# i! k& q% j' y* `        wdata<<=2;                                                                                                                                //将数据左移两位,补两位扩展位,组成12位数据写入
* U/ N# C8 g& C* Q        for(i=0;i<12;i++)                                                                                                                //写入12位数据
/ O5 b0 G& M9 e- p/ Y* X        {4 X' B1 k2 X# P2 m$ q
                sclk5615=0;( K9 }2 f, y. J: F
                din5615=(wdata&0x0800)?1:0;                                                                                                //取出最高位(第11位)写入
8 {8 A1 o3 p; n+ A, ?. [- @& F$ h                sclk5615=1;                                                                                                                                //上升沿送数据8 i# D8 v' q6 Z0 S! D+ [! S2 p
                wdata<<=1;                                                                                                                        //下一位移到最高位! C+ l* ]4 T  |7 R* Y- L) M
        }
: i! x! e8 |8 v& I7 W: {4 i8 Y4 J        cs5615=1;                                                                                                                                        //片选禁止
: J* ]8 O) X& q}- w2 ~& _; |2 Z( B
float get_average(unsigned char ch,unsigned char time)$ E  [8 b% w2 w: d
{
! r9 n' n3 Q* s1 K& B        unsigned char i;) E% F2 m1 w8 y  i$ [
        float v;: X5 s( S, p3 f$ G% P
        v=ReadADC_TLC1543(ch);
" A* h1 {5 m4 |7 s2 {# v; `        for(i=0;i<time;i++); s6 |  E3 X$ j5 g$ [4 y+ B9 y
        {
/ O+ W3 F6 C: i5 k2 b6 o% g                v+=v;! R0 j& F( J% M4 k# Z- ~
                Delayms(5);
2 t  `  E, q/ Q9 }7 F5 E4 \# n        }9 m( ~0 G  b8 @4 a! Y
        return v/time;5 |# e. N' L& E8 y
}& ?+ e9 b/ b% y9 B- Y3 P
/*unsigned char KEY_Scan()5 X5 i1 W" P% G2 c
{( ]9 I: t3 ~8 W) t
        unsigned char temp=0;
; P' S: l4 u& u- v! C! W9 l- E        unsigned char com=0x55,com1=0,com2=0;" X; v( ]6 t! M. H$ N7 u. s
        P2=0xf0;1 F/ t- E5 x' M& q3 {3 c7 B) f
        if(P2!=0xf0)
$ x$ O& U& w' I8 r        {
" y1 }- b% }) X  e/ S* s7 G                com1=P2;
4 o( d' h) f. `# z5 A) S                P2=0x0f;/ D1 |: @0 {0 D$ q- y; ^( j
                com2=P2;        
6 Z5 \8 `9 \& u# j3 _5 P        }
( [; b% m1 a  j& Q8 f& }- `! [2 S        P2=0xf0;* ?: M5 Z' H) }" e$ R2 O
    while(P2!=0xf0);         
! Z0 s4 W- K: M( d! P- H: Z+ o% j4 y" M        temp=com1|com2;& t, t0 t& X+ ?! }0 g  y1 k; C6 K
        switch(temp)
* O8 u2 w2 O( D7 D/ ?7 g3 d) k' V        {% V( {$ d( h. f$ ?9 ]  N
                case 0xee:com=0;break;+ T/ x! z8 c8 |# F. s$ D5 m
                case 0xed:com=1;break;3 D( F: h/ g6 o* E: @2 T
                case 0xeb:com=2;break;
+ A/ j) p6 F7 A" s                case 0xe7:com=3;break;. l$ m4 C' Q( S7 p' Y% l: K
                case 0xde:com=4;break;
3 [# l, S) [2 e                case 0xdd:com=5;break;
) z' x$ q8 P. p& r                case 0xdb:com=6;break;
- ~, A. j- M2 y& D7 L- [                case 0xd7:com=7;break;4 p6 Z+ C" v. L) m1 n* H
                case 0xbe:com=8;break;
7 U( A( b. v. {3 S                case 0xbd:com=9;break;1 y3 Z3 T8 z) W/ s: H+ f5 }1 m, O
                case 0xbb:com=10;break;7 y3 {% u" H% y# w  R5 n/ x% i- j
                case 0xb7:com=11;break;$ _  O- a& t8 x- K* I
                case 0x7e:com=12;break;6 s# i& W) ?! ~
                case 0x7d:com=13;break;
0 R+ ?* N9 J$ Q5 h- p# Q9 @                case 0x7b:com=14;break;        
0 n$ c0 r, i1 T                case 0x77:com=15;break;                                 
5 h5 E) _2 x7 t( ]1 X        }' `1 P% r* B" q3 ?/ Z. z. o/ c
        return(com);
/ X* k$ x. g4 M}*/1 C; d) p: b( \8 u
void main(void)                                                                                                                        
& Y, I! W6 ^( t; D3 ?{1 T4 i3 E; Y7 A* J: o1 F7 P! j
        float dat1,dat2,volt,current;
0 [; a; o1 C: v; v! r$ k3 s9 Y: x        TLC1543_init();                                                                                                               
7 o: t! J0 k+ R, h7 f        while(1)
- g5 E2 f9 t6 F        {
/ |' ^/ S1 f% T                WriteTLC5615(100);/*向dac写入数据*/) O" `9 }. i" y% |- I. w
                dat1=get_average(0,10);/*通道0测电压*/* \. `& Q' f" Z- i
                dat2=get_average(1,10);/*通道1测电流*/
3 x. @! M7 K' W* ?5 s                volt=dat1*8;/*最大电压为40v,分压为5v,分压倍数为8倍*/' r$ V* j& ~* h5 ]5 H, r
                current=dat2*6/5;/*最大电流6A,采样电阻为1mΩ,采样电阻上面最大电压为6mv,差分放大100倍,即最大电压为6v,分压电阻分压后变成5v*/; h1 h) D( G' B7 @' K6 `, F4 _
8 P0 r- c1 e2 U& Z" e: L
1 v1 _) m* m9 f6 Z' ~3 K4 ~5 k) u" N8 a) X
. I; A! p, y/ y& A1 x, c( [0 Q
…………余下代码请下载附件…………' D3 y, j( R  M0 u4 b5 N
+ L- ^9 d8 Z4 b7 R
下载:
; v1 |2 d" d4 e$ A0 _
游客,如果您要查看本帖隐藏内容请回复
6 s( n: ~6 |& z1 [% Q4 Y
- S$ C0 b+ J/ h  D  S

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-6 07:25 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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