|
|
发表于 2008-9-2 22:20:47
|
显示全部楼层
来自: 中国河北石家庄
使用C8051F040高速SOC单片机、L298N直流电机驱动芯片,软件编程可在Siliocn Labortories集成开发环境(DIE)下通过JATG接口进行编程,不需要专用编程器或适配器;还可以通过用户软件对FALSH进行编程,允许现场更新固件为产品的软件升级提供了极大的方便。* C5 ]9 ~% H8 J5 q8 g& N$ r
本设计中的应用程序是在Keil C51的开发环境下编译后用EC-3仿真器下载到芯片中运行的。主要程序代码如下:7 c, n' O' X2 g7 i
//交叉开关配置,将6路PWM输出配置到P0端口, C# Q( Z9 ~0 i
void config(void)
9 `. r* X$ Y% f{0 \' O, ]. ` O
XBR0=0x30;//将6路PWM输出配置到P0.0-P0.5端口, o8 ]4 H, t3 R, v( e V
XBR1=0x00;
. N, P+ `& R# \+ EXBR2=0xc0;//开启交叉开关,全局上拉开启/ s# F. }+ Z: t& x" u5 A
XBR3=0x00;
- U) r; E- X+ O/ j}, A# P2 i/ A% r
//配置T0定时器,定时时间1毫秒,系统时钟24MHz
6 U4 Q% h1 {( w+ h0 TVoid Timer_cfg(void)
1 i( V: N1 Z# ~6 e8 P{
2 H) I/ _& j' U/ T* k3 |TMOD=0x01;//采用定时器0的方式1
: p5 V# d0 w& x9 ^TH0=0xf8;
' p9 w; S8 ?5 M4 `TL0=0x2f;' }( u& l' j4 E" @- |0 k: B
TR0=1;
. _1 N4 p0 r$ e* X$ m}
- O7 T3 `2 y* u7 B//配置PCA定时器2 i* A' H- ?; j8 e& q4 K* L
Void pcainit(void)
& u/ z, o: a, T{
; }! N4 D; f; z+ m$ e( V% @* v4 Y! \SFRPAGE=0x00;
; g' K/ ]& U- b" K7 e- FPCA0CMP0=0x42;5 `+ Q4 s* u, ?: x n1 y
PCA0MD=0x04;//PCA采用T0溢出时钟,且PCA溢出中断禁止" \1 L ~& ^- U- [& h
PCA0CN=0x40;//启动PCA计数器
( e8 x- T# b& Z0 B/ s}4 [. A1 O$ s9 u, K
//占空比设置,设置为255时,可使电机停止转动( @! B$ B4 J; k
Void PWM_SET(uchar channel,uchar low)0 o7 ?7 a& J8 ^, p5 J5 w& }9 t
{
[' R5 N) I7 k! T# c; F9 ~; |SFRPAGE=0x00;8 ?) a0 C" n, r. c, a
Switch(channel), `- [5 N/ {5 b, I
{
5 q) s. P1 b, t$ z" H W& ?Case 0:PCA0CPH0=low;break;- E9 J+ [$ H Z2 ], i( \4 d+ C& v
Case 1:PCA0CPH1=low;break7 J7 I, z5 H( l2 e
Case 2:PCA0CPH2=low;break
R$ e# q G# [ }5 j( yCase 3:PCA0CPH3=low;break, m( U. z- R* n8 n7 q
Case 4:PCA0CPH4=low;break4 i1 q! @! Q3 M
Case 5:PCA0CPH5=low;break
9 m- g+ g' E3 E* {! W2 zDefault:break;1 i* K$ P8 ?- e/ Q/ H4 y. L
}
+ @ c4 h0 @8 D( k1 A, {1 n}" F+ z) h0 l$ s0 C) ~6 Y% r9 d
//运动方向设置5 m( X& N; _, k" C! K
Void Direct_set(uchar channel,bit dir). J8 p0 C. A6 V9 Y4 q1 S3 J
{. Y- Q* q8 {1 V1 B# n
Switch(channel)
D4 ~0 O+ v+ k% {# [2 U{
9 o9 [# u; {& M: b) SCase 0:P4.0=dir;break;
+ ^' V. f1 X3 _/ V: J2 GCase 1:P4.1=dir;break
$ y& o! H" G V8 JCase 2:P4.2=dir;break* P) u2 b; v( Z6 k
Case 3:P4.3=dir;break# h9 X* F( K- y- w0 M
Case 4:P4.4=dir;break
: j# S. J$ q9 l/ zCase 5:P4.5=dir;break
; c* e7 E+ S5 `$ [# {' DDefault:break;) `) i5 } Q; X/ p5 R- G9 k
}
: K: ?' s; S7 @4 D o( v}
( L2 t( V. m" I3 L2 x i) M在电机起动时,先输出高占空比的PWM信号,让电机获得较大的起动力矩,然后再过渡到设定的PWM脉宽。另外结合片内的A/D转换器检测Rsa上的电压,可得到电机的工作电流,以此为依据对电机的运行状态进行检测,保证电机的运行安全。 |
|