u013159804 2016-05-01 17:32 采纳率: 0%
浏览 2544

如下,STM32F103RCT6怎么产生15.6K占空比可调的PWM

现在硬件已经确定
引脚A8,A9,A10 功能有TIM1 CH 1,2,3
左电机A,B,C三相 0时关断 1时导通 上MOSFET接VIN
引脚B13,B14,B15 功能有TIM1 CH 1 N,2 N,3 N
左电机A,B,C三相 1时关断 0时导通 下MOSFET接GND

引脚C6,C7,C8 功能无 重定义功能TIM3 CH 1,2,3
右电机A,B,C三相 0时关断 1时导通 上MOSFET接VIN
引脚A7,B0,B1 功能有TIM3 CH 2,3,4 重定义功能 TIM1 CH 1N,2N,3N
右电机A,B,C三相 1时关断 0时导通 下MOSFET接GND

STM32使用内部晶振 64M主频

现在两个电机 共6个桥臂,每个桥臂有两个MOS管

问题是 目前需要这6个桥臂都能产生15.6K,占空比精度至少为1.2%的PWM,该PWM的产生,当输出为高时,上MOS导通,下MOS关断。当输出为低时,上MOS关断,下MOS导通。即同一时刻上下MOS必须有且只有一个导通。另外同一个电机的3个桥臂PWM输出需要中心对齐。左电机用TIM1没有问题,关键是右电机功能冲突,配不出来像样的PWM。

楼主目前只分析出来并尝试了以下几种方案:

1.用定时中断计数,计数值在某个范围内时控制电平翻转。由于64M主频,15.6K的PWM,占空比精度1.2%的话,也就是需要50个时钟周期就需要进行一次中断,并且执行完中断函数中的各类判断的语句。处理速度跟不上,用不成。

2.用定时器中断进行电平翻转,同时改变定时器中断周期。这样在两次定时器中断之间,由于需要执行一部分程序,会存在一个最小的延时。这种方法可以产生15.6K 占空比在6%~94%之间可满足精度要求的占空比。但存在的问题是需要有三个PWM输出,而且是中心对齐。如果在同一个定时器中去按上面这个方法去做,那么两个PWM占空比至少得相差6%,而实际上两者之间可相差任意值。另外如果是用TIM2,TIM3,TIM4这四个定时器的中断分别翻转来控制产生占空比,那怎么对齐呢?有点想不通了。。

3.在WHILE(1)的大循环里面用计时器计数,进行电平翻转,这样可以正常输出。但问题是在执行中断时,会影响到计数,输出波形不稳定。

4.另外还有一个是直接用TIM3,用C6,C7,C8输出PWM,可以控制接VIN的3个MOS管导通或者关断,但无法保证接GND的3个MOS管在合适的时间导通或者关断。楼主对STM32了解还不是特别深入,了解到PWM输出是通过比较设定值与当前计数值大小来进行输出的,但不清楚是不是可以通过这个设定值与当前计数值比较产生中断呢,如果能通过这种方法产生中断,就可以在中断中翻转对应桥臂的下MOS管,这样就可以在上MOS关开通时,下MOS管关断,上MOS管关断时,下MOS管开通了。

求教求教,谢谢大家!

  • 写回答

1条回答

  • devmiao 2016-05-01 21:13
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记