找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 15010|回复: 33
收起左侧

51单片机STC15W408AS电调程序详解

  [复制链接]
ID:753618 发表于 2021-12-10 17:29 | 显示全部楼层 |阅读模式
看了大概一个月的程序,基本理解了,根据自己的理解对程序做了详尽注释,希望能够帮助后来者。接下来要学习ppm信号,希望能够很快对接起来。
电路原理图如下:
51hei.png

单片机源程序如下:
  1. /***************************功能说明***************************

  2. 本程序试验使用STC15W408AS来驱动航模用的无感无刷三相直流马达.

  3. 本程序参考自网上的代码(作者: 瑞生), 改良而来.

  4. 电路图见文件 "BLDC-V10-实验电路.pdf".

  5. 控制信号由P3.2输入正脉冲信号, 间隔5~20ms, 脉冲宽度1.000~1.610ms.

  6. 1.160ms开始启动, 1.610ms为最高速度, 分辨率为2us.

  7. 本程序仅仅是简单控制, 软件没有处理过0延时30度切换和过流检测.

  8. 由于过0检测部分有RC滤波, 所以改变电容值可以大约的对应在最高速时延时30度的时间.

  9. 有意者可自行完善电路和程序.

  10. *********************************************************************************/

  11. #define MAIN_Fosc                24000000L        //定义主时钟

  12. #include "STC15Fxxxx.H"

  13. //CMPCR1(比较器控制寄存器 1)
  14. #define        CMPEN        0x80        //1: 允许比较器, 0: 禁止,关闭比较器电源
  15. #define        CMPIF        0x40        //比较器中断标志, 包括上升沿或下降沿中断, 软件清0
  16. #define        PIE                0x20        //1: 比较结果由0变1, 产生上升沿中断
  17. #define        NIE                0x10        //1: 比较结果由1变0, 产生下降沿中断
  18. #define        PIS                0x08        //输入正极性选择, 0: 选择外部P5.5做正输入,           1: 由ADCIS[2:0]所选择的ADC输入端做正输入.
  19. #define        NIS                0x04        //输入负极性选择, 0: 选择内部BandGap电压BGv做负输入, 1: 选择外部P5.4做输入.
  20. #define        CMPOE        0x02        //1: 允许比较结果输出到P1.2, 0: 禁止.
  21. #define        CMPRES        0x01        //比较结果, 1: CMP+电平高于CMP-,  0: CMP+电平低于CMP-,  只读

  22. //CMPCR2(比较器控制寄存器 2)
  23. #define        INVCMPO        0x80        //1: 比较器输出取反,  0: 不取反
  24. #define        DISFLT        0x40        //1: 关闭0.1us滤波,   0: 允许
  25. #define        LCDTY        0x00        //关闭数字滤波功能. 数字滤波功能即为数字信号去抖动功能.

  26. sbit PWM0_L = P3^4;
  27. sbit PWM1_L = P3^5;
  28. sbit PWM2_L = P3^6;

  29. u8        Step;
  30. u8        PWM_Value; // 决定PWM占空比的值
  31. u16        RxPulseWide;
  32. bit        B_RxOk;    //定义一个bool量.
  33. bit        B_RUN;
  34. u8        PWW_Set;
  35. u8        cnt10ms;
  36. u8        Rx_cnt;
  37. u8        TimeOut;        //堵转超时

  38. #define DISABLE_CMP_INT CMPCR1 &= ~0X40                // 比较器中断标志位清0.
  39. #define ENABLE_CMP_INT  CMPCR1 |= 0X40                // 比较器中断标志位置1.

  40. /*********************************************************************/

  41. void Delay_n_ms(u8 dly)
  42. {
  43.         u16        j;
  44.         do
  45.         {
  46.                 j = MAIN_Fosc / 13000;        //延时1ms, 主程序在此节拍下运行
  47.                 while(--j)        ;
  48.         }
  49.         while(--dly);
  50. }


  51. void delay_us(u8 us)
  52. {
  53.         do
  54.         {
  55.                 NOP(20);        //@24MHz
  56.         }
  57.         while(--us);
  58. }

  59. void StepXL(void) // 换相序列函数
  60. {
  61. switch(Step)
  62.           {
  63.            case 0:  // AB
  64.                                 PWM0_L=0;  PWM1_L = 1;  PWM2_L=0;           // Q4常开.
  65.                                 CCAP0H = PWM_Value;        CCAP1H=0;        CCAP2H=0;        // A相由占空比控制.
  66.                                 ADC_CONTR = 0XCD;        // ADC电源开,ADC转换开,选择P1.5作为ADC输入口
  67.                                 CMPCR1 = 0x9C;                // 比较器使能, 下降沿中断允许,通过ADC的P1.5口作为比较器的正极输入端,
  68.                                                                                                                                  //选择外部端口P5.4作为比较器负极输入端.
  69.                  break;
  70.            case 1:  // AC
  71.                                 PWM0_L=0;        PWM1_L=0;  PWM2_L = 1;                        // Q4常开
  72.                                 CCAP0H = PWM_Value;        CCAP1H=0;        CCAP2H=0;        // A相由占空比控制.
  73.                                 ADC_CONTR = 0XCC;        // ADC电源开,ADC转换开,选择P1.4作为ADC输入端
  74.                                 CMPCR1 = 0xAC;                // 比较器使能, 上升沿中断允许,通过ADC的P1.4口作为比较器的正极输入端
  75.                                                                                                                                  //选择外部端口P5.4作为比较器负极输入端.   
  76.                   break;
  77.            case 2:  // BC
  78.                                 PWM0_L=0;        PWM1_L=0;  PWM2_L = 1;                        // Q2常开
  79.                                 CCAP0H=0;        CCAP2H=0;        CCAP1H = PWM_Value; //  B相由占空比控制.                       
  80.                                 ADC_CONTR = 0XCB;   // ADC电源开,ADC转换开,选择P1.3作为ADC输入口测量A点电压   
  81.                                 CMPCR1 = 0x9C;                // 比较器使能, 下降沿中断允许,通过ADC的P1.3口作为比较器的正极输入端
  82.                                                                                                                                  //选择外部端口P5.4作为比较器负极输入端.
  83.                   break;
  84.            case 3:  // BA
  85.                                 PWM0_L = 1;  PWM1_L=0;        PWM2_L=0;                        // Q6常开
  86.                                 CCAP0H=0;        CCAP2H=0;        CCAP1H = PWM_Value; // B相由占空比控制.
  87.                                 ADC_CONTR = 0XCD;        // ADC电源开,ADC转换开,选择P1.5作为ADC输入口测量C点电压  
  88.                                 CMPCR1 = 0xAC;                // 比较器使能, 上升沿中断允许,通过ADC的P1.5口作为比较器的正极输入端
  89.                                                                                                                                  //选择外部端口P5.4作为比较器负极输入端.                       
  90.                   break;
  91.            case 4:  // CA
  92.                                 PWM0_L = 1;        PWM1_L=0;        PWM2_L=0;                    // Q6常开
  93.                                 CCAP0H=0;        CCAP1H=0;        CCAP2H = PWM_Value; // C相由占空比控制.
  94.                                 ADC_CONTR = 0XCC;        // ADC电源开,ADC转换开,选择P1.4作为ADC输入口测量B点电压
  95.                                 CMPCR1 = 0x9C;                // 比较器使能, 下降沿中断允许,通过ADC的P1.4口作为比较器的正极输入端
  96.                                                                                                                                  //选择外部端口P5.4作为比较器负极输入端.
  97.                   break;
  98.            case 5: // CB
  99.                                 PWM0_L=0;        PWM2_L=0;  PWM1_L = 1;                        // Q4常开
  100.                                 CCAP0H=0;        CCAP1H=0;        CCAP2H = PWM_Value; // C相由占空比控制.                     
  101.                                 ADC_CONTR = 0XCB;        // ADC电源开,ADC转换开,选择P1.3作为ADC输入口测量A点电压  
  102.                                 CMPCR1 = 0xAC;                // 比较器使能, 上升沿中断允许,通过ADC的P1.3口作为比较器的正极输入端
  103.                                                                                                                                  //选择外部端口P5.4作为比较器负极输入端.       
  104.                   break;
  105.            default:
  106.                   break;
  107.           }       
  108. }

  109. /***************************************************************
  110. *                      PCA模块PWM输出设置                      *
  111. ***************************************************************/
  112. void PWM_Init(void)
  113. {
  114.         PWM0_L = 0;     // 初始化P3^4为低电平.sbit PWM0_L = P3^4;
  115.         PWM1_L = 0;     // 初始化P3^5为低电平.sbit PWM1_L = P3^5;
  116.         PWM2_L = 0;     // 初始化P3^6为低电平.sbit PWM2_L = P3^6;
  117.        
  118.         P3n_push_pull(0x70);    // 设置P3.4/3.5、3.6为推挽输出.  P3M1 &= ~(bitn),        P3M0 |=  (bitn)
  119.          
  120.         CMOD = 5 << 1;  //5(0101)左移1位,设置PCA的输入时钟源为系统时钟的1/4,即PWM频率=24M/4.

  121.         CH=0;                     // PCA(Programmable Counter Array)清零
  122.         CL=0;            //  
  123.        
  124.         PCA_PWM0 = 0X00; // 对PCA_PWM0模块0清0,并设置PWM为8位(EBS0[1:0]=00).
  125.         CCAP0H = 0x00;   // 重载值为{EPCnH,CCAPnH[7:0]}.
  126.         CCAP0L = 0x00;   // 比较值为{EPCnL,CCAPnL[7:0]}.
  127.         CCAPM0 = 0x42;         // 设置PCA模块0的控制模式(0100 0010).ECOM0=1,允许PCA模块0的比较功能.
  128.                          // PWM0=1,设置PCA模块0为脉宽调制输出功能.
  129.                          // 当PCA 模块工作在8位PWM模式时,{0,CL[7:0]}与{EPCnL,CCAPnL[7:0]}
  130.                      // 中的值进行比较,小于,输出低电平,大于等于输出高电平.       
  131.         PCA_PWM1 = 0X00; // 对PCA_PWM0模块0清0,并设置PWM为8位(EBS0[1:0]=00).
  132.         CCAP1H = 0x00;   // 重载值为{EPCnH,CCAPnH[7:0]}.
  133.         CCAP1L = 0x00;   // 比较值为{EPCnL,CCAPnL[7:0]}.
  134.         CCAPM1 = 0x42;         // 设置PCA模块1的控制模式(0100 0010).ECOM0=1,允许PCA模块1的比较功能.
  135.                          // PWM1=1,设置PCA模块1为脉宽调制输出功能.
  136.                          // 当PCA 模块工作在8位PWM模式时,{0,CL[7:0]}与{EPCnL,CCAPnL[7:0]}
  137.                      // 中的值进行比较,小于,输出低电平,大于等于输出高电平.                                                 
  138.         PCA_PWM2 = 0X00; // 对PCA_PWM2模块进行设置.其中,EBS2[1:0]=00,PWM为8位.
  139.         CCAP2H = 0x00;   // 重载值为{EPCnH,CCAPnH[7:0]}.
  140.         CCAP2L = 0x00;   // 比较值为{EPCnL,CCAPnL[7:0]}.
  141.         CCAPM2 = 0x42;         // 设置PCA模块2的控制模式(0100 0010).ECOM0=1,允许PCA模块2的比较功能.
  142.                          // PWM2=1,设置PCA模块2为脉宽调制输出功能.
  143.                          // 当PCA 模块工作在8位PWM模式时,{0,CL[7:0]}与{EPCnL,CCAPnL[7:0]}
  144.                      // 中的值进行比较,小于,输出低电平,大于等于输出高电平.                                         
  145.         CR = 1;          // PCA计数允许控制位,1:启动PCA计数.
  146. }

  147. void ADC_Init(void)
  148. {
  149.         P1n_pure_input(0x38);  // 设置P1.3/1.4/1.5口为高阻输入(电流既不能流入也不能流出).P1M1 |=  (bitn),        P1M0 &= ~(bitn)
  150.         P1ASF = 0X38;          // 开通P1.3 P1.4 P1.5的AD输入口(0011 1000)
  151. }

  152. /***************************************************************
  153. *                      比较器中断服务函数                      *
  154. ***************************************************************/

  155. void CMP_INT(void) interrupt 21
  156. {
  157.         CMPCR1 &= ~0X40;       // 软件清除中断标志位
  158.         if(Step<5)        Step++;
  159.         else                Step = 0;
  160.         StepXL();              // 进入换相程序. 在换相程序中,已经对比较器的正负极输入端做了设置.
  161.                                // ADC的P1.4/P1.5/P1.6口作为比较器的正极输入端,选择外部端口P5.4作为比较器负极输入端.                                                                                                                                           
  162.         TimeOut = 10;               // 在执行完比较器中断函数后,赋值TimeOut=10.
  163. }

  164. /***************************************************************
  165. *                      比较器初始化设置                        *
  166. ***************************************************************/
  167. void CMP_Init(void)
  168. {
  169.         CMPCR1 = 0X8C;        // 1000 1100 比较器使能,比较器正负极输入端设置, 通过ADC_CHS位选择比较器的正极输入端,选择P5.4作为负极.
  170.         CMPCR2 = 60;        // 60个时钟滤波
  171.         P5n_pure_input(0x10);  // 设置P5.4口为高阻输入(电流既不能流入也不能流出).P5M1 |=  (bitn),        P5M0 &= ~(bitn)
  172. }

  173. /***************************************************************
  174. *                         电机启动函数                         *
  175. ***************************************************************/
  176.     u8 StartMotor(void)
  177. {
  178.         u16 timer,i;
  179.         DISABLE_CMP_INT;        // 比较器中断标志位清0,不产生比较中断.
  180.         PWM_Value = 30;                // 设置占空比初值
  181.         Step = 0;
  182.         StepXL();                        // ∵step=0, ∴ 进入AB相导通的初始位置
  183.         Delay_n_ms(5);      // 延时5ms
  184.         timer = 300;

  185.         while(1)
  186.         {
  187.                 for(i=0; i<timer; i++)        delay_us(50);  
  188.                 timer -= timer /15 + 1;
  189.                 if(timer < 25)        return(1);
  190.                 if( Step < 5)        Step++;
  191.                 else                        Step = 0;
  192.                 StepXL();
  193.         }
  194. }

  195. /***************************************************************
  196. *                      定时器T0初始化函数                      *
  197. ***************************************************************/
  198. void T0_Init(void)      // 这里设置TH0/TL0=0,定时器T0为16位不自动重载,
  199. {
  200.         Timer0_AsTimer();        // 设置定时器T0用做定时器. TMOD &= ~(1<<2)       
  201.         Timer0_12T();                // 定时器0 12分频. AUXR &= ~(1<<7)
  202.         Timer0_16bit();     // 定时器0 16位不自动重载模式. TMOD  = (TMOD & ~0x03) | 0x01   
  203.         Timer0_Gate_INT0_P32();        // T0_GATE置1, 只有在INT0脚为高及TR0=1时才可启动定时器T0.TMOD |=  (1<<3).
  204.         TH0 = 0;
  205.         TL0 = 0;
  206.         TR0 = 1; // 定时器 T0 准备工作.
  207.         ET0 = 1; // 定时器 T0 的溢出中断允许位.
  208. }

  209. /***************************************************************
  210. *                      定时器T0中断服务函数                    *
  211. ***************************************************************/
  212. void T0_Interrupt(void) interrupt 1
  213. {
  214.         Rx_cnt = 0;                        // 一旦出现溢出, 则开始的n个脉冲无效
  215.         RxPulseWide = 1000;        // 停止
  216.         B_RxOk = 1;                        // 在执行完T0中断服务函数后,给B_RxOk赋值.
  217. }

  218. /***************************************************************
  219. *                INT0(外部中断0)中断服务函数                 *
  220. ***************************************************************/
  221. void INT0_int (void) interrupt 0
  222. {
  223.         u16        j;       
  224.         TR0 = 0;
  225.         TH0 = 0;
  226.         TL0 = 0;
  227.         j = ((u16)TH0 << 8) + TL0;
  228.         TR0 = 1;   // 定时器T0的运行控制位,允许T0计数, 这时候TH0、TL0就开始计数了.

  229.         if(++Rx_cnt >= 5)        Rx_cnt = 5;
  230.         j >>= 1;        //为了好处理, 转成单位为us.
  231.         if((j >= 800) && (j <= 2000) && (Rx_cnt == 5))
  232.         {
  233.                 RxPulseWide = j;
  234.                 B_RxOk = 1;                //标志收到一个脉冲
  235.         }
  236. }


  237. /**********************************************/
  238. void main(void)
  239. {
  240.         u16 j;     // unsigned int.

  241.         PWM_Init(); // 设置P3.4/3.5、3.6为推挽输出. 当PCA 模块工作在8位PWM模式时,{0,CL[7:0]}与{EPCnL,CCAPnL[7:0]}
  242.                 // 中的值进行比较并决定输出高电平还是低电平.此电平作为
  243.         ADC_Init(); // 开通P1.3 P1.4 P1.5的AD输入口.√
  244.         CMP_Init(); // 比较器初始化设置. 对比较器正负极输入端进行设置, 通过ADC_CHS位选择比较器的正极输入端,选择P5.4作为负极.
  245.         T0_Init();  // 定时器T0初始化设置, 定时器0 12分频. (AUXR &= ~(1<<7)).

  246.         IE0 = 0;        // 外部中断0(INT0/P3.2)中断请求标志位清零.
  247.         EX0 = 1;        // 外部中断0(INT0)中断允许.
  248.         IT0 = 1;        // 外部中断0(INT0)为下降沿触发.
  249.        
  250.         RxPulseWide = 1000;
  251.         PWW_Set = 0;
  252.         cnt10ms = 0;
  253.         Rx_cnt  = 0;
  254.         TimeOut = 0;

  255.         EA  = 1;            // 打开总中断
  256.        
  257.         while (1)
  258.         {
  259.                 Delay_n_ms(1);        // 延时1ms, 主程序在此节拍下运行
  260.                 if(TimeOut > 0) // 在执行完比较器中断函数后,进入此模块.
  261.                 {
  262.                         if(--TimeOut == 0)            
  263.                         {
  264.                                 CCAP0H=0;        CCAP1H=0;        CCAP2H=0;  // PCA模块复原.
  265.                                 PWM0_L=0;        PWM1_L=0;        PWM2_L=0;  // P3.4/3.5、3.6脚复原.
  266.                                 DISABLE_CMP_INT;    // 关比较器中断
  267.                                 Delay_n_ms(250);        // 堵转时,延时1秒再启动
  268.                                 Delay_n_ms(250);
  269.                                 Delay_n_ms(250);
  270.                                 Delay_n_ms(250);

  271.                                 RxPulseWide = 1000;
  272.                                 PWW_Set   = 0;
  273.                                 PWM_Value = 0;
  274.                                 B_RxOk = 0;
  275.                                 B_RUN  = 0;
  276.                                 Rx_cnt = 0;
  277.                                 TimeOut = 0;
  278.                         }
  279.                 }
  280.                
  281.                 if(B_RxOk)          // 在执行完T0中断服务函数后,执行此模块.
  282.                 {
  283.                         B_RxOk = 0;
  284.                         j = RxPulseWide;
  285.                         if(j >= 1100)                                // 1100~1610对应PWM占空比值0~255
  286.                         {
  287.                                 j = (j - 1100) >> 1;        //2us对应PWM一个步进
  288.                                 if(j > 256)        j = 255;
  289.                         }
  290.                         else        j = 0;
  291.                         PWW_Set = (u8)j;   
  292.                 }
  293.                
  294.                 if(!B_RUN && (PWW_Set >= 30))                // PWM_Set >= 30, 并且马达未运行, 则启动马达
  295.                 {
  296.                         StartMotor();         // 启动马达
  297.                         CMPCR1 &= ~0X40; // 比较器中断请求标志位清零
  298.                         ENABLE_CMP_INT;  // 打开比较器中断
  299.                         B_RUN = 1;       // B_RUN只是一个标志位,便于管理
  300.                         TimeOut = 0;
  301.                 }
  302.                
  303.                
  304.                 if(++cnt10ms >= 10)                      // 10ms时隙
  305.                 {
  306.                         cnt10ms = 0;
  307.                         if(B_RUN)
  308.                         {
  309.                                 if(PWM_Value < PWW_Set)        PWM_Value++;
  310.                                 if(PWM_Value > PWW_Set)        PWM_Value--;
  311.                                 if(PWM_Value < 20)       
  312.                                 {
  313.                                         PWM_Value = 0;
  314.                                         B_RUN = 0;
  315.                                         CCAP0H=0;        CCAP1H=0;        CCAP2H=0;  // 占空比为0
  316.                                         PWM0_L=0;        PWM1_L=0;        PWM2_L=0;
  317.                                         DISABLE_CMP_INT; // 关比较器中断
  318.                                 }
  319.                         }
  320.                 }
  321.        
  322.         }
  323. }
复制代码
51hei.png
上图Keil代码下载:
51-STC15W408AS-电调.rar (111.84 KB, 下载次数: 434)

评分

参与人数 2黑币 +130 收起 理由
lyxxzrb + 30 赞一个!
admin + 100 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:852236 发表于 2021-12-12 18:35 | 显示全部楼层
有做出PCB板试过了吗?我正想做一个
回复

使用道具 举报

ID:198286 发表于 2022-1-3 10:59 | 显示全部楼层
楼主太有心了,写的这么详细,对学习很有用
回复

使用道具 举报

ID:661945 发表于 2022-1-6 09:24 | 显示全部楼层
注释得比较详细,对初学者还是很有帮助的~~~
回复

使用道具 举报

ID:371546 发表于 2022-1-14 16:38 | 显示全部楼层

注释得比较详细,对初学者还是很有帮助的~~~
回复

使用道具 举报

ID:491875 发表于 2022-1-14 19:30 | 显示全部楼层
谢谢,楼主费心了。
回复

使用道具 举报

ID:989951 发表于 2022-2-8 08:08 | 显示全部楼层
好用心的楼主,代码规范注释详细,支持一下
回复

使用道具 举报

ID:145887 发表于 2022-3-11 10:56 | 显示全部楼层
注释得比较详细,对初学者还是很有帮助
回复

使用道具 举报

ID:689229 发表于 2022-3-14 18:39 | 显示全部楼层
谢谢老兄,正在寻找呢。
回复

使用道具 举报

ID:430492 发表于 2022-3-16 11:22 | 显示全部楼层
注释得比较详细
回复

使用道具 举报

ID:210365 发表于 2022-4-18 19:42 | 显示全部楼层
非常详细的代码,值得研究
回复

使用道具 举报

ID:685462 发表于 2022-4-23 12:59 | 显示全部楼层
楼主,有刷电调的有研究吗。
回复

使用道具 举报

ID:85508 发表于 2022-6-19 23:54 | 显示全部楼层
注释详细,还有电路图和H文件,以后可以做一个,收藏了!
回复

使用道具 举报

ID:1001745 发表于 2022-6-23 07:59 | 显示全部楼层
楼主有心了,请问这个可以修改成直接用VR电平去进行调速吗?
回复

使用道具 举报

ID:966468 发表于 2022-6-23 09:20 | 显示全部楼层
楼主太有心了,写的这么详细,对学习很有用
回复

使用道具 举报

ID:156220 发表于 2022-6-28 09:13 | 显示全部楼层
注释得比较详细,谢谢楼主的资料,辛苦了
回复

使用道具 举报

ID:661945 发表于 2022-6-28 09:44 | 显示全部楼层
这程序验证过了的吧?
回复

使用道具 举报

ID:1037819 发表于 2022-6-30 22:02 | 显示全部楼层
注释的很详细
回复

使用道具 举报

ID:102665 发表于 2022-7-1 10:38 | 显示全部楼层
很详细,点赞
回复

使用道具 举报

ID:1039586 发表于 2022-8-5 12:26 | 显示全部楼层
是什么电调呀
回复

使用道具 举报

ID:1034262 发表于 2022-8-12 15:08 | 显示全部楼层
STC公司的例程简单明了,对学习非常有帮助。
特别是STC公司的四轴飞控,简单、有效、稳定,最简的飞控,没有之一。
回复

使用道具 举报

ID:215147 发表于 2022-10-10 14:29 | 显示全部楼层
很详细,点赞
回复

使用道具 举报

ID:321981 发表于 2022-11-5 12:58 | 显示全部楼层
实测  这个电调芯片有缺陷,占空比0时 礽有输出,比校器关闭中断无效,造成电机启动时有卡顿或失败
回复

使用道具 举报

ID:1050760 发表于 2022-11-24 08:15 | 显示全部楼层
你好,一直没看懂你图纸上P54与P13、P14、P15的运行原理,电机在AB通电时,C上有怎样的变化吗?没搞懂!
回复

使用道具 举报

ID:170318 发表于 2022-11-24 09:23 | 显示全部楼层
wh198156 发表于 2022-11-24 08:15
你好,一直没看懂你图纸上P54与P13、P14、P15的运行原理,电机在AB通电时,C上有怎样的变化吗?没搞懂!

“P54与P13、P14、P15”等组成了无霍尔反电动势检测电路,用于无霍尔位置传感器电机的
回复

使用道具 举报

ID:1055358 发表于 2022-12-3 13:00 | 显示全部楼层
这个电路做好了速度也上不来
回复

使用道具 举报

ID:197696 发表于 2023-3-6 22:48 | 显示全部楼层

楼主太有心了,写的这么详细,对学习很有用
回复

使用道具 举报

ID:598932 发表于 2023-6-8 13:18 | 显示全部楼层
给源码 给力 我觉得论坛交流就应该这样
回复

使用道具 举报

ID:55349 发表于 2023-8-6 16:44 | 显示全部楼层
点赞,我也学习一下,谢谢先
回复

使用道具 举报

ID:606110 发表于 2023-8-13 11:44 | 显示全部楼层
谢谢楼主,我正要做筋膜枪,参考下这个。STC芯片有点贵,我准备找一个平宜的单片机,把这个软件移稙进去,还要增加检MOS管电流的。
回复

使用道具 举报

ID:13396 发表于 2023-9-12 19:30 | 显示全部楼层
写的这么详细,对学习很有用谢谢.
回复

使用道具 举报

ID:1093267 发表于 2023-9-20 09:24 | 显示全部楼层
楼主辛苦 感谢分享 学习了!!!!
回复

使用道具 举报

ID:675767 发表于 2023-12-30 11:48 | 显示全部楼层
这个对初学者和入门都太友好了
回复

使用道具 举报

ID:233182 发表于 2024-2-11 01:30 | 显示全部楼层
NICE,GOOD...
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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