|
|
发表于 2008-9-2 22:20:47
|
显示全部楼层
来自: 中国河北石家庄
使用C8051F040高速SOC单片机、L298N直流电机驱动芯片,软件编程可在Siliocn Labortories集成开发环境(DIE)下通过JATG接口进行编程,不需要专用编程器或适配器;还可以通过用户软件对FALSH进行编程,允许现场更新固件为产品的软件升级提供了极大的方便。9 H; `* @6 \9 E( U6 y$ s6 r( V
本设计中的应用程序是在Keil C51的开发环境下编译后用EC-3仿真器下载到芯片中运行的。主要程序代码如下:
% k" r, \4 I1 Q5 o' D//交叉开关配置,将6路PWM输出配置到P0端口
) ~2 @8 j8 Y; \4 @void config(void)# x7 z9 V. d4 l8 L" v' H9 Z3 E) g
{& ~% ?* I v# B( k
XBR0=0x30;//将6路PWM输出配置到P0.0-P0.5端口
, h6 l+ C4 W* T, h& PXBR1=0x00;
8 \ L3 W3 N, S1 z/ P; HXBR2=0xc0;//开启交叉开关,全局上拉开启
o9 ?9 a5 q7 V" m+ e. l eXBR3=0x00;
+ J8 G$ N9 t: @6 p! G4 T}
: E' d8 M% ` |1 h3 [/ M7 F//配置T0定时器,定时时间1毫秒,系统时钟24MHz
( f, L+ G0 N) W1 w2 J$ ]+ sVoid Timer_cfg(void)
$ m6 V8 T4 r, P, s; X+ ?& g. G{! V# L! N2 h' J2 I' G! |/ B2 Q7 P
TMOD=0x01;//采用定时器0的方式18 Q9 Q, D% p% Z$ B
TH0=0xf8;6 u# `/ b* V( A2 q0 C7 R; k) z4 o
TL0=0x2f;, M6 M5 Y' B$ X1 W. c( w
TR0=1;% q! k' y+ [9 P: v2 U9 c: S
}: b4 P: Z4 D0 V4 [- z' `6 r
//配置PCA定时器& N% [0 `, {+ j0 t; ]
Void pcainit(void)* v9 ~- A8 E/ e7 T" g4 r4 c
{" X8 r6 D! q% P' [4 Z" c
SFRPAGE=0x00;
3 n1 h! q' m' F" B3 CPCA0CMP0=0x42;9 U$ A' N$ u3 G( ]
PCA0MD=0x04;//PCA采用T0溢出时钟,且PCA溢出中断禁止1 v( @, t8 j0 R- S- [5 Z. y, i7 M
PCA0CN=0x40;//启动PCA计数器
( V0 H2 m1 i8 u: G}3 g; k4 m5 f! l. f+ g! y: m
//占空比设置,设置为255时,可使电机停止转动% V: |7 ~$ k! b! \' I9 ^/ u+ D
Void PWM_SET(uchar channel,uchar low)3 X z* {! w' t# t# `
{9 I7 c. g' u/ E$ w1 ? S
SFRPAGE=0x00;5 g7 G# `" J! v3 G' p5 x8 J; d
Switch(channel)
0 M" g9 @2 ?- A6 e1 X1 h/ b8 P/ a{* l+ l% l; B* m. D
Case 0:PCA0CPH0=low;break;
# n8 W; @, S# P7 i& T6 ACase 1:PCA0CPH1=low;break
; E/ Z) i% h0 m. o6 S7 v1 `Case 2:PCA0CPH2=low;break
* u0 L: t, E- V; GCase 3:PCA0CPH3=low;break, d9 n- i6 I8 M' E
Case 4:PCA0CPH4=low;break
- Q U* z/ G, sCase 5:PCA0CPH5=low;break! o! j- Y' s: k7 \5 K4 A s
Default:break;
. @5 l! w- o& P: Z6 d# I4 o0 h}/ ?' b; }8 e2 K8 `7 Y, r
}
3 M% D* x. |) `* r3 ^& Q//运动方向设置/ `4 t& F5 L, m5 K u
Void Direct_set(uchar channel,bit dir)1 S) H$ V# N5 |: V' i7 H' K8 S
{3 U! N. R' o8 Y) b. Q: J1 y# y) d
Switch(channel) v( h5 Q+ @/ j1 d7 F! ~
{. \2 f. I/ b# c- V8 O
Case 0:P4.0=dir;break;: C% a9 T2 G4 _% s! D
Case 1:P4.1=dir;break
! N2 A6 l& N JCase 2:P4.2=dir;break. A, I1 H w( C0 C( f- D6 `
Case 3:P4.3=dir;break
" K) B) U5 A; u9 j5 T0 z" PCase 4:P4.4=dir;break* h% L, I3 f$ h' {0 s6 ?! q
Case 5:P4.5=dir;break
r/ J( V5 |: \( o* ]Default:break;/ V3 F: t, e" \1 \
}
4 O/ P9 ?+ a5 q* E}
" M: k4 v! h7 Q. e* m; [( q在电机起动时,先输出高占空比的PWM信号,让电机获得较大的起动力矩,然后再过渡到设定的PWM脉宽。另外结合片内的A/D转换器检测Rsa上的电压,可得到电机的工作电流,以此为依据对电机的运行状态进行检测,保证电机的运行安全。 |
|