打印
[文档下载]

新唐马达控制类单片机资料下载

[复制链接]
883|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xuanhuanzi|  楼主 | 2018-9-29 18:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
除了 顺利启转,PPM 调速之外,本代码还调试好了上电 PPM 校正,蜂鸣,3秒无 PPM 信号就降速等。

    Timer1 连续定时模式,用于各种定时。
    Timer0 周期模式,用于触发换相,只在 BLDC 转动时启动计数。
    两个定时器计数频率都是 1MHz,溢出时间 16.777216 秒。

几个全局变量:
    Duty_Command : 占空比命令,PPM 信号的占空比,或 UART 口、或旋钮的"实时占空比命令"。

    Duty_Target :      目标占空比,决定转速,正常情况等于Duty_Command。欠压超温时比 Duty_Command 小, 甚至为0。
    Duty_Current :    当前占空比,反复写入PWM 的 Duty寄存器,Duty_Target 增大时,这个变量一点点增大以防止过流。
          
    Duty_Min :          最小占空比,目标占空比 Duty_Target 小于这个值,就停转。
   
      
    电机启转时使能 Timer1 中断定时检过0。停转时关 Timer1 中断。是否使能 Timer1 中断可做为判断电机是否在转的标志。


启转:
      不超温不欠压,目标占空比 Duty_Tareget 大于 Duty_Min ,就启转 BLDC, 示例代码如下:


      Duty_Current = Duty_Min ;                                 // 起转占空比
      PWM->CMR0 = Duty_Min ;    Delayus(100);         // 一个 PWM 周期后占空比更新
      pPhaseEnd     = &TabPhase[6] ;                         // 使用数组 TabPhase 转 BLDC
      pPhase          = &TabPhase[1] ;                         // 启转相
     
BLDC_Start(Period_Max,  500) ;                         // 启转 BLDC

      BLDC_Start() 返回后,像刚执行完 Timer1 中断一样: 等下次 Timer1 发生中断检过0。详见"航模电调DIY——第2季"
  
BLDC 正在转动时需要做的事情:

      BLDC 的检过0 换相由 Timer1 中断代码完成。中断外要做的,是:
1>,测电源电压,不能欠压。
2>,测温度,不能超温。
3>,测电流,不要过流。
4>,控制当前占空比 Duty_Current 按一定增速,接近目标占空比 Duty_Target。
1,2,3有一项出现意外,就减小目标占空比 Duty_Target 或让其值等 0。

停转 BLDC :
  函数 BLDC_STOP() 里面,先关 Timer1 中断停止更新换相寄存器,再关六路功率管。一般满足以下条件 之一,才调用 BLDC_STOP() 停转 BLDC
  1> 启转 N 步仍未成功,停转。一两秒后再判是否重启。
  2> 占空比小于最小值 Duty_Min, 且转速较低
  3> 其它需立即关功率管的情况
  这些判断在函数 BLDC_Add_Duty() 里面。每次换相后(更新了换相周期)都要调用一下此函数,判 BLDC 是否太慢需停转 。

PPM 调速脉冲捕获:
      Timer1 连续计数模式,适合做捕获定时器,但 Timer1 中断被检过零用了。PPM 信号的跳变,还会发生 GPIO 中断, 所以本代码是在 GPIO 中断里,处理捕获时间并计算 PPM 占空比,算出占空比命令 Duty_Command。  


输出反相:
      若由于功率管驱动电路的不同,需要对 PWM 输出极性反相,在函数 PWM_ACMP0_T0_T1_Init() 中打开极性反相语句即可。

稳速:
      启转成功后,可由换相周期 PeriodNow 得到当前转速,调整占空比达到稳速目的。代码添加位置在函数 BLDC_Control() 中有注释。


改变 PWM 频率:
    随时可改变 PWM 频率,方法见 main() 开头。BLDC 转动时改变PWM频率,要同时改变占空比的值 CMR 。

高压 BLDC 控制过零电路分压比
    用 PWM1 去控制分压比, A- 信号可改接到 P0.1 上。  

除法

      M0 内核没有除法指令,C语句里的除法,Mini51 都会变成一个执行时间达十几微秒的子程序。本代码里,所有除法运算都用 "乘法 + 移位" 代替。

短路保护和电流控制
      Mini51 的 Brake  功能可由中断或比较器输出驱动,电流超过某个值时,硬件先关功率管,再发生中断。
      航模一般不测电流,Brake 配置打了双斜杠。



代码下载:http://www.nuvoton-mcu.com/forum.php?mod=viewthread&tid=1819&extra=page%3D1

沙发
xuanhuanzi|  楼主 | 2018-9-29 18:54 | 只看该作者
http://www.nuvoton-mcu.com/forum.php?mod=viewthread&tid=1819&extra=page%3D1



开发包下载地址:http://pan.baidu.com/s/1c2KaFEK

使用特权

评论回复
板凳
xixi2017| | 2018-9-29 19:27 | 只看该作者
BLDC没用过,要学习一下。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

173

主题

2211

帖子

3

粉丝