实验目的:
用AT89C51+ADC0808,实现PWM控制直流电机转速。ADC0808检测变阻器上的电压,反馈到C51上,C51输出对应的PWM占空比,控制直流电机。
原理图如下:

用定时器0来输出PWM,定时器1给ADC0808做时钟。
proteus模拟,用示波器看,C51用定时器输出1KHz的频率,波形还勉勉强强。但是ADC0808最低时钟要求也要10KHz,输出的波形简直是一塌糊涂,不过看起来,模拟运行还是正常跑起来了。
定时器0,1代码:
void T0_init(void)
{
TMOD|= 0X01;
TH0 = (65536-100)/256;
TL0 = (65536-100)%256;
ET0 = 1;
EA = 1;
TR0 = 1;
}
void T1_init(void)
{
TMOD|= 0X20;
TH1 = 0xCD; //50us定时
TL1 = 0xCD;
ET1 = 1;
EA = 1;
TR1 = 1;
}
void Timer0() interrupt 1
{
TH0 = (65536-100+12)/256; //100us,减以下指令运行时长,实现1kHz PWM
TL0 = (65536-100+12)%256;
count++;
if(count == 10) count = 0; //占空比步长10%
if(count < pwm_duty/10) out=0; //低电平导通
else out=1;
}
void Timer1() interrupt 3
{
CLK=~CLK;
}
A


3063

被折叠的 条评论
为什么被折叠?



