|
发表于 2008-9-2 22:20:47
|
显示全部楼层
来自: 中国河北石家庄
使用C8051F040高速SOC单片机、L298N直流电机驱动芯片,软件编程可在Siliocn Labortories集成开发环境(DIE)下通过JATG接口进行编程,不需要专用编程器或适配器;还可以通过用户软件对FALSH进行编程,允许现场更新固件为产品的软件升级提供了极大的方便。 @# U& q3 A; W7 R
本设计中的应用程序是在Keil C51的开发环境下编译后用EC-3仿真器下载到芯片中运行的。主要程序代码如下:1 U; v: I' Q( W
//交叉开关配置,将6路PWM输出配置到P0端口. U e9 |( [/ |- ~+ x
void config(void)% s- Y: R& f& V7 r
{
4 C f1 v6 s0 R2 ]. z4 V: k1 D1 RXBR0=0x30;//将6路PWM输出配置到P0.0-P0.5端口0 @5 v% s) `9 F+ A- I
XBR1=0x00;
4 P5 R: K! k9 h7 i+ i* J7 M/ _XBR2=0xc0;//开启交叉开关,全局上拉开启
$ ?, K( y* D# J0 B6 S$ @XBR3=0x00;
; v0 z5 r$ y2 b3 Z. h- R}1 o- Q( \" K9 w2 `3 v& e3 y: {4 j
//配置T0定时器,定时时间1毫秒,系统时钟24MHz2 U9 E& ^) a7 Y! s0 f' N" b7 @0 t$ t7 @% I
Void Timer_cfg(void)
) k3 G6 X+ B) @$ x/ E{6 b& b$ w! }" A- D8 h3 K) |# z
TMOD=0x01;//采用定时器0的方式14 o6 n* s8 W: l
TH0=0xf8;
; X' N8 B8 O6 ~TL0=0x2f;( @" T4 F9 D, @
TR0=1;* Y1 {; O% e5 Z: p
}
& U- @" n/ |' w0 V9 w# E//配置PCA定时器
6 D0 ^: S, F J# D. x$ bVoid pcainit(void)
4 z7 U2 B Q$ u8 L6 z& a{' H. Z2 Q- f' _& u) M! R6 U
SFRPAGE=0x00;
4 Z( }0 s2 T) r+ QPCA0CMP0=0x42;2 Y. r# S4 O( k2 ]/ R$ Z/ |
PCA0MD=0x04;//PCA采用T0溢出时钟,且PCA溢出中断禁止2 N# _! ?8 l9 G' ?
PCA0CN=0x40;//启动PCA计数器
" F$ K5 ~) j* ]% e}
) l5 W5 i( y/ z+ g# k! u' D) M//占空比设置,设置为255时,可使电机停止转动, q$ L( p9 \9 V
Void PWM_SET(uchar channel,uchar low)$ r2 N/ g" ~$ V7 v: ?$ @- O, x; W% g
{9 S7 Q0 s+ C" b2 d2 u; R @
SFRPAGE=0x00;) q# `6 f! r) f2 T- [/ ]. l
Switch(channel)
% O3 C! c. m, n" w' A2 D3 z{
: M; ^2 M1 k# Y( X1 x2 ?Case 0:PCA0CPH0=low;break;
; V7 M) g/ b/ ~. O7 gCase 1:PCA0CPH1=low;break
- H1 T, V2 l( HCase 2:PCA0CPH2=low;break }: C0 r2 F' y9 a9 B
Case 3:PCA0CPH3=low;break
# {+ b) q, B: l, P/ e, qCase 4:PCA0CPH4=low;break k0 l7 b! { b; P( x# ^& ~
Case 5:PCA0CPH5=low;break
) U& y* O C5 \3 ]) f; U1 kDefault:break;$ M) J' M0 }2 w" S& t" x8 o4 C) r7 v
}7 T( K8 i0 J* Y; ], R6 Z, J
}' |, j6 z; S% V$ X1 u- ?
//运动方向设置5 u: m, q4 Y. c& [3 E0 \5 {) Y
Void Direct_set(uchar channel,bit dir)" x! a3 ]9 D* r! ~3 F3 S
{/ z; S$ N! N; ?
Switch(channel)
8 R& C' H/ P7 W' u7 r4 K{
; D4 W* `/ h& n9 {6 h3 j5 W, K* A! pCase 0:P4.0=dir;break;
/ [) g+ D4 g5 ^% b: _% Z3 q9 `Case 1:P4.1=dir;break$ R2 `% Z) H- R ~( F
Case 2:P4.2=dir;break6 W# b q0 \! [, r; L/ ^
Case 3:P4.3=dir;break
5 M2 {' m1 ]/ b6 A5 t% w/ O% P" RCase 4:P4.4=dir;break! G4 S- z# l8 d1 n+ g) ~2 L; }" ^
Case 5:P4.5=dir;break
% M, {# I6 r$ D3 }) U; _/ I% A: jDefault:break;6 ]3 O) ]+ f7 T- u! C! v. Z
}
& I* A+ ~0 K n* N$ G}, B* W0 h. z# B7 _
在电机起动时,先输出高占空比的PWM信号,让电机获得较大的起动力矩,然后再过渡到设定的PWM脉宽。另外结合片内的A/D转换器检测Rsa上的电压,可得到电机的工作电流,以此为依据对电机的运行状态进行检测,保证电机的运行安全。 |
|