|
|
发表于 2008-9-2 22:20:47
|
显示全部楼层
来自: 中国河北石家庄
使用C8051F040高速SOC单片机、L298N直流电机驱动芯片,软件编程可在Siliocn Labortories集成开发环境(DIE)下通过JATG接口进行编程,不需要专用编程器或适配器;还可以通过用户软件对FALSH进行编程,允许现场更新固件为产品的软件升级提供了极大的方便。, n8 J" Z$ q3 g: {! j( z& D; o
本设计中的应用程序是在Keil C51的开发环境下编译后用EC-3仿真器下载到芯片中运行的。主要程序代码如下:. Z% t9 X* H2 J: B7 [0 d \- @ D
//交叉开关配置,将6路PWM输出配置到P0端口- _( t8 b; F8 b2 l; j$ |. g; j) c
void config(void)
* E3 X% a1 n$ H \& F{2 }" m0 p( M, U3 i: D
XBR0=0x30;//将6路PWM输出配置到P0.0-P0.5端口
& M( `( N* @9 f* m# O" z% xXBR1=0x00;
2 C- |2 O5 x' L) F7 MXBR2=0xc0;//开启交叉开关,全局上拉开启& a# M& F8 m/ a$ d, ^. u- v6 o7 ~% A
XBR3=0x00;1 ^& A! N' ~% T! c5 `+ ~2 r
}' J) q9 v! X. F2 I
//配置T0定时器,定时时间1毫秒,系统时钟24MHz
4 |6 f7 F5 p5 O! V9 N4 V; _8 W8 d0 gVoid Timer_cfg(void)3 X1 ~' s% @+ }# f
{) H1 c9 L4 c. C- f& J+ `/ [
TMOD=0x01;//采用定时器0的方式1
& q3 Q/ |1 `: n, PTH0=0xf8;. B$ m2 l! }' q* q" B v
TL0=0x2f;. T7 |) K% E# q" s1 w$ B
TR0=1;
6 m1 Y3 ?. G- V}
7 m$ o$ F. Q( Z//配置PCA定时器' G$ R5 b. k! v' W% ] O: @
Void pcainit(void)+ x- N. Y: r+ @+ Y* L+ Z& j& z
{
6 J% {" \! x! m5 [7 m: }4 c9 R NSFRPAGE=0x00;
% ^, h' [; C0 e3 Z8 VPCA0CMP0=0x42; J: v3 k( D* g' T% r2 s$ `% N2 x
PCA0MD=0x04;//PCA采用T0溢出时钟,且PCA溢出中断禁止
6 w% e6 J% t+ ?+ S" ^PCA0CN=0x40;//启动PCA计数器
R" x4 E: [$ B' b}
* l& o2 t; Z M& O, a3 A2 k# M0 x//占空比设置,设置为255时,可使电机停止转动- I5 T8 o& g7 c! p& C
Void PWM_SET(uchar channel,uchar low)
/ L9 E. B; h. p U/ A. m{% T* f* V% g, j
SFRPAGE=0x00;
1 ` b. P2 C5 D$ Q' |Switch(channel)# M8 ~5 h5 ]7 ?! r
{
9 r, l. n: P2 e6 p0 @Case 0:PCA0CPH0=low;break;6 q$ n+ Z( i3 v* |9 O- k+ W; L
Case 1:PCA0CPH1=low;break& M& a6 k! K$ z9 _+ V
Case 2:PCA0CPH2=low;break0 I U- A& M. V% Y; P
Case 3:PCA0CPH3=low;break
% j4 |" l8 p9 _ M( j' t6 QCase 4:PCA0CPH4=low;break
: _& M" ]4 [" \- m- }6 ]7 qCase 5:PCA0CPH5=low;break0 L0 @) F1 V) D" @! K
Default:break;
2 x5 P5 K2 H5 ~1 e3 b}
9 d+ k! [* K" A( n4 H+ y' L}
1 T- H( } W" i$ F4 Y9 U//运动方向设置
4 T ~# ^2 n& k& K% fVoid Direct_set(uchar channel,bit dir)% q5 q9 l# o5 p
{
2 X U% J& ^; G* K3 o. J4 x3 nSwitch(channel)
c8 i" S# N; k- W{
( \. ]5 ]& F d5 m- sCase 0:P4.0=dir;break;
/ C+ A8 C/ j; C1 G+ oCase 1:P4.1=dir;break. P; g+ k3 F/ ^6 a& z/ V
Case 2:P4.2=dir;break
4 _% H8 |4 c# q4 I1 l4 fCase 3:P4.3=dir;break
1 O7 ^. I- b" G9 f4 Q/ A, uCase 4:P4.4=dir;break% M$ Y5 e3 X/ V$ m* E
Case 5:P4.5=dir;break
1 o& P8 h3 L! F4 ^0 f& H# M; m' EDefault:break;5 \4 w) X) t: n. X, y% u$ I( O0 }9 g
}
( k' A% X# N, d+ K% O- S6 Y R7 \. A/ v} ~/ O8 C3 k$ T, z' v
在电机起动时,先输出高占空比的PWM信号,让电机获得较大的起动力矩,然后再过渡到设定的PWM脉宽。另外结合片内的A/D转换器检测Rsa上的电压,可得到电机的工作电流,以此为依据对电机的运行状态进行检测,保证电机的运行安全。 |
|