找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7220|回复: 10
打印 上一主题 下一主题
收起左侧

简易星三角启动电机 单片机C51程序

  [复制链接]
跳转到指定楼层
楼主
当电机较大时,启动是个必须注意的问题。比较简单且用的很多的是星三角启动,这里写出了星三角启动的核心部分。每一个IO口接上继电器,再控制交流接触器,就OK了。但,要注意,星、角交流接触器一定要互锁,否则一旦某个交流接触器粘连,就造成短路了。

完整代码下载:
简易星三角启动.zip (42.95 KB, 下载次数: 69)

部分源码预览:
  1. #include <reg51.h>
  2. sbit K1=P3^1;  //按键1,控制第1个继电器启动
  3. sbit K2=P3^2;  //按键2,控制第2个继电器启动
  4. sbit J1=P1^5;  //星接继电器
  5. sbit J2=P1^6;  //星点继电器
  6. sbit J3=P1^7;  //角继电器
  7. void Delay_1ms(unsigned int t)
  8. {
  9.   unsigned int x, y;
  10.     for(x=0; x<t; x++)
  11.       for(y=0; y<122; y++);
  12. }
  13. void Delay_200ms(unsigned int t)
  14. {
  15.   unsigned int x, y;
  16.     for(x=0; x<t; x++)
  17.       for(y=0; y<1000; y++);
  18. }
  19. void main()    //主程序
  20. {
  21.   IT0=0;       //低电平触发
  22.   EX0=1;       //INT1中断允许
  23.   EA=1;        //总中断允许
  24.   while(1)     //大循环
  25.   {
  26.     if(K1==0)  //检测第1个按键是否按下
  27.     {
  28.       Delay_1ms(20);  //延时
  29.       if(K1==0)
  30.       {
  31.         while(!K1)  //检测第1个按键是否松开            
  32.         J1=0;       //星接继电器吸合
  33.         J2=0;       //星点继电器吸合
  34.         Delay_200ms(500); //星接启动延时时间
  35.       }
  36.       while(K2==1)           
  37.       {         
  38.         J1=1;  //星点继电器放开
  39.         J2=1;  //星点继电器放开
  40.         Delay_200ms(5); //星接启动延时时间
  41.         J3=0;  //角接继电器吸合
  42.       }
  43.     }
  44. …………余下部分请下载附件
复制代码


评分

参与人数 1黑币 +100 收起 理由
admin + 100 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏5 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:7485 发表于 2017-1-13 18:46 | 只看该作者
就是延时10~40秒切换交流接触器吧?
回复

使用道具 举报

板凳
ID:74649 发表于 2017-1-17 08:18 | 只看该作者
好好好好好好好好
回复

使用道具 举报

地板
ID:74649 发表于 2017-1-19 07:40 | 只看该作者
正需要谢谢
回复

使用道具 举报

5#
ID:71883 发表于 2019-9-26 15:02 | 只看该作者
不错可以参考
回复

使用道具 举报

6#
ID:735076 发表于 2020-12-16 13:24 | 只看该作者
你好,请问有对应的proteus图吗
回复

使用道具 举报

7#
ID:755463 发表于 2021-12-22 16:29 | 只看该作者
谢谢,正需要实在太及时了
回复

使用道具 举报

8#
ID:987686 发表于 2022-1-28 18:39 | 只看该作者
有没有延时调节功能
回复

使用道具 举报

9#
ID:1052001 发表于 2022-11-25 23:02 来自触屏版 | 只看该作者
cycy1030 发表于 2020-12-16 13:24
你好,请问有对应的proteus图吗

我也想问有没有仿真图呀
回复

使用道具 举报

10#
ID:1118200 发表于 2025-9-4 21:54 | 只看该作者
不好使
回复

使用道具 举报

11#
ID:420635 发表于 2025-9-6 17:51 来自触屏版 | 只看该作者
#include <reg51.h>  // 硬件定义 sbit K1 = P3^1;  // 启动按键 sbit J1 = P1^5;  // 主继电器 sbit J2 = P1^6;  // 星接继电器 sbit J3 = P1^7;  // 角接继电器  // 全局变量 unsigned int ms_count = 0;    // 毫秒计数器(10ms/次) unsigned char sec_count = 0;  // 秒计数器(100次10ms=1s) bit star_start_flag = 0;      // 星型启动标志 bit delay_done_flag = 0;      // 50s延时完成标志 bit switch_delay_flag = 0;    // 200ms切换缓冲延时标志  // 定时器0初始化(10ms中断一次,12MHz晶振) void Timer0_Init(void) {     TMOD &= 0xF0;  // 清定时器0模式     TMOD |= 0x01;  // 定时器0:16位定时模式     TH0 = (65536 - 10000) / 256;  // 10ms初值(12MHz)     TL0 = (65536 - 10000) % 256;     ET0 = 1;       // 使能定时器0中断     TR0 = 1;       // 启动定时器0     EA = 1;        // 开总中断 }  // 定时器0中断服务函数(10ms触发一次) void Timer0_ISR(void) interrupt 1 {     TH0 = (65536 - 10000) / 256;  // 重装载10ms初值     TL0 = (65536 - 10000) % 256;      // 1. 50s星型启动延时计数     if (star_start_flag && !switch_delay_flag) {         ms_count++;         if (ms_count >= 100) {  // 100*10ms=1s             ms_count = 0;             sec_count++;             if (sec_count >= 50) {  // 累计50s                 sec_count = 0;                 delay_done_flag = 1;             }         }     }      // 2. 200ms切换缓冲延时计数(仅在切换阶段生效)     if (switch_delay_flag) {         ms_count++;         if (ms_count >= 20) {  // 20*10ms=200ms             ms_count = 0;             switch_delay_flag = 0;  // 200ms延时完成         }     } }  // 按键消抖(稳定检测) bit Key_Scan(sbit key) {     if (key == 0) {         unsigned int i;         for (i = 0; i < 2000; i++);  // 20ms消抖         if (key == 0) return 1;     }     return 0; }  void main(void) {     Timer0_Init();     J1 = 1; J2 = 1; J3 = 1;  // 初始状态:所有继电器断开      while (1) {         // 检测启动按键,触发星型启动         if (Key_Scan(K1)) {             star_start_flag = 1;             delay_done_flag = 0;             switch_delay_flag = 0;             J1 = 0;  // 主继电器闭合             J2 = 0;  // 星接继电器闭合             while (Key_Scan(K1));  // 等待按键松开         }          // 50s延时完成后,执行星→三角切换         if (star_start_flag && delay_done_flag) {             J2 = 1;  // 先断开星接继电器             switch_delay_flag = 1;  // 启动200ms缓冲延时             ms_count = 0;           // 清零毫秒计数器              // 等待200ms延时完成             while (switch_delay_flag);              J3 = 0;                // 闭合角接继电器(J1保持闭合)             star_start_flag = 0;   // 清零启动标志         }     } }
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表