标题: 基于STC8G1K08单片机设计的一款936焊台 [打印本页]

作者: y0531    时间: 2023-12-1 10:56
标题: 基于STC8G1K08单片机设计的一款936焊台
[attach]322417[/attach]起源:
以前制作过一台模拟的936焊台,感觉升温慢,控温不准。于是就有了制作一台数控焊台的想法。在市场看到这个调压器(8元)购回,重新绕制变压器,研究单片机,最终就是这样一台,焊台制作完成。总体比较满意,正常使用变压器几乎没有温升,性能稳定。目前还没有出现死机等现象。程序参考了很多网上得程序,在此一并感谢。

性能:
1:恒温100-480可调;
2:修眠;60-999秒可调
3:修眠温度:100-250
4;定时关机;最小为睡眠时间,最大999秒
5:温度修正:-99到+99
6:调温步长(旋转编码器一格数):1-10

特点:
1:线路简单,成本低
2:采用0.56寸3位LED红色数码管,显示清晰
3:元器件均为常见器件,获得容易
4:功率大(取决于变压器),本机最大实测65W
5:用洞洞板手工焊接

制作出来的实物图如下:


电路原理图如下:


单片机主程序:
  1. #include "config.h"
  2. #include "main.h"

  3. void main(void) {

  4.         Init_IO();
  5.         Ext_init();
  6.         Adc_Init();
  7.         Timer0Init();   //监视EC11中间按键
  8.         Timer1Init();    //计数器
  9.         Timer2Init();    //Sleep计数器
  10.         UART_init();                                                 //        波特率:9600 /22.1184MHZ

  11.         beep=0;        Beep_One();
  12.         EA = 1;
  13.         Read_Eeprom();   //读出EEPROM数据
  14.         TM1651_Light(LIGHT_NORMAL);   //开亮度LIGHT_NORMAL
  15.         Time1_count = STime; //延时1S  防止开机进入中断
  16.         EA = 1;
  17.         while (1) {        
  18.                
  19.                 Get_Temperature(1);          //获取当前936温度,在变量ActualTemperature中
  20.                 if(T936_ActualTemperature>1000){
  21.                         Power_OFF();    //关机
  22.                         Display_Err();        
  23.       return;                        
  24.                 }               
  25.                
  26.                 switch (Key()) {
  27.                         case Single_click: {                      //Single_click:
  28.                                 S936_FLAG = ~S936_FLAG;
  29.                                 if (!S936_FLAG) {  //开机
  30.                                         Ms_count = 0;
  31.                                         Sleep_Flag = 1;
  32.                                         Time2_count = 0;
  33.                                 }
  34.                                 Beep_One();
  35.                         }
  36.                         break;
  37.                         case Double_click: {                      //Double_click:
  38.                                 T936_SetTemperature = Double_Click_Temp;
  39.                                 TM1651_NUM(T936_SetTemperature);
  40.                                 Beep_One();
  41.                                 Delay_ms(1000);
  42.                         }
  43.                         break;

  44.                         case Long_click: {                        //Long_click:打开设置菜单
  45.                                 Beep_One();
  46.                                 S936_State = S936_FLAG; //保存当前开关机状态
  47.                                 Power_OFF();    //关机
  48.                                 Delay_ms(500);
  49.                                 Menu();     //打开设置菜单
  50.                                 Beep_One();
  51.                                 Delay_ms(1000);
  52.                                 S936_FLAG = !S936_State;                //恢复原开关机状态
  53.                         }
  54.                         break;
  55.                 }

  56.                 if (Right_one == 1) { //增加                        
  57.                         Time1_count=500;
  58.                         Right_one = 0;
  59.                         if (T936_SetTemperature < TEMPER_HIGH) {
  60.                                 T936_SetTemperature = T936_SetTemperature + Step;
  61.                         }
  62.                 }
  63.                 if (Left_one == 1) { //减少                        
  64.                         Time1_count=500;
  65.                         Left_one = 0;
  66.                         if (T936_SetTemperature > TEMPER_LOW) {
  67.                                 T936_SetTemperature = T936_SetTemperature - Step;
  68.                         }
  69.                 }

  70.                 if (Time1_count){                        
  71.                         TM1651_NUM(T936_SetTemperature);
  72.                 }
  73.                 else {
  74.                         if (S936_FLAG) {        //Power OFF
  75.                                 Display_OFF();
  76.                                 //                        Ms_count=0;
  77.                                 //                        Sleep_Flag=1;
  78.                                 //     Time2_count=0;
  79.                                 Power_OFF();
  80.                         } else {               //Power On
  81.                                 TEMP();
  82.                         }
  83.         }
  84. }

  85. //初始化各端口
  86. void Init_IO(void) {
  87.     P1M0 = 0x01; P1M1 = 0x02;    //1.0 推挽,1.1高阻
  88.     P3M0 = 0x00; P3M1 = 0x00;   //3.7 推挽
  89.     P5M0 = 0x20; P5M1 = 0x00;    //5.5 推挽
  90. }


  91. void TEMP(void) {
  92.         
  93.         if (Sleep_Flag == 0) {
  94.                 Temp_SetTemperature =Sleep_Temperature + Temperature_Compensation;
  95.                 Display_SLP();
  96.         } else {
  97.                 Temp_SetTemperature =  T936_SetTemperature + Temperature_Compensation;
  98.                
  99.                 //稳定温度显示
  100.                 if ( abs(T936_ActualTemperature - Temp_SetTemperature) <8)
  101.                         TM1651_NUM(Temp_SetTemperature);       //显示设置温度
  102.                 else
  103.                         TM1651_NUM(T936_ActualTemperature);    //显示当前温度
  104.         }

  105.         if (T936_SetTemperature > T936_ActualTemperature)  {
  106.                 Power_ON();        //打开936Power_ON()
  107.                 return;
  108.         }        else {
  109.                 Power_OFF();
  110.         }
  111. }

  112. void Menu(void) {

  113.         u8 Num = 0;
  114.         u8 Menu_Digital = 0;
  115.         u8 Menu_Mnu[4];

  116.         Delay_ms(300);

  117.         while (1) {
  118.                 switch (Key()) {
  119.                         case Single_click: {    //Single_click:
  120.                                 Menu_Digital++;
  121.                                 if (Menu_Digital > Menu_Num)
  122.                                         Menu_Digital = 1;
  123.                                 Beep_One();
  124.                                 Num = 0;
  125.                         }
  126.                         break;
  127.                         
  128.                         case Double_click: {      //Double_click:恢复默认设置,
  129.                                 
  130.                                 T936_SetTemperature =320;
  131.                     Sleep_Time = 60;
  132.                           Sleep_Temperature = 120;
  133.                           PowerOff_Time = 120;
  134.                     Temperature_Compensation=0;
  135.                                 Step=5;
  136.                                 TM1651_NUM(8888);                                
  137.                                 Beep_One();
  138.                                 Delay_ms(1000);
  139.                         }
  140.                         break;
  141.                         
  142.                         case Long_click: {   //Long_click:退出设置,数据数据写入EEPROM
  143.                                 Save_Eeprom();
  144.                                 return;
  145.                         }
  146.                         break;
  147.                 }
  148.                 switch (Menu_Digital) {
  149.                         case 1: {   //显示调温:-1-
  150.                                 if (Num == 0) {
  151.                                         Menu_Mnu[1] = 18;   //- 号
  152.                                         Menu_Mnu[2] = 1;
  153.                                         Menu_Mnu[3] = 18;   //- 号
  154.                                         TM1651_LED(Menu_Mnu);
  155.                                         Delay_ms(500);
  156.                                 }
  157.                                 Num = 1;

  158.                                 if (Right_one == 1) {
  159.                                         Right_one = 0;
  160.                                         if (T936_SetTemperature < TEMPER_HIGH) {
  161.                                                 T936_SetTemperature = T936_SetTemperature + 1;
  162.                                         }
  163.                                 }
  164.                                 if (Left_one == 1) {
  165.                                         Left_one = 0;
  166.                                         if (T936_SetTemperature > TEMPER_LOW) {
  167.                                                 T936_SetTemperature = T936_SetTemperature - 1;
  168.                                         }
  169.                                 }
  170.                                 TM1651_NUM(T936_SetTemperature);

  171.                         }
  172.                         break;

  173.                         case 2: {   //显示Sleep时间:-2-
  174.                                 if (Num == 0) {
  175.                                         Menu_Mnu[1] = 18;
  176.                                         Menu_Mnu[2] = 2;
  177.                                         Menu_Mnu[3] = 18;   //消隐
  178.                                         TM1651_LED(Menu_Mnu);
  179.                                         Delay_ms(500);
  180.                                 }
  181.                                 Num = 1;

  182.                                 if (Right_one == 1) {
  183.                                         Right_one = 0;
  184.                                         if (Sleep_Time < SLEEP_TIMPER_HIGH) {
  185.                                                 Sleep_Time = Sleep_Time + 1;
  186.                                         }
  187.                                 }
  188.                                 if (Left_one == 1) {
  189.                                         Left_one = 0;
  190.                                         if (Sleep_Time > SLEEP_TIMPER_LOW) {
  191.                                                 Sleep_Time = Sleep_Time - 1;
  192.                                         }
  193.                                 }
  194.                                 TM1651_NUM(Sleep_Time);
  195.                         }
  196.                         break;

  197.                         case 3: {   //显示Sleep温度:-3-
  198.                                 if (Num == 0) {
  199.                                         Menu_Mnu[1] = 18;
  200.                                         Menu_Mnu[2] = 3;
  201.                                         Menu_Mnu[3] = 18;   //消隐
  202.                                         TM1651_LED(Menu_Mnu);
  203.                                         Delay_ms(500);
  204.                                 }
  205.                                 Num = 1;

  206.                                 if (Right_one == 1) {
  207.                                         Right_one = 0;
  208.                                         if (Sleep_Temperature < SLEEP_TEMPER_HIGH) {
  209.                                                 Sleep_Temperature = Sleep_Temperature + 1;
  210.                                         }
  211.                                 }
  212.                                 if (Left_one == 1) {
  213.                                         Left_one = 0;
  214.                                         if (Sleep_Temperature > SLEEP_TEMPER_LOW) {
  215.                                                 Sleep_Temperature = Sleep_Temperature - 1;
  216.                                         }
  217.                                 }
  218.                                 TM1651_NUM(Sleep_Temperature);

  219.                         }
  220.                         break;

  221.                         case 4: {   //显示Power_off时间:-4-

  222.                                 if (Num == 0) {
  223.                                         Menu_Mnu[1] = 18;
  224.                                         Menu_Mnu[2] = 4;
  225.                                         Menu_Mnu[3] = 18;   //消隐
  226.                                         TM1651_LED(Menu_Mnu);
  227.                                         Delay_ms(500);
  228.                                 }
  229.                                 Num = 1;

  230.                                 if (PowerOff_Time < Sleep_Time)
  231.                                         PowerOff_Time = Sleep_Time;
  232.                                 if (Right_one == 1) {
  233.                                         Right_one = 0;
  234.                                         if (PowerOff_Time < PowerOff_TIME_HIGH) {
  235.                                                 PowerOff_Time = PowerOff_Time + 1;
  236.                                         }
  237.                                 }
  238.                                 if (Left_one == 1) {
  239.                                         Left_one = 0;
  240.                                         if (PowerOff_Time > (Sleep_Time + 60)) {
  241.                                                 PowerOff_Time = PowerOff_Time - 1;
  242.                                         }
  243.                                 }
  244.                                 TM1651_NUM(PowerOff_Time);

  245.                         }
  246.                         break;

  247.                         case 5: {   //936温度修正数:-5-

  248.                                 if (Num == 0) {
  249.                                         Menu_Mnu[1] = 18;
  250.                                         Menu_Mnu[2] = 5;
  251.                                         Menu_Mnu[3] = 18;   //消隐
  252.                                         TM1651_LED(Menu_Mnu);
  253.                                         Delay_ms(500);
  254.                                 }
  255.                                 Num = 1;

  256.                                 if (Right_one == 1) {
  257.                                         Right_one = 0;
  258.                                         if (Temperature_Compensation < TEMPERATURE_COMPENSATION_HIGH) {
  259.                                                 Temperature_Compensation++;
  260.                                         }
  261.                                 }
  262.                                 if (Left_one == 1) {
  263.                                         Left_one = 0;
  264.                                         if (Temperature_Compensation > TEMPERATURE_COMPENSATION_LOW) {
  265.                                                 Temperature_Compensation--;
  266.                                         }
  267.                                 }
  268.                                 TM1651_NEGATIVE_NUM(Temperature_Compensation);
  269.                         }
  270.                         break;
  271.                         case 6: {   //调温步数:-6-
  272.                                 if (Num == 0) {
  273.                                         Menu_Mnu[1] = 18;
  274.                                         Menu_Mnu[2] = 6;
  275.                                         Menu_Mnu[3] = 18;   //消隐
  276.                                         TM1651_LED(Menu_Mnu);
  277.                                         Delay_ms(500);
  278.                                 }
  279.                                 Num = 1;

  280.                                 if (Right_one == 1) {
  281.                                         Right_one = 0;
  282.                                         if (Step < STEP_HIGH) {
  283.                                                 Step++;
  284.                                         }
  285.                                 }
  286.                                 if (Left_one == 1) {
  287.                                         Left_one = 0;
  288.                                         if (Step > STEP_LOW) {
  289.                                                 Step--;
  290.                                         }
  291.                                 }
  292.                                 TM1651_NUM(Step);
  293.                         }
  294.                         break;                                       
  295.                 }
  296.         }
  297. }

  298. void Get_Temperature(u8 channel) {
  299.         u8 i, j;
  300.         u16 ADC[Result_n], result;

  301.         for (i = 0; i < Result_n; i++){ //取Result_n(main.h)次转换ADC结果
  302.                 ADC[i] = Get_ADC12bitResult(channel);
  303. //                Delay_us(20);
  304.         }

  305.         // 对结果进行排序
  306.         for (i = 0; i < Result_n - 1; i++) {
  307.                 for (j = 0; j < Result_n - 1 - i; j++) {
  308.                         if (ADC[j] < ADC[j + 1]) {
  309.                                 result = ADC[j];
  310.                                 ADC[j] = ADC[j + 1];
  311.                                 ADC[j + 1] = result;
  312.                         }
  313.                 }
  314.         }

  315.         //去掉最大和最小的后平均
  316.         T936_ActualTemperature = 0;
  317.         for (i = 1; i < Result_n - 1; i++) {
  318.                 T936_ActualTemperature = T936_ActualTemperature + ADC[i];
  319.         }
  320.         T936_ActualTemperature = T936_ActualTemperature / (Result_n - 2);
  321. //        T936_ActualTemperature = (2.5699 * T936_ActualTemperature - 395.18);
  322.         T936_ActualTemperature = (2.4773 * T936_ActualTemperature - 312.75);
  323. }

  324. //测试程序,Led闪
  325. void Led_Light(void) {
  326.         Led_Red = 0;
  327.         Delay_ms(1000);
  328.         Beep_One();
  329.         Led_Red = 1;
  330.         Delay_ms(1000);
  331. }



  332. //@函数名: Ext_init
  333. // @描  述:中断初始化 中断0,1,2
  334. // @参  数:无
  335. // @返回值:无
  336. void Ext_init(void) {
  337. //        IT0 = 1;            //外部中断0跳变(下降沿或上升沿)中断。为1时(下降沿)电平中断
  338.         IT1 = 1;            //外部中断0跳变(下降沿或上升沿)中断。为1时(下降沿)电平中断

  339. //        EX0 = 1;            //使能外部中断0
  340.         EX1 = 1;            //使能外部中断1
  341.         
  342. //        EA = 1;             //使能全局中断
  343. }

  344. //****************外部中断0 中断服务程序******************************************
  345. void ExINT0() interrupt 0 {       //外部中断0,触发时,
  346.         EX0 = 0;        
  347.         Delay_us(20);
  348.         Beep_One();
  349.         if (Encoderb == 1) {
  350.                 Delay_us(20);
  351.                 if (Encodera == 1) {
  352.                         Right_one = 1;
  353.                 } else {
  354.                         Left_one = 1;
  355.                 }
  356.         } else {
  357.                 Delay_us(20);
  358.                 if (Encodera == 0) {
  359.                         Right_one = 1;
  360.                 } else {
  361.                         Left_one = 1;
  362.                 }
  363.         }
  364.         Beep_One();

  365.         IE0 = 0;  //清除中断标志,消除二次进入中断

  366.         EX0 = 1;
  367. }


  368. //****************外部中断1 中断服务程序******************************************
  369. void ExINT1() interrupt 2 {       //外部中断1,触发时,
  370.         EX1 = 0;
  371.         Delay_us(20);
  372.         Beep_One();
  373.         if (Encoderb == 1) {
  374.                 if (Encodera == 1) {
  375.                         Right_one = 1;
  376.                 } else {
  377.                         Left_one = 1;
  378.                 }
  379.         } else {
  380.                 if (Encodera == 0) {
  381.                         Right_one = 1;
  382.                 } else {
  383.                         Left_one = 1;
  384.                 }
  385.         }
  386.         Beep_One();
  387.         IE1 = 0;  //清除中断标志,消除二次进入中断
  388.         EX1 = 1;
  389. }

  390. void Timer0Init(void) { //1毫秒@11.0592MHz  1ms
  391.         AUXR |= 0x80;   //定时器时钟1T模式
  392.         TMOD &= 0xF0;   //设置定时器模式
  393.         TL0 = 0xCD;                                //设置定时初始值
  394.         TH0 = 0xD4;                                //设置
  395.         TF0 = 0;    //清除TF0标志
  396.         TR0 = 1;    //定时器0开始计时
  397.         ET0 = 1;      //开启定时器0中断
  398. }

  399. void Timer1Init(void) {        //1毫秒@11.0592MHz 1ms

  400.         AUXR |= 0x40;                        //定时器时钟1T模式
  401.         TMOD &= 0x0F;                        //设置定时器模式
  402.         TL1 = 0xCD;                                //设置定时初始值
  403.         TH1 = 0xD4;                                //设置定时初始值
  404.         TF1 = 0;                      //清除TF1标志
  405.         TR1 = 1;                      //定时器1开始计时
  406.         ET1 = 1;          //开启定时器1中断
  407. }


  408. void Timer2Init(void) { //1毫秒@11.0592MHz

  409.         AUXR |= 0x04;                        //定时器时钟1T模式
  410.         T2L = 0xCD;                                //设置定时初始值
  411.         T2H = 0xD4;                                //设置定时初始值
  412.         AUXR |= 0x10;                        //定时器2开始

  413.         IE2 |= 0x04;               //开定时器2中断
  414. }

  415. void Timer0() interrupt 1 {   //监视EC11中间按键
  416.         static unsigned int T0Count, T1Count;

  417.         T0Count++;
  418.         if (T0Count >= 20) {                                //每20ms扫描一次按键
  419.                 T0Count = 0;
  420.                 Loop_Key();
  421.         }
  422.         if (OnceKey) {
  423.                 T1Count++;
  424.                 if (T1Count >= 215) {                //单击后230ms按键值判断时间(可调节参数T1Count)
  425.                         T1Count = 0;
  426.                         if (OnceKey == 2) {                //按键按下2次后给按键赋值

  427.                                 OnceKey = 0;
  428.                                 T1Count = 0;
  429.                                 Key_KeyNumber = Double_click;

  430.                         } else if (OnceKey == 1) {        //按键按下1次后给按键赋值

  431.                                 OnceKey = 0;
  432.                                 T1Count = 0;
  433.                                 Key_KeyNumber = Single_click;
  434.                         }
  435.                 }
  436.         }
  437. }

  438. void timer1(void) interrupt 3 {    //计时器
  439.         if (Time1_count > 0)
  440.                 Time1_count--;
  441. }

  442. void timer2(void) interrupt 12 {

  443.         if (Sleep_Ctrl == 1) {           //Sleep开始计时
  444.                 Ms_count++;
  445.                 if (Ms_count >= 38300) { //毫秒计数,到1000记一秒  38300
  446.                         Ms_count = 0;       //秒清零
  447.                         Time2_count++;      //增加1S

  448.                         if (Time2_count >= Sleep_Time) {
  449.                                 Sleep_Flag = 0;  //休眠
  450.                                 if (Time2_count >= PowerOff_Time) {
  451.                                         S936_FLAG = 1; //软关机
  452.                                         Sleep_Flag = 1; //解除休眠
  453.                                         Time2_count = PowerOff_Time + 10; //Time2_count不再增加
  454.                                 }
  455.                         }
  456.                 }
  457.         } else { //清除Sleep
  458.                 Ms_count = 0;
  459.                 Time2_count = 0;
  460.                 Sleep_Flag = 1;   //解除休眠
  461.         }
  462. }

  463. u8 Key(void) {
  464.         unsigned char Temp;                                                //中间变量Temp,便于赋值一次消零
  465.         Temp = Key_KeyNumber;
  466.         Key_KeyNumber = 0;
  467.         return Temp;
  468. }

  469. /*******************************************************************************
  470. * 函 数 名         : Loop_Key
  471. * 函数功能         : 按键处理函数,判断按键KEY1是否按下
  472. *******************************************************************************/

  473. void Loop_Key(void) {

  474.         LastKey = NowKey;                                                        //LastKey:上一次的按键值
  475.         NowKey = !KEY1;                                                //NowKey:当前的按键值

  476.         if (LastKey) {                                                        //当按键按下时开始计时
  477.                 KeyNumber = LastKey;
  478.                 KeyTime++;
  479.                 if (KeyTime < 50 && NowKey == 0) {                //如果按键的时间小于500ms
  480.                         KeyTime = 0;
  481.                         OnceKey++;                                                //OnceKey每松手一次加1
  482.                 } else if (KeyTime >= 20 && NowKey) {        //如果按键时间大于500ms且现按键还在按下

  483.                         if (LastKey == 1) {
  484.                                 Key_KeyNumber = Long_click;   //给按键赋值
  485.                         }
  486.                 }
  487.                 if (NowKey == 0 && LastKey && KeyTime >= 25) { //防止长按后立即被当成短按再次赋值
  488.                         Key_KeyNumber = 0;
  489.                         KeyTime = 0;
  490.                 }
  491.         }
  492. }

  493. void Beep_One(void) {
  494.         beep = ~beep;
  495.         Delay_ms(1);
  496.         beep = ~beep;
  497. }

  498. void Save_Eeprom(void) {
  499.         EEPROM_write_n(ADDRESS_TEMPERATURE, T936_SetTemperature, 8);        //写入设置温度到EEPROM
  500.         EEPROM_write_n(ADDRESS_SLEEP_TIME, Sleep_Time, 8);                  //写入SLEEP时间到EEPROM
  501.         EEPROM_write_n(ADDRESS_SLEEP_TEMPERATURE, Sleep_Temperature, 8);    //写入SLEEP温度到EEPROM
  502.         EEPROM_write_n(ADDRESS_POWEROFF_TIME, PowerOff_Time, 8);      //写入软关机时间到EEPROM
  503.   EEPROM_write_n(ADDRESS_TEMPERATURE_COMPENSATION, Temperature_Compensation, 8);  //936温度修正数
  504.   EEPROM_write_n(ADDRESS_STEP, Step, 8);  //温度步数
  505. }

  506. void Read_Eeprom(void) {
  507.         T936_SetTemperature = EEPROM_read_n(ADDRESS_TEMPERATURE, 8);
  508.         Sleep_Time = EEPROM_read_n(ADDRESS_SLEEP_TIME, 8);
  509.         Sleep_Temperature = EEPROM_read_n(ADDRESS_SLEEP_TEMPERATURE, 8);
  510.         PowerOff_Time = EEPROM_read_n(ADDRESS_POWEROFF_TIME, 8);
  511.         Temperature_Compensation = EEPROM_read_n(ADDRESS_TEMPERATURE_COMPENSATION, 8);
  512.         Step=EEPROM_read_n(ADDRESS_STEP, 8);
  513. }
复制代码
pdf格式的原理图: 电路图.pdf (157.03 KB, 下载次数: 79)
hex文件: 附件内只有hex文件.7z (6.07 KB, 下载次数: 38)
源码:无

作者: yaoziqiang    时间: 2023-12-1 16:30
非常不错,有空也搞个玩玩。。。。
作者: hb_lhw    时间: 2023-12-2 14:11
手头有坏的936,也有STC8G1K08-TSSOP20,争取这个月也做出成品来。
作者: raymondau    时间: 2023-12-2 22:29
请问楼主做这个焊台是用哪款发热芯的?A1321还是A1322的?
作者: y0531    时间: 2023-12-3 17:09
raymondau 发表于 2023-12-2 22:29
请问楼主做这个焊台是用哪款发热芯的?A1321还是A1322的?

是A1321
作者: raymondau    时间: 2023-12-4 10:18
楼主数码管是共阳的吗?
作者: raymondau    时间: 2023-12-4 10:55
编译的时候总是出错?楼主能发个完成的工程或编译好的文件测试一下吗?谢谢!
作者: y0531    时间: 2023-12-4 14:54
raymondau 发表于 2023-12-4 10:55
编译的时候总是出错?楼主能发个完成的工程或编译好的文件测试一下吗?谢谢!

这只是主程序,还有不少模块。像显示、存储、调试、模数转换等,这基本是基础模块,不同单片机、旋转编码器、数码管等是不同的。即使给你,和你的硬件电路可能不同还要修改程序的。如果你需要某些模块可以提出来。
作者: y0531    时间: 2023-12-4 19:49
raymondau 发表于 2023-12-4 10:18
楼主数码管是共阳的吗?

这是共阳数码管,用TM1651。共阴用TM1650。
作者: duckyer    时间: 2023-12-5 11:56
很想用stc的监控板,添加按键、nmos或者可控硅,改造成烙铁控制器。
作者: ayliuhy    时间: 2023-12-7 11:17
对小白来说 太复杂了
作者: ycygxlz    时间: 2023-12-10 13:46
改了咋不改到底把可控硅改成MOS管
作者: hb_lhw    时间: 2023-12-23 09:53
请教一下楼主:我做了一块板子,没接手柄,也没用AC24V,用5V。能下载程序,数码管没有显示,但蜂鸣器会嘀嘀的响,声音小,拧电位器也会响一下。可能有哪些问题?
作者: y0531    时间: 2023-12-23 12:28
hb_lhw 发表于 2023-12-23 09:53
请教一下楼主:我做了一块板子,没接手柄,也没用AC24V,用5V。能下载程序,数码管没有显示,但蜂鸣器会嘀 ...

管脚要接对,单片机型号要对。
作者: raymondau    时间: 2023-12-27 22:55
楼主你发的这个HEX文件是对应电路图哪个版本的?你电路图中有两个版本的。另外两个版本有什么区别?
作者: raymondau    时间: 2023-12-27 23:00
y0531 发表于 2023-12-4 19:49
这是共阳数码管,用TM1651。共阴用TM1650。

第二幅电路图应该是用共阴数码管的吧?电路图上的显示芯片是否标注有误?按你的说法应该是用TM1650的
作者: raymondau    时间: 2023-12-27 23:38
另外5V供电部分电路感觉有些问题,请问是用AC24V整流降压来产生5V供电的吗?电路中用1个117来直接降压可能有问题吧?查了一下1117-5V耐压只有18V,如果经AC24整流出来的电压直接加在117-5V上会烧117的吧?
作者: y0531    时间: 2023-12-28 13:22
raymondau 发表于 2023-12-27 23:38
另外5V供电部分电路感觉有些问题,请问是用AC24V整流降压来产生5V供电的吗?电路中用1个117来直接降压可能 ...

是变压器的另一个绕组
作者: y0531    时间: 2023-12-28 13:26
raymondau 发表于 2023-12-27 22:55
楼主你发的这个HEX文件是对应电路图哪个版本的?你电路图中有两个版本的。另外两个版本有什么区别?

就是这个TM1651,共阳的数码管。
作者: raymondau    时间: 2023-12-28 16:56
我用24V变压器试了一下,整流滤波后大概去到30V左右,直接用117-5V的芯片不会烧吗?楼主是另外用一个5V的独立供电的吧?
作者: y0531    时间: 2023-12-29 09:32
是独立交流8V供电,用24降到5V压差太大。
作者: raymondau    时间: 2023-12-29 15:37
楼主这款936控制板除了适用于24V变压器供电,能否适用于24V直流供电的?
作者: y0531    时间: 2023-12-31 10:16
raymondau 发表于 2023-12-29 15:37
楼主这款936控制板除了适用于24V变压器供电,能否适用于24V直流供电的?

那要改可控硅为MOS管及相应电路,那不如直接上T12。
作者: dbxzjq    时间: 2024-4-24 01:29
楼主的图没看到有过零检测电路呢?可控硅不用过零触发?
作者: y0531    时间: 2024-4-27 10:35
dbxzjq 发表于 2024-4-24 01:29
楼主的图没看到有过零检测电路呢?可控硅不用过零触发?

调温依靠可控硅导通时间
作者: fj51hei    时间: 2024-4-27 16:29
这个ADC没放大?
作者: y0531    时间: 2024-4-28 19:27
fj51hei 发表于 2024-4-27 16:29
这个ADC没放大?

这个截图没有,见下载的图。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1