|
发表于 2008-9-2 22:20:47
|
显示全部楼层
来自: 中国河北石家庄
使用C8051F040高速SOC单片机、L298N直流电机驱动芯片,软件编程可在Siliocn Labortories集成开发环境(DIE)下通过JATG接口进行编程,不需要专用编程器或适配器;还可以通过用户软件对FALSH进行编程,允许现场更新固件为产品的软件升级提供了极大的方便。; j% ^0 m1 |/ H
本设计中的应用程序是在Keil C51的开发环境下编译后用EC-3仿真器下载到芯片中运行的。主要程序代码如下:- Q/ z3 U# N2 o- I4 f
//交叉开关配置,将6路PWM输出配置到P0端口+ s# s/ w2 ^& O
void config(void)
3 p- L% p+ F" v) Z) Q' v" @" ^ I: k{; c, B( k" k8 E% s# l% k
XBR0=0x30;//将6路PWM输出配置到P0.0-P0.5端口/ L# s! c. o1 S; r& R( l: X
XBR1=0x00;& Q7 [2 X5 j6 y, `4 `: E! ?9 l7 f4 Y
XBR2=0xc0;//开启交叉开关,全局上拉开启/ \; s% X8 M# ?6 M1 |& ], g( C
XBR3=0x00;
* ~& k: Y9 T I% |9 P}
+ ?6 O; A9 k4 R! K& e//配置T0定时器,定时时间1毫秒,系统时钟24MHz
1 S* Q- m' y9 K9 d, F6 ~Void Timer_cfg(void)! a* u9 t, K8 _9 { p* W! n! B: p
{
7 P" b# w* s& m$ f" w% MTMOD=0x01;//采用定时器0的方式1: F+ V; }5 K/ V2 T5 n" h, x- a
TH0=0xf8;4 Q) g ^& d, }, L
TL0=0x2f;7 c: _) f8 ^8 @1 m. U
TR0=1;. C+ A# G* `. v& m
}7 h' ^6 @ s4 H6 G ~0 {6 y
//配置PCA定时器7 W+ I7 Y. s# w. m" n) ?
Void pcainit(void)
8 ~# `1 C: m. c{0 |% `1 P- n {7 ]. f$ K& q
SFRPAGE=0x00;7 \# s7 P" ^- w, L' _6 a7 O1 U+ T; B
PCA0CMP0=0x42;
2 V7 p$ B7 G4 EPCA0MD=0x04;//PCA采用T0溢出时钟,且PCA溢出中断禁止0 I* [7 `6 l& `: ]" k. @; Q6 _4 W. B
PCA0CN=0x40;//启动PCA计数器( O8 ]3 P6 Q9 J$ Z& f0 x
} K) [5 s0 L& _1 c& A$ p
//占空比设置,设置为255时,可使电机停止转动
9 B7 `$ p4 N& }, k. s9 W. sVoid PWM_SET(uchar channel,uchar low)) l' ~( Y: @. Z' r
{
) A% `3 ]2 T0 [. S. `SFRPAGE=0x00;
@8 a: D8 I# p% X9 m# u8 uSwitch(channel)# @ G% q1 S/ `
{
& F0 G! K. M- tCase 0:PCA0CPH0=low;break;
# }& f1 i6 ~+ h$ H. {9 {Case 1:PCA0CPH1=low;break: \9 `3 N# b) Z) @6 F9 F* [, g- K/ @
Case 2:PCA0CPH2=low;break3 e' b6 B" E8 T9 k9 r7 o4 I! m
Case 3:PCA0CPH3=low;break
0 P8 t) V* T9 w, J/ i& c% cCase 4:PCA0CPH4=low;break; r% ~# Y" z$ u, ?5 k
Case 5:PCA0CPH5=low;break7 Y9 T; ]8 Y( I0 D
Default:break; ^, S# j5 W, z; Q
}" c7 f9 ?* ?1 y$ z
}# S# X6 e& _' T# [# L
//运动方向设置
; l0 F8 @6 m5 W9 qVoid Direct_set(uchar channel,bit dir)# Y# r, z# B( _% `# i) k# U
{
5 q2 Y# Z* O; @3 N2 KSwitch(channel): Z# r& q8 F! r0 L; \3 h; @7 {) ~
{3 _! n6 N: y- \ ~3 Q( g
Case 0:P4.0=dir;break;& ^7 [" |; U) D8 K4 d9 M* `
Case 1:P4.1=dir;break
" J" P8 z4 }5 Z- aCase 2:P4.2=dir;break
! i; R& O) J: @6 Z, n7 ICase 3:P4.3=dir;break
3 ?; [! q5 _5 N( P: K }2 h0 y% GCase 4:P4.4=dir;break
3 a% [6 h4 D" f3 CCase 5:P4.5=dir;break
- U6 X$ s: J; u5 w8 _) g2 kDefault:break;
, U8 W- A/ }* B3 @}
$ J( v& O3 w7 J}
9 _' W9 R. K" ^# h2 {" N在电机起动时,先输出高占空比的PWM信号,让电机获得较大的起动力矩,然后再过渡到设定的PWM脉宽。另外结合片内的A/D转换器检测Rsa上的电压,可得到电机的工作电流,以此为依据对电机的运行状态进行检测,保证电机的运行安全。 |
|