提示文章写完后目录可以自动生成如何生成可参考右边的帮助文档文章目录前言一、pwm波形1.1高低电平交互LED亮灭。1.2 驱动电机时1.3 怎么调节电机的速度二、怎么用51单片机产生PWM波形2.1 t 怎么来2.2 t0怎么来2.3 t1怎么来2.4 如何更好的写程序只用一个时间基准1ms2.5参考程序三、电路连接图3.1电机连接图3.2 ULN2003 逻辑图3.3 按键连接图四、 电机开机、关机五、思考5.1 如何控制电机正反转5.2 如何控制多个电机六 、手把手教学视频 直流电机定时器按键总结前言提示这里可以添加本文要记录的大概内容我们学习了51单片机的定时器之后已经定时1s,用按键控制定时的时间。之前产生的波形都是方波就是高电平、低电平一样的波形。PWM提示以下是本篇文章正文内容下面案例可供参考一个学期都没搞懂的直流电机工作原理一分钟讲解清楚https://www.bilibili.com/video/BV1yV4y1o7Nd/?spm_id_from333.337.search-card.all.click基于51单片机直流电机调速实验https://www.bilibili.com/video/BV1Eo4y1m774/?spm_id_from333.337.search-card.all.click一、pwm波形1.1高低电平交互LED亮灭。接通电机会有效果1.2 驱动电机时电压越高电机转得越快1.3 怎么调节电机的速度二、怎么用51单片机产生PWM波形2.1 t 怎么来tt0t1;501060D10/60%1002.2 t0怎么来sbit motorP1^0;t050ms ,motor0;定时50msTH0( 65536-50000)/256;TL0( 65536-50000)%256;2.3 t1怎么来t110ms定时10msmotor1;TH0( 65536-10000)/256;TL0( 65536-10000)%256;2.4 如何更好的写程序只用一个时间基准1msTH0( 65536-1000)/256;TL0( 65536-1000)%256;t01* 50t11* 10进一次中断要num50 10-numnum10 motor1 //高电平 10msnum10 motor0 //低电平 50msnum60 num0 // 周期清零 60ms10 设定一个变量num;if(num10){motor1;}elseif(num10){motor;}elseif(num60){num0;}set_d// 占空比 10set_t//设置周期 60num;if(numset_d){motor1;}elseif(numset_d){motor;}elseif(numset_t){num0;}2.5参考程序代码如下示例#includereg51.hvoidmain(){//初始化定时器while(1){if(key0){10}if(key1){60}}}voidtimer0()interrupt1{TH0(65536-1000)/256;TL0(65536-1000)%256;num;if(num10){motor1;}elseif(num60){motor0;}else{num0;}/* t01*50 t11*10 50 10 -num num10 motor1 num10 motor0 num60 num0*/}#includereg51.hsbit motorP1^0;sbit key0P3^0;sbit key1P3^1;sbit led0P2^0;unsignedintnum0;intd0;//占空比//unsigned int t0;#definet1000voiddelay(unsignedintms){unsignedintx,y;for(x0;xms;x){for(y0;y100;y);}}voidtimer_init(){TMOD0X01;//方式1 16位TH0(65536-1000)/256;TL0(65536-1000)%256;EA1;ET01;TR01;}voidmain(){//初始化定时器timer_init();key01;key11;while(1){if(!key0){delay(5);if(!key0){while(!key0);dd100;if(dt){dt;}}}if(!key1){delay(5);if(!key1){while(!key1);dd-100;if(d0){d0;}}}}}voidtimer0()interrupt1{TH0(65536-1000)/256;TL0(65536-1000)%256;num;if(numd){motor1;}elseif(numt){motor0;}else{num0;led0~led0;}/* t01*50 t11*10 50 10 -num num10 motor1 num10 motor0 num60 num0*/}三、电路连接图3.1电机连接图3.2 ULN2003 逻辑图3.3 按键连接图四、 电机开机、关机//开机 TR01;if(!key2){TR01;}//关机TR00;if(!key3){TR00;}修改后的程序2025.6.6添加 LED显示占空比 添加按键控制电机开启和关闭#includereg51.hsbit motorP1^0;sbit key0P3^0;sbit key1P3^1;sbit key3P3^2;sbit key4P3^3;sbit led0P2^0;sbit led1P2^7;unsignedintnum0;intd0;//占空比//unsigned int t0;#definet1000voiddelay(unsignedintms){unsignedintx,y;for(x0;xms;x){for(y0;y100;y);}}voidtimer_init(){TMOD0X01;//方式1 16位TH0(65536-1000)/256;TL0(65536-1000)%256;EA1;ET01;TR01;}voidmain(){//初始化定时器timer_init();key01;key11;while(1){if(!key0){delay(5);if(!key0){while(!key0);dd100;if(dt){dt;}}}if(!key1){delay(5);if(!key1){while(!key1);dd-100;if(d0){d0;}}}if(!key3){delay(5);if(!key3){while(!key3);TR01;//motor1;}}if(!key4){delay(5);if(!key4){while(!key4);TR00;motor0;}}}}voidtimer0()interrupt1{TH0(65536-1000)/256;TL0(65536-1000)%256;num;if(numd){motor1;led11;}elseif(numt){motor0;led10;}else{num0;led0~led0;}/* t01*50 t11*10 50 10 -num num10 motor1 num10 motor0 num60 num0*/}五、思考5.1 如何控制电机正反转5.2 如何控制多个电机六 、手把手教学视频 直流电机定时器按键20250606_160634直流电机总结了解直流电机工作原理熟悉定时器定时功能掌握电机调速技术。
51单片机直流电机控制
发布时间:2026/5/27 10:27:10
提示文章写完后目录可以自动生成如何生成可参考右边的帮助文档文章目录前言一、pwm波形1.1高低电平交互LED亮灭。1.2 驱动电机时1.3 怎么调节电机的速度二、怎么用51单片机产生PWM波形2.1 t 怎么来2.2 t0怎么来2.3 t1怎么来2.4 如何更好的写程序只用一个时间基准1ms2.5参考程序三、电路连接图3.1电机连接图3.2 ULN2003 逻辑图3.3 按键连接图四、 电机开机、关机五、思考5.1 如何控制电机正反转5.2 如何控制多个电机六 、手把手教学视频 直流电机定时器按键总结前言提示这里可以添加本文要记录的大概内容我们学习了51单片机的定时器之后已经定时1s,用按键控制定时的时间。之前产生的波形都是方波就是高电平、低电平一样的波形。PWM提示以下是本篇文章正文内容下面案例可供参考一个学期都没搞懂的直流电机工作原理一分钟讲解清楚https://www.bilibili.com/video/BV1yV4y1o7Nd/?spm_id_from333.337.search-card.all.click基于51单片机直流电机调速实验https://www.bilibili.com/video/BV1Eo4y1m774/?spm_id_from333.337.search-card.all.click一、pwm波形1.1高低电平交互LED亮灭。接通电机会有效果1.2 驱动电机时电压越高电机转得越快1.3 怎么调节电机的速度二、怎么用51单片机产生PWM波形2.1 t 怎么来tt0t1;501060D10/60%1002.2 t0怎么来sbit motorP1^0;t050ms ,motor0;定时50msTH0( 65536-50000)/256;TL0( 65536-50000)%256;2.3 t1怎么来t110ms定时10msmotor1;TH0( 65536-10000)/256;TL0( 65536-10000)%256;2.4 如何更好的写程序只用一个时间基准1msTH0( 65536-1000)/256;TL0( 65536-1000)%256;t01* 50t11* 10进一次中断要num50 10-numnum10 motor1 //高电平 10msnum10 motor0 //低电平 50msnum60 num0 // 周期清零 60ms10 设定一个变量num;if(num10){motor1;}elseif(num10){motor;}elseif(num60){num0;}set_d// 占空比 10set_t//设置周期 60num;if(numset_d){motor1;}elseif(numset_d){motor;}elseif(numset_t){num0;}2.5参考程序代码如下示例#includereg51.hvoidmain(){//初始化定时器while(1){if(key0){10}if(key1){60}}}voidtimer0()interrupt1{TH0(65536-1000)/256;TL0(65536-1000)%256;num;if(num10){motor1;}elseif(num60){motor0;}else{num0;}/* t01*50 t11*10 50 10 -num num10 motor1 num10 motor0 num60 num0*/}#includereg51.hsbit motorP1^0;sbit key0P3^0;sbit key1P3^1;sbit led0P2^0;unsignedintnum0;intd0;//占空比//unsigned int t0;#definet1000voiddelay(unsignedintms){unsignedintx,y;for(x0;xms;x){for(y0;y100;y);}}voidtimer_init(){TMOD0X01;//方式1 16位TH0(65536-1000)/256;TL0(65536-1000)%256;EA1;ET01;TR01;}voidmain(){//初始化定时器timer_init();key01;key11;while(1){if(!key0){delay(5);if(!key0){while(!key0);dd100;if(dt){dt;}}}if(!key1){delay(5);if(!key1){while(!key1);dd-100;if(d0){d0;}}}}}voidtimer0()interrupt1{TH0(65536-1000)/256;TL0(65536-1000)%256;num;if(numd){motor1;}elseif(numt){motor0;}else{num0;led0~led0;}/* t01*50 t11*10 50 10 -num num10 motor1 num10 motor0 num60 num0*/}三、电路连接图3.1电机连接图3.2 ULN2003 逻辑图3.3 按键连接图四、 电机开机、关机//开机 TR01;if(!key2){TR01;}//关机TR00;if(!key3){TR00;}修改后的程序2025.6.6添加 LED显示占空比 添加按键控制电机开启和关闭#includereg51.hsbit motorP1^0;sbit key0P3^0;sbit key1P3^1;sbit key3P3^2;sbit key4P3^3;sbit led0P2^0;sbit led1P2^7;unsignedintnum0;intd0;//占空比//unsigned int t0;#definet1000voiddelay(unsignedintms){unsignedintx,y;for(x0;xms;x){for(y0;y100;y);}}voidtimer_init(){TMOD0X01;//方式1 16位TH0(65536-1000)/256;TL0(65536-1000)%256;EA1;ET01;TR01;}voidmain(){//初始化定时器timer_init();key01;key11;while(1){if(!key0){delay(5);if(!key0){while(!key0);dd100;if(dt){dt;}}}if(!key1){delay(5);if(!key1){while(!key1);dd-100;if(d0){d0;}}}if(!key3){delay(5);if(!key3){while(!key3);TR01;//motor1;}}if(!key4){delay(5);if(!key4){while(!key4);TR00;motor0;}}}}voidtimer0()interrupt1{TH0(65536-1000)/256;TL0(65536-1000)%256;num;if(numd){motor1;led11;}elseif(numt){motor0;led10;}else{num0;led0~led0;}/* t01*50 t11*10 50 10 -num num10 motor1 num10 motor0 num60 num0*/}五、思考5.1 如何控制电机正反转5.2 如何控制多个电机六 、手把手教学视频 直流电机定时器按键20250606_160634直流电机总结了解直流电机工作原理熟悉定时器定时功能掌握电机调速技术。