直流电机调速,占空比可调。小白第一次发帖
电路原理图如下:
单片机源程序如下:
- #include "reg51.h"
- #include "led.h"
- #include "delay.h"
- uint d=100; //占空比
- uint b=65436; //初值计时100us
- bit flag=0;
- void timer0(void) interrupt 1 //中断部分代码,见下文的释疑
- {
- if(flag)
- {
- TH0 = b/256; //900
- TL0 = b%256;
- flag = 0;
- P2_4 = 0;
- b=65536-d;
- }
- else
- {
- TH0 = b/256; //100
- TL0 = b%256;
- flag = 1;
- P2_4 = 1;
- b=64536+d;
- }
- }
- void main()
- {
- TMOD = 0x01; //TMOD的值表示定时器工作方式选择
- TH0 = b/256; //写入初始值,初始值可以决定定时多久
- TL0 = b%256;
- TF0 = 0; //计数到时TF0为1,即当TH0 = 0xff;TL0 = 0xff;再运行一步TF0 = 1;
- TR0 = 1; //开始计数,从这时起,每运行一步TH0和TL0都会增加,直到TH0 = 0xff;TL0 = 0xff;
- ET0 = 1; //允许定时器0中断
- EA=1; //开总中断
- while(1)
- {
- if(P3!=0xff) //按键对应占空比调整
- {
- TR0 = 0;
- delay_ms(10);
- if((P3_4==0)&&(d>=100))
- {
- d=d-100; //10倍程可调减
- }
- if((P3_5==0)&&(d>=10))
- {
- d=d-10; //1倍程可调减
- }
- if(P3_6==0)
- {
- d=d+10; //1倍程可调加
- }
- if(P3_7==0)
- {
- d=d+100; //10倍程可调加
- }
- while(P3!=0xff);
- TR0 = 1;
- }
- if(d<=10) //设置占空比最大最小值
- {
- d=10;
- }
- if(d>=990)
- {
- d=990;
- }
- delay_ms(2);
- show_led_one(0,(d%100)/10); //实时显示占空比
- delay_ms(2);
- show_led_one(1,d/100);
- }
- }
复制代码
所有资料51hei提供下载:
PWM.zip
(39.21 KB, 下载次数: 47)
PWM.pdf
(37.2 KB, 下载次数: 26)
|